3

私には2つの問題があります:

私の ANTLR パーサーには、次の書き換えルールがあります。

msg: msg_content (COMMA msg_content)* -> ^(MSG_CTS msg_content+);

私のツリー文法では、収集した msg_content トークンをどのように利用できますか? $msg_content.text が null 例外を返しています。


より一般的には、生成された AST ツリーをどのように使用できるかについて、ガイドを提供していただけますか? 私は基本的にノードを歩き回り、さまざまなことのためにJavaクラスを作成したいと考えています。

印刷されるこの単純なツリーがあります。

(MSG (AGENTS A B) (MSG_CTS x y))

A、B を含む「エージェント」のフィールドと、X、Y を保持するコンテンツ フィールドを持つ Java クラス「メッセージ」が必要です。

私は ANTLR 決定版ガイドを読みましたが、結合されたトークンの使用方法や、必要に応じてツリーを下に移動する方法についての参照を送信していません。あたかもそこにあるすべての ANTLR チュートリアルが式評価器に関するものであるかのようです!

ANTLRオンラインマニュアルの「Interfacing AST with Java」と「Expression evaluator」を見ましたが、それらを自分の問題に適用する方法がよくわかりません。簡単な例を挙げていただけると大変助かります!

助けてください...ありがとう!

4

1 に答える 1

1

$msg_content.text が null 例外を返しています

関連するすべてのルールとコードを確認せずにコメントすることはできません。質問を編集して、エラー/例外を再現する、私または他の誰かが実行できる自己完結型の例を含めることはできますか?

(MSG (エージェント AB) (MSG_CTS xy))

A、B を含む「エージェント」のフィールドと、X、Y を保持するコンテンツ フィールドを持つ Java クラス「メッセージ」が必要です。

このチュートリアルのリストをご覧ください: https://stackoverflow.com/questions/278480/antlr-tutorials、すべてが式評価器に関するものではありません。私のチュートリアルでは、ツリー ウォーカーでカスタム ノード クラスを使用する方法を示します。

また、ツリー ウォーカーでカスタム ノード クラスを使用する方法を示すこの Q&Aも参照してください。

于 2012-07-12T06:24:19.873 に答える