我想在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
。在这里看起来,似乎我正在输给“具有最大计数的规则是赢家”,但我想知道是否有一种方法可以解决这个问题。
附:INT的定义如下...
fragment DIGIT
: '0'..'9'
;
INT : DIGIT+
;
编辑。
进一步的测试让我认为它并不像直接匹配到 FLOAT
规则那么简单。(我原本想改变问题,但既然我已经得到了答案,我就不会这么做了。)问题(我相信)仍然在词法分析器规则的优先级上,因此问题仍然保持不变。