Flex/Lex 和 Yacc/Bison 有什么区别?

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

我能在 Ubuntu 上安装纯粹的 Lex 和 Yacc 吗? 或者我只能安装 flex 和 bison。我很困惑。

  • Lex 或者 Yacc 还有人维护吗?
  • 他们都是自由身吗?
  • 如果 Lex 不是免费的,为什么我要把它安装在我的 Ubuntu 发行版上?

    lex --version
    lex 2.5.35
    
55600 次浏览

Bison 是 Yacc 的 GNU 实现/扩展,Flex 是 Lex 的继承者。在这两种情况下,使用 bison/flex 都是可以的(也是推荐的)。

Lex 和 Flex 之间有一些区别,但是你必须滥用 Lex 才会遇到 Flex 的问题。(因此,我有一个滥用 Lex 的程序,不能在 Flex 下工作。)这主要是在输入前瞻方面; 在 Lex 中,您可以提供自己的输入代码并修改字符流; Flex 不允许您这样做。

Yacc 和 Bison 非常紧密地兼容,尽管 Bison 有一些额外的技巧可以做。

你可能找不到正版的(AT & T 版本的) Lex 和 Yacc 在 Ubuntu 上安装。我不一定说这是不可能的,但我不知道这样。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 不是。

对大多数(所有?)Linux 系统中,“ Lex”实际上是一个到 flex 的符号链接。基本上,它只是一个不同的名称,免费版本。

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

在 GNU 项目的一部分中使用 Bison。Yacc 被用作 BSD (BSD)的实用工具。虽然它与 Yacc 兼容,但 Lex 和 Yacc 是过去的事情。Flex 和 bison 现在被广泛使用。