Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
126
Добавлен:
16.04.2015
Размер:
1.47 Mб
Скачать

Алгоритм 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), FTE$

, 14)

((a + a) , (E) TE$

, 147)

(a + a) , E) TE$

, 147)

(a + a) , TE) TE$

, 1471)

(a + a) , F TE) TE$ , 14714)

94

Пример 2.6: LL(1)-анализатор арифметических выражений

(a + a) , a TE) TE$

, 147148)

(+a)

, TE) TE$

, 147148)

(+a)

, _E) TE$

, 1471486)

(+a)

,+TE) TE$

, 14714862)

(a)

, TE) TE$

, 14714862)

(a)

, F TE) TE$

, 147148624)

 

 

 

 

 

(a)

, a TE) TE$

, 1471486248)

( )

, TE)TE$

, 1471486248)

( )

, _E) TE$

, 14714862486)

( )

, _) TE$

, 147148624863)

95

Пример 2.6: LL(1)-анализатор арифметических выражений

( , TE$ , 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

Соседние файлы в папке lectures