2016-12-22 1 views
0

ANTRLR初心者の質問です。与えられた文法についてANTLR mavenプラグインは、テキストをトラバースして解析するために必要なすべてのJavaクラスを作成しました。また、「The Definitive ANTLR4 Reference」に規定されているように使用するとうまく動作します。ANTLRでは、特定の低レベルルールに対してストリームをどのように解析するのですか?

ここで、生成されたクラスを再利用して、文法ファイルのどこかに埋め込まれたルールで定義された式を解析する必要があるとします。 しかし、参考文献は、特定のルールをどのように選択するかについての手掛かりを提供していないように見えますが、生成されたクラスは、常に文法ツリー全体がソースに存在することを期待しています。

生成されたクラスをそのまま使用することはできません。対応するリスナーとパーサのメソッドは、「親コンテキスト」と「起動状態」のときにのみ作成できるコンテキストパラメータを必要とするため、定義する方法を知っている。

私がこれまでに思いついた唯一の(ゴミ)解決策は、問題の低レベルのルールがトップレベルのルールになるように文法を2つのファイルに分割し、後者を最初のファイルにインポートすることです。

私はここで何かを紛失していますか?どんな助けもありがとう。

答えて

1

これは非常に簡単です。サブルールの1つと一致させたいテキストを入力ストリームにロードし、メインルールで行ったのと同じように、そのサブルールの関数をパーザで呼び出します。それぞれの文法ルールは関数で表され、サブテキストを呼び出すだけで、このサブルール(およびその子)にのみ適用される、切り捨てられた解析ツリーが生成されます。

関連する問題