В чем разница между Flex/Lex и Yacc/Bison?

В чем разница между Flex и Lex и Yacc и Bison. Я безумно искал Интернет, и я не нашел твердого ответа.

Могу ли я установить чистые Lex и Yacc на Ubuntu, или я могу установить только flex и bison. Я смущен.

  • Является ли Lex или Yacc по-прежнему поддерживаемым кем-то?
  • Все ли они свободны?
  • Если Лекс не свободен, почему я его установил в своем дистрибутиве Ubuntu?

    lex --version
    lex 2.5.35
    

Ответ 1

Есть некоторые различия между Lex и Flex, но вы должны злоупотреблять Lex, чтобы столкнуться с проблемами с Flex. (У меня есть программа, которая злоупотребляет Lex и не работает под Flex, поэтому.) Это прежде всего в области ввода данных; в Лексе вы можете предоставить свой собственный код ввода и изменить поток символов; Flex не позволит вам это сделать.

Yacc и Bison довольно тесно совместимы, хотя у Bison есть некоторые дополнительные трюки, которые он может сделать.

Вероятно, вы не можете найти законные копии (оригинальные версии 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 не являются.

Ответ 2

Bison - это реализация/расширение GNU Yacc, Flex - преемник Lex. В любом случае, это нормально (и рекомендуется) для использования bison/flex.

Ответ 3

В большинстве (все?) Linux-системах "Лекс" на самом деле является символической ссылкой на flex. По сути, это только другое имя для бесплатной версии.

Ответ 4

YACC доступен под лицензиями с открытым исходным кодом как с Plan 9, так и с Open Solaris. Кроме того, есть также Berkeley YACC, который совместим с оригинальным YACC, но не использует исходный код. Berkeley YACC можно найти в любой операционной системе BSD с открытым исходным кодом.