需要C ++解析器

时间:2011-01-04 12:46:54

标签: c++ parsing free

我需要一个好的,稳定的,也许是易于使用的带C / C ++接口的C ++解析器库(首选C)。
我听说cint是很好的c ++解释器。我可以为此目的使用它(或它的某些部分)吗? 有什么建议吗?

8 个答案:

答案 0 :(得分:10)

请参阅:http://clang.llvm.org/ 它有C ++和C接口(libclang)。

答案 1 :(得分:9)

C ++解析很有名。 AFAIK只有三种解析器可以被今天的标准所接受:EDG(广泛用作流行的C ++编译器的前端),GCC和微软。显然,微软已经开始在VS2010中使用EDG的解析器,用于Intellisense。

当你看到免费选项时,你几乎被GCC困住了。但它可以生成XML,因此很容易实现。 (通过C ++解析标准很容易),

答案 2 :(得分:2)

Clang是最新和最成熟的选择,有一个不错的C ++ API(但没有普通的C)。 Elsa有点过时且没有维护,但仍然是一个可用的选择。两者都可以用作库以及独立的XML前端。

答案 3 :(得分:2)

如果要解析C或C ++代码,有一些选项: http://bellard.org/tcc/ http://students.ceid.upatras.gr/~sxanth/ncc/

如果要使用C / C ++创建解析器,可以尝试: http://boost-spirit.com/home/ http://dinosaur.compilertools.net/ Lex和Yacc http://www.codeguru.com/csharp/.net/net_general/patterns/article.php/c12805 Flex和Bison

答案 4 :(得分:2)

我们的C++ Front End能够解析各种C ++方言(ANSI,GCC,MSVS),自动构建AST,其节点标记有精确的源位置,并使用任何附近的注释文本进行修饰,并构建完整的符号表。 (编辑2013年1月:C ++前端已经能够在很长一段时间内处理C ++ 11了。)

C ++前端构建于我们的DMS Software Reengineering Toolkit通用编译器技术之上,用于程序分析和转换,旨在支持自定义工具构建。 C ++前端包括一个预处理器,其中预处理器指令可以根据任务的需要进行扩展,也可以不集中或单独扩展。它还包括完整的符号构造以及所有讨厌的Koenig查找内容。

DMS接受明确的语言定义(这就是它如何理解C ++;还有C,C#,Java,COBOL和其他各种语言的前端)。 DMS提供通用解析,符号表构建,流程分析机制,用于树导航/检查/修改的过程API,源到源转换以及AST到源文本再生,包括原始注释,数字基数等。所有这些功能可供C ++前端使用。

DMS还旨在处理严肃任务所需的规模。通常,您不仅需要一个编译单元(这是GCC最多会给您的),而是访问整个集合。 DMS已被用于分析/转换数千个C ++编译单元,以及数以万计的C编译单元(在2500万行应用程序中)。

“易于使用的库”在程序操作工具方面是一种矛盾。 langauges本身很复杂(C ++是最困难的,而且随着C ++ 0X变得越来越糟),这会引起你可以提出的问题的性质和答案的复杂性(例如“是否有任何模板实例,可以在任何命名空间N?“)中修改C类中方法Y中的局部变量X.问题本身很难。

你想要的是一个具有必要复杂性的库,让你完成任务。 DMS在过去15年中一直在不断发展,以提供必要的复杂性。如果你想进行认真的程序处理,我声称你需要这些信息。

作为证据,DMS已经被用于为波音公司进行基于C ++的任务航空电子软件的大规模自动化再造。我不相信有任何其他工具可以做到这一点。 (Clang看起来很努力,但仅限于C ++。YMMV)。

答案 5 :(得分:1)

我不知道cint,但我听说人们使用gcc-xml来做这件事。

我一直在寻找一个好的独立图书馆,但还没找到。

答案 6 :(得分:1)

如果您感到勇敢,“is there a yacc-able C++ grammar?”答案中的链接可能会有所帮助。已经建议使用Gcc-xml和clang,Swig also has an XML output这取决于你想要实现的目标可能是相关的。

答案 7 :(得分:1)

我没有尝试过,但我认为最好的选择是从C ++的gcc等流行的开源编译器中获取解析模块;

也许你会在这里找到一些有趣的东西http://www.nobugs.org/developer/parsingcpp/