我试图在我的项目中使用flex
和bison
来为文件结构生成解析器代码。主要编程语言是C++,项目采用面向对象的设计,主要是并行运行。
我听说flex
和bison
生成的解析器都是C代码,它们是不可重入的。我在谷歌上找到了flex++
和bisonc++
不幸的是,没有简单的入门教程。大多数示例都是基于bison/flex
的。有些人以某种方式在他们的C++代码中集成了bison/flex
解析器。他们被认为是“棘手的”..。
flex++
和bisonc++
的文档对我没有帮助。教程和示例,它们都从stdin获得输入,并在stdout上打印一些消息。
我需要在我的解析器中使用这些特性:
std::string
、std::stringstream
或以null结尾的null接收数据我感到很困惑。我应该使用flex++/bisonc++
还是flex/bison
?如何在满足上述条件的情况下做到这一点呢?
发布于 2012-07-27 01:40:35
Flex可以生成一个可重入的C扫描器。参见Flex手册中的19 Reentrant C scanners一节。
同样,Bison可以生成一个可重入的C解析器。有关详细信息,请参阅野牛手册中的3.8.11 A Pure (Reentrant) Parser部分。
你真的需要一个C++解析器和基于std::string/string string的解析器数据吗?
您是否考虑过将Boost.Spirit作为替代方案?
发布于 2018-08-22 03:35:43
LRSTAR product (LR(k)解析器和DFA lexer生成器)是基于C++的。在Widown上运行,有六个Visual Studio项目。该代码还可以使用"gcc“和其他编译器进行编译。有用于lexer和parser,symbol-table,AST的类。完整的源代码可用。它得到了好评。我应该知道。我是作者。
https://stackoverflow.com/questions/11674104
复制相似问题