-2
grammar even_numbers;
NUMBER : '0'..'9';
EVEN_NUMBER : '2' | '4' | '6' | '8';
signedEvenNumber : ('+' | '-' |) NUMBER? EVEN_NUMBER;
錯誤(208)::4:1:下面的標記定義永遠不能匹配,因爲現有的令牌匹配相同的輸入:EVEN_NUMBER
grammar even_numbers;
NUMBER : '0'..'9';
EVEN_NUMBER : '2' | '4' | '6' | '8';
signedEvenNumber : ('+' | '-' |) NUMBER? EVEN_NUMBER;
錯誤(208)::4:1:下面的標記定義永遠不能匹配,因爲現有的令牌匹配相同的輸入:EVEN_NUMBER
錯誤很明顯,如果仔細閱讀:EVEN_NUMBER
無法匹配,因爲NUMBER
將匹配EVEN_NUMBER
也匹配的內容。並且NUMBER
正在優先,因爲它在EVEN_NUMBER
之前定義。
你可以做的是這樣的:
signedEvenNumber : ('+' | '-' |) number? EVEN_NUMBER;
number : ZERO | ODD_NUMBER | EVEN_NUMBER;
ZERO : '0';
ODD_NUMBER : '1' | '3' | '5' | '7' | '9';
EVEN_NUMBER : '2' | '4' | '6' | '8';
非常感謝小費 – MOHA
如果你重新排序'NUMBER'和'EVEN_NUMBER'?否則'NUMBER'總是匹配。 – zerkms
@zerkms最後一個號碼應該是偶數,以獲得一個偶數 – MOHA
當然,它不與我建議的相矛盾,請再次閱讀。 – zerkms