Когда целесообразно использовать генератор парсера? - PullRequest
5 голосов
/ 04 августа 2010

Я пишу простой язык текстовых шаблонов для веб-приложения, которое я пишу (подумайте, Google ctemplate).Когда закончите, он покажет только небольшое количество возможных действий, таких простых как «оценить и выполнить», «оценить и напечатать», «оценить и избежать html», «комментарий».Я думал о том, чтобы написать весь синтаксический анализатор с нуля, но начал изучать генераторы синтаксических анализаторов, такие как lex, flex и antlr.Похоже, это больше, чем мне нужно для моего простого синтаксиса.Итак, вопрос в том, в какой момент целесообразно использовать генератор парсера?

Ответы [ 2 ]

6 голосов
/ 04 августа 2010

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

Но подождите! - Нет особых причин изобретать свой собственный язык, если только он не очень специфичен для предметной области, например eqn или TeX или языков молекулярного моделирования. Вам гораздо лучше встроить язык, который был специально разработан для этой цели. Tcl - старая гвардия в этом мире, с сильным соперником Python . Perl также был спроектирован как встроенный язык сценариев, но я считаю его плохим кандидатом, так как он, скорее всего, даст очень «только для записи» код в руки ваших пользователей.

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

Первый маленький написанный мной язык (который на удивление все еще находится в производственном использовании) был бы намного лучше, если бы вместо него использовался Tcl.

2 голосов
/ 04 августа 2010

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

С другой стороны, простые парсеры не так сложны, их даже не так сложно поддерживать. Мне нравится их писать, и я обычно обращаюсь к ним, когда для задачи нужен один инструмент, а не инструмент (но я не очень знаком с инструментами). Во многих случаях я предпочитаю простой синтаксический анализатор регулярному выражению, в зависимости от задачи.

...