我正在使用libclang解析小型c ++文件。我已经看到了有关如何解析AST树的示例。
据我了解,AST由 ASTNodes 组成,其类型为 Decl 或 Stmt 。要遍历树,我可以使用访问 ASTNodes 或 CxCursors 的ASTConsumer。
这两种遍历方法有什么区别?
答案 0 :(得分:1)
这两者都是AST遍历方法的一部分,因为游标是AST节点上的指针。如果您寻找不同的AST遍历方法,则应研究AST匹配器。使用该方法,您可以定义要与源文件的AST匹配的AST模型。这可能是一种强大的方法。
以下是与Clang匹配的简介:https://clang.llvm.org/docs/LibASTMatchers.html
答案 1 :(得分:0)
阅读一些页面后,我发现了有关此主题的一些信息。根据clang Tooling文档,有两个工具(以及其他clang工具): -Libclang -Libtooling
CxCursors属于Libclang库。尽管AST的控件受到限制,但Libclang库提供了游标来遍历AST的游标。
Decl和Stmt类是Libtooling的一部分。通过定义RecursiveASTVisitor及其相应的访问函数,可以遍历这些节点。使用这种方法,可以完全控制AST。