在我的 Antlr3 语法中,我有几个“重叠”的词法分析器规则,如下所示:
NAT: ('0' .. '9')+ ;
INT: ('+' | '-')? ('0' .. '9')+ ;
BITVECTOR: ('0' | '1')* ;
尽管像100110和123这样的标记可以被多个规则匹配,但它总是由上下文决定它必须是其中的哪一个。例子:
s: a | b | c ;
a: '<' NAT '>' ;
b: '{' INT '}' ;
c: '[' BITVECTOR ']' ;
然后输入{17}应该匹配{、INT和},但词法分析器已经确定17是 NAT 令牌。如何防止这种行为?backtrack选项已经设置为 true,但它似乎只影响解析器规则。