什么是一些良好的工具,用于获取一个快速启动用于分析和分析C/C++编码吗?

特别是,我在寻找开放源工具,处理C/C++预处理器和语言。优选的,这些工具将使用lex/yacc(或柔性/野牛)的文法,而不太复杂的。他们应该处理的最新ANSI C/C++的定义。

这里是我发现了什么迄今为止,但还没有看着他们详细地(的想法?):

  • CScope -老学校的C分析仪。似乎没有做一个完整的分析,虽然。描述为一个荣耀的'查询'寻找C功能。
  • 海湾合作委员会 -每个人都喜欢开放源码编译器。非常复杂,但似乎做到这一切。有一个相关的项目对于建立海湾合作委员会的扩展 宝石, 但一直没有更新,因为海湾合作委员会4.1(2006年)。
  • PUMA -纯机械手。(从页:"意图这个项目是要 提供一个图书馆的类分析和操纵C/C++的来源。对于这个 目PUMA提供的课程进行扫描、分析和操纵C/C++ 来源。").这看起来很有希望,但一直没有更新自2001年以来。显然PUMA已被纳入 AspectC++, 但即使是这个项目一直没有更新自2006年以来。
  • 各种C/C++原语法。你可以得到 c-c++-grammars-1.2.tar.gz, 但这已经无人维护自1997年以来。一个小小的谷歌搜索拉其他基本lex/yacc法,可以作为一个起点。
  • 任何其他人吗?

我希望利用这个作为起点,用于翻译C/C++源进入一个新玩具的语言。

谢谢!-马特

(加2/9):只是澄清:我要提取的义信息从预处理器除了C/C++代码本身。我不想"#define foo42"消失在整数"42",但仍附名"foo"。这个,不幸的是,排除了几种解决方案运行的预处理器的第一和唯一的提供C/C++分析树)

有帮助吗?

解决方案

分析C++是极其困难,因为语法是无法判定的。报价 贝纳Kreinin:

非常复杂的语法

"出色"应按字面解释,因为 所有流行的语言下文免费的 (或"几乎"上下文免费的)法,而C++已 无法判定的 语法。如果你喜欢编和分析程序,你可能知道这意味着什么。如果你不为这种事情,有一个 简单的例子 显示出的问题与分析C++:是 AA BB(CC); 一个目的定义或功能的声明?事实证明,答案在很大程度上取决于代码 之前 该声明的"上下文"中。这显示出(上一个直观的水平),C++法是相当的上下文敏感。

其他提示

你可以看看 使用编程,用于分析。

支持C++完全现在 链接

这些代码 析发电机的有一个 语法 C/C++以及预处理器。我从来没有使用这所以我不能说如何完成它的分析C++要。这些代码本身已经一个有用的工具对我来说在几个场合,用于分析从简单的语言。

根据你的问题 GCCXML 可能是你的答案。基本上,它分析的来源使用的海湾合作委员会,然后让你轻易消化的XML的分析树。与GCCXML你做的一切。

pycparser 是一个完整的分析器C(C99)编写蟒蛇。它有一个充分配置的AST后端,所以它被用作一个基础对于任何一种语言处理可能需要的。

不支持C++的,虽然。当然,它的 很多 比C


更新(2012年):在这个时候的回答,没有任何疑问,会 -这是模块式,支持全C++(有许多C++-11的特点)与具有相对友好的代码的基础。它也有一个C API for定高级别的语言(即 为蟒蛇).

看一看如何 doxygen 作品完整的源代码是可用的,它是灵活的基础。

一个误导性候选人是 黄金 这是一个免费的基于Windows析的工具包,明确地为建立翻译人员。他们的名单 支持的语言 指的是语文中的哪一个可以实现的分析程序,不支持分析语法。

他们只有法C和C#不C++。

分析C++是一个非常复杂的挑战.

还有的提升/精神的框架,几年前他们做了 玩这个想法的实施C++分析器, 但这是 远远没有完成.

完全和正确解析ISO C++远非微不足道的,并有实际上的许多相关的努力。但它是一个固有的复杂工作不容易完成,而没有重写一个编译器完全的前端的谅解所有的C++ 在预处理器。一个预处理器实施称为"波"可以从精神的人。

