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

Flex&Lex和Yacc&Bison有什么区别? 我疯狂地search了互联网,我没有find任何可靠的答案。

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

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

    lex --version lex 2.5.35 

Lex和Flex之间有一些区别,但是你必须滥用Lex来解决Flex的问题。 (因此,我有一个滥用Lex的程序,因此在Flex下不工作)。这主要是在input视图领域。 在Lex中,您可以提供自己的input代码并修改字符stream; Flex不会让你这样做。

Yacc和Bison的兼容性非常好,尽pipeBison有一些额外的技巧可以做。

您可能无法findLex和Yacc的原始版本(AT&T版本),以便在Ubuntu上安装。 我不一定说这是不可能的,但我不知道这样的。 Flex和Bison很容易获得,在大多数情况下都是相当的。 您也可以从BSD世界find各种各样的替代和大致相同的程序。

Lex和Yacc由Unix SVRx许可证维护 – IBM(AIX),HP(HP-UX)和Sun(Solaris)等公司已经按照他们的命令修改了Lex和Yacc版本。 MKS还提供MKS Lex和MKS Yacc; 然而,Yacc至less有一些不规范的扩展。

Flex和野牛是免费的。 (AT&T)Lex和Yacc不是。

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

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

YACC可以使用Plan 9和Open Solaris的开源许可证。 此外,也有伯克利YACC,这是与原来的YACC兼容,但不共享源代码。 Berkeley YACC可以在任何开源的BSD操作系统上find。