我需要遍歷匹配的AST節點的所有祖先或後代,以便稍後使用該信息使輸入源代碼的某些部分變得輕鬆。 我試圖尋找方法來做到這一點。我查看了ASTContext
類的getParents
成員函數。我可以使用它來升級AST層次結構來訪問我當前匹配節點的所有祖先節點。但問題是,當我得到父節點時,我不再有該節點的上下文來嘗試獲取它的父節點。我可以嘗試爲新節點重建ASTContext
,但如果可能的話,這似乎是另一項重大任務。 我正在尋找的最低NodeKind(C層中最低)是callExpr
,我要找的最高的是functionDecl
。 如何在匹配返回控制run
MatchCallback
後獲得匹配AST節點的所有祖先或後代?獲取匹配節點的所有祖先或後代
0
A
回答
0
可能會繼續以遞歸方式訪問父聲明,直到達到TranslationUnitDecl,但是,我會建議實際迭代TranslateUnitDecl中的聲明並改爲使用FunctionDecl。
您可以創建一個遞歸函數,它可以找到翻譯單元中的所有TagDecl,在您指定的FunctionDecl中搜索該類中的所有方法,並且還遞歸使用該TagDecl中的TagDecls,直到您沒有剩下任何東西消耗。
這樣可以讓您更輕鬆地保存所需的特定AST節點的完整記錄,並且可能不會令人困惑地編寫。
但是,如果你選擇工作方式落後,你可以嘗試這樣的事情(未經測試)
FunctionDecl *FD;
DeclContext *PC = FD->getParent();
while (!isa<TranslationUnitDecl>(Decl::castFromDeclContext(PC))) {
//consume
PC = PC->getParent();
}
的後代(兒童),你只需要轉型爲兒童和迭代類型。
相關問題
- 1. 獲取祖先節點+的XQuery-SQL
- 2. 「所選節點沒有表單祖先」
- 3. 從祖先獲取後代節點的位置,不一定是兄弟
- 4. 獲取只有一個祖先節點的值
- 5. 獲取沒有特定祖先的節點xml xpath
- 6. Xpath獲取具有與其他節點匹配的屬性的所有節點
- 7. Jquery:獲取祖先(或後代)和自我
- 8. 獲取網頁上的所有節點,除了那些有特定節點作爲祖先
- 9. domXpath得到祖先節點
- 10. Css匹配與祖先相同級別的所有孩子
- 11. 使用lxml查找所有xml節點python的祖先
- 12. 的XPath:獲取某些節點和祖先
- 13. 獲取最遙遠的祖先節點-Xpath,XSLT
- 14. 解析樹知道所有父節點和葉節點的祖先
- 15. 如何獲得使用SQL Server 2008 hierarchyid的節點的所有祖先?
- 16. Neo4J匹配具有特定值的所有節點的節點
- 17. 使用Doctrine 1.2和Symfony 1.4獲取節點祖先
- 18. 使用PHP和xpath獲取祖先節點
- 19. 如何從特定節點獲取樹祖先列表?
- 20. xpath:是否可以選擇具有某個後代的祖先節點?
- 21. 後代/祖先查詢
- 22. 如何讓SQL中的所有祖先和後代行遞歸
- 23. 在SQL中查找所有最古老祖先的後代
- 24. Java:如何選擇Jtree上給定祖先的所有後代?
- 25. 節點集()是否有一個祖先節點?
- 26. jQuery中最近的祖先節點
- 27. 兩節點之間的祖先
- 28. 獲取所有節點
- 29. 如何獲取可能擁有祖先及其祖先的所有元素都沒有指定的類?
- 30. 如何獲取XQuery以提取XML文檔中的所有匹配節點