Это происходит из пары разных вещей.
BNF (и теория грамматик и тому подобное) происходит от компьютерной лингвистики: люди, исследующие синтаксический анализ естественного языка.BNF - очень привлекательный способ описания грамматики, поэтому естественно использовать эти нотации для создания парсера.
К сожалению, методы синтаксического анализа сверху вниз имеют тенденцию к падению при применении к таким обозначениям, поскольку они не могут обрабатывать многие распространенные случаи (например, левую рекурсию).Это оставляет вас с семейством LR, которое работает хорошо и может обрабатывать грамматики, и так как они создаются машиной, кого волнует, как выглядит код?
Вы правы, хотя: topсинтаксические анализаторы работают более «интуитивно», поэтому их легче отлаживать и обслуживать, а после небольшой практики их так же легко написать, как и сгенерированные инструментами.(Особенно, когда вы попадаете в адский конфликт сдвига / уменьшения.) Многие ответы говорят о парсинге производительности, но на практике анализаторы сверху вниз часто могут быть оптимизированы так же быстро, как сгенерированные машиной.
Вот почему многие производственные компиляторы используют рукописные лексеры и парсеры.