游标和节点的AST遍历有什么区别

时间:2019-06-28 10:06:08

标签: c++ clang abstract-syntax-tree libclang

我正在使用libclang解析小型c ++文件。我已经看到了有关如何解析AST树的示例。

据我了解,AST由 ASTNodes 组成,其类型为 Decl Stmt 。要遍历树,我可以使用访问 ASTNodes CxCursors 的ASTConsumer。

这两种遍历方法有什么区别?

2 个答案:

答案 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。