如何从clang中的Expr *获取整数变量名及其值

时间:2012-11-02 05:32:09

标签: integer clang

我在clang的重写方法VisitBinaryOperator()中有以下代码:

Expr* lhs = E->getLHS();  
Expr* rhs = E->getRHS();  

我想从表达式lhsrhs中提取整数变量名及其值。

说我有x = 10;,然后我想从x获取标识符lhs,从10获取rhs
如果我有x = x + 10;,那么我想从xlhs获取标识x + 10作为rhs

的子表达式

同样,对于类型I,当我转储: int identifier类型为

时,我会收到此lhs
QualType type_lhs = lhs->getType();  
type_lhs->dump();  

如何为clang做这件事?

1 个答案:

答案 0 :(得分:4)

使用dyn_cast确定您在LHS上的表达形式:

if (DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(lhs)) {
  // It's a reference to a declaration...
  if (VarDecl *VD = dyn_cast<VarDecl>(DRE->getDecl())) {
    // It's a reference to a variable (a local, function parameter, global, or static data member).
     std::cout << "LHS is " << VD->getQualifiedNameAsString() << std::endl;
  }
}

如果要在LHS上处理其他表达式表单,则需要更复杂的代码。如果您想处理任意代码,请查看RecursiveASTVisitor

要评估右侧的值(假设它是Clang可以评估的内容,例如10,而不是x + 10),请使用Expr之一{{ 1}}功能:

Evaluate*