Pull to refresh

Comments 22

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

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

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


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

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

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

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

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

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

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

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

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

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

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

Sign up to leave a comment.

Articles