RecursiveASTVisitor kann tun, was Sie brauchen.
Umsetzung der member methodsTraverseDecl(Decl *x)
, TraverseStmt(Stmt *x)
und TraverseType(QualType x)
für Ihre RecursiveASTVisitor` abgeleitete Klasse (z MyClass) den Trick. Kombiniert führen diese drei Methoden Sie zu jedem einzelnen Knoten in Ihrem AST.
Beispiel:
class MyClass : public RecursiveASTVisitor<MyClass> {
public:
bool TraverseDecl(Decl *D) {
// your logic here
RecursiveASTVisitor<MyClass>::TraverseDecl(D); // Forward to base class
return true; // Return false to stop the AST analyzing
}
bool TraverseStmt(Stmt *x) {
// your logic here
RecursiveASTVisitor<MyClass>::TraverseStmt(x);
return true;
}
bool TraverseType(QualType x) {
// your logic here
RecursiveASTVisitor<MyClass>::TraverseType(x);
return true;
}
};
, was ist falsch mit 'RecursiveASTVisitor'? –
@ m.s. Es ist nichts falsch mit dem RecursiveASTVisitor, es ist nur so, dass es nur bestimmte Unterbäume durchläuft, zum Beispiel wie die Menge aller MethodCalls im AST, aber was ich will, ist durch alle Knoten des AST zu gehen, eins nach dem anderen zu extrahieren jeder Knoten. Deshalb brauche ich eine Methode, um den AST Knoten für Knoten zu durchlaufen. – hbn1991