Jaka jest różnica między Flex & Lex a Yacc & Bison. Szukałem dziko w Internecie i nie znalazłem żadnej solidnej odpowiedzi.
Czy mogę zainstalować czysty Lex i Yacc na Ubuntu, czy mogę zainstalować tylko flex i bison. Jestem zdezorientowany.
- Czy Lex lub Yacc nadal są przez kogoś utrzymywane?
- Czy wszystkie są bezpłatne?
Jeśli Lex nie jest wolny, dlaczego mam go zainstalować w mojej dystrybucji Ubuntu?
lex --version lex 2.5.35
Odpowiedzi:
Istnieją pewne różnice między Lex i Flex, ale musisz nadużywać Lexa, aby napotkać problemy z Flex. (Mam program, który nadużywa Lexa i dlatego nie działa pod Flex.) Jest to głównie w obszarze wyszukiwania danych wejściowych; w Leksie możesz podać swój własny kod wejściowy i zmodyfikować strumień znaków; Flex Ci na to nie pozwoli.
Yacc i Bison są dość blisko kompatybilne, chociaż Bison ma kilka dodatkowych sztuczek, które może zrobić.
Prawdopodobnie nie możesz znaleźć legalnych kopii (oryginalnych wersji AT&T) Lexa i Yacc do zainstalowania na Ubuntu. Niekoniecznie powiedziałbym, że jest to niemożliwe, ale nie jestem tego świadomy. Flex i Bison są łatwo dostępne i są równoważne w większości zastosowań. Możesz także znaleźć różne alternatywne i w przybliżeniu równoważne programy ze świata BSD.
Lex i Yacc są utrzymywane przez licencjobiorców Unix SVRx - firmy takie jak IBM (AIX), HP (HP-UX) i Sun (Solaris) mają zmodyfikowane wersje Lex i Yacc na swoje polecenie. MKS dostarcza również MKS Lex i MKS Yacc; jednakże Yacc ma przynajmniej kilka niestandardowych rozszerzeń.
Flex i Bison są bezpłatne. (AT&T) Lex i Yacc nie są.
źródło
#include
). W mojej książce O'Reilly na temat lex & yacc (niestety nie ma jej tutaj pod ręką), napisałem, że jest to możliwe tylko w lexie poprzez obrzydliwe hacki.Bison jest implementacją / rozszerzeniem GNU Yacc, Flex jest następcą Lexa. W obu przypadkach dobrze (i zalecane) jest użycie bison / flex.
źródło
W większości (wszystkich?) Systemów Linux, „Lex” jest w rzeczywistości symbolicznym dowiązaniem do flex. Zasadniczo jest to tylko inna nazwa niż wersja bezpłatna.
źródło
YACC jest dostępny na licencjach open source zarówno z Planu 9, jak i Open Solaris. Istnieje również Berkeley YACC, który jest kompatybilny z oryginalnym YACC, ale nie udostępnia kodu źródłowego. Berkeley YACC można znaleźć w dowolnym systemie operacyjnym BSD typu open source.
źródło
Bison w części projektu GNU. Yacc jest używany jako narzędzie w Berkeley Software Distribution (BSD). Chociaż jest kompatybilny z yacc, to Lex i Yacc należą już do przeszłości. Flex i bison są dziś szeroko stosowane.
źródło