Was ist der Unterschied zwischen Flex / Lex und Yacc / Bison?

122

Was ist der Unterschied zwischen Flex & Lex und Yacc & Bison? Ich habe wild im Internet gesucht und keine solide Antwort gefunden.

Kann ich reines Lex und Yacc unter Ubuntu installieren oder kann ich nur Flex und Bison installieren? Ich bin verwirrt.

  • Wird Lex oder Yacc immer noch von jemandem gewartet?
  • Sind sie alle frei?
  • Wenn Lex nicht frei ist, warum habe ich es auf meiner Ubuntu-Distribution installiert?

    lex --version
    lex 2.5.35
    
Dummer Fragesteller
quelle
3
Es gibt keine Lex-Version 2.5.35 - Sie führen die Flex-Version 2.5.35 aus. Sie identifiziert sich nur als "Lex", wenn Sie sie als "Lex" aufrufen
Chris Dodd

Antworten:

81

Es gibt einige Unterschiede zwischen Lex und Flex, aber Sie müssen Lex missbrauchen, um auf die Probleme mit Flex zu stoßen. (Ich habe ein Programm, das Lex missbraucht und daher unter Flex nicht funktioniert.) Dies liegt hauptsächlich im Bereich des Eingabe-Lookaheads. In Lex können Sie Ihren eigenen Eingabecode bereitstellen und den Zeichenstrom ändern. Flex lässt Sie das nicht zu.

Yacc und Bison sind ziemlich gut kompatibel, obwohl Bison einige zusätzliche Tricks hat, die es tun kann.

Sie können wahrscheinlich keine legitimen Kopien von (den Original-, AT & T-Versionen von) Lex und Yacc finden, die unter Ubuntu installiert werden können. Ich würde nicht unbedingt sagen, dass es unmöglich ist, aber ich bin mir dessen nicht bewusst. Flex und Bison sind leicht verfügbar und für die meisten Zwecke gleichwertig. Möglicherweise finden Sie auch verschiedene alternative und ungefähr gleichwertige Programme aus der BSD-Welt.

Lex und Yacc werden von den Unix SVRx-Lizenznehmern verwaltet. Unternehmen wie IBM (AIX), HP (HP-UX) und Sun (Solaris) verfügen über modifizierte Versionen von Lex und Yacc. MKS bietet auch MKS Lex und MKS Yacc an; Der Yacc hat jedoch zumindest einige nicht standardmäßige Erweiterungen.

Flex und Bison sind kostenlos. (AT & T) Lex und Yacc sind es nicht.

Jonathan Leffler
quelle
4
Die Informationen zu Yacc sind falsch. Berkeley verfügt über einen Yacc, der auf allen Open-Source-BSD-Betriebssystemen unter der BSD-Lizenz verfügbar ist. Ich habe dieses Konto abgelehnt, aber wenn die Antwort schnell genug korrigiert wird, werde ich das Abstimmen entfernen.
Daniel C. Sobral
2
@ Daniel: AFAIK, AT & T Yacc kann nicht von Berkeley bezogen werden - was Sie von Berkeley erhalten, ist der Berkeley Yacc. Ich werde die Antwort klarstellen, um dies zu reflektieren.
Jonathan Leffler
1
In Flex können Sie die Eingangspuffer sicherlich schmerzlos wechseln (ich habe es einmal gemacht, um im Wesentlichen damit umzugehen #include). Mein O'Reilly-Buch über Lex & Yacc (hier leider nicht zur Hand) sagte, dass es in Lex nur durch ekelhafte Hacks möglich war.
vonbrand
33

Bison ist die GNU-Implementierung / Erweiterung von Yacc, Flex ist der Nachfolger von Lex. In beiden Fällen ist es in Ordnung (und empfohlen), Bison / Flex zu verwenden.

Jan Jungnickel
quelle
1
Außerdem ist byacc, die Berkeley-Implementierung von yacc, weit verbreitet (ich sehe es in meiner Debian-Repository-Liste).
Michael Ekstrand
1
flex heißt das, weil es viel schneller ist (war?) als lex. Es hat mehrere Erweiterungen und die generierten Dateien sehen überhaupt nicht ähnlich aus (dh hässliche Hacks in Lex funktionieren nicht mit Flex und umgekehrt).
vonbrand
11

Auf den meisten (allen?) Linux-Systemen ist "Lex" tatsächlich eine symbolische Verbindung zu Flex. Grundsätzlich ist es nur ein anderer Name als die kostenlose Version.

ndr
quelle
1
Auf meinem System (Arch Linux) verhalten sich die beiden Binärdateien nicht gleich. Wahrscheinlich eine Lex-Kompatibilitätsfunktion.
Danilo Bargen
10

YACC ist unter Open Source-Lizenzen von Plan 9 und Open Solaris verfügbar. Es gibt auch Berkeley YACC, das mit dem ursprünglichen YACC kompatibel ist, aber keinen Quellcode gemeinsam nutzt. Berkeley YACC kann auf jedem Open-Source-BSD-Betriebssystem gefunden werden.

Daniel C. Sobral
quelle
2

Bison in einem Teil des GNU-Projekts. Und yacc wird als Dienstprogramm für Berkeley Software Distribution (BSD) verwendet. Obwohl es mit yacc kompatibel ist, gehören Lex und Yacc der Vergangenheit an. Flex und Bison sind heute weit verbreitet.

Avani Ranade
quelle