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

时间:2014-04-09 08:51:35

标签: .net visual-studio visual-c++ c++-cli codedom

用于VC ++的Visual Studio IntelliSense包括“完整”EDG C++ parser(也被英特尔和其他人使用)。由于插件可以访问C#Code DOM(如果我错了,请纠正我),C ++ Code DOM是否也可以访问?这可以用于分析VS环境中的开放VC ++项目吗?

2 个答案:

答案 0 :(得分:22)

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

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

您始终可以使用开源Clang C ++解析器(实际上是编译器)并将AST读入C#对象模型。有关Cng绑定到Clang,请参阅CppSharpClangSharp

答案 1 :(得分:8)

我不确定“C ++ Code 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++ Front End。作为这个的架构师,我很确定它经过深思熟虑(包括对MS Visual C ++的支持);使用它来执行复杂的C ++分析和转换任务有特定的经验。与EDG不同,它旨在支持分析,转换和生成(例如,它捕获注释甚至文字的基数,以便可以正确地重新生成它们)。基础,DMS,内置了许多机器来支持自定义分析:AST和符号表构造,属性语法,数据流框架,AST级别的过程内控制和数据流分析,BDD管理,源模式匹配,源到 - 源转换。 Clang和EDG提供AST和符号表构造; Clang(但我不认为EDG)有流量分析(在LLVM级别),而不是AST级别的流量分析(AFAIK)。 Clang和EDG都没有提供源模式/转换功能,因此哪个更好取决于您的长期任务。与其他选项相比,我们的C ++前端不是开源的或免费的;一个人可以获得研究许可证。