生成独立C++;代码 有没有一个LALR解析器生成器,它产生独立的C++代码?我希望它能生成两个名为“Parser.cpp”和“Parser.hpp”的文件,并且生成的解析器是在一个类中实现的(我可以用任何名称空间包装),可以用于我的解析需求 我想用它来娱乐(即小型个人项目),我希望输出是独立的(没有任何标题),这样我就知道我可以在任何我有C++编译器的地方编译它。

生成独立C++;代码 有没有一个LALR解析器生成器,它产生独立的C++代码?我希望它能生成两个名为“Parser.cpp”和“Parser.hpp”的文件,并且生成的解析器是在一个类中实现的(我可以用任何名称空间包装),可以用于我的解析需求 我想用它来娱乐(即小型个人项目),我希望输出是独立的(没有任何标题),这样我就知道我可以在任何我有C++编译器的地方编译它。,c++,parsing,parser-generator,C++,Parsing,Parser Generator,到目前为止的搜索: 我已经看过flex/bison,但它们都需要特殊的头和库。我也看过了ANTLR,但我不清楚它能生成独立的C++代码。如果有人能确认它可以,那么我可能会更多地看它。< P> ANTLR代码,虽然我发现对C++的支持有点弱,但它更像C代码。尽管如此,使用ANTLRWorks仍然是一个很好的环境,它为您提供了语法树的图形表示。flex+bison的输出由两个.c文件和一个.h文件组成。这些是完全独立的,因为它们是编译到应用程序中以使用解析器所需的全部内容。不需要额外的库或头(除了标

到目前为止的搜索:


我已经看过flex/bison,但它们都需要特殊的头和库。我也看过了ANTLR,但我不清楚它能生成独立的C++代码。如果有人能确认它可以,那么我可能会更多地看它。

< P> ANTLR代码,虽然我发现对C++的支持有点弱,但它更像C代码。尽管如此,使用ANTLRWorks仍然是一个很好的环境,它为您提供了语法树的图形表示。

flex+bison的输出由两个.c文件和一个.h文件组成。这些是完全独立的,因为它们是编译到应用程序中以使用解析器所需的全部内容。不需要额外的库或头(除了标准的C库)

<除非我误解了你的要求,你可以用Flex + BiSun做你想做的事情。

< P>(Bart Kiers提到维基百科上的列表)对C语言和C++语言有支持。它不会生成完全自包含的C/C++源代码文件。它所做的只是生成“解析引擎”可以使用的Lexer/Parser表

为了完成您的任务(或类似任务),我做了以下工作:

  • 以Gold的格式准备您的LALR语法

  • 生成解析表(一个二进制文件)

  • 使用旧技巧将二进制文件转换为头文件,如

    无符号字符解析表[]={…}

  • 从“解析引擎”源代码修改加载程序(或者使用支持内存加载的C版本,我记得)

  • >P>将GPEngine的源(如果是C++版本)合并到H/CPP对中。

  • 将ParseTable追加到.cpp

  • 当然,这并不是那么简单,但是原则上所有的步骤都可以在一个“组合”脚本中完成,这个脚本可以与许多语法一起使用


    <> P>我猜想主要的缺点是,黄金是封闭源代码和Windows(这意味着要生成解析表必须使用Windows机器)。< /P> ANTLR 3。X可以生成C代码,它可以在C++中使用,但它不生成C++代码。在C++目标上有一些工作,但是这还处于早期阶段,对于一个分析器生成器列表,包括它们生成的分析器类(LALR、LL、GLR等)和目标语言,请参见:如果你用C++编写语法,那么就不需要生成C++代码。AXE和Spirit都允许您完全做到这一点,除非您遇到递归下降的问题。你也可以查维基百科:真的吗?当我使用它时,我想我需要在编译时链接(-lfl)。事实上,经过一点进一步的研究,我认为你是…或者实际上可能不是:。我刚刚尝试在没有安装flex/bison的linux机器上编译源代码,它抱怨说找不到FlexLexer.h。斯利。。在接受之前我应该更深入……我想知道这是否可能是指定C++分析器而不是C解析器的结果。在纯C语言中,没有额外的依赖关系只要阅读你的链接,是的,就是这样。我想您可以随时复制FlexLexer.h并将其添加到您的项目中。或者你可以为纯C解析器创建自己的C++包装器。Flex和BySon都可以创建C++类。只要看看我的一个废弃项目:唯一的缺点是bison使用一个联合,因此你需要在任何地方使用指针。可以用C++ 11更好地工作,但我没有尝试。ANTLR的酷之处在于它与StrugDe模板的集成,并且不包括C++。StutMeType将不太可能移植到C++,因为它的特性与java语言(例如C语言)很深地集成在一起。另一个很酷的东西是令人印象深刻的图形语法调试器——但我个人觉得它比帮助更分散注意力。@ PATRIKEjava C++是ANTL肯定在Java中闪耀,自从我使用它以来,已经有一段时间了,自从我使用它以来,它已经变得更好了(2011)。