wef*_*fa3 2 parsing porting yacc bison
我正在编写一个解析器,我希望它尽可能便携。
现在我正在使用GNU bison来生成我的解析器,但我不确定我的代码是否依赖于不完全可移植的yacc扩展。
所以我想知道GNU bison具有的原始yacc缺失的功能。
我担心的原因是我注意到我的解析器无法使用bison端口在 Windows 上编译。如果它能让我的解析器更容易在不同平台之间移植,我会牺牲GNU bison功能并坚持使用原始的标准化yacc。
那么GNU bison和原始标准yacc之间有什么区别呢?如果我希望我的程序尽可能便携,在使用GNU bison时应该避免哪些功能?
通常分发野牛生成的解析器的方式是分发生成的解析器。这意味着目标机器上甚至不需要安装bison 和yacc,并且允许您自由选择您喜欢的bison 版本并使用其功能。(当然,bison 输入文件也将在发行版中;包括 bison 输出文件仅意味着不需要运行 bison 来编译代码。)
如果您想验证您的解析器描述是否与 yacc 兼容,您可以--yacc在生成解析器时尝试使用该标志。这将使 bison 尝试模仿 yacc,尽管它不会阻止您要求明显超出 yacc 范围的功能,例如%glr-parserJava/C++ 输出。但坦率地说,我认为你会更好地采用第一段中概述的策略。
如果您想获得 yacc 中没有的 bison 功能列表,您可以从yacc在bison 手册中搜索这个词开始。或者您可以阅读Posix yacc 文档。