sor*_*h-r 7 c++ parsing bison flex-lexer
我正在尝试使用flex
和bison
在我的项目中为文件结构生成解析器代码.主要编程语言是C++,项目主要是并行运行的OO设计.
我听说flex
并且bison
生成的解析器是C代码,它们不是重新检测的.谷歌搜索,我发现flex++
和bisonc++
.不幸的是,没有简单的入门教程.大多数例子都是基于bison/flex
.有些人以某种方式将bison/flex
解析器集成到他们的C++代码中.他们应该"狡猾"......
文档,flex++
并bisonc++
没有帮助我和.教程和示例,它们都从stdin获取输入并在stdout上打印一些消息.
我在解析器中需要这些功能:
std::string
或std::stringstream
或空终止char*
.我感到很困惑.我应该使用flex++/bisonc++
或flex/bison
?如何做到这一点,满足上述条件?
有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++ 类。
归档时间: |
|
查看次数: |
6307 次 |
最近记录: |