c ++解析器的当前最新技术?

时间:2011-04-29 22:08:37

标签: c++ parsing compiler-construction

我理解这是一项非常难的事情,#ifdef,#define和模板是什么,但c ++解析器的最新技术是什么(无论是开源还是专有?)。

我的意思是,对于一个大学项目,我正在考虑创建一个分析c ++代码库的工具,但似乎很难找到一个好的解析器。

我应该放弃并解决java解析器吗?同样,java解析器的最新技术是什么?那怎么样?#

此外,除了它之外,还会将g ++的解析器部分用于代码分析,或者是否需要付出太多努力?

4 个答案:

答案 0 :(得分:6)

你很幸运! Clang刚刚开始能够在过去几个月内解析大多数c ++程序:http://clang.llvm.org/它是为数不多的能够解析大部分C ++的开源解析器之一。 (大多数只是GCC和CLANG,我听说Oink(?)有时可以很好用)它可以被IDE等用作库,甚至可以构建支持代码重写的架构。

有一些专有的解析器可以完成工作,但是如果没有源访问权限,它们都不可用。

关于拆分gcc,根据你要做的事情,这对于代码分析来说不太实用,你可以使用新的插件架构从中获取一些可用的信息,但是在解析的早期阶段,它做一个叫做术语折叠的东西,解析器本身会优化诸如“x = x”之类的东西(一个简单的例子)编译器的其他方面都希望这种情况发生,所以删除它并不容易。因此,使gcc几乎无用于任何类似于源重写的东西。

答案 1 :(得分:3)

对于C ++,您可以将GCC与-fdump-translation-unit&朋友可以选择从中获取AST。

请参阅:http://www.manpagez.com/man/1/g++/

如果你可以用g ++编译一些东西,你可以从中获取树。

答案 2 :(得分:2)

行业标准C ++解析器,在EDG's C++ front end中广泛用于编译器。我对此没有经验;但我知道它处理各种各样的C ++方言。我知道你可以免费用于研究目的。

开源标准是GCC compiler。我听说很难理解和修改。

其他答案中提到了CLANG。我没有经验。我的理解是,它在支持分析方面相当复杂。

我们的专有DMS Software Reengineering Toolkitfull C++ parser with full name and type resolution,预处理器扩展(或保留,其他工具不会这样做)。 C ++前端处理C ++的几种方言:ANSI,GCC,MS Visual Studio。正如你可能猜到的那样,我对这个经历有很多的经验。

DMS / CppFrontEnd已被用于执行程序分析以及C ++代码的大规模源程序到源代码转换,由DMS的模式解析器启用,它将解析C ++代码的任何片段。我相信其他C ++前端不提供源到源的转换。有了这些,你可能会在程序上破解AST,但这非常不方便,因为你必须知道精确的AST结构,对于C ++来说这非常复杂。

DMS还具有完整的C,Java和COBOL前端,包括名称和类型分辨率以及控制和数据流分析。它有许多其他语言的解析器(但不包括名称和类型分析),包括C#。 AFAIK,其他“C ++解析器”不能这样做,根据定义。可以对这些中的任何一个或这些中的任何混合应用源到源转换。

答案 3 :(得分:0)

铿锵是值得研究的。它很快,它们提供api来挂钩后端。

Xcode 4使用clang执行诸如解析,错误报告/检测,某些情况下的自动完成以及修复它等任务。