Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции Дискретная Математика.doc
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
486.4 Кб
Скачать

7.2 Построение ка–распознавателей для праволинейных грамматик

Праволинейной называется такая контекстно–свободная грамматика(КС–грамматика), в правых частях правил которой имеется не более одного нетерминала и этот нетерминал заканчивает правило.

Примечание. В множестве правил праволинейных грамматик допускаются эпсилон–правила (правила вида X т.е. нетерминал преобразуется в пустую цепочку).

Праволинейную грамматику всегда можно преобразовать в автоматную, для которой построение КА–распознавателя рассмотрено в предыдущем разделе. Алгоритм преобразования правил следующий:

а) преобразовать правила вида A xyzB, где xyz – цепочка терминалов произвольной длины (в данном случае | xyz | = 3 ); вводят дополнительные нетерминалы по следующему принципу:

A x<yzB>; <yzB> y<zB>; <zB> zB (в угловых скобках записаны цепочки, для обозначения которых вводят новые нетерминалы). Таким образом происходит замена исходного правила несколькими, которые соответствуют правилам автоматной грамматики. В нашем случае:

A xM

A xyzB M yN

N zB

б) преобразовать правила вида A xyz, где xyz – цепочка терминалов произвольной длины (в данном случае | xyz | = 3 ); вводится дополнительный нетерминал F, который в КА–распознавателе будет служить финишным состоянием (подробнее см. разд. 7.1), а в преобразованной грамматике добавляется правило F .

A xyzF ( преобразование см. п. а)

A xyz

F

В результате таких преобразований получим автоматную грамматику, эквивалентную исходной праволинейной. Как строить для автоматной грамматики КА–распознаватель описано в разделе 7.1.

Примечания:

1 При построении таблицы переходов в последнем столбце ставить "Доп." для всех состояний КА–распознавателя, для которых в полученной грамматике есть эпсилон-правила.

2 Полученный КА–распознаватель обязательно проверить на достижимость и эквивалентность состояний; при необходимости выполнить процедуру преобразования в минимальный КА (переименование состояний не изменит множества распознаваемых цепочек).

7.3 Построение мп–распознавателей для s – грамматик

КС–грамматика (2-й тип грамматики) называется S–грамматикой, если правые части всех правил этой грамматики начинаются с терминальных символов и для правил с одинаковыми левыми частями правые части начинаются с различных терминалов.

Правила имеют вид Х y , где y – терминал; – любая цепочка терминалов и нетерминалов, возможно пустая (S-грамматика не содержит эпсилон–правил).

Для S–грамматики существует формальная процедура построения МП–распознавателя с одним состоянием S по следующему алгоритму:

1 Входной алфавит МП–распознавателя V = {VT,--|}.

2 Множество магазинных символов { VN, VT1, #}, где VT1 – то подмножество терминальных символов грамматики, которые встречаются в цепочках правил Р.

3 Начальная конфигурация МП–распознавателя – в магазине находится начальный символ грамматики (например для грамматики G[Z] – Z #).

Примечание. Условимся запись содержимого магазина вести так, чтобы верхний символ магазина (тот символ, с которым работает МП–распознаватель) занимал самую левую позицию.

4.Управляющая таблица строится так: столбцы таблицы – символы входного алфавита (последний символ –|); строки таблицы – магазинные символы. Заполнение управляющей таблицы:

а) для правил грамматики вида Х y ( – непустая цепочка терминалов и нетерминалов; y – терминал) клетка управляющей таблицы заполняется в соответствии с рис. а (см. ниже);

б) для правил грамматики вида Х y клетка управляющей таблицы заполняется в соответствии с рис. б (см. ниже).

В соответствии с пп. а и б обрабатывается все множество Р правил грамматики;

в ) клетка таблицы на пересечении терминал – магазинный символ и тот же терминал – входной алфавит заполняется в соответствии с рис. в (см. ниже).

г) все клетки последнего столбца таблицы (–|) заполняются "Отв." кроме клетки на пересечении со строкой #, в которой ставится "Доп.".

д) оставшиеся незаполненными клетки управляющей таблицы заполняются символом Е(error) – "состояние ошибки".

Пример: Задана грамматика G[S] = (VT = {a,b};

VN = {S,R}; S; P), где P = { S abR (1);S bRbS (2);R a (3);

R bR (4) }.

Построить МП–распознаватель для языка, порождаемого этой грамматикой.

Решение

1 Выполним проверку нетерминалов грамматики на достижимость и продуктивность: S достижим (начальный символ); R достижим (правило (1)); R продуктивен (правило (3)); S продуктивен (правило (1)).

2 Построим МП–распознаватель (по виду правил делаем вывод, что это S–грамматика):

– входной алфавит V={a,b,–|};

  • множество магазинных символов {S,R,b,#};

  • начальное содержимое магазина S,#;

  • управляющая таблица имеет вид (см. след.стр.);

3 Проверим работу МП–распознавателя.

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

2 1 4 3 3 (номера правил)

S bRbS bRbabR bRbabbR bRbabba bababba

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

Работу МП–распознавателя по разбору цепочки bababba представим в виде таблицы:

Необраб. цепочка

Обрабат. символ

Верхний символ

магазина

Содержимое

магазина

Действие с

магазином

bababba–|

b

S

S#

Зам.RbS

ababba–|

a

R

RbS#

Выт.R

babba–|

b

b

bS#

Выт.b

abba–|

a

S

S#

Зам.bR

bba–|

b

b

bR#

Выт.b

ba–|

b

R

R#

Зам.R

a–|

a

R

R#

Выт.R

|

|

#

#

Допустить

Контрольная цепочка распознается построенным МП–распознавателем.

Работу МП–распознавателя можно трактовать так: на каждом шаге процесса обработки цепочки магазин представляет следующее утверждение о цепочке необработанных символов (включая текущий):

"вся цепочка будет допущена тогда и только тогда, когда оставшаяся необработанной цепочка входных символов выводима из цепочки символов, находящихся в магазине".