Eclipse CDT:获得C 项目的AST
Eclipse CDT: Get AST of a C++ project
itranslationunit和iAstranslationUnit接口分别表示单个C/C 源文件的转换单元和AST。
是否有任何方法可以获取整个C 项目的AST,或者我需要从主文件的AST开始并浏览包括指令并为每个源单元产生单独的AST?
谢谢。
CDT的AST并非旨在扩展到整个项目。一旦开始进入10000 LOC范围,它可能会开始表现不佳。
出于跨文件分析目的,CDT具有索引,该可以解析项目中的每个文件(一次),并构建有关该代码的信息数据库整个(称为 index )。通过接口IIndex
访问索引,可以通过在任何AST上调用IASTTranslationUnit.getIndex()
来获得其实例。
大多数代码分析和操纵用例都属于以下工作流程之一:
-
只需使用索引即可。
IIndex
为您提供了很多工作,例如:-
findBindings()
的各种超载以查找与名称或名称前缀匹配的绑定 -
findReferences(binding)
为您提供所有引用绑定 -
findDeclarations(binding)
向您提供所有绑定的声明
还有许多其他。这是编辑导航的特征,例如打开声明和调用层次结构工作。 -
-
使用索引来识别您需要AST的一小部分源文件,然后解析这些文件。这就是重构的工作方式。例如,重命名重构使用索引来找到重命名的绑定的使用,然后为包含这些用途的文件创建ASTS,以执行重构。
-
如果以上两个都不够好,并且您确实需要项目中每个文件的AST级信息,请为项目中的每个文件创建一个AST,一次,然后提取您需要的信息从每个。这就是索引器本身的工作方式。(请注意,如果您选择此选项,则无需浏览即可列出您需要解析的所有文件。相反,您可以列举项目中的所有文件。请参见
PDOMRebuildTask.createDelegate()
。)p>
如果您说更多有关用例是什么,我也许可以提供更具体的建议。
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 无法在 CLion 中构建 C++ 项目
- 运行同一解决方案的另一个项目的项目
- CMake-按正确顺序将项目与C运行时对象文件链接
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 欧拉项目#8答案是大以获得有效答案
- 从链接列表c++中删除一个项目
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 既然存在危险,为什么项目要使用-I include开关
- cmake在我的项目中所需的所有静态库都不成功
- QT通过C++添加映射QML项目
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- 在linux上调试巨大的C++项目
- 如何克服提升精神AST混乱
- 在其他文件中创建类时在 c++ 项目中不起作用
- 使外部项目可用于find_package CMake
- 在子目录中使用target_sources()命令时用于单元测试(qtest)的项目结构
- 使用外部SDK工具链文件在VisualStudio上生成项目编译错误
- 如何维护资源管理器项目视图中当前可见的项目列表
- 错误-我无法在VS2019中打开新的Qt项目