parsing - GNU bison 和 yacc 有什么区别?

标签 parsing bison porting yacc

我正在编写一个解析器,我希望它尽可能具有可移植性。

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

所以我想知道 GNU bison 所具有的原始 yacc 缺失的功能。

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

那么GNU bison和原始标准yacc有什么不同呢?如果我希望我的程序尽可能具有可移植性,那么在使用 GNU bison 时应该避免哪些特性?

最佳答案

通常,分发 bison 生成的解析器的方式是分发生成的解析器。这意味着 bison 和 yacc 甚至都不需要安装在目标机器上,并且允许您自由选择您喜欢的 bison 版本并使用它的功能。 (当然,bison 输入文件也会包含在分发版中;包括 bison 输出文件只是意味着不需要运行 bison 来编译代码。)

如果您想验证您的解析器描述是否与 yacc 兼容,您可以在生成解析器时尝试使用 --yacc 标志。这将使 bison 尝试模仿 yacc,尽管它不会阻止您请求明显超出 yacc 范围的功能,例如 %glr-parser 或 Java/C++ 输出。但坦率地说,我认为第一段中概述的策略会更好。

如果您想获得 yacc 中没有的 bison 功能列表,您可以从搜索 bison manual 中的单词 yacc 开始。 .或者您可以阅读 Posix yacc documentation .

关于parsing - GNU bison 和 yacc 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32748656/

相关文章:

c++ - HD Photo 源代码在 ARM 上编译?

ios - 如何从 ipa 解析 Info.plist 文件

javascript - 不确定如何在我的正则表达式中捕获斜杠符号 "/"

c - 为什么我在这个 bison 语法中收到这么多 'useless rule/token' 警告?

javascript - Jison解析器生成器,shift减少语法冲突,如何解决?

asp.net-mvc - EF Core 3.1 是否支持 DB First 方法?

iphone - itunes 应用商店链接检查器

parsing - 在 Dart 中,是否有 `parse` 表示 `bool` 和 `int` 一样?

parsing - Flex 和 Bison - 有时关心空格的语法

c# - .NET 可移植框架中的 System.Drawing.Bitmap