【发布时间】:2014-11-01 17:50:03
【问题描述】:
我有以下规则:
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 还很陌生,仍在学习中。
【问题讨论】: