Flex / Lex ve Yacc / Bison arasındaki fark nedir?


122

Flex & Lex ve Yacc & Bison arasındaki fark nedir. İnterneti çılgınca aradım ve kesin bir cevap bulamadım.

Ubuntu'ya saf Lex ve Yacc kurabilir miyim, yoksa sadece flex ve bison kurabilirim. Kafam karıştı.

  • Lex veya Yacc hala birileri tarafından mı bakılıyor?
  • Hepsi ücretsiz mi?
  • Lex ücretsiz değilse, Ubuntu dağıtımıma neden yükledim?

    lex --version
    lex 2.5.35
    

3
Lex sürüm 2.5.35 yok - flex 2.5.35 sürümünü çalıştırıyorsunuz, eğer onu 'lex' olarak çağırırsanız kendisini 'lex' olarak tanımlıyor
Chris Dodd

Yanıtlar:


81

Lex ve Flex arasında bazı farklılıklar vardır, ancak Flex ile ilgili sorunların üstesinden gelmek için Lex'i kötüye kullanmanız gerekir. (Lex'i kötüye kullanan ve bu nedenle Flex altında çalışmayan bir programım var.) Bu, öncelikle girdi önden okuma alanındadır; Lex'te kendi giriş kodunuzu sağlayabilir ve karakter akışını değiştirebilirsiniz; Flex bunu yapmana izin vermeyecek.

Yacc ve Bison oldukça uyumludur, ancak Bison'un yapabileceği bazı ekstra hileler vardır.

Ubuntu'ya yüklemek için Lex ve Yacc'nin (orijinal, AT&T sürümleri) yasal kopyalarını muhtemelen bulamazsınız. Bunun imkansız olduğunu söyleyemem ama bunun farkında değilim. Flex ve Bison hemen temin edilebilir ve çoğu amaç için eşdeğerdir. Ayrıca, BSD dünyasından çeşitli alternatif ve yaklaşık olarak eşdeğer programlar da bulabilirsiniz.

Lex ve Yacc, Unix SVRx lisansları tarafından korunur - IBM (AIX), HP (HP-UX) ve Sun (Solaris) gibi şirketler, komutları altında Lex ve Yacc'nin değiştirilmiş sürümlerine sahiptir. MKS ayrıca MKS Lex ve MKS Yacc sağlar; ancak, Yacc en azından bazı standart dışı uzantılara sahiptir.

Flex ve Bison ücretsizdir. (AT&T) Lex ve Yacc değil.


4
Yacc hakkındaki bilgiler yanlıştır. Berkeley, tüm açık kaynak BSD işletim sistemlerinde mevcut ve BSD lisansı altında bulunan bir Yacc'ye sahiptir. Bu hesap için olumsuz oy verdim, ancak cevap yeterince hızlı bir şekilde düzeltilirse, olumsuz oyu kaldıracağım.
Daniel C. Sobral

2
@Daniel: AFAIK, AT&T Yacc Berkeley'den elde edilemez - Berkeley'den aldığınız şey Berkeley Yacc'dir. Bunu yansıtmak için cevabı açıklayacağım.
Jonathan Leffler

1
Flex'te girdi tamponlarını kesinlikle ağrısız bir şekilde değiştirebilirsiniz (esasen işlemek için bir kez yaptım #include). O'Reilly'nin lex & yacc hakkındaki kitabım (burada elinizde değil, üzgünüm) bunun sadece lex'te iğrenç hacklerle mümkün olduğunu söyledi.
vonbrand

33

Bison, Yacc'ın GNU uygulaması / uzantısıdır, Flex, Lex'in halefidir. Her iki durumda da, bison / flex kullanmak iyidir (ve önerilir).


1
Ek olarak, yacc'nin Berkeley uygulaması olan byacc yaygın olarak mevcuttur (bunu Debian depo listemde görüyorum).
Michael Ekstrand

1
flex buna denir çünkü lex'ten çok daha hızlıdır (oldu mu?) . Birkaç uzantıya sahiptir ve oluşturulan dosyalar hiç benzer kalmaz (yani, lex'teki çirkin korsanlar flex ve tersi ile çalışmaz).
vonbrand

11

Çoğu (tümü?) Linux sisteminde, "Lex" aslında esnekliğe sembolik bir bağlantıdır. Temel olarak, sadece ücretsiz sürümden farklı bir addır.


1
Sistemimde (Arch Linux), iki ikili dosya aynı şekilde davranmıyor. Muhtemelen bir lex uyumluluk özelliği.
Danilo Bargen

10

YACC, hem Plan 9 hem de Open Solaris'ten açık kaynak lisansları altında mevcuttur. Ayrıca, orijinal YACC ile uyumlu, ancak kaynak kodunu paylaşmayan Berkeley YACC de vardır. Berkeley YACC, açık kaynaklı BSD işletim sistemlerinden herhangi birinde bulunabilir.


2

GNU projesinin bir bölümünde Bison. Ve yacc, Berkeley Software Distribution'da (BSD) bir yardımcı program olarak kullanılıyor. Yacc ile uyumlu olmasına rağmen, ancak Lex ve Yacc geçmişte kaldı. Flex ve bizon günümüzde yaygın olarak kullanılmaktadır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.