160
Итак,
A(abbab) = 14232. Нетрудно проверить, что 14232 — действительно
левый анализ
abbab: достаточно лишь произвести левосторонний вывод с ис-
пользованием правил в указанной последовательности:
S
aBS abSBS abbBS abbaS abbab.
Следовательно,
A — правильный 1-предсказывающий алгоритм анализа для
грамматики
G.
Пример 2.5. Построим детерминированный магазинный преобразователь,
моделирующий анализатор предыдущего примера. Поскольку грамматика была
простой, то нетрудно заметить, что за движением типа 1 сразу же следует pop-
движение, продвигающее анализатор к следующему символу входной цепочки
и стирающее верхний символ магазина, который всегда оказывается равным
входному. В отличие от анализатора dpdt будет продвигаться по входной цепоч-
ке при каждом движении. Соответственно в магазин он сразу будет писать пра-
вую часть правила без первого символа. Кроме того, конец входной цепочки бу-
дет маркирован, чтобы контролировать его достижение.
Принимая во внимание сказанное, положим
P = ({q
0
, q, accept}, {a, b, $}, {S, B, a, b, $}, {1, 2, 3, 4}, δ, q
0
, $, {accept}),
где
1)
δ(q
0
, ε, $) = (q, S$, ε) — воспроизводит начальную конфигурацию A;
2) δ(q, a, S) = (q, BS, 1) — воспроизводит M(S, a) = (aBS, 1);
3)
δ(q, b, S) = (q, ε, 2) — воспроизводит M(S, b) = (b, 2);
4)
δ(q, a, B) = (q, ε, 3) — воспроизводит M(B, a) = (a, 3);
5)
δ(q, b, B) = (q, SB, 4) — воспроизводит M(B, b) = (bSB, 4);
6)
δ(q, $, $) = (accept, ε, ε) — сигнализирует о приеме.
Легко проверить, что (
w$, π) ∈τ
e
(P) тогда и только тогда, когда A(w)=π.
Посмотрим, как действует этот преобразователь на той же входной цепочке
abbab:
(
q
0
, abbab$, $, ε) (q, abbab$, S$, ε) (q, bbab$, BS$, 1) (q, bab$, SBS$, 14)
(q, ab$, BS$, 142) (q, b$, S$, 1423) (q, $, $, 14232) (accept, ε, ε, 14232).
Как видим, (
abbab$, 14232) ∈τ
e
(P).
§ 2.4. Построение
1-предсказывающего алгоритма анализа
по LL(1)-грамматике
Алгоритм 2.1: построение LL(1)-анализатора.
Вход: G =(V
N
, V
T
, P, S) — LL(1)-грамматика.
Выход: правильный A — 1-предсказывающий алгоритм анализа для грам-
матики
G.
Метод. Положим A =(Σ, Γ∪{$}, ∆, M, X
0
, $), где Σ = V
T
, ∆ = {1, 2,…, #P},
Γ = V
N
∪ V
T
, X
0
= S.