这就是说,你可能想看一看 猪/哼 (艾尔莎-based),这是一个C++析的工具包,具体地说是用于源代码转换的目的,它正在使用的Mozilla项目要做到大规模的静态来源码分析以及自动重写代码,最有趣的部分是,它不仅支持最C++,但也预处理器本身!

另一方面存在的确是一个单一的专有解决方案提供:EDG前端,它可用于几乎所有的C++相关努力。

就个人而言,我会检查出的艾尔莎基于猪肉/哼套房,这是用在Mozilla,除此之外,自由软件基金会现已核准的工作 海湾合作委员会的插件 使用runtime library许可证,因此我认为事情会变化迅速,一旦人们可以很容易地利用海湾合作委员会-基础C++析程序为此目的使用的二进制的插件。

所以,一言以蔽之:如果你的雄鹿:电子讨论组,如果你需要的东西免费/开源 现在:别/哼是相当有希望的,如果你有一段时间,你可能希望使用海湾合作委员会为您的项目。

另一种选择只对C码是 cscout.

语法用C++是出了名的毛茸茸的。还有 一个很好的线在Lambda关于它, 但其要旨是,C++的语法可以要求任意多lookahead.

对于那种事情我想你可能会这样做,我会想想的黑客无论是Gnu c-c,或 夹板.Gnu CC特别是不会单独的语言产生的部分相当彻底,所以你可能最好的关建立一个新的g++后端。

实际上,美洲狮和AspectC++仍有两个积极维护和更新。我要找到使用AspectC++并想知道关于缺乏更新自己。我的电子邮件的作者所述,这两个AspectC++和PUMA仍在发展。你可以获得源代码,通过SVN https://svn.aspectc.org/repos/ 或者你可以得到定期二进制建立在 http://akut.aspectc.org.因为有很多优秀c++的项目,这些天,提交人没有时间跟上网页的维护。有意义的,如果你已经有了一个全时工作和生活。

艾尔莎 节拍的一切我知道其他手下用C++进行解析,即使它不是100%合规。我是一个迷。有一个模块,打印出来C++,使得可能是一个良好的起点你的玩具的项目。

怎么样东西更容易理解喜欢 微小的-C小C

看看我们的 C++前端 用一个功能齐全的C++分析器:建立Ast、符号表格,并命名 和类型决议。你甚至可以分析,并保留的预处理器 指令。C++前端是建立在我们的 DMS软件再造 工具包, ,允许使用这些信息进行任意 源代码变化使用源来源的变化。

DMS是理想的引擎用于实现这样一个翻译。

说了这番话之后,我看不到远点你想象的任务;我不 看看有多大价值在试图取代C++,你会找到建设 一个完整的翻译大量的工作,特别是如果您 目标是"玩具"的语言。有可能一点点 分析C++使用一个强大的分析器,如果其唯一的目的是为了产生 一个同版本的C++,更易于分析(等等,我们假定 一个强大的C++已经!).

编辑可能2012年:DMS C++前结束现在处理GCC3/GCC4/C++11、微软VisualC2005/2010.强劲.

编辑月2015:现在处理C++14在海湾合作委员会和MS方言。

编辑月2015年:现在分析和捕获这两种代码和预处理指令在一个统一的树。

一会儿回来我尝试写一个工具,会自动生成的单元测试c的文件。

为preprosessing我把文件通过。输出是丑陋的,但你可以很容易地跟踪那里的原始码从经预处理的文件。但是你需要的你可能需要财产以后别的。

我用 作为一个C分析器。它是开放的来源和使用lex和yacc.这使它容易得到建立和运行在很短的时间没有完全理解法&yacc.

我还写了一C的应用程序,因为法&yacc解决方案不能帮我跟踪功能的各种职能和分析的结构的整个功能在一个通过。它变得不可维护,在一个短时间,并被放弃了。

怎么样使用工具(如GNU's CFlow, 那可以分析代码和生产的图表的电话-图表,这是什么 opengroup(男人页)说cflow.GNU版本的cflow来源,并开放源码也...

希望这会有所帮助, 最好的问候, 汤姆。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top