ANTLR を介して生成された AST があり、それを DLR 互換のもの (式ツリー) に変換する必要があります。ただし、式ツリーはインスタンス化時にサブツリーを必要とするため、これにはツリーパターンマッチャーを使用できないようです(これは取得できません)。どのソリューションを使用するのが最適ですか?
1 に答える
私は数年前に非常に似たようなことをしました - 私は DLR 構造を構築しませんでしたが、(不変性を達成するために) 構築時に引数も必要とする独自の式ツリー構造を構築しました。
当時、私は ANTLR v2 を使用していましたが、新しい v3 構文に慣れていないことを認めなければなりません。また、当時の方法についての詳細をすべて覚えているわけでもありません。うまくいった例、私はあなたに私の話をしようとします(それがあなたの問題にも当てはまるかどうかはわかりません!):
まず第一に、ASTから構造を構築する必要はありませんでした。ANLTR の AST ビルダーのみを手段として使用しました。すべての AST 構築ルールは、AST ノード自体に加えてオブジェクトを返すことができます。戻り値は、外側のルールでコンストラクターの引数として使用できます。その構造は自動的にボトムアップで構築されます。
IOW、AST の構築と同時に最終的な構造を構築します (AST は構文規則を保証するためだけに構築され、破棄することができます)。このアプローチは非常に堅実で、最初に AST を構築するよりもさらに高速です。 、そしてそれを変換します!ただし、(通常のパーサー/レクサーを単独で使用するのではなく) AST パーサーの機能を利用します。また、AST も必要な場合は、どこかに保存してください。
ただし、完成した AST を実行したい場合は、任意のプログラム ルーチンを使用してそれを実行できると思いますが、結果を構築するためにボトムアップで動作することを確認してください。
これが何らかの形で役立つことを願っています!