Недавно я пытался научить себя, как работают парсеры (для языков/контекстно-свободных грамматик), и большинство из них, похоже, имеет смысл, за исключением одного. Я сосредоточил свое внимание, в частности, на LL (k) грамматиках, для которых два основных алгоритма выглядят как LL parser (используя таблицу стека/разбора) и рекурсивный парсер спуска (просто используя рекурсию).
Насколько я вижу, алгоритм рекурсивного спуска работает на всех грамматиках LL (k) и, возможно, больше, тогда как парсер LL работает на всех грамматиках LL (k). Однако рекурсивный синтаксический анализатор спуска очень прост, чем синтаксический анализатор LL для реализации (так же, как LL проще, чем LR).
Итак, мой вопрос: каковы преимущества/проблемы, которые могут возникнуть при использовании любого из алгоритмов? Почему можно было бы выбрать LL над рекурсивным спуском, учитывая, что он работает с одним и тем же набором грамматик и сложнее реализовать?