RecursiveASTVisitor ihtiyacınız olanı yapabilir. hile olacaktır RecursiveASTVisitor` türetilmiş sınıf (örneğin MyClass) için member methodsTraverseDecl(Decl *x)
, TraverseStmt(Stmt *x)
ve TraverseType(QualType x)
uygulanması
. Kombine, bu üç yöntem sizi AST'nizdeki her bir düğüme götürecektir.
Örnek: `RecursiveASTVisitor` ile
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;
}
};
sorun ne? –
@ m.s. RecursiveASTVisitor ile yanlış bir şey yoktur, sadece AST'deki tüm MethodCall'ların kümesi gibi, sadece belirli alt katmanları geçiştirir, ama istediğim, AST'nin tüm düğümleri üzerinden birtakım bilgilerden bazılarını çıkararak geçiş yapmaktır. her düğüm. Bu nedenle, AST düğümünü düğüm tarafından çaprazlamak için bir yönteme ihtiyacım var. – hbn1991