单行多变量声明的clang ast访问者

clang ast visitor for single line multiple variable declaration

本文关键字:ast 访问者 clang 变量 声明 单行多      更新时间:2023-10-16

我是新来的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节点。