2

在我的 Antlr3 语法中,我有几个“重叠”的词法分析器规则,如下所示:

NAT: ('0' .. '9')+ ;
INT: ('+' | '-')? ('0' .. '9')+ ;
BITVECTOR: ('0' | '1')* ;

尽管像100110123这样的标记可以被多个规则匹配,但它总是由上下文决定它必须是其中的哪一个。例子:

s: a | b | c ;
a: '<' NAT '>' ;
b: '{' INT '}' ;
c: '[' BITVECTOR ']' ;

然后输入{17}应该匹配{INT},但词法分析器已经确定17是 NAT 令牌。如何防止这种行为?backtrack选项已经设置为 true,但它似乎只影响解析器规则。

4

1 回答 1

3

可能有一种复杂的方法可以使词法分析器对上下文敏感,但总的来说,这就是您希望解析器处理的事情,并且您希望词法分析器只提供一个标记流。我的建议是重构您的词法分析器以返回DIGITSSIGN并让您的解析器计算出上下文所代表的数字类型。

于 2010-10-11T22:07:58.010 回答