230
тогда и только тогда, когда A
→ x
0
B
1
x
1
...B
m
x
m
, y
0
B
1
y
1
...B
m
y
m
— правило из R, а
правило A
→ x
0
B
1
x
1
...B
m
x
m
есть правило номер i входной LR(k)-грамматики. Не-
трудно доказать, что (
π, y
R
) ∈τ(T
’
) тогда и только тогда, когда (S, S)
(w, y).
Схема T
’
— это простая sdts, основанная на LL(1)-грамматике, и, следова-
тельно, ее можно реализовать посредством dpdt P
3
.
На четвертом уровне dpdt P
4
просто обращает цепочку y
R
— выход P
3
,
запи-
сывая его в магазин типа first-in-last-out, а затем выдавая цепочку y из магазина
на свой выход.
Число основных операций, выполняемых на каждом уровне, пропорцио-
нально длине цепочки w. Таким образом, можно сформулировать следующий
результат:
Теорема 3.9. Трансляция, задаваемая простой семантически однозначной
схемой синтаксически управляемой трансляции с входной LR(k)-грамматикой,
может быть реализована за время, пропорциональное длине входной цепочки.
Доказательство представляет собой формализацию вышеизложенного.
§ 3.10. LALR(k)-Грамматики
На практике часто используются частные подклассы LR(k)-грамматик, ана-
лизаторы для которых имеют более компактные управляющие таблицы по срав-
нению с таблицами канонического LR(k)-анализатора. Здесь мы определим один
из таких подклассов грамматик, называемых LALR(k)-грамматиками.
Определение 3.17. Ядром LR(k)-ситуации [A →β
1
.β
2
, u] назовем A→β
1
.β
2
.
Определим функцию CORE(
A ), где A — некоторое множество LR(k)-ситуаций,
как множество ядер, входящих в состав LR(k)-ситуаций
из A.
Определение 3.18. Пусть G — контекстно-свободная грамматика, S —
каноническая система множеств LR(k)-ситуаций для грамматики G и
S’={A’|A’= { | CORE( ) = CORE( )}, .}
∈
∈
∪
B S
BB AAS
Если каждое множество
A’∈S’— непротиворечиво, то G называется
LALR(k)-грамматикой.
Другими словами, если слить все множества LR(k)-ситуаций с одинаковыми
наборами
ядер в одно множество и окажется, что все полученные таким образом
множества LR(k)-ситуаций непротиворечивы, то G — LALR(k)-грам-матика.
Число множеств, полученных при слиянии, разве лишь уменьшится. Соответст-
венно уменьшится число LR(k)-таблиц. Последние строятся обычным образом
по объединенным множествам LR(k)-ситуаций. Очевидно, что корректность
LALR(k)-анализатора, использующего таким образом полученные LR(k)-
таблицы, не нуждается в доказательстве.
Пример 3.15. Проверим, является ли рассмотренная ранее LR(1)-грам-
матика с правилами 0) S
’
→ S, 1) S → SaSb, 2) S →ε LALR(1)-грамматикой.