2

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)正常にコンパイルされます。もちろん、括弧は不要ですが、文法は自動的に生成され、コード ジェネレーターは状況によっては常に括弧を挿入します。では、ここで何が問題なのですか?

4

1 に答える 1

2

これはバグであることが確認されています。この修正は、次のマイルストーン 4.x で予定されています。https://github.com/antlr/antlr4/issues/564を参照してください

于 2014-05-22T12:00:51.947 に答える