【发布时间】:2010-10-15 12:28:15
【问题描述】:
我想在 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.",,但想知道是否有办法绕过它。
附: INT 定义如下...
fragment DIGIT
: '0'..'9'
;
INT : DIGIT+
;
编辑。
进一步的测试让我觉得它并不像直接匹配FLOAT 规则那么简单。 (我本来打算改变这个问题,但既然我现在有了答案,我就不会了。)问题(我相信)仍然在于词法分析器规则的优先级,所以问题仍然保持不变。
【问题讨论】: