Рекурсивный анализатор спуска для чего-то простого?

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

Вскоре после этого я сравнил производительность всех моих предыдущих методов синтаксического анализа. . Парсер рекурсивного спуска был , безусловно, самым медленным. Я застрял: стоит ли использовать синтаксический анализатор рекурсивного спуска для чего-то простого, или я вправе использовать ярлыки? Я хотел бы пойти по маршруту чистого регулярного выражения, который безумно быстр (почти в 3 раза быстрее, чем парсер RD), но в некоторой степени очень хакерский и неподдерживаемый. Я полагаю, что производительность не ужасно важна, потому что скомпилированные шаблоны кэшируются, но является ли парсер рекурсивного спуска подходящим инструментом для каждой задачи? Думаю, мой вопрос можно рассматривать как более философский: в какой степени стоит жертвовать ремонтопригодностью / гибкостью ради производительности?

6
задан ltimer 3 April 2011 в 19:35
поделиться