Я недавно взялся за написание простого лексера и парсера.
Оказалось, что лексеру проще кодировать вручную. Но парсер оказался чуть сложнее. Мой сгенерированный Bison парсер работал почти сразу, и он дал мне много полезных сообщений о том, где я забыл о состояниях. Позже я написал тот же парсер вручную, но потребовалось гораздо больше времени для отладки, прежде чем он заработал идеально.
Привлекательность создания инструментов для лексеров и синтаксических анализаторов заключается в том, что вы можете написать спецификацию на чистом, удобном для чтения языке, который приближается к кратчайшему возможному воспроизведению вашей спецификации. Рукописный парсер обычно как минимум вдвое больше. Кроме того, автоматический синтаксический анализатор (/ lexer) поставляется с большим количеством диагностического кода и логики, чтобы помочь вам отладить объект.
Спецификацию синтаксического анализатора / лексера в BNF-подобном языке также намного легче изменить, если ваш язык или требования изменятся. Если вы имеете дело с рукописным синтаксическим анализатором / лексером, вам может потребоваться углубиться в ваш код и внести значительные изменения.
Наконец, поскольку они часто реализуются как конечные автоматы без обратного отслеживания (тысячи вариантов на Bison, так что это не всегда дано), вполне возможно, что ваш автоматически сгенерированный код будет более эффективным, чем ваш кодированный продукт.