如何在VisitDeclStmt,VisitCompoundStmt等期间提取变量名或标识符名

时间:2019-06-19 02:40:35

标签: clang abstract-syntax-tree clang++ llvm-clang clang-static-analyzer

我想逐行在每个函数中进行变量分析。

我实现了不同的AST递归访客,以便他们遍历函数中的每一行,例如VisitUnaryOperator,VisitCompoundStmt,VisitBinaryOperator,VisitDeclStmt。我无法在这些访问器函数中找到API的内部,该API可以让我访问变量名及其详细信息,例如已定义或声明,指针类型或常规。

class Traverser : public RecursiveASTVisitor<Traverser> {
public:
  bool VisitFunctionDecl(FunctionDecl *D) {
    D->dump();
    return true;
  }

  bool VisitDeclStmt(DeclStmt *DS) {
    DS->dump();
    return true;
  }

  bool VisitBinaryOperator(BinaryOperator *BO) {
    BO->dump();
    return true;
  }
};

“我希望int foo {int a; a = 5; return a;}的输出为第一行:'a'声明,第二行:'a'定义,第三行:'return'。”

0 个答案:

没有答案