Bison解析器相关技术及SQL语法规则详解
1. 扫描器与错误处理
在扫描器的工作机制中,若未从扫描器返回,前一步骤仅在 yylex 返回并再次被调用时才会被触发。对于最后一条通用规则,它会打印错误信息。在原始的C版本扫描器中,会调用 yyerror ,但由于当前扫描器并非C++解析器类的一部分,无法调用解析器的错误处理程序。为简化操作,直接调用 printf 来处理错误,而不是编写粘合程序让程序各部分调用相同的错误报告程序。
2. 是否使用C++编写解析器
Bison对C++的支持远不如对C的支持成熟,这并不奇怪,因为C++支持比C支持晚了约30年。例如, %union 不能包含类实例,这可能需要额外的工作。而且C++ Bison和C Flex之间的集成不够无缝,需要谨慎编程。特别是当它们需要共享重要的数据结构(扫描器用C访问,解析器用C++访问),或者扫描器使用C的标准输入输出读取输入,而程序其他部分使用C++库的输入输出时,更需注意。不过,一个好的对象设计可以将应用程序上下文(如示例中的 ctx )、解析器和可能的扫描器封装在一个类中,为程序的其他部分提供统一的接口。尽管如此,C++ Bison解析器仍然可以正常工作,并且解析器类的设计也是合理的。如果要将解析器集成到更大的C++项目中,或者想使用没有C等效库的C++库,C++解析器会是一个不错的选择。
3. Java及其他语言支持
截至2009年,Bison对用Java编写的解析器提供了实验性支持,未来可能会支持更多语言。Java支持是基于C
超级会员免费看
订阅专栏 解锁全文
528

被折叠的 条评论
为什么被折叠?



