Я предлагаю написать Разбор грамматик выражений (PEG) и посмотреть этот ответ для библиотеки PEG в PHP.
PEG очень похожи на регулярные выражения, по своей природе они жадные и никогда не бывают двусмысленными: отлично подходит для языка, специфичного для предметной области (DSL).
В общем случае лексер не медленнее, чем использование нескольких регулярных выражений для создания кэшированного шаблона php?
Нет: скорость регулярных выражений зависит от реализации механизма регулярных выражений. Как правило, каждый раз, когда вы используете регулярное выражение, оно должно быть проанализировано само по себе, а затем с данной моделью оно должно использовать общий сопоставитель , который работает со всеми возможными регулярными выражениями.
Имея лексер, вы точно настраиваете сопоставление: вы получаете определенное сопоставление , которое работает только для вашей предварительно определенной грамматики. Один выигрыш в случае начальной загрузки: нет необходимости компилировать регулярное выражение. Еще одним преимуществом является его меньшая сложность из-за особого соответствия, которое имеет тенденцию работать быстрее.
Существуют ли хорошие ресурсы о том, как написать свой собственный лексер для интерпретации какого-либо (шаблонного) языка (я не могу найти ничего, что понимаю в Google)?
Лексеры довольно сложные. Для того, чтобы написать свой собственный, вы должны будете знать, что такое конечные автоматы , обычная грамматика , context-free или безконтекстных грамматик и т. д.
Требуются некоторые фундаментальные знания в области компьютерных наук, прежде чем его легко понять.
Должен ли я продолжать использовать регулярные выражения или стоит изучить лексер?
Стоит отметить возможности обнаружения ошибок хорошо спроектированных лексеров (например, сообщение об ошибке: «ожидается ;
, но найдено )
, в строке 64:38.»)