170
Теорема 2.5. Алгоритм 2.3 производит правильный k-предсказывающий ал-
горитм анализа для любой LL(k)-грамматики.
Доказательство аналогично доказательству предыдущей теоремы. Пусть
G = (V
N
, V
T
, P, S) — LL(k)-грамматика и A — k-предсказывающий алгоритм ана-
лиза для грамматики
G, построенный посредством алгоритма 2.2.
Требуется
доказать, что S
x тогда и только тогда, когда (x, T
0
$, ε) (ε, $, π).
По индукции докажем вспомогательное утверждение, общий смысл которо-
го состоит в том, что анализатор в своем магазине воспроизводит последова-
тельность образов открытых частей сентенциальных форм левостороннего вы-
вода входной цепочки, если она выводима в данной грамматике
G, причем если
π — последовательность номеров правил, участвующих в ее выводе, то π обра-
зуется на выходе анализатора. Связь между открытыми частями сентенциаль-
ных форм и их образами в магазине
LL(k)-анализатора описывается следующим
гомоморфизмом:
Область определения
h легко расширить до Γ
*
, и мы будем в дальнейшем пред-
полагать, что это сделано.
I. Докажем сначала, что если
S
xα, где x — закрытая, а α — открытая
часть данной сентенциальной формы, то для любой цепочки
y ∈Σ
*
, такой, что
FIRST
k
( y ) ∈
FIRST
G
k
(α), анализатор совершает переход (xy, T
0
$, ε) (y, $, π),
где
h( ) = α. Попросту говоря, если в заменить LL(k)-таблицы на нетермина-
лы, с которыми они ассоциированы, то получится
α.
Индукция по
l = |π|.
База. Пусть
l =1, т.е. π = i, где i — номер некоторого правила грамматики.
Пусть
S
xα и y ∈Σ
*
, такая, что
FIRST
k
(y) ∈
FIRST
G
k
(α). На единственном
шаге этого вывода применяется правило вида
S → xα, имеющее номер i. Со-
гласно алгоритму 2.3
M(S, u) = (x , i) для всех u ∈
FIRST
G
k
(xα) ⊕
k
{ε}. Посмот-
рим,
как будет действовать LL(k)-анализатор, начиная с конфигурации (xy, T
0
$, ε).
Очевидно, что аванцепочка u =
FIRST
k
(xy) ∈
FIRST
G
k
(xα)=
FIRST
G
k
(xα) ⊕
k
{ε} и, следовательно, M(T
0
, u) = (x , i). Поэтому (xy, T
0
$, ε) (xy, x $, i)
(
y, $, ε), причем последний переход происходит посредством pop-движений.
База доказана.
Индукционная
гипотеза. Предположим, что утверждение выполняется
для всех l ≤ n (n ≥ 1).
Индукционный переход. Докажем утверждение для
l= n +1. Пусть име-
ется левосторонний вывод длиной
n +1: S
x’α’ = x’Aγ
x’βγ = xα. Здесь
h(x) =
a, если X = a, a ∈V
T
,
, если X = T
,
∈T.