2014-10-29 4 views
3

Я пытаюсь проанализировать некоторый код C++, используя Clang. Для следующего кода я могу получить Expr* x в качестве аргумента f-> bar(x) из AST. Теперь я хочу найти объявление x, чтобы получить его начальное значение, но я не уверен, как это сделать. Я также просмотрел документацию Expr здесь http://clang.llvm.org/doxygen/classclang_1_1Expr.html, но я не нашел ничего полезного.Как найти объявление переменной с помощью Clang?

struct foo { 
    int bar(int x) { return x; } 
}; 

int main(){ 
    foo *f; 
    int x = 0, y = 0; 
    int y = f->bar(x); 
    return 0; 
} 
+1

вы смотрели на http://clang.llvm.org/docs/LibASTMatchersTutorial.html ли? – sfrehse

+0

Нет, не знаю. На самом деле я пишу чекер для Clang, это для создания нового инструмента для Clang! Но в любом случае, спасибо. Я могу использовать его! – media

ответ

1

Что-то вроде

dynamic_cast<const VarDecl*>(dynamic_cast<const DeclRefExpr*>(x)->getDecl())->getInit(); 
+0

Я только что попробовал это сейчас, компилятор жалуется: «error: dynamic_cast от« const clang :: Expr * »до« clang :: DeclRefExpr * »отбрасывает квалификаторы». Я думаю, что это потому, что DeclRefExpr * не является константой! – media

Смежные вопросы