Answers:
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不在。
#include
)。我在O'Reilly上有关lex&yacc的书(抱歉,此处暂未提供)说,只有在lex中才能通过令人作呕的黑客行为实现。
Bison是Yacc的GNU实现/扩展,Flex是Lex的继承者。无论哪种情况,都可以(并建议)使用bison / flex。
在大多数(全部?)Linux系统上,“ Lex”实际上是flex的符号链接。基本上,它只是与免费版本不同的名称。
YACC在Plan 9和Open Solaris的开放源代码许可下均可用。此外,还有伯克利YACC,它与原始YACC兼容,但不共享源代码。伯克利YACC可以在任何开源BSD操作系统上找到。
Bison是GNU项目的一部分。yacc用作Berkeley Software Distribution(BSD)上的实用程序。尽管它与yacc兼容,但是Lex和Yacc已经成为过去。如今,Flex和野牛被广泛使用。