我需要遍历匹配的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文档中的所有匹配节点