
formal_language_theory / lectures / unit_11
.pdf§2.3. k-Предсказывающие алгоритмы анализа
Для класса LL(k)-грамматик существует адекватный класс анализаторов, называе-
мых k-предсказывающими алгоритмами анализа.
2.3.1. Неформальное описание. Это устройство (рис. 2.1) имеет разбитые на ячейки входную, выходную ленты и ленту магазина. “Дно” магазина маркируется специальным символом, например $, который постоянно находится на магазинной ленте.
61

Вход:
М
а …
г
а
з
и X0 н $
x *; u *k; x′ *
u |
x′ |
|
|
|
|
… |
|
|
|
|
|
|
|
x
Управляющая таблица M(X, u)
X0
Выход: …
Рис. 2.1a. k-Предсказывающий алгоритм анализа. Начальная конфигурация
62

k-Предсказывающие алгоритмы анализа
В начальный момент на входе находится вся анализируемая цепочка (x *), читающая головка сканирует начало входной ленты, в магазине — начальный символ магазина (X0 ) и маркер его “дна” ($), на выходе пусто (см. рис. 2.1а).
63

k-Предсказывающие алгоритмы анализа
Конечное устройство управления руководствуется управляющей таблицей (M), создаваемой по грамматике, в которой производится синтаксический анализ. Она определяет действия в зависимости от:
аванцепочки (u *k) k символов, ска-
нируемых единовременно читающей головкой входной ленты, начиная с текущего символа, причём при x′ = u ≤ k;
верхнего символа магазина (X ).
64

k-Предсказывающие алгоритмы анализа
Этими параметрами определяются движения следующих двух типов:
1. Замещение верхнего символа магазина (X), представляющего левую часть некоторого правила грамматики (A ), цепочкой магазинных символов — правой частью этого правила или цепочкой, производной от неё, и присоединение к концу выходной цепочки номера этого правила (i). При этом продвижения по входной цепочке не происходит, а выходная головка продвигается к следующей свободной ячейке (см. рис. 2.1 б).
65

|
|
Ret 70 |
x *; u *k; y * |
Вход: |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
w |
|
|
|
|
u |
|
|
|
|
y |
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
М |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
u ≤ k , если y = |
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
а |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Управляющая |
|
|||||||||||||||
г |
|
|
X |
|
|
|
|
|
|
|
|
|
|||||||||||||
|
|
|
|
|
|
X |
|
|
|
таблица M(X, u) = ( , i) |
|
||||||||||||||
а |
|
|
|
|
|
|
|
|
|
|
|||||||||||||||
|
|
|
|
|
|
|
|
|
|||||||||||||||||
|
|
|
|
* |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
з |
|
|
|
|
*; i |
|
|
|
|
|
|
|
|
|
|
||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
и |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Выход: |
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|||||
|
|
$ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
н |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
′ |
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
Рис. 2.1б. k-Предсказывающий алгоритм анализа. |
|||||||||||||||||||||||||
|
|
|
|
|
|
|
Движение типа 1. |
66 |

k-Предсказывающие алгоритмы анализа
2. Сброс верхнего символа магазина и продвижение к следующей ячейке входной ленты. На выходную ленту ничего не пишется.
Такие движения происходят только тогда, когда первый символ аванцепочки — такой же, как верхний символ магазина (см. рис. 2.1в).
67

Ret 68 |
a ; |
x + |
Вход:
М
а
a
г
а
з
и
н$
|
|
|
|
|
x′ * |
|
|
w |
|
a |
a′ |
… |
|
|
|
|
|
|
|
|
Управляющая
таблица M(X, u) = pop
a
* *
Выход:
Рис. 2.1в. k-Предсказывающий алгоритм анализа.
Движение типа 2.
68

k-Предсказывающие алгоритмы анализа
На каждом такте работы алгоритм адресуется к своей управляющей таблице. Управляющий элемент, если он определён, диктует одно из упомянутых выше движений, которое и выполняется. Этот цикл повторяется до тех пор, пока управляющий элемент не просигнализирует о приёме входной цепочки, и в этом случае на выходе образуется её левосторонний анализ, или управляющий элемент диагностирует ошибку на входе, и тогда алгоритм останавливается, не принимая входной цепочки.
69

k-Предсказывающие алгоритмы анализа
k-Предсказывающий алгоритм анализа напоминает детерминированный магазинный преобразователь, но отличается от него тем, что “видит” сразу k символов на входе и не имеет внутренних состояний управления.
70