我已经在重写方法下面的代码VisitBinaryOperator()
为铛:
Expr* lhs = E->getLHS();
Expr* rhs = E->getRHS();
我想提取整数变量名称,并从表达其价值lhs
和rhs
。
说我有x = 10;
,那么我想标识x
来自lhs
和10
的rhs
。
如果我有x = x + 10;
然后我想获得标识符x
从lhs
和x + 10
从子表达rhs
此外类型我得到这个: int identifier
当我倾倒lhs
型
QualType type_lhs = lhs->getType();
type_lhs->dump();
这怎么可以铛做什么?
使用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
),使用一个Expr
的Evaluate*
功能:
llvm::APSInt Result;
if (rhs->EvaluateAsInt(Result, ASTContext)) {
std::cout << "RHS has value " << Result.toString(10) << std::endl;
}