1
我有以下規則: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
我明白爲什麼會這樣。在NAME
規則之前提到NUMBER
規則,因此它具有優先權。該號碼由NUMBER
規則識別。
在ANTLR中處理這個問題的常用方法是什麼?我可以重寫property
規則如下,但我不知道這是否是一個好主意,因爲我正在引入冗餘。
property : NAME | NUMBER;
重新排序NUMBER
和NAME
是不是一個好主意要麼,因爲它會打破號碼value
規則(同樣的問題)。
重要提示:我對ANTLR相當陌生,現在仍在學習。
謝謝!我必須習慣於定義多餘的右側('NUMBER'是'NAME'的一個子集)是首選。 – 2014-11-01 21:33:08