Clanを使用してASTにアクセスして、特定のソースファイル内の変数とメソッドに関する情報を取得したいと考えています。しかし、私はLibTooling機能を使いたくありません。私は手で、.cppを解析してツリーを取得するメソッドを呼び出すコードに書きたいと思います。私はこれを行う方法を教えてくれるリソースは見つかりません。誰でも助けることができますか?Clangを使用してASTを取得
0
A
答えて
0
Clangコンポーネントをコンパイルデータベースで動作させる方法、コンパイラインスタンスを設定する方法などを学ぶことを目標とするなら、Clangのソースコードはリソースです。おそらく、ClangTool::buildASTs()
メソッドのソースが適切です。ソースツリーのlib/Tooling /ディレクトリにあるTooling.cppを参照してください。あなたの目標はLibToolingがサポートされていない分析を行うことで、あなただけの最小限の手間でASTを取得したい場合は
、その後、いずれかClangTool::buildASTs
またはclang::tooling::buildASTFromCode
は、サービスのかもしれません。コンパイルオプション、パスのインクルードなどを表現するコンパイルデータベースが必要な場合は、ClangToolの方が優れています。軽量テスト用のスタンドアロンのコードがあれば、buildASTFromCode
は問題ありません。ここでClangToolアプローチの例です:
#include "clang/Tooling/CommonOptionsParser.h"
#include "clang/Tooling/Tooling.h"
#include "llvm/Support/CommandLine.h"
#include <memory>
#include <vector>
static llvm::cl::OptionCategory MyOpts("Ignored");
int main(int argc, const char ** argv)
{
using namespace clang;
using namespace clang::tooling;
CommonOptionsParser opt_prs(argc, argv, MyOpts);
ClangTool tool(opt_prs.getCompilations(), opt_prs.getSourcePathList());
using ast_vec_t = std::vector<std::unique_ptr<ASTUnit>>;
ast_vec_t asts;
tool.buildASTs(asts);
// now you the AST for each translation unit
...
はここbuildASTFromCode
の例です:
#include "clang/Frontend/ASTUnit.h"
#include "clang/Tooling/Tooling.h"
...
std::string code = "struct A{public: int i;}; void f(A & a}{}";
std::unique_ptr<clang::ASTUnit> ast(clang::tooling::buildASTFromCode(code));
// now you have the AST for the code snippet
clang::ASTContext * pctx = &(ast->getASTContext());
clang::TranslationUnitDecl * decl = pctx->getTranslationUnitDecl();
...
関連する問題
- 1. Clangを使用してCソースコードからASTを生成
- 2. clangがASTの解析中にインクルードファイルを取得する
- 3. ClangのOpaqueValueExprの子を取得する方法AST
- 4. Clang ASTを使用した関数の引数を出力
- 5. ClangのObjCPropertyRefExprからの情報の取得AST
- 6. Clang AST Matcherの "AND"と "OR"
- 7. ClangのASTにノードを追加
- 8. clangを持つ複数のソースファイルのAST
- 9. Clangを組み合わせるAST
- 10. Clang ASTビジター、トラバースインクルードファイルを避ける
- 11. clang ASTを表示するには?
- 12. cdtプラグインを使用してcソースコードからASTを取得できません。
- 13. JDT ASTを使用して注釈のタイプを取得する方法は?
- 14. Clang ASTのDeclノードの保存
- 15. MSVCでOpenMPを使用してclangを取得する方法2015
- 16. Clang AST:その宣言も定義でないコンストラクタのCXXCtorInitializerリストを取得します
- 17. Eclipse CDT:C++プロジェクトのASTを取得
- 18. astを使用して関数内のすべての関数呼び出しを取得する
- 19. typescriptコンパイラAPIを使用してASTのノードとしてコメントを取得することはできますか?
- 20. Ubuntuでclang ++を使用してコンパイルするための基本的なC++プログラムを取得しました。
- 21. Antlr4とStringTemplatesを使用してASTからソースコードを生成
- 22. CAPTUREバインディングを使用してASTを作成する方法は?
- 23. Bisonを使用してASTを構築する
- 24. Clang:元のファイルから新しいファイルに関数のASTを書き込む
- 25. Pysnmpを使用してSNMPを使用してプリンタステータスを取得
- 26. Unity Cloudビルドを使用したclangエラー
- 27. Windowsで-faddress-sanitizerを使用したClang
- 28. LLVM/Clangを使用したWin10でOpenMPを使用したCuda
- 29. YOSYSからテキストファイルとしてAST結果を取得する方法
- 30. SimpleInjectorを使用してHubContextを取得