Время выполнения для разбора рекурсивного спуска довольно быстрое; обычно для реализации рекурсии используются машинные инструкции CALL / RET. Рукописные версии, которые не возвращаются назад и не смотрят в будущее, как правило, должны быть очень быстрыми. Но не важно время для разбора потока токенов; важно время, потраченное на обработку символов для создания токенов и / или семантическую проверку / генерацию кода. Почему вы беспокоитесь об этом?
Пространство стека определяется в основном глубокой вложенностью, необходимой для анализа программы. Если ваш синтаксический анализатор принимает (...) в выражениях, а кто-то пишет выражение с 50 000 вложенных паренов, анализ рекурсивного спуска повторяется 50 000 раз.
Вы можете предотвратить это поведение (почти все), задав произвольное правило о том, насколько глубокой может быть рекурсия для анализатора. Я обнаружил, что 100 уровней позволят вам обрабатывать удивительно сложные программы.