我试图用flex
和bison
在我的项目生成一个文件结构的解析代码。 主要编程语言是C ++和项目上的面向对象的设计主要是在并行运行。
我听说, flex
和bison
生成解析器是C代码和他们不reenterant。 谷歌搜索,我发现flex++
和bisonc++
。 不幸的是没有简单的教程开始。 大多数示例都是基于bison/flex
。 有些人莫名其妙地集成bison/flex
他们的C ++代码分析器。 他们应该是“刁钻” ...
文件的flex++
和bisonc++
不帮我。 教程和例子,他们都得到从标准输入和标准输出上打印一些信息。
我需要在我的解析器这些功能:
- 解析器应该是一个C ++类,在正常方式(报头和CPP文件)中所定义
- 解析器从任一个接收数据
std::string
或std::stringstream
或空终止char*
。
我感到很困惑。 我应该使用flex++/bisonc++
或flex/bison
? 而如何做到这一点,满足上述条件?
有柔性/野牛,柔性++ /野牛++和flexc ++ / bisonc ++。 我认为这是最好挑选这三对中的一个,而不是混合/匹配柔性++和bisonc ++。 下面是用户指南Flexc ++和Bisonc ++ 。
从Flexc ++网站:
Flexc ++,相反弯曲并弯曲++,生成一个明确打算通过C ++程序中使用的代码。 公知的挠性(1)程序产生的C源代码和挠曲++(1)仅提供了一个C ++ - 像围绕由挠性(1)中产生的函数yylex功能壳和几乎不支持约C ++软件开发现今的想法。 与此相反,flexc ++创建一个C ++类提供一个预定义的成员函数匹配法对正则表达式的输入并可能执行C ++代码,一旦正则表达式相匹配。 通过flexc ++生成的代码是纯C ++,允许其用户应用所有的由语言所提供的特性。
从Bisonc ++网站:
Bisonc ++是一个通用的解析器生成器,其转换语法描述用于LALR(1)上下文无关文法成C ++类来解析该语法。 一旦你精通了bisonc ++,你可以用它来开发各种语言解析器,从简单的办公桌计算器到复杂的编程语言中使用。 Bisonc ++是高度相当的程序野牛++,由阿兰·Coetmeur写的:所有正确的野牛++语法应该是敞篷很少或没有更改后bisonc ++语法。 任何熟悉野牛++或其前体,野牛,应该能够使用bisonc ++有一点麻烦。 你需要精通才能使用bisonc ++或要了解本手册使用C ++编程。
所以flexc ++ / bisonc ++不仅仅是在老的Flex /野牛公用事业包装来。 它们产生要用于重入扫描/解析完整的C ++类。
Flex的能产生折返Ç扫描仪。 见第19折返Ç扫描器在Flex手册。
类似地,野牛可以产生一个可重入Ç解析器。 见第3.8.11纯(可重入)分析器在野牛手册。
你绝对需要有一个C ++解析器和的std :: string / stringstream的基于解析器数据?
你看Boost.Spirit作为替代?
所述LRSTAR产物 (LR(k)的解析器和DFA词法分析器生成器)是基于C ++。 在Widowns运行,并有六个Visual Studio项目。 该代码还编译与“海湾合作委员会”和其他编译器。 有类词法和语法分析器,符号表,AST。 完整的源代码是可用的。 它得到很好的评价。 我应该知道。 我是作家。