繁体   English   中英

Eclipse CDT:获得C ++项目的AST

[英]Eclipse CDT: Get AST of a C++ project

ITranslationUnit和IASTTranslationUnit接口分别表示单个C / C ++源文件的转换单位和AST。

有什么方法可以获取整个C ++项目的AST,还是我需要从主文件的AST开始并浏览包含指令并为每个源单元生成单独的AST?

谢谢。

CDT的AST并非旨在扩展到整个项目。 一旦您开始进入10000+ LOC范围,它就可能开始表现很差。

为了进行跨文件分析,CDT具有一个索引器 ,该索引器解析项目中的每个文件(一次解析一个文件),并构建一个有关整个项目中的代码信息的数据库(称为index )。 索引是通过接口IIndex访问的,该接口的实例可以通过在任何AST上调用IASTTranslationUnit.getIndex()来获取。

大多数代码分析和处理用例属于以下工作流程之一:

  • 只需使用索引。 IIndex给您很多帮助,例如:

    • findBindings()各种重载以查找与名称或名称前缀匹配的绑定
    • findReferences(binding)为您提供对绑定的所有引用
    • findDeclarations(binding)为您提供绑定的所有声明


    还有很多其他 这就是打开声明和呼叫层次结构之类的编辑器导航功能的工作方式。

  • 使用索引可以识别需要AST的少量源文件,然后对其进行解析。 重构就是这样工作的。 例如,重命名重构使用索引来定位要重命名的绑定的用途,然后为包含那些用于执行重构的用途的文件创建AST。

  • 如果以上两种方法都不够好,并且您确实需要项目中每个文件的AST级信息,请一次为项目中的每个文件创建一个AST,然后从每个文件中提取所需的信息。 这就是索引器本身的工作方式。 (请注意,如果选择此选项,则无需导航包含以列出需要解析的所有文件。相反,您可以枚举项目中的所有文件。有关示例,请参见PDOMRebuildTask.createDelegate() 。)

如果您对用例有更多的了解,我也许可以提供更具体的建议。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM