[OP изменил заголовок вопроса с «почему нельзя ... использовать» на «почему не подходит ...» Это, в свою очередь, превращает мой комментарий в ответ, поэтому я публикую его как единое целое.]
Вы можете использовать лево- или праворекурсивные правила с любым алгоритмом синтаксического анализа LR (k).
Правильные рекурсивные правила вызывают забавное свойство процесса синтаксического анализа, если вы собираетесь строить деревья: вы должны держать стек настолько глубоким, насколько нужна правильная рекурсия, чтобы отслеживать собранные узлы.
Люди предоставят вам исходные файлы, содержащие миллион элементов в списке, поэтому ваш стек должен быть таким глубоким. При правильных рекурсивных правилах это может быть достаточно глубоким, чтобы у вас закончилось пространство, если у вас есть стек фиксированного размера.
Часто стек синтаксического анализатора реализуется с использованием естественного стека процессора. Наши общие ОС (Windows, Linux) и их общие компиляторы могут предложить вам именно такие стеки с фиксированным размером, так что в некотором смысле они усугубляют эту проблему.
С помощью левого рекурсивного правила вы уменьшаете после каждого элемента списка, так что стек может быть по существу единичной глубины. Это намного удобнее: не дает сбоев и хорошо использует кеш.
person
Ira Baxter
schedule
03.03.2016