136

Flex & Lex 和 Yacc & Bison 有什么区别。我在互联网上疯狂搜索,但没有找到任何可靠的答案。

我可以在 Ubuntu 上安装纯 Lex 和 Yacc,还是只能安装 flex 和 bison。我很困惑。

  • Lex 或 Yacc 是否仍由某人维护?
  • 他们都是免费的吗?
  • 如果 Lex 不是免费的,为什么我要在我的 Ubuntu 发行版上安装它?

    lex --version
    lex 2.5.35
    
4

5 回答 5

90

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 不是。

于 2009-03-08T12:58:39.287 回答
35

Bison 是 Yacc 的 GNU 实现/扩展,Flex 是 Lex 的继承者。无论哪种情况,都可以(并且推荐)使用 bison / flex。

于 2009-03-08T12:35:33.103 回答
12

在大多数(全部?)Linux 系统上,“Lex”实际上是 flex 的符号链接。基本上,它只是免费版本的不同名称。

于 2009-04-18T00:21:50.650 回答
10

YACC 在 Plan 9 和 Open Solaris 的开源许可下可用。此外,还有 Berkeley YACC,它与原始 YACC 兼容,但不共享源代码。Berkeley YACC 可以在任何开源 BSD 操作系统上找到。

于 2009-07-27T19:24:03.680 回答
2

Bison 是 GNU 项目的一部分。yacc 被用作 Berkeley Software Distribution (BSD) 上的实用程序。虽然它与 yacc 兼容,但 Lex 和 Yacc 已成为过去。Flex 和 bison 今天被广泛使用。

于 2018-04-15T06:52:54.267 回答