私はclangで手続き間のデータフロー分析を行っています。現在、libtooling を使用してソース ファイルを解析し、AST ビジターを呼び出しています。問題は、複数の .c ファイルに対して単一の AST を作成するにはどうすればよいかということです。
ASTImport クラスを使用しようとしましたが、一部の AST ノードのインポートをサポートしていません。さらに、CompilerIstance を作成して操作すると、何か問題が発生し、デストラクタでクラッシュします。
非常によく似たオプションは ASTImportAction でしたが、この場合、どのコマンド ライン パラメータを ClangTool に渡す必要があるかは明確ではありません。
3 番目のオプションは、すべての .c ファイルに対して ASTUnit を作成し、それぞれの定義を検索することでした。レコードなどのユーザー定義型間の対応を見つける方法が明確ではありません。ASTImport では IsStructurallyEquivalent() 関数を使用していますが、匿名の名前空間で宣言されているため、このコードをすべて自分のプログラムにコピーすることしかできません。また、すべての AST ノードをサポートしているわけではありません。
インターネットからこのリンクhttp://lists.cs.uiuc.edu/pipermail/cfe-dev/2012-August/023865.htmlが最も適切なようですが、私にとってはソリューションの技術的な詳細は明確ではありません。
どんな提案でも大歓迎です。どうもありがとう。