VS插件是否可以访问VC ++代码DOM?

Visual Studio IntelliSense for VC ++包含“完整的” EDG C ++parsing器 (也被英特尔等使用)。 由于C#代码DOM是可以插入的(纠正我,如果我错了),C ++代码DOM也可访问? 这可以用来分析VS环境中的一个开放的VC ++项目吗?

Visual C ++重构扩展可以重命名项目范围内的成员。 它由MS构build,但显然他们使用内部的代码DOM来实现这一点。 所以有可能,我只是不知道如何。

CppLister扩展能够读取由VS创build的智能感知数据库,以列出类中的各种成员。

您始终可以使用开源的Clang C ++parsing器(实际上是编译器),并将AST读取到C#对象模型中。 请参阅CppSharp和ClangSharp将C#绑定到Clang。

我不确定什么是“C ++代码DOM”,如果它甚至存在。 重要的是,MSVS正在使用EDG前端parsing和确定符号的含义,以支持MSVS IDE操作。 EDG IIRCbuild立自己的内部数据结构代表该计划; 我没有理由相信这些数据结构是“C ++代码DOM”,或者它们对您是可见的,或者您可以在MSDN上find它们。

你真正的问题是你想分析C ++源代码。 我同意,拥有EDG前端信息将是一个重要的援助, 你真的不想试图编写你自己的C ++parsing器(而且你需要parsing之后的大量东西,谷歌我的文章“parsing后的生活”)。

所以你有以下select:

  • 在MSVS中寻找进入EDG机器的大门。 既然你没有太多的运气,而且似乎没有任何文件logging从MS说这是可用的,你可能不会有很多这样的运气。 如果我是MS的鞋子,我不会公开的; 这只会成为另一个支持头痛的问题,甚至还不是他们自己的软件。
  • EDG直接使用商用EDG前端。 我的理解是他们提供免费的个人使用许可证。 (我的理解可能是错的)。 这样,您就可以跳过MS可能访问的任何限制…以不得不自己configurationEDG前端的价格。 不利的一面:EDG希望成为编译器的前端,而不是分析器的前端。 这种区别可能看起来很微妙,但它可能会咬你。 例如,我怀疑EDG丢掉了评论; 编译器前端不需要它们。 如果你想检查你的分析仪的评论,这可能是一个真正的问题。
  • 使用Clang 。 这是一个开放源代码的C ++parsing器,devise用于各种程序分析目的,也用于前端C ++编译器。 我没有这方面的经验,但似乎相当深思熟虑,似乎提供了大量的设施。 我不知道它是否对C ++的MS方言有特定的支持。
  • 使用另一个商业前端,我们的(DMS)C ++前端 。 作为这个架构师,我很确定这是很好的思路(包括支持MS Visual C ++); 使用它来执行复杂的C ++分析和转换任务有特定的经验。 与EDG不同的是,它旨在支持分析,转换和生成(例如,捕获评论,甚至文字的基数,以便正确地重新生成)。 DMS的基础内置了大量支持自定义分析的机制:AST和符号表构造,属性语法,数据stream框架,AST级内的过程控制和数据stream分析,BDDpipe理,源模式匹配,源到源转换。 Clang和EDG提供AST和符号表结构; 铿锵(但我不认为EDG)它有stream量分析(在LLVM级别),但不是stream量分析在AST级别(AFAIK)。 Clang和EDG都没有提供源码模式/转换能力,哪一个更好取决于你的长期任务。 与其他选项相比,我们的C ++前端不是开源或免费的; 可以拿到研究许可证。