antlr4 - 冲突的规则,如何解决

时间:2014-11-01 17:50:04

标签: antlr antlr4

我有以下规则:

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还是新手,我还在学习。

1 个答案:

答案 0 :(得分:1)

是的,property : NAME | NUMBER;是实现目标的方法。

相关问题