在我的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,但它似乎只影响解析器规则。
答案 0 :(得分:3)
可能有一种复杂的方法可以使词法分析器对上下文敏感,但总的来说,这就是你希望解析器能够处理的内容,并且你希望你的词法分析器只提供一个令牌流。我的建议是重构你的词法分析器以返回DIGITS
和SIGN
,并让你的解析器计算出上下文代表数字的数字。