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

spoPresentation2

.pdf
Скачиваний:
6
Добавлен:
11.05.2015
Размер:
4.74 Mб
Скачать

Распознаватели без возвратов

Другие методы позволяют обойтись без рекурсии и обрабатывать входную строку в цикле

Наличие на входе S-грамматики достаточное, но не необходимое условие

Т.е. и иная произвольная КС-грамматика может задавать язык, распознаваемый методом рекурсивного спуска, однако не существует алгоритма, позволяющего это проверить

281

Распознаватели без возвратов

Кроме того, не существует и алгоритма, позволяющего проверить, преобразуется ли произвольная КС-грамматика в S- грамматику, и алгоритма, выполняющего такое преобразование

В общем случае исключение O-правил, левой

рекурсии, цепных правил, выполнение левой факторизации могут способствовать приведению грамматики к требуемому виду, но не гарантируют этого

282

Распознаватели без возвратов

Алгоритм распознавания S-грамматики просты и эффективны

Имеют ограниченную применимость, поскольку только узкий класс грамматик отвечает заданным требованиям

283

Построение распознавателя S-грамматики

Дано: S-грамматика G(T,N,P,S)

Получить: эквивалентный ей МПА M =

(Q,A,Z,G, q0, z0, F), задающий тот же язык L(G)

= L(М)

Дополнительные условия:

Вершина стека находится слева

284

Построение распознавателя S-грамматики

1. A = T { # }, Z = N { t | t T, A o tD P } {

# }, Q = { q }, q0 = q, F = , z0 = { S# } Здесь S-

аксиома, # - маркер конца строки

2. G ( q, a, X) = ( q, E ), X o aE P, a T, X N,

EV* . Эти функции позволяют замещать

нетерминал на вершине стека на цепочку

3. G ( q, t, t ) = ( q, O ), t T, A o tD P. Функции

позволяют вытолкнуть из стека терминал совпадающий с входным символом

285

Построение распознавателя S-грамматики

Алгоритм работы распознавателя:

Читается очередной символ t входной цепочки

Если на вершине стека такой же терминал, он удаляется из стека, читающая головка перемещается (функция перехода типа 3)

Если на вершине стека нетерминал Х, то для правила ХotD он замещается цепочкой D, читающая головка

перемещается (функция перехода типа 2)

286

Построение распознавателя S-грамматики

Если автомат находится в конфигурации (q, #, #), т.е. входная строка закончилась и стек пуст, строка принимается

Во всех остальных случаях цепочка не принимается

Пример. G ( { a, b, d, p, q, x, y }, { S, X, Y }, P, S)

P = { SopX | qY; XoaXb | x; YoaYd | y }

1. A = {a, b, d, p, q, x, y, #}, Z = {S, X, Y, b, d, #}, Q = { q }, q0 = q, F = , z0 = { S# }

287

Построение распознавателя S-грамматики

 

2.1. G ( q, p, S ) = ( q, X )

// SopX

(1)

 

2.2. G ( q, q, S ) = ( q, Y )

// SoqY

(2)

 

2.3. G ( q, a, X ) = ( q, Xb )

// XoaXb (3)

 

2.4. G ( q, x, X ) = ( q, O )

// Xox

(4)

 

2.5. G ( q, a, Y ) = ( q, Yd )

// YoaYd (5)

 

2.6. G ( q, y, Y ) = ( q, O )

// Yoy

(6)

 

3.1. G ( q, b, b ) = ( q, O )

// b

(7)

 

3.2. G ( q, d, d ) = ( q, O )

// d

(8)

288

Построение распознавателя S-грамматики

Пример разбора цепочка paaxbb

( q, paaxbb#, S# ) 1 ( q, aaxbb#, X# ) 3 ( q, axbb#, Xb# ) 3 ( q, xbb#, Xbb# ) 4 ( q, bb#, bb# ) 7 ( q, b#, b# ) 7 ( q, #, #)

Поскольку автомат перешел в конечную конфигурацию, строка принимается

Номера правил из второй части (1-6) позволяют построить дерево разбора

289

LL(k) - грамматики

Обозначение грамматик по Кнуту :

{L | R}{L | R}(k)

Первый символ указывает, в каком направлении читается входная цепочка символов – L – слева направо, R – справа налево

Второй символ - левосторонний (L) или правосторонний (R) вывод используется

k – число предварительно просматриваемых символов входной строки для выбора очередного правила грамматики

290

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]