
formal_language_theory / lectures / unit_11
.pdf
Алгоритм 2.1: построение LL(1)-анализатора
2)M (a, a) = pop для всех a VT ;
3)M ($, ) = accept;
4)M (X, a) = error на всех парах
(X, a) ( {$}) ( { }),
для которых значения элементов, остались не определёнными по пп. 1–3.
Ret 94
91

Пример 2.6: LL(1)-анализатор арифметических выражений
Пример 2.6. Посредством алгоритма 2.1 построим LL(1)-анализатор для LL(1)-грамматики
G = ({E, E’, T, T’, F}, {a, +, *, (, )}, P, E), где
P = {(1) E TE’, |
(2) |
E’ +TE’, |
|
(3) E’ , |
(4) |
T FT’, |
|
(5) |
T’ *FT’, |
(6) |
T’ , |
(7) |
F (E), |
(8) |
F a}. |
Положим |
|
|
|
= ({a, +, *, (, )}, {E, E’, T, T’, F, a, +, *, (, )}, |
{1, 2, 3, 4, 5, 6, 7, 8}, M, E, $),
где M дана в виде табл. 2.2. В ней пустые клетки
соответствуют значениям error. |
Ret 128 Ret 179 |
|
92

Маг-ные |
|
А в а н ц е п о ч к и |
|
||||
символы |
|
|
|
|
|
|
|
a |
+ |
* |
( |
) |
|
||
|
|||||||
|
|
|
|
|
|
|
|
E |
TE ′, 1 |
|
|
TE ′, 1 |
|
|
|
|
|
|
|
|
|
|
|
E′ |
|
+TE ′, 2 |
|
|
, 3 |
, 3 |
|
|
|
|
|
|
|
|
|
T |
FT ′, 4 |
|
|
FT ′, 4 |
|
|
|
|
|
|
|
|
|
|
|
T′ |
|
, 6 |
*FT ′, 5 |
|
, 6 |
, 6 |
|
|
|
|
|
|
|
|
|
F |
a, 8 |
|
|
(E), 7 |
|
|
|
|
|
|
|
|
|
|
|
a |
pop |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+ |
|
pop |
Таб. |
2.2. |
|||
|
|
|
|||||
* |
|
|
pop |
|
|
|
|
|
|
|
|
|
|
|
|
( |
|
|
|
pop |
|
|
|
|
|
|
|
|
|
|
|
) |
|
|
|
|
pop |
|
|
|
|
|
|
|
|
|
|
$ |
|
|
|
|
|
accept |
|
|
|
|
|
|
|
|
Ret 128 |
Ret 260 |
93 |
|

Пример 2.6: LL(1)-анализатор арифметических выражений
1-Предсказывающий алгоритм анализа, использующий эту управляющую таблицу, проанализи- ровал бы входную цепочку (a + a), совершив следующую последовательность движений:
((a + a) , E$ |
, ) |
((a + a) , TE’$ |
, 1) |
(( a + a), FT’E’$ |
, 14) |
((a + a) , (E) T’E’$ |
, 147) |
(a + a) , E) T’E’$ |
, 147) |
(a + a) , TE’) T’E’$ |
, 1471) |
(a + a) , F T’E’) T’E’$ , 14714)
94

Пример 2.6: LL(1)-анализатор арифметических выражений
(a + a) , a T’E’) T’E’$ |
, 147148) |
|||
(+a) |
, T’E’) T’E’$ |
, 147148) |
||
(+a) |
, _E’) T’E’$ |
, 1471486) |
||
(+a) |
,+TE’) T’E’$ |
, 14714862) |
||
(a) |
, TE’) T’E’$ |
, 14714862) |
||
(a) |
, F T’E’) T’E’$ |
, 147148624) |
||
|
|
|
|
|
(a) |
, a T’E’) T’E’$ |
, 1471486248) |
||
( ) |
, T’E’)T’E’$ |
, 1471486248) |
||
( ) |
, _E’) T’E’$ |
, 14714862486) |
||
( ) |
, _) T’E’$ |
, 147148624863) |
95

Пример 2.6: LL(1)-анализатор арифметических выражений
( , T’E’$ , 147148624863) ( , _E’$ , 1471486248636)
( , _$ , 14714862486363).
Итак, a + a)) = 14714862486363.
Нетрудно
E lm
проверить, что
(a + a), где = 14714862486363.
96

Теорема 2.4. Алгоритм 2.1 производит правильный 1-предсказывающий алгоритм анализа для любой LL(1)-грамматики.
Доказательство. Пусть G = (VN, VT, P, S)
— LL(1)-грамматика, и — 1-предсказы- вающий алгоритм анализа для грамматики
G, построенный согласно алгоритму 2.1.
Требуется доказать, что только тогда, когда (x, S $, )
148 |
Ret 167 |
S
|
|
|
|
lm |
x тогда |
( , $, ).
и
97

Теорема 2.4.
По индукции докажем вспомогательное утверждение, общий смысл которого состоит в том, что анализатор в своем магазине воспроизводит последовательность открытых частей сентенциальных форм левостороннего вывода входной цепочки, тогда и только тогда, когда она выводима в данной грамматике G, причём если — последовательность номеров правил, участвующих в её выводе, то образуется на выходе анализатора.
98

Если S
lm
x , то (xy, S$, ) (y, $, )
|
|
|
|
x , где |
|||
I. Докажем сначала, |
что если S |
|
|||||
lm |
|||||||
x * — закрытая часть, а |
|
V |
)* — |
||||
(V |
N |
||||||
|
|
|
|
T |
|
||
открытая часть данной |
сентенциальной |
||||||
формы x , то для |
любой |
цепочки y *, |
|||||
такой, что |
|
|
|
|
|
|
|
FIRST1G( y) FIRST1G( ), |
|
|
|
||||
анализатор совершает переход |
|
|
|
|
|||
(xy, S$, ) |
(y, $, ). |
|
|
|
Индукция по l = .
99

Если S
lm
x , то (xy, S$, ) (y, $, )
База. Пусть l = 1, т. е. = i, где i — номер некоторого правила грамматики.
Пусть S ( i )
lm
что |
FIRST1 ( y) |
|
G |
x и y *— такая цепочка,
FIRST |
G |
( ), |
|
1 |
|||
|
|
На единственном шаге этого вывода применялось правило вида S x , имеющее номер i.
Для всех |
a FIRST |
G |
(x FOLLOW |
G |
(S)) |
|
|
||||
1 |
1 |
|
согласно алгоритму 2.1
M(S, a) = (x , i).
100