formal_language_theory / lectures / unit_11
.pdfLL(k)-таблицы
Метод.
1. |
Построить T0 = TS,{ } и |
= {T0}. |
||||
2. |
Если T |
, и для u V |
* |
k |
имеет место |
|
|
||||||
|
A, L |
|
|
|
|
|
|
|
T |
|
|
TA, L(u) = (A x0 B1x1B2…Bm xm, Y1,Y2,…, Ym ),
то к множеству таблиц добавить те таблицы из множества {TBi,Yi | i = 1, 2, …, m}, которых ещё нет в .
141
LL(k)-таблицы
3. Так как для любой данной cfg G существует только конечное число таких таблиц (число нетерминалов — конечно, число подмножеств L VT*k тоже конечно), то процесс пополнения множества закончится за конечное время.
Фактически же для анализа требуются не все возможные LL(k)-таблицы, которые можно построить для грамматики G, а только те, которые определяются описанным алгоритмом.
142
Построение k-предсказывающего алгоритма анализа
Алгоритм 2.3: построение k-предсказываю- щего алгоритма анализа.
Вход: G = (VN, VT, P, S) — LL(k)-грамматика.
Выход: — правильный k-предсказыва- ющий алгоритм анализа для G.
Метод.
1.Построим — множество необходимых LL(k)-таблиц для грамматики G.
2.Положим = ( , {$}, , M, T0, $), где= VT, = VT, = {1, 2, …, #P},
T0 |
= TS,{ }. |
Ret 155 |
|
Ret 148 Ret 169 |
|
|
|
143 |
Построение k-предсказывающего алгоритма анализа
3. Управляющую таблицу M определим на множестве ( {$}) *k так:
3.1. M (TA, L, u) = (x0TB1,Y1x1…TBm,Ymxm, i), если TA, L(u) = (A x0 B1x1…Bm xm, Y1,…, Ym )
и A x0 B1x1…Bm xm является i-м правилом.
3.2.M (a, av) = pop для всех a , v *k – 1.
3.3.M ($, ) = accept.
3.4.M (X, u) = error для всех пар
(X, u) ( {$}) *k, для которых значения элементов остались не определёнными по пп. 3.1–3.3.
Ret 152 |
Ret 155 |
144 |
|
|
Построение k-предсказывающего алгоритма анализа
Пример 2.9. Рассмотрим ещё раз LL(2)- грамматику, обсуждавшуюся в примере 2.3,
справилами
1)S aAaa, 2) S bAba,
3) A b, |
4) A . |
Используя уже построенные для неё LL(2)-таблицы легко собрать управляющую таблицу для этой грамматики — см. табл. 2.4.
Ret 251
145
Пример 2.9
Таблица 2.4
Маг. |
|
|
А в а н ц е п о ч к и |
|
|||||
|
|
|
|
|
|
|
|
|
|
сим. |
|
aa |
|
ab |
ba |
bb |
a |
b |
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
||
T0 |
aT1aa,1 |
aT1aa,1 |
|
bT2ba, 2 |
|
|
|
||
T1 |
|
, 4 |
|
|
b, 3 |
|
|
|
|
T2 |
|
|
|
|
, 4 |
b, 3 |
|
|
|
a |
|
pop |
|
pop |
|
|
pop |
|
|
|
|
|
|
|
|
|
|
|
|
b |
|
|
|
|
pop |
pop |
|
pop |
|
|
|
|
|
|
|
|
|
|
|
$ |
|
|
|
|
|
|
|
|
accept |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Ret 136 |
|
Ret 253 |
|
|
|
|
|
146
Пример 2.9
Например, на входной цепочке bba этот 2- предсказывающий алгоритм анализа проходит следующие конфигурации:
(bba, T $, ) |
(bba, bT ba$, 2) pop |
0 |
2 |
(ba, T ba$, 2) |
(ba, ba$, 24) pop |
2 |
|
(a, a$, 24) |
pop ( , $, 24). |
В то же время, посредством правил 2 и 4,
|
(2) |
|
(4) |
|
получаем S |
|
bAba |
|
bba. |
lm |
lm |
147
Теорема 2.5. Алгоритм 2.3 производит правильный k-предсказывающий алгоритм анализа для любой LL(k)-грамматики.
Доказательство аналогично доказательству предыдущей теоремы 2.4.
Пусть G = (VN, VT, P, S) — LL(k)-грам-
матика и — k-предсказывающий алгоритм анализа для грамматики G, построенный посредством алгоритма 2.3.
|
|
|
Требуется доказать, что S |
|
x тогда и |
lm |
||
только тогда, когда (x, T0$, ) |
( , $, ). |
|
Ret 167 |
|
|
148
Если S
lm
x , то (xy, T0$, ) (y, $, )
По индукции докажем вспомогательное утверждение: анализатор в своем магазине воспроизводит последовательность образов открытых частей сентенциальных форм левостороннего вывода входной цепочки, если они выводимы в данной грамматике G, причём если — последовательность номеров правил, участвующих в их выводе, то образуется на выходе анализатора.
149
Если S
lm
x , то (xy, T0$, ) (y, $, )
Связь между открытыми частями сентенциальных форм и их образами в магазине LL(k)-анализатора описывается следующим гомоморфизмом:
h( X ) |
a, |
|
A, |
||
|
если X a, a VT , если X TA, L .
Область определения h легко расширить до *, и мы будем в дальнейшем предполагать, что это сделано.
150