Разбор сверху вниз требует некоторого стека синтаксического анализатора.Смысл разбора рекурсивного спуска заключается в использовании стека вызовов в качестве стека синтаксического анализатора.Поэтому вы должны рассматривать алгоритм в вашем учебнике как альтернативу рекурсивному спуску.
Рекурсивное спуск является популярным решением для синтаксического анализа, но оно может быть проблематичным в языке, подобном C (или C ++), который не обнаруживаетпереполнение стека (или не надежно обнаруживает его).В этом случае вы, вероятно, захотите использовать выделенный стек анализатора для производственного анализатора, особенно если:
вы запускаете анализатор в многопоточном приложении (чтобы стеки были небольшими);
все, что вы анализируете, должно иметь глубокое вложение (возможно, это дендритная структура данных);
вы анализируете непроверенный ввод, и выбеспокоятся о том, что злоумышленники предоставляют слишком вложенные данные;
вы недостаточно усердно работали, чтобы минимизировать размер стекового фрейма, возможно, из-за аллергии на динамическое распределение памяти.
В общем, вы должны избегать рекурсивного спуска и использовать явный стек в любом контексте, где ожидаемая максимальная глубина стека вызовов может превысить доступный размер стека.
В качестве альтернативы, вы можете использовать генератор синтаксических анализаторов, который создает парсеры сконтролируемый размер стека.