Что является хорошим источником анализа пространства выполнения / стека для анализаторов рекурсивного спуска? - PullRequest
1 голос
/ 11 октября 2011

Я хотел бы больше узнать о времени выполнения парсеров рекурсивного спуска. Меня также интересует пространство стека, используемое парсерами рекурсивного спуска (и компромисс между временем выполнения и пространством стека). Какие хорошие источники информации?

Я прочитал статью в Википедии и искал в Интернете, но я не нашел ничего, что было бы подробно описано.

1 Ответ

2 голосов
/ 11 октября 2011

Время выполнения для разбора рекурсивного спуска довольно быстрое; обычно для реализации рекурсии используются машинные инструкции CALL / RET. Рукописные версии, которые не возвращаются назад и не смотрят в будущее, как правило, должны быть очень быстрыми. Но не важно время для разбора потока токенов; важно время, потраченное на обработку символов для создания токенов и / или семантическую проверку / генерацию кода. Почему вы беспокоитесь об этом?

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

...