2016-09-16 4 views
-2
grammar even_numbers; 

NUMBER : '0'..'9'; 
EVEN_NUMBER : '2' | '4' | '6' | '8'; 

signedEvenNumber : ('+' | '-' |) NUMBER? EVEN_NUMBER; 

エラーがある:Antlr 3の文法に何が問題なのですか?

エラー(208):EVEN_NUMBER

Please check the picture

:1:4の前のトークンが同じ入力に一致するため、次のトークンの定義が一致することはできません
+0

あなたは 'NUMBER'と' EVEN_NUMBER'を並べ替える場合はどう:あなたは何ができるか

はこれですか?それ以外の場合、 'NUMBER'は常に一致します。 – zerkms

+0

@zerkms最後の番号は、偶数番号を取得する場合もあります。 – MOHA

+0

確かに、私が提案したものと矛盾しないので、もう一度お読みください。 – zerkms

答えて

2

慎重に読んでも間違いはありません。は一致しません。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'; 
+0

チップがありがとう – MOHA

関連する問題