Вы затрагиваете несколько вопросов, на которые сложно ответить в краткой форме.Тем не менее я попытаюсь.
Прежде всего, что такое "бесконечный взгляд вперед"?Нет книги, описывающей такой парсер.Если у вас есть четкое представление о том, что это такое, вам нужно сначала описать это.Только после этого мы можем обсудить эту тему.В настоящее время теория синтаксического анализа обсуждает только грамматики LR (k), где k конечно.
Обычно синтаксические анализаторы LR (k) ограничены детерминированными контекстно-свободными языками.Я думаю, это означает, что всегда должно быть ровно одно правило грамматики, которое может быть применено в настоящее время.
Это неправильно.LR (k) грамматики могут иметь «грамматические конфликты».Книга Дракона кратко упоминает их, не вдаваясь в подробности.«Грамматика может иметь конфликты» означает, что некоторые грамматики не имеют конфликтов, в то время как все остальные грамматики имеют их.Если в грамматике нет конфликтов, то ВСЕГДА существует только одно правило, и ситуация относительно проста.
Когда в грамматике есть конфликты, это означает, что в некоторых случаях применимо более одного правила.Классические парсеры тут не помогут.Хуже всего то, что некоторые входные операторы могут иметь набор правильных парсингов, а не только один.С точки зрения теории грамматики все эти разборы имеют одинаковое значение и важность.
В книге "Шаблоны реализации языка" говорится, что "... синтаксический анализатор недетерминирован - он не может определить, какую альтернативу выбрать. "
У меня сложилось впечатление, что нет окончательного соглашения о том, что означает" недетерминированный парсер ".Я бы сказал, что недетерминированный синтаксический анализатор просто выбирает одну из альтернатив случайным образом и продолжается.
Практически используются только 2 стратегии разрешения конфликтов.Первый - это разрешение конфликтов в обработчике обратного вызова.Обработчик обратного вызова - обычный код.Программист, который пишет это, проверяет все, что он хочет, так, как он хочет.Этот код только возвращает результат - какое действие предпринять.Для парсера сверху этот обработчик обратного вызова является черным ящиком.Здесь нет теории.
Второй подход называется «возвращением».Идея очень проста.Мы не знаем, куда идти.Хорошо, давайте попробуем все возможные альтернативы.В этом случае все варианты перепробованы.Здесь нет ничего недетерминированного.Существует несколько различных вариантов возврата.
Если этого недостаточно, я могу написать немного больше.