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