簡體   English   中英

Flex/Lex 和 Yacc/Bison 有什么區別?

[英]What is the difference between Flex/Lex and Yacc/Bison?

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 中,您可以提供自己的輸入代碼並修改字符 stream; 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 不是。

Bison 是 Yacc 的 GNU 實現/擴展,Flex 是 Lex 的繼承者。 無論哪種情況,都可以(並且推薦)使用 bison / flex。

在大多數(全部?)Linux 系統上,“Lex”實際上是 flex 的符號鏈接。 基本上,它只是免費版本的不同名稱。

YACC 在 Plan 9 和 Open Solaris 的開源許可下可用。 另外,還有 Berkeley YACC,它與原 YACC 兼容,但不共享源代碼。 Berkeley YACC 可以在任何開源 BSD 操作系統上找到。

Bison 是 GNU 項目的一部分。 yacc 被用作 Berkeley Software Distribution (BSD) 上的實用程序。雖然它與 yacc 兼容,但 Lex 和 Yacc 已成為過去。 Flex 和 bison 今天被廣泛使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM