2015-06-12 15 views
6

Tôi có thể duyệt qua các subtrees cụ thể của clang AST bằng cách sử dụng lớp recursivevisitor nhưng những gì tôi muốn làm là duyệt qua nút AST clang bằng nút.Làm thế nào để đi qua CL bằng tay AST?

Tôi thực sự biết ơn nếu có ai có thể giúp tôi với điều này.

Xin cảm ơn trước.

+0

whats sai với 'RecursiveASTVisitor'? –

+0

@ m.s. Không có gì sai với RecursiveASTVisitor nó chỉ là nó đi qua các subtrees cụ thể, ví dụ như tập hợp tất cả các MethodCalls trong AST, nhưng cái tôi muốn là duyệt qua tất cả các nút của AST bằng cách trích xuất một số thông tin về mỗi nút. Đó là lý do tại sao tôi cần một phương pháp để đi qua nút AST bằng nút. – hbn1991

Trả lời

12

RecursiveASTVisitor có thể thực hiện những gì bạn cần.

Triển khai member methodsTraverseDecl(Decl *x), TraverseStmt(Stmt *x)TraverseType(QualType x) cho lớp có nguồn gốc từ RecursiveASTVisitor` (ví dụ: MyClass) sẽ thực hiện thủ thuật. Kết hợp, ba phương thức đó sẽ đưa bạn đến từng nút trong AST của bạn.

Ví dụ:

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; 
    } 
}; 
+0

cảm ơn bạn rất nhiều Tôi nghĩ rằng điều này có thể làm các trick :) – hbn1991

+0

Các tài liệu của RecursiveASTVisitor danh sách nhiều Traverse ...() phương pháp. Những điều này cũng không nên được thực hiện? Hoặc sẽ là đảo ngược sao chép? –

+0

Bạn có thể sử dụng bất kỳ phương pháp nào, nhưng thường bạn có thể muốn đi qua các kiểu trừu tượng nhất (Expr, Stmt), ví dụ trong IfStmt nếu bạn muốn điều kiện qua các phần Then/Else (không quan tâm đến loại thực tế của chúng) . –

Các vấn đề liên quan