Подтвердить что ты не робот

Як все еще используется в отрасли?

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

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

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

4b9b3361

Ответ 1

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

На протяжении многих лет де-факто инструмент для генерации кода для анализа грамматики был yacc или его кузеном GNU, бизоном.

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

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

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

Ответ 2

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

Нет XML для меня, no-sir-ee: -).

Решения, использующие 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) заданий.

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

Ответ 3

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

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

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

Ответ 4

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

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

Ответ 5

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

Да, я считаю это достойным изучения, если вы работаете на C.

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

Ответ 6

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

Ответ 7

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

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

Ответ 8

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