Введение

Анализатор сверху вниз, который анализирует вход слева направо.
В информатике LL-анализатор (слева направо, самый левый вывод) — это анализатор сверху вниз для ограниченного контекстно-свободного языка. Он анализирует вход слева направо, выполняя самый левый вывод предложения. LL-анализатор называется LL(k)-анализатором, если он использует k токенов предварительного просмотра при анализе предложения. Грамматика называется LL(k)-грамматикой, если из нее можно построить LL(k)-анализатор. Формальный язык называется LL(k)-языком, если он имеет LL(k)-грамматику. Множество LL(k)-языков содержится в множестве LL(k+1)-языков для каждого k ≥ 0. Не все контекстно-свободные языки могут быть распознаны LL(k)-анализатором. LL-анализатор называется LL-регулярным (LLR), если он анализирует LL-регулярный язык. Класс LLR-грамматик содержит каждую LL(k)-грамматику для каждого k. Для каждой LLR-грамматики существует LLR-анализатор, который анализирует грамматику за линейное время. Два нестандартных типа анализаторов — LL(*) и LL(конечный). Анализатор называется LL(*)/LL(конечный), если он использует стратегию анализа LL(*)/LL(конечный). LL(*) и LL(конечный) анализаторы функционально ближе к анализаторам PEG. LL(конечный) анализатор может оптимально анализировать произвольную LL(k)-грамматику с точки зрения объема предварительного просмотра и сравнений предварительного просмотра. Класс грамматик, анализируемых стратегией LL(*), включает в себя некоторые контекстно-зависимые языки из-за использования синтаксических и семантических предикатов и не был идентифицирован. Предполагается, что LL(*) анализаторы лучше рассматривать как анализаторы TDPL. Вопреки распространенному заблуждению, LL(*) анализаторы обычно не являются LLR и по построению гарантированно работают хуже в среднем (суперлинейное по сравнению с линейным временем) и значительно хуже в худшем случае (экспоненциальное по сравнению с линейным временем). LL-грамматики, особенно LL(1)-грамматики, представляют большой практический интерес, поскольку анализаторы для этих грамматик легко построить, и многие компьютерные языки разработаны для LL(1) по этой причине. LL-анализаторы могут быть табличными, то есть похожими на LR-анализаторы, но LL-грамматики также могут быть проанализированы рекурсивными спусками. Согласно Уэйту и Гусу (1984), LL(k)-грамматики были введены Стирнсом и Льюисом (1969).

Замена

Замена одного правила другим для устранения косвенных или конфликтов FIRST/FOLLOW. Следует отметить, что это может привести к конфликту FIRST/FIRST.