我在clang的重写方法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
同样,对于类型I,当我转储: int identifier
类型为
lhs
QualType type_lhs = lhs->getType();
type_lhs->dump();
如何为clang做这件事?
答案 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*