1
私はCプログラムのASTで変換を行いたいのですが、プログラムを正しく変更するために作成されたすべてのASTにアクセスする必要があります。 LLVMは一度に1つの翻訳単位を処理するため、同時にすべての翻訳単位のASTにアクセスすることはできません。あなたは、プログラムのために作成されたすべてのASTにアクセスし、ASTを分析し、ASTの修正を行う方法を提案していますか?要約としてプログラム全体のAST
:
- 私は、同時にプログラムのASTのへのアクセス権を持っている必要があります。
- ASTの分析を行います。
- 私の分析に基づいてASTを変更し、変更されたASTからllvm IRを作成します。
clangにファイルをコンパイルしてASTを伝えることができます。あなたはあなたが望むファイルごとにそれを行うだけです。あなたはプラグインとしてそれをすることはできませんが、あなたは自分のフロントエンドアクションを書くことができ、あなたが望むものを何でもすることができます。個人的には、私は単体でビルドしてプラグインを実行します - それは同一ではありませんが、私の必要性を十分に満たしています。 – xaxxon
@xaxxon:各コンパイル単位を個別のアーティファクトとして処理する場合、あるコンパイル単位から別のコンパイル単位にコードを移動する変換は実装できません。 (あるコンパイル単位で*コードを検査しても、その検査結果が別のコンパイル単位に影響することはありません)。したがって、あなたは「グローバルな」分析/変換を行うことはできません。 –
@IraBaxter私はあなたが何を意味しているのか正確には分かりませんが、このファイルをコンパイルしてASTを教えてくれるAPIがあります。だから、あなたが望むものならば、ASTのすべてを同時に記憶しておくことができます。少なくとも、それは私が理解するものです。 – xaxxon