Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алгоритмы построения анализаторов из учебника.doc
Скачиваний:
49
Добавлен:
01.05.2014
Размер:
441.34 Кб
Скачать

Преобразователь с магазинной памятью (сокращенно мп - преобразователь)

-это восьмёрка P=(Q,T,D,Г,d,q0,Z0,F), где

D - выходной алфавит

d - функция переходов - отображение множества Q x(T U {e})x Г в множество конечных подмножеств Q x Г*, т.е. d :Q x(T U {e}) x Г -> {Q x Г* x D* };

Конфигурацией МП-автомата называется четвёрка (q,w,u,y)<-Q x T* x Г*

Начальной конфигурацией МП - преобразователя P называется конфигурация вида (q0,w,Z0,e)

Опишем lr(k)-алгоритм разбора.

Вход

Анализируемая цепочка z = t1 t2 … tj … tn  T*, где j – номер текущего символа входной цепочки, находящегося под читающей головкой.

Управляющая таблица T (множество LR(k)-таблиц) для LR(k)-грамматики

G = < T, N, S, R >.

Выход

Если z  L(G), то правый разбор цепочки z, в противном случае – сигнал об ошибке

Описание алгоритма

j :=0.

j := j + 1. Если j > n, то выдать сообщение об ошибке и перейти к п. 5.

Определить цепочку u следующим образом:

а) если k = 0, то u = tj ;

б) если k  1 и j+k-1 n, то u = tj tj+1 … tj+k-1 – первые k символов цепочки

tj, tj+1, …, tn ;

в) если k  1 и j+k-1 > n, то u = tj tj+1 … tn– остаток входной цепочки.

Применить функцию действия f из строки таблицы Т, отмеченной верхним символом магазина T, к цепочке u.

а) f(u) =ПЕРЕНОС. Определить функцию переходов g(tj) из строки таблицы Ʈ, отмеченной символом Т из верхушки ма­газина. Если g(tj) = T’ и T’ Vp {}, то записать Т’ в ма­газин и перейти к п.2. Если g(tj) = ОШИБКА, то выдать сиг­нал об ошибке и перейти к п. 5.

б) f(u) = (СВЕРТКА, i) и A   – правило вывода с но­мером i грамматики G. Удалить из верхней части магазина  символов, в результате чего в верхушке магазина ока­жется символ T’ Vp {}, и выдать номер правила i на вы­ходную ленту. Определить символ T = g(A) из cтроки таблицы Т, отмеченной символом T’, записать его в магазин и перейти к п. 3.

в) f(u) = ОШИБКА.Выдать сообщение об ошибке и перейти к п. 5.

г) f(u) = ДОПУСК. Объявить цепочку, записанную на вы­ходной ленте, правым разбором входной цепочки z.

5) Останов.

Пример

S0  S

S  aAb

S  c

A  bS

A  Bb

B  aA

B  c

T

f(u)

g(X)

a

b

c

a

b

c

S

A

B

S0

Д

a1

П

П

П

a5

b3

c6

A1

B4

A1

П

П

П

b1

b1

С,1

С,1

С,1

С,1

c2

С,2

С,2

С,2

С,2

b3

П

П

П

a1

c2

S3

S3

С,3

С,3

С,3

С,3

B4

П

П

П

b4

b4

С,4

С,4

С,4

С,4

a5

П

П

П

a5

b3

c6

A5

B4

A5

С,5

С,5

С,5

С,5

c6

С,6

С,6

С,6

С,6

П

П

П

a1

c2

S0

Рис. 4.6

abcb.

Начальная конфигурация алгоритма – (, abcb, )

Для строки управляющей таб­лицы, отмеченной символом , f(A) = ПЕРЕНОС, а g(A)=a1, по­этому в магазин записывается символ, входная головка сдвигается на один символ вправо, а алгоритм перехо­дит в конфигурацию (a1, bcb, ). Для строки таблицы, от­меченной символом a1, f(b) = ПЕРЕНОС, а g(b) = b3, следова­тельно, алгоритм перейдет в конфигурацию (a1b3, cb, ). Далее магазин перейдет в конфигурацию (a1b3c2, b, ).

Рассмотрим теперь строку управляющей таблицы Т, поме­ченную грамматическим вхождением с2. В этом случае f(b) = (С. 2), значит, необходимо выполнить свертку с использованием правила (2) S  c. Правая часть этого правила содержит только один сим­вол, поэтому удаляем из магазина символ с2 и определяем зна­чение функции переходов для символа S из левой части правила (2) в отроке управляющей таблицы Т, отмеченной символом b3, который стал верхним символом магазина. Теперь g(S)=S3 и, следовательно, алгоритм перейдет в конфигурацию

(a1b3 S3, b, 2), и в выходную цепочку запишется 2 (номер использованного правила).

(a1b3 S3, b, 2) ÷ (a1A1, b, 23) ÷ (a1A1b1, , 23) ÷ (S0, , 231),

где конфигурация (S0, , 231) является заключительной, а цепочка 231 – правым разбором цепочки abcb.