我有以下规则:
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;
重新排序NUMBER
和NAME
也不是一个好主意,因为它会破坏数字的value
规则(同样的问题)。
重要的是要注意:我对ANTLR还是新手,我还在学习。
答案 0 :(得分:1)
是的,property : NAME | NUMBER;
是实现目标的方法。