繁体   English   中英

需要C ++解析器

[英]Need C++ parser

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

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

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

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

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

如果要解析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

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

C ++前端构建于我们的DMS软件重组工具包之上,这是一种用于程序分析和转换的通用编译器技术,旨在支持自定义工具构建。 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)。

我不知道cint,但我听说人们使用gcc-xml

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

如果你感到勇敢,那么答案中的链接“ 是否有可用的C ++语法? ”可能会有所帮助。 已经建议使用Gcc-xml和clang,并且Swig也有一个XML输出 ,这取决于你想要达到的目标可能是相关的。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM