Parsing Flex/Lex和Yacc/Bison之间有什么区别?
Flex&Lex和Yacc&Bison之间的区别是什么。我在网上疯狂地搜索,没有找到任何可靠的答案 我可以在Ubuntu上安装纯Lex和Yacc吗,或者我只能安装flex和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都是好的(并且是推荐的)
- Lex或Yacc是否仍由某人维护
- 他们都是免费的吗
- 如果Lex不是免费的,为什么我要在我的Ubuntu发行版上安装它
lex --version lex 2.5.35
弗莱克斯和野牛是免费的。(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”