質問

私はANTLRを経由して生成されたASTを持っている、と私はDLR互換1(式木)に変換する必要があります。しかし、式ツリーは、(私が得ることができない)のインスタンスで彼らのサブツリーを必要として、私はこのために木のパターンマッチャを使用することができないことと思われます。私が使用するためにどのような解決策がベストでしょうか?

役に立ちましたか?

解決

私は何年か前に非常によく似た何かをした - 私は、DLRの構造を構築しませんでしたが、私は(不変性を達成するために)また、施工時に引数を必要に応じて自分自身の表現のツリー構造を、構築された。

当時、私はANTLRのV2で働いていた - と私は新しいv3の構文に慣れていないだと、認めなければならない、プラス私は戻って、それをどうやったのかについてのすべての詳細を覚えていない - ので、代わりにあなたを提供します完全に働いた例で、私はちょうどあなたに私の話をしようとするでしょう(それはあなたの問題に適用される場合も、わからない!):

まず第一に、のASTから私の構造を構築する必要がありませんでした。私は唯一の車両としてANLTRのASTビルダを使用:ルールを構築するすべてのASTは、ASTノード自体に加えて、オブジェクトを返すことができます。戻り値は、コンストラクタのために、そして上のように、引数として外側ルールで使用することができます。だから、その構造は、自動的にあなたのためのボトムアップを内蔵している!

IOWは、あなたがこのアプローチは非常にしっかりしている(ASTのみ構文規則を確実にするために構築され、そして捨てることができます)ASTが構築されていると同時に、最終的な構造を構築し、それが最初よりもさらに高速ですASTを構築し、その転換を! (普通のパーサ/レクサーのみを使用するのではなく)しかし、それはまだASTパーサーの力を利用しています。そして、あなたはあまりにもAST、必要ならば - 。どこかでそれを保存

Ifは、しかし、あなたは完成ASTを歩きたい! - ちょうどそれはあなたの結果を構築するためにボトムアップに動作することを、確認してください。

- 私はあなたがそれを行うために、任意のプログラムのルーチンを使用することができます想像します

希望これはいくつかの方法で役立ちます!

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top