Как стать автором
Обновить

Комментарии 22

А вот какой парсер проще получается, декларативный на функциональном ЯП или императивный на обычном ЯП?

Мне кажется, впринципе суть парсера в том, что он декларативный — во всех языках. А если нет — то это то, что автор статьи называет "велосипедом". А вот велосипеды уже разные — декларативный в ФП и императивный в ИП)

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


На самом деле обычный человек очень правильно делает, что избегает сложно понимаемые LR парсеры, lex, yacc и подобные пережитки прошлого. Гораздо проще, легче и важнее начинать с самописных recursive descent парсеров. Потом может посмотреть на PEG, которые такие парсеры генерируют.

К теории по компиляторам вообще стоет очень скептически относиться, слишком много там наследия прошлого.
> это то, что автор статьи называет «велосипедом»

Кажется, теперь парсером можно называть только результат обработки инструкций для yacc и пр.
Почему?
Есть представление об ИТ как практическом применении накопленных другими знаний, то есть, любые знания от других людей, если они известны, считаются проверенными и применимыми. Дальше эта идея развивается до уровня «кто не переиспользует, тот велосипедостроитель», то есть позитивная концепция переиспользования используется для обоснования негативного отношения к не-переиспользующим. При этом предполагается, что 95% айтишников серая масса и в принципе не имеет достаточных знаний для того, чтобы делать что-то иначе, чем большинство.
Дальше на догму об единственности известного уже навешивают интересы разных интересантов, что закрепляет догму.
Иногда целые страны (см. РФ) руководствуясь принципом «don't repeat yourself» устраняются от занятия в предметных областях, которые уже кем-то освоены.
То есть, отвечая на ваш вопрос, для компиляторов уже 10 лет есть yacc, а кто использует что-то другое, или, не дай бог, пишет от руки, тот лох и вон из профессии.
Это вы всё хорошо и правильно говорите. Но к определению парсера это имеет весьма отдаленное отношение, так что с первым утверждением позвольте не согласиться.
Не позволю.
Про определение вообще речь не шла. Речь шла про то, что профессионалы ИТ называют парсером сейчас.
Okay

Я просмотрел статью. И если сравнивать с ANTLR, то в последем используются более чистый формат для описания грамматик, без лишнего мусора в фигурных скобочках. А вы сравнивали?

Нет. На сколько я понимаю, ANTLR не работает в erlang?

Напрямую точно не работает.

Мусор в фигурных скобочках — валидный эрланг, кортежи; это так задумано. Я не уверен, какой путь лучше, но этот мне кажется более натуральным.

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

Спасибо за статью. Некоторое время назад я находил небольшой гайд о том, как проделать похожие шаги на чистом Erl, но на английском. Понимания того, что делается, практически не было. Тут же все на много понятнее. Пишите еще!
Ргулярки весьма ограничены в грамматиках, которые вы пытаетесь ими описать (к примеру попробуйте парсить html регулярками) (переводчик: на самом деле — нет. Но на ассемблере тоже можно написать кластерное приложение. Масштаб проблемы приблизительно одинаковый)

Почему не получится распарсить HTML регулярками
НЛО прилетело и опубликовало эту надпись здесь
Это тот случай, когда «можно, но не нужно».
Поддерживать и развивать более-менее сложную регулярку — проще застрелиться и переписать всё с нуля.
На, хотя бы, рукописный рекурсивный спуск. А ещё лучше — с использованием генератора парсеров.
НЛО прилетело и опубликовало эту надпись здесь
Лично я люблю комбинаторные монадические парсеры. По моему с этой техникой генераторы парсеров становятся не слишком нужны — единственное их преимущество это возможность оптимизации.
Кстати, на Erlang была для этого библиотека.

Замените термин "тупиковые" на "терминальные"

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории