1

私はテキストファイルをレクシングしていますが、次の例外が発生します:

Exception in thread "main" java.lang.RuntimeException: mismatched input 'C' expecting {<EOF>, 'V:', '%', ACCIDENTAL, BASENOTE, 'z', '(', '['}

antlr で BASENOTE が次のように定義されている場合

BASENOTE : 'C' | 'D' | 'E' | 'F' | 'G' | 'A' | 'B'
        | 'c' | 'd' | 'e' | 'f' | 'g' | 'a' | 'b';

明らかに BASENOTE トークンであるのに、「C」が間違っていると考える理由がわかりません。誰かがそれに光を当てることができますか?

編集: BASENOTE の前に次のものがあります。

KEYBASENOTE : 'C' | 'D' | 'E' | 'F' | 'G' | 'A' | 'B';
METERSHORT : 'C' | 'C|';

BASENOTE を次のように変更しました。

BASENOTE : KEYBASENOTE | 'c' | 'd' | 'e' | 'f' | 'g' | 'a' | 'b';

しかし、問題はまだ解決していません。

4

2 に答える 2

1

一致するレクサー ルールは、文法のC前にあります。BASENOTE入力Cにトークン タイプが割り当てられると、その位置により、そのレクサー ルールが優先されます。

于 2013-10-30T19:41:26.870 に答える