Яка різниця між Flex / Lex та Yacc / Bison?


122

Яка різниця між Flex & Lex та Yacc & Bison. Я дико шукав Інтернет, і не знайшов твердої відповіді.

Чи можу я встановити чисті Lex та Yacc на Ubuntu, або я можу встановити лише flex та bison. Я збентежений.

  • Чи все ще хтось підтримує Лекса чи Якка?
  • Чи всі вони безкоштовні?
  • Якщо Lex не безкоштовний, чому я встановив його на своєму дистрибутиві Ubuntu?

    lex --version
    lex 2.5.35
    

3
Немає версії lex 2.5.35 - ви використовуєте flex версію 2.5.35, вона просто ідентифікує себе як "lex", якщо ви посилаєтесь на неї як "lex"
Кріс Додд

Відповіді:


81

Існують деякі відмінності між Lex і Flex, але ви повинні зловживати Lex, щоб стикатися з проблемами з Flex. (У мене є програма, яка зловживає Lex і не працює в режимі Flex.) Це, перш за все, в області вхідного пошуку; у Lex можна вказати власний код введення та змінити потік символів; Flex не дозволить вам це зробити.

Якк і Бізон досить тісно сумісні, хоча у Бізона є кілька додаткових хитрощів, які він може зробити.

Напевно, ви не можете знайти законних копій (оригіналу, AT&T версій) Lex та Yacc для встановлення на Ubuntu. Я б не обов'язково говорив, що це неможливо, але я про це не знаю. 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 - ні.


4
Інформація про Yacc невірна. У Берклі є Yacc, який присутній і доступний за ліцензією BSD для всіх операційних систем BSD з відкритим кодом. Я вступив у цю аккаунт, але якщо відповідь буде виправлено досить швидко, я видаляю заяву.
Даніель К. Собрал

2
@Daniel: AFAIK, AT&T Yacc не можна отримати від Берклі - те, що ви отримуєте від Berkeley, - Berkeley Yacc. Я уточню відповідь, щоб це відобразити.
Джонатан Леффлер

1
У програмі flex ви, безперечно, можете безболісно перемикати вхідні буфери (я робив це один раз для суттєвої обробки #include). Моя книга O'Reilly про lex & yacc (не під рукою тут, вибачте) сказала, що це можливо лише в lex через огидні хаки.
фонбранд

33

Bison - це впровадження / розширення GNU Yacc, Flex - наступник Lex. В будь-якому випадку нормально (і рекомендується) використовувати зубр / флекс.


1
Крім того, byacc, Берклі реалізація yacc, широко доступна (я бачу це в моєму списку сховищ Debian).
Майкл Екстранд

1
flex називається тим, що він (був?) набагато швидший, ніж lex. Він має кілька розширень, і згенеровані файли взагалі не схожі (наприклад, некрасиві хаки в lex не працюють із flex та viceversa).
фонбранд

11

У більшості (усіх?) Систем Linux "Lex" - це фактично символічне посилання на flex. В основному, це лише інша назва безкоштовної версії.


1
У моїй системі (Arch Linux) два двійкові файли ведуть себе не однаково. Можливо, функція сумісності lex.
Данило Барген

10

YACC доступний за ліцензіями з відкритим кодом, як із плану 9, так і з відкритим Solaris. Також є також Berkeley YACC, який сумісний з оригінальним YACC, але не ділиться вихідним кодом. Berkeley YACC можна знайти на будь-якій операційній системі з відкритим кодом BSD.


2

Зубр в рамках проекту GNU. І yacc використовується як утиліта для розпродажів програмного забезпечення Berkeley (BSD). Хоча він сумісний з yacc, але Lex і Yacc - це минуле. Сьогодні широко застосовують флекс та зубр.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.