2013-04-20 LALR(1)
Хе-хе. Переписал свой шаблонизатор 4-ый раз с 2006-го года — теперь на LALR(1). Поводом послужило упирание в глубину стека при рекурсивном спуске :-D смешно, да. До этого шаблонизатор был сначала стырен с phpBB (он там вообще примитивный был), потом переписан на регэкспы, потом на поиск подстроки, а потом всё-таки добавились операторы, появилась грамматика и я его переписал ещё раз — на рекурсивный спуск. Теперь вот до LALR(1) с помощью PHP-генератора парсеров LIME (типа, по мотивам lemon’а сделанного) добрался.
Так что ещё одной отличительной чертой моего шаблонизатора, кроме простоты и быстроты (кэшируется там всё хорошо), теперь является то, что он парсится вменяемой грамматикой. Причём парсится именно весь файл целиком, несмотря на то, что некорректные директивы просто пропускаются, а это требует взаимодействия лексического и синтаксического анализаторов. И реально весь язык и транслятор, кроме вызовов функций, описан LIME-грамматикой.
То есть — лексический анализатор понимает, когда находится внутри директивы, а когда вне, и возвращает соответственно просто куски шаблона литералами, либо прочие лексемы внутри директив, а также пропускает текущую директиву при возникающих ошибках разбора, отлавливая их. Для чего, кстати, пришлось допилить сам LIME — см. https://github.com/vitalif/lime и окончательно прочувствовать алгоритм работы LALR(1). :) он вроде был курсе на 2-ом, но я его тогда как-то не особо прочувствовал. Или не было?.. Не помню точно.
А ещё я как-то не осознавал, что первым теорию формальных языков Хомский, который лингвист, придумал (ну или структурировал, по крайней мере).
Дока, кстати, тут — Template.
[ Хронологический вид ]Комментарии
Войдите, чтобы комментировать.