Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
automats.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
5 Мб
Скачать
☆

2.4. Автоматы и грамматики [ 7 ]

Автомат распознаёт цепочку  над V , если, находясь в начальном состоянии, автомат получает на вход цепочку  последовательно символ за символом, и после завершения цепочки оказывается в выделенном состоянии w0 . Для построения автомата, распознающего язык, порождаемый А-грамматикой G, необходимо каждому вспомогательному символу wW поставить в соответствие состояние автомата, в качестве множества терминальных символов взять множество входных символов автомата, каждому правилу w::vw1 поставить в соответствие переход между состояниями w и w1 под воздействием входного символа v. Начальному состоянию автомата соответствует w1 ,а выделенному состоянию w0 .

В рассматриваемом примере построим граф автомата (Рис. 12).

Рис.12

Для “вычисления” смысла цепочки можно ввести выходные символы автомата, вызывающие соответствующие семантические программы.

В рассматриваемом примере это :

У1) S:=d

У2) S:=2*S=d

У3) M:=1

У4) M:=M/2; S:=S+d*M

У5) выдача числа S

У6) сообщение о синтаксической ошибке

Структура автомата, который можно назвать интерпретирующим, приведена на Рис. 13.

Рис. 13

Правила А-грамматики можно записать в виде:

wi ::vj wk (jJi, kKij, iI),

причём wk WU{ w0 }, где w0 – пустой символ.

Если существует | Kij |>1, то автомат, построенный по грамматике G с помощью изложенной выше процедуры, будет недетерминированным.

Например, системе правил

w1 :: v1 w2 | v2 w3

w2 :: v2 | v2 w2

w3 :: v3 | v3 w3

соответствует недетерминированный автомат, граф которого показан на рис. 14.

Рис.14

Для построения детерминированного автомата преобразуем недетерминированный автомат путём введения новых состояний и правил на основе следующих соотношений

w1 :: = vj { wk | kK1j };

{wi | iM} :: = vj { wk | k Kij ,iM} (iUJi ),

где множество вида { wt | tT} соответствует новым состояниям.

В рассматриваемом примере получим

J1 = {1} , J2 = {2}, J3 ={3};

K11 ={2,3}, K22 ={0,2}, K33 = {0,3};

w1 ::=v1 {w2 , w3 }

{w2 , w3 } ::=v2 {w0 , w2 } | v3 {w0 , w3 };

{w0 , w2 } ::=v2 {w0 , w2 };

{w0 , w3 } ::=v3 {w0 , w3 }.

Граф переходов детерминированного автомата показан на Рис. 15

Рис.15

Выделенными состояниями являются {w0 , w2 } и {w0 , w3 }.

Завершение работы автомата в этих состояниях означает распознование цепочки языка.

В заключении приведён пример бесконтекстной грамматики, не являющейся автоматной. Эта грамматика, распознающая правильные скобочные выражения, имеет правила

w1::={w2 , w3 }; w2 ::=(w2) | w0 ; w3 ::=w2 | w0 ,

где w1 – начальный символ

w0 - пустой символ

( , ) - терминальные символы.

Грамматика реализуется автоматом с бесконечной памятью, имеющим граф переходов, изображённый на рис.16.

Рис. 16

Состояние является одновременно и начальным и выделенным заключительным состоянием. Распознавание цепочки ( ( ( ( ( ( ( (

1 2 3 4 5 6 7 8

показано на рис. 17

Рис. 17

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