ANTLR 4.2.2 で奇妙な問題に遭遇しました。
(簡略化された) Java 文法を考えてみましょう。これはコンパイルされません:
classOrInterfaceType
: (classOrInterfaceType) '.' Identifier
| Identifier
;
ANTLR は次のエラーを出力します。
error(119): Java.g4::: The following sets of rules are mutually left-recursive [classOrInterfaceType]
はい、左再帰も見られます。しかし、相互左再帰は見られず、通常の再帰のみが見られます。
の周りのかっこを削除すると、(classOrInterfaceType)
正常にコンパイルされます。もちろん、括弧は不要ですが、文法は自動的に生成され、コード ジェネレーターは状況によっては常に括弧を挿入します。では、ここで何が問題なのですか?