Алгоритм построения k-предсказывающего алгоритма трансляции
* |
k |
* {pop, pass, accept, |
|
M: ( {$}) |
|
error} — управляющая таблица, которая строится по следующим шагам:
1. M (TA, L, u) = x0 y0’TA1,Y1x1 y1’…TAm,Ymxmym’,
если
TA, L(u) = (A x0 A1x1… Am xm, Y1, …, Ym ),
и
A x0 A1x1 … Am xm, y0 A1 y1 … Am ym R — i-е правило схемы.
* |
k |
, а yi’ = h (yi), i = 0, 1, 2, …, m. |
|
Здесь u |
|
Алгоритм построения k-предсказывающего алгоритма трансляции
2. M (a, u) = pop, если a , u = av, v * k 1 .
Такой управляющий элемент определяет переход между конфигурациями:
(x, b’ $, y) (x, $, yb).
4. |
M ($, ) = accept. |
|
5. |
M (X, u) = error |
|
|
* |
k |
|
, для которых |
для всех (X, u) ( {$}) |
элементы M не определены по пп. 1– 4.
Пример построения 2-предсказывающего алгоритма трансляции
Пример 2.13.
Пусть T = ({S, A}, {a, b}, {a, b, e, < , >}, R, S) ― sdts, где
R= {(1) S aAaa, aAaa;
(2)S bAba, < A > a;
(3)A b, b;
(4)A , e}.
Входная грамматика этой схемы — не сильная LL(2)-грамматика. В примере 2.9 для неё был построен 2-предсказывающий алгоритм анализа.
Пример построения 2-предсказывающего алгоритма трансляции
Применяя алгоритм 2.8 к данной схеме, получаем следующий 2-предсказывающий алгоритм трансляции, реализующий определяемую ею трансляцию:
= ({a, b}, {T0, T1, T2, a, b, a’, b’, e, < , > , $}, {a, b, e, < , > }, M, T0, $),
где M представляется управляющей табл. 2.7.
Пример построения 2-предсказывающего алгоритма трансляции
Для иллюстрации работы только что построенного 2-предсказывающего алгоритма трансляции рассмотрим обработку входной цепочки bba:
(bba, T0$, ) |
(bba, b<T2 b a>a′$, ) |
(ba, < T2 b a>a′$, ) |
(ba, T2 b a > a′$, <) |
(ba, e b a>a′$, <) |
(ba, b a>a′$, < e) |
(a, a>a′$, < e) |
( , > a′$, < e) |
|
( , a′$, < e > ) |
( , $, < e > a). |
|
Итак, (bba) = < e >a. |
|
|
|
|
|
|
|
* |
Нетрудно проверить, что (S, S) |
T (bba,<e>a). |
k-Предсказывающий алгоритм трансляции
Замечание 2.2. Если входная грамматика схемы сильная LL(k)-грамматика, то можно обойтись без построения LL(k)-таблиц, как показано на следующем примере.
Пример 1-предсказывающего алгоритма трансляции
Пример 2.14.
Пусть T = |
({E, E’, T, T’, F}, {a, +, *, (, )}, |
|
|
{a, +, *}, R, E) ― sdts, где |
|
R = {(1) E TE’, TE’; |
’ |
|
(2) E’ +TE’, T+E’; |
E T E |
|
FT’ E’ |
|
(3) E |
’ |
|
(E) T’ E’ |
|
|
, ; |
|
|
|
(4) T FT , FT ; |
|
|
|
|
|
|
(TE’) T’ E’ |
(5) T |
|
|
|
E TE’ |
|
|
*FT , F *T ; |
|
(6) T , ; |
|
FT’ E’ |
(7) F (E), E; |
|
FT’ |
|
(8) F a, a}.
Пример 1-предсказывающего алгоритма трансляции
Очевидно, что T — простая семантически однозначная sdts с входной грамматикой
LL(1).
Используя модификацию алгоритма 2.8 с учётом леммы 1.1, алгоритмов 2.1 и 2.7 получаем следующий 1-предсказывающий алгоритм трансляции:
= ({a, +, *, (, )}, {E, E’, T, T’, F, a, +, *, (, ), a’, +’, *’, $}, {a, +, *}, M, E, $), где M
представлена в табл. 2.8.
Пример 1-предсказывающего алгоритма трансляции
Таблица 2.8
Маг. |
|
|
А в а н ц е п о ч к и |
|
|
|
|
|
|
|
|
|
|
|
сим. |
a |
+ |
|
* |
( |
|
) |
|
|
|
|
|
|
|
|
|
|
E |
TE′ |
|
|
|
TE′ |
|
|
|
|
|
|
|
|
|
|
|
E′ |
|
+T+′E′ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
T |
FT′ |
|
|
|
FT′ |
|
|
|
|
|
|
|
|
|
|
|
|
T′ |
|
|
|
*F*’T’ |
|
|
|
|
|
|
|
|
|
|
|
|
|
F |
aa′ |
|
|
|
(E) |
|
|
|
|
|
|
|
|
|
|
|
|
(Ср. с анализатором для входной грамматики примера 2.6).