GNU bison和yacc有什么区别?

时间:2015-09-23 20:13:36

标签: parsing bison porting yacc

我正在编写一个解析器,我希望它尽可能便携。

现在我正在使用 GNU bison 来生成我的解析器,但我不确定我的代码是否依赖于 yacc 不完全可移植的扩展。

所以我想知道 GNU bison 的功能,原来的 yacc 缺失。

我担心的原因是因为我注意到我的解析器无法使用 bison 端口在Windows上编译。如果它能使我的解析器更容易在不同平台之间移植,我会牺牲 GNU bison 功能并坚持使用原始的标准化 yacc

那么 GNU bison 和原始标准 yacc 之间有什么区别?如果我希望我的程序尽可能便携,那么在使用 GNU bison 时我应该避免哪些功能?

1 个答案:

答案 0 :(得分:4)

通常,分发bison生成的解析器的方式是分发生成的解析器。这意味着既不需要在目标机器上安装bison也不需要yacc,并允许您自由选择您熟悉的野牛版本并使用其功能。 (当然,野牛输入文件也将在发行版中;包括bison输出文件只是意味着不需要运行bison来编译代码。)

如果要验证解析器描述是否与yacc兼容,则可以在生成解析器时尝试使用--yacc标志。这将使野牛试图模仿yacc,虽然它不会阻止你要求明显远离yacc范围的功能,如%glr-parser或Java / C ++输出。但坦率地说,我认为你会更好地采用第一段所述的策略。

如果您想获得不在yacc中的野牛功能列表,可以先在bison manual中搜索单词yacc。或者你可以阅读Posix yacc documentation