Flex & Lex 和 Yacc & Bison 有什么区别。我在互联网上疯狂搜索,但没有找到任何可靠的答案。
我可以在 Ubuntu 上安装纯 Lex 和 Yacc,还是只能安装 flex 和 bison。我很困惑。
- Lex 或 Yacc 是否仍由某人维护?
- 他们都是免费的吗?
如果 Lex 不是免费的,为什么我要在我的 Ubuntu 发行版上安装它?
lex --version lex 2.5.35
Flex & Lex 和 Yacc & Bison 有什么区别。我在互联网上疯狂搜索,但没有找到任何可靠的答案。
我可以在 Ubuntu 上安装纯 Lex 和 Yacc,还是只能安装 flex 和 bison。我很困惑。
如果 Lex 不是免费的,为什么我要在我的 Ubuntu 发行版上安装它?
lex --version
lex 2.5.35
Lex 和 Flex 之间存在一些差异,但您必须滥用 Lex 才能遇到 Flex 的问题。(我有一个滥用 Lex 的程序,因此不能在 Flex 下运行。)这主要是在输入前瞻领域;在 Lex 中,您可以提供自己的输入代码并修改字符流;Flex 不会让你这样做。
Yacc 和 Bison 非常兼容,尽管 Bison 有一些额外的技巧可以做。
您可能找不到要在 Ubuntu 上安装的 Lex 和 Yacc 的(原始的、AT&T 版本的)合法副本。我不一定会说这是不可能的,但我不知道这一点。Flex 和 Bison 很容易获得,并且在大多数情况下是等效的。您还可以从 BSD 世界中找到各种替代的和近似等效的程序。
Lex 和 Yacc 由 Unix SVRx 许可证持有者维护 - IBM (AIX)、HP (HP-UX) 和 Sun (Solaris) 等公司已根据他们的命令修改了 Lex 和 Yacc 版本。MKS 还提供 MKS Lex 和 MKS Yacc;然而,Yacc 至少有一些非标准的扩展。
Flex 和 Bison 是免费的。(AT&T) Lex 和 Yacc 不是。
Bison 是 Yacc 的 GNU 实现/扩展,Flex 是 Lex 的继承者。无论哪种情况,都可以(并且推荐)使用 bison / flex。
在大多数(全部?)Linux 系统上,“Lex”实际上是 flex 的符号链接。基本上,它只是免费版本的不同名称。
YACC 在 Plan 9 和 Open Solaris 的开源许可下可用。此外,还有 Berkeley YACC,它与原始 YACC 兼容,但不共享源代码。Berkeley YACC 可以在任何开源 BSD 操作系统上找到。
Bison 是 GNU 项目的一部分。yacc 被用作 Berkeley Software Distribution (BSD) 上的实用程序。虽然它与 yacc 兼容,但 Lex 和 Yacc 已成为过去。Flex 和 bison 今天被广泛使用。