Flex ++ Bisonc ++解析器

sor*_*h-r 7 c++ parsing bison flex-lexer

我正在尝试使用flexbison在我的项目中为文件结构生成解析器代码.主要编程语言是C++,项目主要是并行运行的OO设计.

我听说flex并且bison生成的解析器是C代码,它们不是重新检测的.谷歌搜索,我发现flex++bisonc++.不幸的是,没有简单的入门教程.大多数例子都是基于bison/flex.有些人以某种方式将bison/flex解析器集成到他们的C++代码中.他们应该"狡猾"......

文档,flex++bisonc++没有帮助我和.教程和示例,它们都从stdin获取输入并在stdout上打印一些消息.

我在解析器中需要这些功能:

  1. 解析器应该是一个C++类,以正常方式定义(头文件和cpp文件)
  2. 解析器从任一个接收数据std::stringstd::stringstream或空终止char*.

我感到很困惑.我应该使用flex++/bisonc++flex/bison?如何做到这一点,满足上述条件?

Tem*_*Rex 3

有flex/bison、flex++/bison++和flexc++/bisonc++。我认为最好选择这三对中的一对,而不是混合/匹配 flex++ 和 bisonc++。以下是Flexc++Bisonc++的用户指南。

来自 Flexc++ 网站:

Flexc++ 与 flex 和 flex++ 相反,它生成明确供 C++ 程序使用的代码。众所周知的 flex(1) 程序生成 C 源代码,而 flex++(1) 仅围绕由 flex(1) 生成的 yylex 函数提供类似 C++ 的 shell,几乎不支持当今有关 C++ 软件开发的想法。与此相反,flexc++ 创建一个 C++ 类,提供一个预定义的成员函数 lex,将输入与正则表达式匹配,并可能在匹配正则表达式后执行 C++ 代码。flexc++ 生成的代码是纯 C++,允许用户应用该语言提供的所有功能。

来自 Bisonc++ 网站:

Bisonc++ 是一个通用解析器生成器,它将 LALR(1) 上下文无关语法的语法描述转换为 C++ 类以解析该语法。一旦您精通 bisonc++,您就可以使用它来开发各种语言解析器,从简单的桌面计算器中使用的语言解析器到复杂的编程语言。Bisonc++ 与 Alain Coetmeur 编写的程序 bison++ 高度相似:所有正确编写的 bison++ 语法都应该可以在很少或没有改变的情况下转换为 bisonc++ 语法。任何熟悉 bison++ 或其前身 bison 的人都应该能够轻松使用 bisonc++。您需要熟练使用 C++ 编程才能使用 bisonc++ 或理解本手册。

因此,flexc++/bisonc++ 不仅仅是旧的 flex/bison 实用程序的包装器。它们生成用于可重入扫描/解析的完整 C++ 类。

  • @sorush-r 坚持会给你带来回报,只要尝试一次理解一个步骤即可。我有幸成为弗兰克·布罗肯(Frank Brokken)任教的同一所大学的学生,当时正在撰写注释!甚至在旧的 C++98 标准准备好之前,编译器就损坏了等等。但不知何故,我通过了那门课。现在容易多了,祝你好运! (2认同)