В настоящее время я работаю над конвертером кода в clang llvm, но у меня возникли некоторые проблемы с получением нужной информации из операторов и выражений.Более конкретно, я пытаюсь найти строку кода и работаю с ней.Например, я хочу быть в состоянии найти назначение переменной, например (int x = getAge ();) Я пытаюсь использовать посетителей, чтобы найти операторы и переменные, но не могу понять, как разобрать оператор, чтобы получить обаимя переменной и имя метода.Я хочу иметь возможность получить имя переменной 'x' и имя метода 'getAge'
Я попытался найти выражения присваивания и проанализировать левую и правую часть, чтобы получить имя переменной, иимя метода справа, но я не могу понять, как получить имя метода, только значение или тип правой стороны.
virtual bool VisitBinaryOperator(clang::BinaryOperator* bo){
clang::Expr* lhs = bo->getLHS();
clang::Expr* rhs = bo->getRHS();
clang::QualType type_rhs = rhs->getType();
llvm::APSInt Result;
clang::Expr::EvalResult Result2;
clang::Expr::ConstExprUsage ceu;
//clang::ASTContext context;
if (rhs->EvaluateAsRValue(Result2, *ast_context_)) {
//std::cout << "RHS method name " << Result2.Val.getAsString(*ast_context_, type_rhs) << std::endl;
}
if(clang::Stmt* stmt = dyn_cast<clang::Stmt>(rhs)){
//trying to get right hand side name....
}
if (clang::DeclRefExpr *DRE = dyn_cast<clang::DeclRefExpr>(lhs)) {
//check and Expression is a declaration.
if (clang::VarDecl *VD = dyn_cast<clang::VarDecl>(DRE->getDecl())) {
cout << "LHS is " << VD->getQualifiedNameAsString() << std::endl;
}
}
return true;
}
Так что я могу разобрать левуюсо стороны, и вижу имя переменной, но я не могу понять, как разобрать правую часть, чтобы я мог проверить и увидеть, как называется метод.Любые предложения приветствуются!