2016-10-04 7 views
1

私はCプログラムのASTで変換を行いたいのですが、プログラムを正しく変更するために作成されたすべてのASTにアクセスする必要があります。 LLVMは一度に1つの翻訳単位を処理するため、同時にすべての翻訳単位のASTにアクセスすることはできません。あなたは、プログラムのために作成されたすべてのASTにアクセスし、ASTを分析し、ASTの修正を行う方法を提案していますか?要約としてプログラム全体のAST

  1. 私は、同時にプログラムのASTのへのアクセス権を持っている必要があります。
  2. ASTの分析を行います。
  3. 私の分析に基づいてASTを変更し、変更されたASTからllvm IRを作成します。
+0

clangにファイルをコンパイルしてASTを伝えることができます。あなたはあなたが望むファイルごとにそれを行うだけです。あなたはプラグインとしてそれをすることはできませんが、あなたは自分のフロントエンドアクションを書くことができ、あなたが望むものを何でもすることができます。個人的には、私は単体でビルドしてプラグインを実行します - それは同一ではありませんが、私の必要性を十分に満たしています。 – xaxxon

+0

@xaxxon:各コンパイル単位を個別のアーティファクトとして処理する場合、あるコンパイル単位から別のコンパイル単位にコードを移動する変換は実装できません。 (あるコンパイル単位で*コードを検査しても、その検査結果が別のコンパイル単位に影響することはありません)。したがって、あなたは「グローバルな」分析/変換を行うことはできません。 –

+0

@IraBaxter私はあなたが何を意味しているのか正確には分かりませんが、このファイルをコンパイルしてASTを教えてくれるAPIがあります。だから、あなたが望むものならば、ASTのすべてを同時に記憶しておくことができます。少なくとも、それは私が理解するものです。 – xaxxon

答えて

1

あなたは一つの大きなLLVMソースを作成する(-S -emit-LLVMで打ち鳴らすから)あなたの.ll生成されたファイルのすべてにLLVM-リンクを使用して試すことができます。

あなたはその時点ですべてのものにアクセスできます。

関連する問題