Yacc все еще используется в промышленности?

StackOverflow https://stackoverflow.com/questions/332734

  •  22-07-2019
  •  | 
  •  

Вопрос

База программного обеспечения, для которой я разрабатываю, использует значительное количество yacc, с которым мне не нужно иметь дело. Иногда я думаю, что было бы полезно понять некоторые проблемы, которые я нахожу, но большую часть времени я могу сойти с рук с полным моим незнанием yacc.

Мой вопрос: достаточно ли новых проектов, в которых все еще используется yacc, чтобы затратить время на его изучение?

Редактировать. Учитывая, что ответ в основном касается изучения Yacc, есть ли такой язык, который вы бы порекомендовали по сравнению с yacc?

Это было полезно?

Решение

Да, эти инструменты стоит изучить, если вам когда-нибудь понадобится создать или изменить код, который анализирует грамматику.

В течение многих лет де-факто инструментом для генерации кода для разбора грамматики был yacc, или его двоюродный брат GNU, bison.

В последнее время я слышал, что в блоке есть пара новых детей, но принцип тот же: вы пишете декларативную грамматику в формате, более или менее в форме Бэкуса-Наура ( BNF ) и yacc / bison / what генерируют для вас код, который было бы крайне утомительно писать от руки.

Кроме того, принципы, лежащие в основе грамматики, могут быть очень полезны для изучения, даже если вам не нужно напрямую работать с таким кодом. С тех пор, как я прошел курс обучения проектированию компиляторов в колледже, я почти не работал, но понимание стеков времени выполнения, анализаторов упреждающего анализа, оценки выражений и многих других связанных вещей помогло мне очень эффективно эффективно писать и отлаживать мой код.

edit: Учитывая ваш дополнительный вопрос о других инструментах, Yacc / Bison, конечно, лучше всего подходят для проектов на C / C ++, поскольку они генерируют C-код. Есть похожие инструменты для других языков. Не все грамматики эквивалентны, и некоторые генераторы синтаксических анализаторов могут использовать только грамматики определенной сложности. Поэтому вам может понадобиться инструмент, который сможет разобрать вашу грамматику. См. http://en.wikipedia.org/wiki/Comparison_of_parser_generators

Другие советы

Я не знаю о новых проектах, использующих его, но я участвую в семи различных работах по техническому обслуживанию, которые используют lex и yacc для обработки файлов конфигурации.

Для меня нет XML, нет-сэр: -).

Решения, использующие lex / yacc, являются шагом вперед по сравнению со старыми файлами конфигурации строк key = val , поскольку они допускают более совершенные иерархические структуры, такие как:

server = "mercury" {
    ip = "172.3.5.13"
    gateway = "172.3.5.1"
}
server = "venus" {
    ip = "172.3.5.21"
    gateway = "172.3.5.1"
}

И да, я знаю, что вы можете сделать это с XML, но это в основном устаревшие приложения, написанные на C, и, честно говоря, я бы, вероятно, использовал lex / yacc для новых (не Java) заданий.

Это потому, что я предпочитаю поставлять программное обеспечение вовремя и по бюджету, а не предлагать новейшие технологии с быстрой отдачей - мои клиенты не будут платить за мое образование, они в первую очередь хотят результатов, а я уже эксперт в lex / yacc и иметь весь код шаблона, чтобы сделать это быстро.

Общее правило: код длится долго, поэтому технологии, используемые в этом коде, тоже долго работают. Для замены упомянутой вами кодовой базы потребуется огромное количество времени (на ее создание ушло 15 лет ...), что, в свою очередь, означает, что она будет существовать через 5, 10 или более лет. (Есть даже шанс, что кто-то, кто читает этот ответ, в конечном итоге будет работать над ним!)

Еще одно практическое правило: если технология общего назначения достаточно распространена, и вы уже сталкивались с ней, вероятно, достаточно распространено, чтобы вы ознакомились с ней, потому что однажды вы увидите ее снова. Кто знает: ознакомившись с ним, возможно, вы добавили полезный инструмент в свою панель инструментов ...

Yacc - одна из этих технологий: вы, вероятно, столкнетесь с ней снова, это не так сложно, и принципы, которые вы изучите, применимы ко всему семейству конструкторов синтаксических анализаторов.

PEG - это новое явление, но все еще есть масса проектов, использующих yacc или инструменты более современные, чем yacc. Я бы нахмурился над новым проектом, который решил использовать yacc, но для существующих проектов портирование на более современный инструмент может не иметь смысла. Это делает грубое знакомство с yacc полезным навыком.

Если вы совершенно не знакомы с темой генераторов синтаксических анализаторов, я бы посоветовал вам узнать об одном, любом. Многие понятия переносимы между ними. Кроме того, это полезный инструмент, чтобы иметь в виду: как только вы его узнаете, вы поймете, как часто они могут быть лучше, чем парсеры, написанные с использованием регулярных выражений. Если вы уже знакомы с темой парсеров, я бы об этом не беспокоился. Вы узнаете yacc, если и когда вам нужно, чтобы что-то сделать.

Я работаю над проектами, которые используют Yacc. Не новый код - но если бы они были новыми, они все равно использовали бы Yacc или близкого родственника (Bison, Byacc, ...).

Да, я считаю, что стоит учиться, если вы работаете в Си.

Также рассмотрите возможность изучения ANTLR или других более современных генераторов синтаксического анализатора. Но знание Yacc поможет вам в этом - оно поможет вам освоить и другие подобные инструменты, поскольку многие основные теории похожи.

Я не знаю конкретно о yacc / bison, но я использовал antlr, cup, jlex и javacc. Я думал, что они будут иметь только академическое значение, но, как выясняется, нам нужен язык, специфичный для предметной области, и это дало нам гораздо более приятное решение, чем некоторые "более простые". (на основе регулярных выражений) парсеры там. Однако обслуживание может быть проблемой во многих средах - поскольку большинство программистов в наши дни не имеют опыта работы с инструментами синтаксического анализа.

У меня не было возможности сравнить его с другими системами синтаксического анализа, но я определенно могу порекомендовать ANTLR основанный на моем собственном опыте, а также с его большой и активной базой пользователей.

Еще одним плюсом для ANTLR является ANTLRWorks: среда разработки ANTLR GUI , которая очень помогает разработка и отладка ваших грамматик. Я еще не видел другой системы синтаксического анализа, которая поддерживается такой IDE.

Мы пишем новый код yacc в моей компании для доставки продуктов. Да, этот материал все еще используется.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top