冲突的规则,如何解决



我有以下规则:

property   : NAME;
value      : STRING | NUMBER;
NUMBER     : ('0'..'9')+;
NAME       : ('a'..'z' | 'A'..'Z' | '0'..'9' | '-' | '_')+;
STRING     : '"' (~'"')* '"';

当一个属性是一个数字时,ANTLR说:

line 1:14 mismatched input '5' expecting NAME

我理解为什么会发生这种情况。NUMBER规则在NAME规则之前被提及,因此它具有优先级。该数字由NUMBER规则识别。

在ANTLR中处理此问题的常见方法是什么?我可以如下重写property规则,但我真的不知道这是否是个好主意,因为我正在引入冗余。

property   : NAME | NUMBER;

重新排序NUMBERNAME也不是一个好主意,因为这将打破数字的value规则(同样的问题)。

需要注意的是:我是ANTLR的新手,还在学习。

是的,property : NAME | NUMBER;就是这样做的方法。

相关内容

  • 没有找到相关文章

最新更新