如何让整型变量名称及其从Expr的*在铛值(how to get integer variable

2019-08-02 05:25发布

我已经在重写方法下面的代码VisitBinaryOperator()为铛:

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

我想提取整数变量名称,并从表达其价值lhsrhs

说我有x = 10; ,那么我想标识x来自lhs10rhs
如果我有x = x + 10; 然后我想获得标识符xlhsx + 10从子表达rhs

此外类型我得到这个: int identifier当我倾倒lhs

QualType type_lhs = lhs->getType();  
type_lhs->dump();  

这怎么可以铛做什么?

Answer 1:

使用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

为了评估右边的值(假设它的东西,铛可以评估,像10 ,不喜欢x + 10 ),使用一个ExprEvaluate*功能:

llvm::APSInt Result;
if (rhs->EvaluateAsInt(Result, ASTContext)) {
  std::cout << "RHS has value " << Result.toString(10) << std::endl;
}


文章来源: how to get integer variable name and its value from Expr* in clang
标签: integer clang