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

Пример 1-предсказывающего алгоритма анализа

 

 

 

Табл. 2.1

 

 

 

 

X

А в а н ц е п о ч к и

 

 

 

a

b

 

 

 

 

 

 

S

aBS, 1

b, 2

error

 

 

 

 

B

a, 3

bSB, 4

error

 

 

 

 

a

pop

error

error

 

 

 

 

b

error

pop

error

 

 

 

 

$

error

error

accept

 

 

 

 

81

Пример 1-предсказывающего алгоритма анализа

Используя эту таблицу, алгоритм анализировал бы входную цепочку abbab следующим образом:

(abbab, S$, ) (abbab, aBS$, 1) (bbab, BS$, 1) (bbab, bSBS$,14) (bab, SBS$,14) (bab, bBS$, 142)

(ab, BS$, 142) (ab, aS$, 1423)

(b, S$, 1423) (b, b$, 14232) ( , $, 14232).

82

Пример 1-предсказывающего алгоритма анализа

Итак, (abbab) = 14232. Нетрудно проверить, что 14232 — действительно левый анализ abbab: достаточно лишь произвести левосторонний вывод с использованием правил в указанной последовательности:

 

(1)

(4)

 

( 2)

(3)

 

 

 

S

 

 

 

 

lm

aBS lm

abSBS lm abbBS lm abbaS

 

( 2)

 

 

 

 

 

 

 

 

 

 

lm

abbab.

 

 

 

 

 

 

 

 

Следовательно,

— правильный

предсказывающий

алгоритм

анализа

грамматики G.

 

 

 

( 2) lm

1-

для

83

Пример 2.5. dpdt, моделирующий анализатор

Пример 2.5. Построим детерминированный магазинный преобразователь, моделирующий k-предсказывающий алгоритм анализа предыдущего примера.

Поскольку грамматика является простой, то нетрудно заметить, что за движением типа 1 сразу же следует pop-движение, продвигающее анализатор к следующему символу входной цепочки и стирающее верхний символ магазина, который всегда оказывается равным входному.

84

Пример 2.5. dpdt, моделирующий анализатор

Поэтому в отличие от 1-предсказываю- щего анализатора эквивалентный dpdt будет продвигаться по входной цепочке при каждом движении. Соответственно, в магазин он сразу будет писать правую часть правила без первого символа.

85

Пример 2.5. dpdt, моделирующий анализатор

Кроме того, конец входной цепочки будет маркирован, чтобы контролировать его достижение.

Принимая во внимание сказанное, положим

P = ({q0, q, accept}, {a, b, $}, {S, B, a, b, $}, {1, 2, 3, 4}, , q0, $, {accept}), где

86

Пример 2.5. dpdt, моделирующий анализатор

1)(q0, , $) = (q, S $, ) — воспроизводит начальную конфигурацию;

2)(q, a, S) = (q, BS, 1) — воспроизводит движения M(S, a) = (aBS, 1); M(a, a) = pop;

3)(q, b, S) = (q, , 2) — воспроизводит движения M(S, b) = (b, 2); M(b, b) = pop;

4)(q, a, B) = (q, , 3) — воспроизводит движения M(B, a) = (a, 3); M(a, a) = pop;

5)(q, b, B) = (q, SB, 4) — воспроизводит движения M(B, b)= (bSB,4); M(b, b) = pop;

6)(q, $, $) = (accept, , ) — сигнализирует о приёме.

87

Пример 2.5. dpdt, моделирующий анализатор

Легко проверить, что (w$, ) e(P) = (P) тогда и только тогда, когда (w) = .

Посмотрим, как действует этот преобразователь на той же входной цепочке abbab:

(q0, abbab$, $, )

(q, abbab$, S$, )

(q, bbab$, BS$, 1)

(q, bab$, SBS$,14)

(q, ab$, BS$, 142)

(q, b$, S$, 1423)

 

 

 

 

 

 

(q, $, $, 14232)

(accept, , , 14232).

 

 

 

 

 

 

Как видим, (abbab$, 14232) e(P) = (P) .

88

§ 2.4. Построение 1-предсказывающего алгоритма анализа по LL(1)-грамматике

Алгоритм 2.1: построение LL(1)-анализатора.

Вход: G = (VN, VT, P, S) — LL(1)-грамматика.

Выход: — правильный 1-предсказываю- щий алгоритм анализа для грамматики G.

Метод. Положим

= ( , , , M, X0, $), где

= VT, = VN VT, = {1, 2, …, #P}, X0 = S.

Ret 97 Ret 124 Ret 169 Ret 259

89

Алгоритм 2.1: построение LL(1)-анализатора

Управляющая таблица M на множестве ( {$}) ( { }) определяется следующим образом:

1) Если A является i-м правилом во множестве правил P, то

M(A, a) = ( , i)

для всех a FIRST1

( ),

a .

 

 

G

 

 

 

 

Кроме того, если

FIRST

G

( ),

1

 

 

 

M(A, b) = ( , i)

для всех b FOLLOW1G( A);

то

Ret 97

Ret 100

 

90

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