Стоит кодировать синтаксический анализатор вручную, если и только если вы очень заинтересованы в том, чтобы он был очень быстрым даже на машине с очень скромной скоростью. Например, в этой статье об истории Turbo Pascal до того, как он получил свое название, вы можете увидеть, как и почему прототип произвел впечатление на небольшую (тогда датскую) фирму "Borland", чтобы нанять автора прототипа ( Андерс Хейлсберг), полностью разработайте компилятор и запустите его в качестве основного продукта, и я цитирую ...:
без особых ожиданий я ударил
ключ компиляции - И ТОГДА БЫЛ
ПОЛНОСТЬЮ ПОЛ Моя тестовая программа,
это заняло несколько минут, чтобы скомпилировать и связать
используя Pascal MT + от Digital Research,
был скомпилирован и запущен до того, как я
мог моргнуть глаз! Это было здорово
ВАУ момент!
Потрясающая скорость компиляции в Turbo Pascal - в первую очередь благодаря тщательно отрегулированному и тщательно настроенному анализатору рекурсивного спуска, написанному на ассемблере, - позволила ему использовать совершенно другую стратегию от большинства компиляторов: нет отдельного объекта, генерирующего проход компиляции файлы и библиотеки, а затем компоновщик, чтобы собрать их вместе, скорее, Turbo Pascal 1.0 был однопроходным компилятором, который непосредственно превращал исходный код в один исполняемый двоичный файл.
Я помню точно такой же удивительный опыт на крошечных персональных компьютерах той эпохи (когда Z80, 64K или RAM и две дискеты были lot ;-) - Turbo Pascal с его потрясающим parser, IDE и все остальное удобно помещаются в памяти вместе с существенной программой как в исходном, так и в скомпилированном виде - не нужны дискеты, что означает разницу во времени выполнения программы на много порядков.
Если бы Хейлсберг придерживался того, что уже было традиционной мудростью того времени - всегда используйте генераторы синтаксических анализаторов - Turbo Pascal, вероятно, никогда бы не появился как коммерческий продукт, и определенно не достиг бы доминирования в мире Pascal, которым он пользовался года.
Конечно, на сегодняшнем типичном ПК такая предельная скорость синтаксического анализа не понадобится большинству компиляторов. Возможные исключения включают компиляторы, которые должны беспрепятственно работать как часть «подобной интерпретатору» среды (по этой причине простые компиляторы для языков, таких как Perl и Python, обычно закодированы вручную, в значительной степени - это был выбор реализации, который сделал их жизнеспособными в 90-х, хотя сегодня неясно, что это все еще необходимо), или компиляторов, которые работают на очень ограниченных аппаратных ресурсах, таких как смартфоны или недорогие нетбуки.
В подавляющем большинстве случаев, когда вы будете писать компилятор, ни одно из этих соображений производительности, вероятно, не применимо, и вы будете более довольны генератором парсера.