gpt4 book ai didi

c++ - 用于单行多变量声明的 clang ast visitor

转载 作者:行者123 更新时间:2023-11-30 03:35:22 25 4
gpt4 key购买 nike

我是 Clang libTooling 开发的新手。

考虑以下变量声明

int i, j, k = 10;
^ ^

根据我的项目要求,我想捕获整个声明表达式,包括“i”、“j”和“k”。

如何使用 clang libTooling 捕获包含所有变量的完整声明表达式?

我遇到的是,我没有获得完整表达式的访问者,而是获得了单个变量声明的访问者。

这是 clang libTooling 中的预期行为还是我遗漏了什么?

请建议我捕获单行多重声明的正确方法或任何解决方法?非常感谢任何形式的帮助。

谢谢,赫曼特

最佳答案

要解决所描述的问题,您可以编写一个访问 DeclStmt 节点(不仅是 VarDecl)的递归 AST 访问器。检查此站点以了解如何编写这样的访问者:http://clang.llvm.org/docs/RAVFrontendAction.html

您应该访问 DeclStmt 节点而不仅仅是 VarDecl 节点的原因可以通过查看声明语句的 AST 表示来解释:

    |-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 节点的迭代器。

关于c++ - 用于单行多变量声明的 clang ast visitor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41339220/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com