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