在我的Antlr3语法中,我有几条“重叠”的词汇规则,如下所示:
NAT: ('0' .. '9')+ ;
INT: ('+' | '-')? ('0' .. '9')+ ;
BITVECTOR: ('0' | '1')* ;
虽然像100110和123这样的令牌可以被多个规则匹配,但是它总是由上下文来决定它必须是哪一个。示例:
s: a | b | c ;
a: '<' NAT '>' ;
b: '{' INT '}' ;
c: '[' BITVECTOR ']' ;
然后输入的{17}应该匹配{、INT和},但是莱克星已经决定17E 215
是NAT令牌。我怎样才能防止这种行为?回溯选项已经设置为true,但它似乎只影响解析器规则。
发布于 2010-10-11 22:07:58
可能有一种复杂的方法可以使lexer上下文敏感,但一般来说,这正是您希望解析器处理的,并且希望您的lexer只提供一个令牌流。我的建议是重构您的词汇,以返回DIGITS
和SIGN
,并让解析器计算出由上下文表示的数字的类型。
https://stackoverflow.com/questions/3910197
复制相似问题