私はANTLR4を使用しています。特に、そのレポ(grammar)で利用可能なC文法を使用しています。文法には初期のルールがないと思われるので、どのように入手できるのだろうかと思っていました。私は呼んで私の例ではANTLR最初の生産を取得する
int a;
int foo() { return 0; }
:実際には、一度パーサを初期化し、私は自分のリスナーを添付して、私は別のコード命令との2つのファイルを解析しようとしているので、私は構文エラーを取得します"g4"ファイルの最初の生成である"parser.primaryExpression();"
のパーサー。代わりにANTLRによって自動的に最初のプロダクションを呼び出すことは避けられますか?
"[...]場合によっては、サブグルールのみを解析することもできます。"はい、ただし動作しないことがあります(http://stackoverflow.com/questions/41281882/antlr4-not-reporting-ambiguityを参照)。 ANTLR4は、他の誰かによって呼び出されない各ルールに暗黙的にEOFトークンを追加します(これらのルールをルーツと考えているかもしれません)。 – rslemos
うーん、私はそれを信じていない。私は特にそれをチェックしていませんが、ルールが消費し、成功したものよりも多くの情報が含まれており、追加の入力は無視されています。その規則の最後に明示的なEOFがあった場合、それは極度の入力のせいで失敗したでしょう。 –