单行多变量声明的clang ast访问者
clang ast visitor for single line multiple variable declaration
我是新来的clang libtool开发。
考虑以下变量声明
int i, j, k = 10;
^ ^
对于我的项目要求,我想捕获整个声明表达式,包括" i"," j"answers" k"。
如何捕获完整的声明表达式,包括所有带有clang libtooling的变量?
我正在遇到的是,我没有让访客完全表达表达,而是让访客获得单个变量声明。
这是clang libtooling的预期行为还是我错过了什么?
请建议我正确的方法来捕获单行多个声明或任何解决方法?任何类型的帮助都将不胜感激。
谢谢hemant
解决所描述的问题,例如,您可以写一个递归的AST访问者,该访问者访问DeclStmt
节点(不仅是VarDecl
)。检查此站点以查看如何编写这样的访问者:http://clang.llvm.org/docs/ravfrontendaction.html
您应该访问DeclStmt
节点的原因,不仅可以通过查看您的声明语句的AST表示来解释VarDecl
节点:
|-DeclStmt 0x35dbfc8 <line:3:1, col:17>
| |-VarDecl 0x35dbe48 <col:1, col:5> col:5 i 'int'
| |-VarDecl 0x35dbeb8 <col:1, col:8> col:8 j 'int'
| `-VarDecl 0x35dbf28 <col:1, col:15> col:11 k 'int' cinit
| `-IntegerLiteral 0x35dbf88 <col:15> 'int' 10
您可以看到DeclStmt
"捕获"所有VarDecl
节点(以及初始化(如果给出)。访问者访问DeclStmt
后,您可以使用isSingleDecl()
成员函数检查您的声明是否是指单一声明。如果不是(如您的情况,您可以用decl_begin()
,decl_end()
等)检索到不同的VarDecl
节点。
相关文章:
- 访问者访问变体并返回不同类型时出错
- 如何克服提升精神AST混乱
- clang 插件:在编译过程中修改 AST
- Boost.Spirit将表达转换为AST
- 类继承,ENUM 与 AST 类实现的问题
- Windows Clang Ast Dump
- 使用自定义访问者时具有自定义类型的提升变体失败(源自 boost::static_visitor)
- 如何将 AST 用于自定义前端操作和 clang 静态分析
- 与不同变量类型相比,用于变量的 Clang AST 匹配器
- 如何检测 Clang AST C++中的静态函数
- 如何在 boost::spirit::qi 中将某些语义操作排除在 AST 之外
- 对于参加可复制和可移动类的访问者来说,应该有多少过载?
- python.clang AST 解析:获取字段声明的 c++ 模板参数
- 对函数的 AST 声明的抽象格式感到困惑
- 如何使用 clang 仅获取主函数的 AST
- 单行多变量声明的clang ast访问者
- clang ast访问者,避免遍历文件
- 获取具有AST访问者clang的功能声明类型
- AST的访问者模式
- AST 访问者函数调用表达式无法正确识别函数调用