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

标签 parsing bison yacc flex-lexer lex

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

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

  • Lex 或 Yacc 是否仍在由某人维护?
  • 全部都是免费的吗?
  • 如果 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 不是。

关于parsing - Flex/Lex 和 Yacc/Bison 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/623503/

相关文章:

C - 读取未知格式的输入

java - 在 Android 中解析 HTML

c - 从 C 代码使用 D 类

c++ - 如何使用 Bison (Yacc) 在 C++ 中生成 64 位解析器?

java - 如何使用 split 方法解析字符串,但在 java 中使用 2 个不同的分隔符?

用 C 计算标量积和字符串操作

bison - 在 Lex 和 Yacc 中创建注释

yacc - Bison/Yacc,让文字标记返回它自己的值?

c - 赋值语句后的段错误(lex 和 yacc)

c - 结构类型上的 Yacc union