2012-11-02 19 views
3

我有以下的覆蓋方法VisitBinaryOperator()代碼鐺值:如何讓整型變量名稱及其從Expr的*在鐺

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

我想提取整數變量名稱,並從表達lhs其價值和rhs

說我有,那麼我想從rhslhs10獲得標識符x
如果我有x = x + 10;那麼我想從rhs

而且類型我得到這個: int identifierlhsx + 10作爲子表達式得到標識符x當我傾倒lhs

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

這怎麼可以爲叮噹完成嗎?

回答

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

爲了評估右邊的值(假設它的東西,鐺可以評估,如10,不喜歡x + 10),使用ExprEvaluate*功能之一:

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