5
我想创建'..'
在ANTLR3词法分析器一个令牌,该令牌将被用来串这样的表达式ANTLR3词法优先
a..b // [1]
c .. x // [2]
1..2 // [3]
3 .. 4 // [4]
所以,我已经加入,
DOTDOTSEP : '..'
;
的问题是我已经有一个规则:
FLOAT : INT (('.' INT (('e'|'E') INT)? 'f'?) | (('e'|'E') INT)? ('f'))
;
而在上面的示例[3] 1..2
我作为一个FLOAT
(我不知道为什么,因为继第一个.
是另一个.
不是INT,但它是)。
我不知道是否有办法改变词法分析规则的优先级,所以DOTDOTSEP
首先匹配,然后FLOAT
。
看起来here看来我输了,"The rule having the greatest count is the winner.",
,但不知道是否有解决方法。
P.S. INT的定义如下...
fragment DIGIT
: '0'..'9'
;
INT : DIGIT+
;
编辑。 稍微进一步的测试让我觉得它不像它直接匹配FLOAT
规则那么简单。 (我想改变这个问题,但是因为我现在已经有了答案,所以我不会这样做)。问题(我相信)仍然存在于词法分析规则优先级中,所以问题仍然是一样的。
这让我非常接近,只是一点点更多的调整需要。我没有找到的链接,但看起来很棒;只是我应该阅读的东西,所以我现在就要去做。谢谢。 – tjm 2010-10-15 13:59:24
我现在很好,只是几个笔记给其他任何人可能会来此。在ANTLRWorks v1.4中,解释器无法处理谓词,所以在没有(这会减慢我的速度)的时候看起来有错误,而且我必须将'$ settype(TYPE);'更改为' $ type = TYPE;' – tjm 2010-10-15 16:06:50
@tjm,我稍微编辑了ANTLR示例。它现在是v3兼容吗? – 2010-10-15 18:01:29