Flex / LexとYacc / Bisonの違いは何ですか?


122

Flex&LexとYacc&Bisonの違いは何ですか。私はインターネットを乱暴に検索しましたが、確かな答えは見つかりませんでした。

Ubuntuに純粋なLexとYaccをインストールできますか、それともflexとbisonのみをインストールできますか?私は混乱しています。

  • LexまたはYaccはまだ誰かによって管理されていますか?
  • それらはすべて無料ですか?
  • Lexが無料でない場合、なぜUbuntuディストリビューションにインストールするのですか?

    lex --version
    lex 2.5.35
    

3
lexバージョン2.5.35はありません-flexバージョン2.5.35を実行しています。「lex」として呼び出すと、それ自体が「lex」として識別されます
Chris Dodd

回答:


81

LexとFlexの間にはいくつかの違いがありますが、Flexの問題に遭遇するには、Lexを悪用する必要があります。(したがって、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には少なくともいくつかの非標準の拡張機能があります。

フレックスとバイソンは無料です。(AT&T)LexとYaccはそうではありません。


4
Yaccに関する情報が正しくありません。バークレーにはYaccがあり、これはすべてのオープンソースBSDオペレーティングシステムのBSDライセンスに基づいて提供されています。私はこのアカウントに反対票を投じましたが、答えがすぐに修正されたら反対票を削除します。
ダニエルC.ソブラル

2
@Daniel:AFAIK、AT&T Yaccはバークレーからは入手できません-バークレーから入手できるのはバークレーYaccです。それを反映するために答えを明確にします。
ジョナサンレフラー、

1
flexでは、入力バッファを簡単に切り替えることができます(基本的には、処理するために一度だけ行いました#include)。lex&yaccに関する私のO'Reillyの本(ここでは手元にありませんが、申し訳ありません)は、lexで可能だったのは嫌なハックを介してのみ可能だったと述べています。
フォンブランド2013年

33

BisonはYaccのGNU実装/拡張であり、FlexはLexの後継です。どちらの場合も、バイソン/フレックスを使用することは問題ありません(そして推奨されます)。


1
さらに、yaccのBerkeley実装であるbyaccは広く利用可能です(私のDebianリポジトリリストで確認できます)。
マイケルエクストランド

1
flexは、lexよりもずっと高速だった(だったので)と呼ばれています。これにはいくつかの拡張機能があり、生成されたファイルはまったく同様に動作しません(つまり、lexの醜いハックはflexで機能しません。逆も同様です)。
フォンブランド2013年

11

ほとんどの(すべての)Linuxシステムでは、「Lex」は実際にはflexへのシンボリックリンクです。基本的に、無料版とは名前が違うだけです。


1
私のシステム(Arch Linux)では、2つのバイナリが同じように動作しません。おそらくlex互換機能です。
Danilo Bargen 2012

10

YACCは、Plan 9とOpen Solarisの両方のオープンソースライセンスで利用できます。また、オリジナルのYACCと互換性がありますが、ソースコードを共有しないBerkeley YACCもあります。Berkeley YACCは、オープンソースのBSDオペレーティングシステムのいずれにもあります。


2

GNUプロジェクトの一部のバイソン。また、yaccはBerkeley Software Distribution(BSD)のユーティリティとして使用されています。yaccとの互換性はありますが、LexとYaccは過去のものです。フレックスとバイソンは今日広く使用されています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.