Полученная мудрость заключается в использовании генераторов синтаксических анализаторов + грамматик, и это кажется хорошим советом, потому что вы используете строгий инструмент и, по-видимому, уменьшаете усилия и вероятность ошибок при этом.
Чтобы использовать генератор парсера, грамматика должна быть контекстно-свободной. Если вы разрабатываете язык для анализа, вы можете это контролировать. Если вы не уверены, то это может стоить вам больших усилий, если вы начнете идти по грамматическому маршруту. Даже если на практике это не зависит от контекста, если грамматика не огромна, проще написать код рекурсивного приличного парсера.
Отсутствие контекста не только делает возможным генератор парсера, но и делает парсеры, закодированные вручную, намного проще. В итоге вы получаете одну (или две) функции на фразу. То есть, если вы упорядочиваете и называете код чисто, это не намного труднее увидеть, чем грамматику (если ваша IDE может показать, что вы называете иерархии, то вы можете в значительной степени увидеть, что такое грамматика).
Преимущества: -
- Упрощенная сборка
- Лучшая производительность
- Лучшее управление выходом
- Может справиться с небольшими отклонениями, например, работать с грамматикой, которая не на 100% не зависит от контекста
Я не говорю, что грамматика всегда непригодна, но зачастую выгоды минимальны и часто взвешиваются с затратами и рисками.
(Я полагаю, что аргументы в их пользу явно привлекательны и что для них существует общий уклон, поскольку это является способом обозначить, что человек более информатичен.)