Eclipse CDT:获得C 项目的AST

Eclipse CDT: Get AST of a C++ project

本文关键字:项目 AST 获得 CDT Eclipse      更新时间:2023-10-16

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>

如果您说更多有关用例是什么,我也许可以提供更具体的建议。