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


100

用于VC ++的Visual Studio IntelliSense包含“完整的” EDG C ++解析器(也由Intel和其他公司使用)。由于插件可以访问C#代码DOM(如果我错了,请纠正我),是否也可以访问C ++代码DOM?可以用来在VS环境中分析一个开放的VC ++项目吗?


25
只是从你的其他线程传来的; 这是一个很好的问题。
Qix-蒙尼卡(Monica)

81
同样,“不清楚您要问什么?” - 真的吗?“我对这个问题的前提一无所知”并不表示“不清楚您要问什么”。
蒂姆·波斯特

9
@Dave-我添加了一个答案,以证明非MS员工也可以解决此问题。有些人所做的事情接近我想要的。
TheFlash 2014年

55
@DaveHillier如果是主题,在这里非常欢迎。除此之外,没有任何讨论。如果我们开始讨论“这里的任何人都可以回答这个问题吗?” 然后我们会迅速解决这种棘手的烦恼,而任何困难都可能无法解决。除非我们实际打开要回答的问题,否则坦率地说,我们对可以回答这个问题没有具体的想法。首先就是要问的重点。
蒂姆·波斯特

49
@bmargulies 这个问题单纯存在会对他造成什么伤害?它很有趣,很有趣,并且有人可能会回答它。哎呀,有人 MS可能会看到这一点,并回答它,然后它是一个伟大的除了到现场。在尝试看到正面的任何东西之前,请停止寻找任何可能对问题负面的东西。
蒂姆·波斯特

Answers:


22

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

CppLister扩展能够读取由VS创建的智能感知数据库列出一个类中的各个成员。

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


8

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

您真正指出的问题是您想分析C ++源代码。我同意,拥有EDG前端信息将大大有助于实现这一目标;您确实 真的不想尝试编写自己的C ++解析器(并且解析后还需要很多东西,请在Google我的文章“解析后的生活”中进行搜索)。

因此,您有以下选择:

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

2
基本上,“ DOM”是HTML,代表AST。它确实假定存在规范语法,而C ++编译器通常使用略有不同的语法。(例如,创建更好的错误消息。)。
MSalters 2014年

3
C#中的DOM表示用于代码生成的“分辨率较差的AST”。您无法通过C#dom提供的分辨率来现实地分析C ++程序。
Ira Baxter

参见inevitablesoftware.com/Products.aspx,了解良好的C#代码提供的功能
TheFlash,2014年

@Geotarget:C#Dom与该问题有什么关系?
Ira Baxter

@IraBaxter-当我说“代码DOM”时我在寻找什么-很多人评论说他们不了解代码DOM是什么,并且/或者将其与JS HTML DOM混淆了。我当然不是C ++专家(正如我之前所说),所以我不知道C ++代码DOM可能需要什么,尽管我知道Inevitablesoftware提供了一个非常简单易用的代码DOM,并且我我正在寻找具有类似API的C ++代码DOM。
TheFlash
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.