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

Parsing Flex/Lex和Yacc/Bison之间有什么区别?,parsing,bison,yacc,flex-lexer,lex,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 Bison是Yacc的GNU实现/扩展,Flex是Lex的继承者。在任何一种情况下,使用bison/flex都是好的(并且是推荐的)

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

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

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

    lex --version
    lex 2.5.35
    

Bison是Yacc的GNU实现/扩展,Flex是Lex的继承者。在任何一种情况下,使用bison/flex都是好的(并且是推荐的)。

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

Yacc和Bison的兼容性非常好,尽管Bison有一些额外的技巧

你可能找不到Lex和Yacc的合法副本(原始的AT&t版本)来安装在Ubuntu上。我不一定说这是不可能的,但我不知道有这样的情况。Flex和Bison很容易获得,在大多数情况下都是等效的。您还可以从BSD世界中找到各种替代和近似等效的程序

Lex和Yacc由Unix SVRx许可证维护——IBM(AIX)、HP(HP-UX)和Sun(Solaris)等公司已根据其命令修改了Lex和Yacc的版本。MKS还提供MKS Lex和MKS Yacc;然而,Yacc至少有一些非标准的扩展


弗莱克斯和野牛是免费的。(AT&T)Lex和Yacc不是。在大多数(所有?)Linux系统上,“Lex”实际上是指向flex的符号链接。基本上,它与免费版本只是一个不同的名称。

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

Bison是GNU项目的一部分。yacc被用作Berkeley软件发行版(BSD)上的一个实用程序。虽然它与yacc兼容,但Lex和yacc已经成为过去。Flex和bison现在被广泛使用。

此外,yacc的Berkeley实现byacc也被广泛使用(我在Debian存储库列表中看到了它)。Flex之所以被称为Flex,是因为它比lex快得多。它有几个扩展名,并且生成的文件一点也不相似(例如,lex中的丑陋的hacks不适用于flex和viceversa)。没有人修复过莱克斯(1)@vonbrand。有关Yacc的信息不正确。Berkeley有一个Yacc,它存在于所有开源BSD操作系统上,并在BSD许可下可用。我在这个问题上投了反对票,但如果答案得到足够快的纠正,我将取消反对票。@Daniel:好吧,AT&T Yacc不能从伯克利获得-你从伯克利获得的是伯克利Yacc。我将澄清答案以反映这一点。在flex中,您当然可以毫不费力地切换输入缓冲区(我曾经这样做过,主要是为了处理
#include
)。我的O'Reilly关于lex和yacc的书(抱歉,这里不在手边)说,只有通过令人厌恶的黑客才能在lex中实现。在我的系统(Arch Linux)上,这两个二进制文件的行为并不相同。可能是一个lex兼容性特性。没有lex版本2.5.35——您运行的是flex版本2.5.35,如果您将其调用为“lex”,它只会将自己标识为“lex”