是可以从VS插件访问的VC++代码DOM



Visual Studio IntelliSense for VC++包含"完整"的EDG C++解析器(英特尔和其他公司也使用)。既然C#代码DOM可以访问插件(如果我错了,请纠正我),那么C++代码DOM也可以访问吗?这可以用来分析VS环境中的开放式VC++项目吗?

Visual C++重构扩展能够在项目范围内重命名成员。它是由MS构建的,但显然他们使用了内部的CodeDOM来实现这一点。所以这是可能的,我只是不知道怎么做。

CppLister扩展能够读取VS创建的intellisense数据库,以列出类中的各种成员。

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

我不确定"C++代码DOM"是什么,如果它存在的话。重要的是,MSVS使用EDG前端来解析和确定符号的含义,以支持MSVS IDE操作。EDG IIRC建立自己的内部数据结构来表示程序;我没有理由相信这些数据结构是"C++代码DOM",或者它们对您可见,或者您可以在MSDN上找到它们。

你真正的问题是你想分析C++源代码。我同意,拥有EDG前端信息将有助于实现这一目标;你真的不想尝试编写自己的C++解析器(你需要很多解析后的东西,谷歌我的文章"解析后的生活")。

所以你有以下几种选择:

  • 在MSVS中找到一扇通往EDG机器的门。由于你运气不好,而且MS似乎没有任何文件表明这是可用的,所以你可能不会有很多运气。如果我站在MS的立场上,我不会公开;这将是另一个令人头疼的支持问题,而且在一个甚至不是他们的软件上
  • 直接从EDG使用商用EDG前端。我的理解是,他们免费提供个人使用许可证。(我的理解可能是错误的)。通过这种方式,您可以跳过MS对访问的任何限制。。。代价是必须自己配置EDG前端。缺点是:EDG希望成为编译器的前端,而不是分析器的前端。这种区别可能看起来很微妙,但可能会刺痛你。例如,我怀疑EDG会丢弃评论;编译器前端不需要它们。如果您想检查分析器中的注释,这可能是一个真正的问题
  • 使用Clang。这是一个开源C++解析器,设计用于各种程序分析目的以及前端C++编译器。我没有这方面的经验,但它似乎考虑得很好,似乎提供了很多设施。我不知道它是否对C++的MS方言有特定的支持
  • 使用另一个商业前端,我们的(DMS)C++前端。作为这方面的架构师,我确信这是经过深思熟虑的(包括对MSVisualC++的支持);使用它来执行复杂的C++分析和转换任务具有特定的经验。与EDG不同,它旨在支持分析、转换和生成(例如,它捕获注释,甚至文字的基数,以便正确地重新生成)。基础DMS内置了许多机制来支持自定义分析:AST和符号表构建、属性语法、数据流框架、AST级别的过程内控制和数据流分析、BDD管理、源模式匹配、源到源转换。Clang和EDG提供AST和符号表结构;Clang(但我不认为EDG)有流量分析(LLVM级别),但没有AST级别的流量分析(AFAIK)。Clang和EDG都不提供源模式/转换功能,因此哪个更好取决于您的长期任务。与其他选项相比,我们的C++前端不是开源的或免费的;一个人可以获得研究许可证

最新更新