 
        
        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)
 ( , _E’$ , 1471486248636)  ( , _$ , 14714862486363).
 ( , _$ , 14714862486363).
Итак,  a + a)) = 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-предсказы- вающий алгоритм анализа для грамматики
 — 1-предсказы- вающий алгоритм анализа для грамматики
G, построенный согласно алгоритму 2.1.
Требуется доказать, что только тогда, когда (x, S $, )
| 148 | Ret 167 | 
S
| 
 | 
 | 
| 
 | |
| lm | x тогда | 
( , $, ).
и
97
 
Теорема 2.4.
По индукции докажем вспомогательное утверждение, общий смысл которого состоит в том, что анализатор в своем магазине воспроизводит последовательность открытых частей сентенциальных форм левостороннего вывода входной цепочки, тогда и только тогда, когда она выводима в данной грамматике G, причём если — последовательность номеров правил, участвующих в её выводе, то образуется на выходе анализатора.
98
 
Если S
 lm
x , то (xy, S$, )  (y, $, )
 (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, $, )
 (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
