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

nC1DMY1V3A

.pdf
Скачиваний:
4
Добавлен:
15.04.2023
Размер:
1.71 Mб
Скачать

Процедура обнаружения недостижимых состояний основана на следующей процедуре получения достижимых состояний из исходной таблицы переходов:

1.Начать список начальным состоянием.

2.Для каждого состояния, уже внесенного в список, добавить все еще не занесенные в него состояния, которые могут быть достигнуты из этого нового состояния под действием одного входного символа.

Если эта процедура перестает давать новые состояния, то все достижимые состояния получены, а все оставшиеся состояния можно считать недостижимыми и удалить из автомата.

Пример. Рассмотрим конечный автомат и определим достижимость его состояний (рис. 4.7).

Список достижимых состояний: S0, S1, S5, S2, S7, S3 .

Исходный автомат

 

Результат применения процедуры

 

0

1

 

 

 

0

1

 

S0

S1

S5

 

0

S0

S1

S5

0

S1

S2

S7

 

1

S1

S2

S7

1

S2

S2

S5

 

1

S2

S2

S5

1

S3

S5

S7

 

0

S3

S5

S7

0

S4

S5

S6

 

0

S5

S3

S1

0

S5

S3

S1

 

0

S7

S0

S1

1

S6

S8

S6

 

1

 

 

 

 

S7

S0

S1

 

1

 

 

 

 

S8

S3

S6

 

0

 

 

 

 

Рис. 4.7. Удаление недостижимых состояний конечного автомата

Определение 4.6. Автомат называется приведенным, если он не содержит недостижимых состояний и никакие два его состояния не эквивалентны друг другу.

Утверждение 4.2. Для каждого конечного автомата существует эквивалентный ему приведенный автомат, причем единственный с точностью до имен состояний.

Конечные автоматы и автоматные грамматики

Как известно, конечный автомат распознает множество цепочек, называемое регулярным множеством (регулярным языком). При этом классификация по Хомскому выделяет класс автоматных грамматик как механизм порождения регулярного языка.

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

40

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

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

1.Терминальным множеством грамматики становится входное множество автомата.

2.Нетерминальным множеством становится множество состояний автомата, а начальным символом – начальное состояние.

3.Если в автомате есть переход из состояния A в состояние B по входному символу x, то в грамматику вводится правило:

<A> x<B>

4. Если A – некоторое допустимое состояние автомата, то в грамматику надо ввести правило:

<A> ε

Чтобы убедиться, что действительно построена грамматика для множества цепочек, определенного автоматом, нетерминал, который соответствует состоянию A, получает следующую интерпретацию:

<цепочка, допускаемая автоматом, начавшим работу в состоянии A> Тогда правило <A> x<B>, построенное на шаге 3, интерпретирует-

ся следующим образом:

<цепочка, допускаемая автоматом, начавшим работу в состоянии A, может представлять собой символ x с приписанной к нему цепочкой, которая допускается автоматом, начавшим работу в состоянии B>.

Правило <A> ε, построенное на шаге 4, интерпретируется так: <цепочка, допускаемая автоматом, начавшим работу в (допускаю-

щем) состоянии A, может быть пустой>.

Таким образом, правила грамматики отражают процесс работы конечного автомата.

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

Пример. Пусть задан конечный автомат (рис. 4.8).

 

a

b

 

 

 

 

 

S

A

B

1

 

 

 

 

A

B

A

0

 

 

 

 

B

S

A

1

 

 

 

 

Рис. 4.8. Конечный автомат для регулярного множества

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

41

<S>

a<A>

<S>

b<B>

<S>

ε

<A>

a<B>

<A>

b<A>

 

 

<B>

a<S>

<B>

b<A>

<B>

ε

Цепочка aba допускается автоматом, так как она вызывает следующую последовательность переходов:

где S – начальное состояние, а B – допускающее состояние автомата. Вывод цепочки aba получается путем применения правил, соответст-

вующих данной последовательности переходов, и последующему удалению оставшегося нетерминала, применением к нему – правила:

<S> =>a<A> =>ab<A> =>aba<B> =>aba

И наоборот, для цепочки ba, если есть вывод

<S> =>b<B> =>ba<S> =>ba

получаем последовательность переходов и применение заключительного – правила показывает, что состоя-

ние S является допускающим.

Недетерминированные и детерминированные конечные автоматы

Недетерминированные автоматы являются общим случаем конечных автоматов, которые при таком подходе определяются как детерминированные.

Определение 4.7. Под недетерминированным конечным автоматом (НДКА) понимается математическая модель устройства для распознавания цепочек входного языка, в которой не выполняются условия однозначности функций переходов.

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

Недетерминированный автомат можно представить с помощью таблицы переходов, в которую вносятся следующие изменения:

1.Каждый элемент таблицы должен содержать множество состояний (это множество указывается перечислением, без скобок).

2.Начальные состояния указываются с помощью стрелок, если стрелок нет, значит, начальное состояние одно – первое.

Пример недетерминированного конечного распознавателя:

1.Входной алфавит: {0, 1}

2.Множество состояний: {А, В, С}

3.Начальные состояния: {А, В}

42

4. Функция переходов:

 

(А, 0) = {А, В}

(А, 1) = {С}

(В, 0) = {В}

(В, 1) = {С}

(С, 0) =

(С, 1) = {А, С}

5. Финальные состояния: {В, С} Работу недетерминированного автомата (рис. 4.9) можно интерпре-

тировать двояко [3].

 

 

 

 

0

1

 

А

А,В

С

0

В

В

С

1

 

 

 

 

С

 

А,С

1

Рис. 4.9. Таблица переходов НДКА

Предположим, автомат находится в состоянии А и на вход подается цепочка с текущим символом 0:

1.Автомат осуществляет выбор, переходя либо в состояние А, либо

всостояние В. Автомат продолжает работать, и на каждом шаге делает очередной выбор. Для получения результата достаточно только одной последовательности выборов, приводящей к допускающему состоянию, и автомат будет допускать эту последовательность, несмотря на то, что можно осуществить множество других последовательностей выборов, приводящих в отвергающее состояние;

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

Эти две интерпретации эквивалентны.

Назначение недетерминированного автомата состоит в определении допустимого множества входных цепочек. Строится НДКА в начале исследования, когда имеется необходимость учета многих факторов и нет однозначного понимания алгоритма распознавания.

Понятие недетерминированного конечного распознавателя приобретает практическое значение благодаря следующему факту: для каждого недетерминированного конечного распознавателя существует детерминированный конечный автомат (ДКА), который допускает в точности те же входные цепочки, что и недетерминированный. То есть, имея НДКА, можно легко построить эквивалентный ему ДКА.

Процедура нахождения эквивалентного детерминированного автомата выглядит следующим образом.

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

43

1. Пометить первую строку таблицы переходов для Мд множеством начальных состояний автомата Мн. Применить к этому множеству шаг 2.

2.По данному множеству состояний S, помечающему строку табли-

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

3.Для каждого нового множества, порожденного переходами на ша-

ге 2, посмотреть, имеется ли уже в Мд строка, помеченная этим множеством. Если нет, то создать новую строку и пометить ее этим множеством. Если множество уже использовалось как метка, никаких действий не требуется.

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

5.Пометить строку как допускающее состояние автомата Мд тогда и только тогда, когда она содержит допускающее состояние недетерминированного автомата. В противном случае пометить как отвергающее состояние.

Пример преобразования заданного недетерминированного конечного автомата в детерминированный представлен на рис. 4.10.

 

НДКА

 

 

 

ДКА

 

 

 

0

 

1

 

 

0

1

 

А

А,В

 

С

0

{А,B}

{А,В}

{С}

1

 

 

 

 

 

{C}

 

{A,С}

1

В

В

 

С

1

 

 

{A,С}

{A,B}

{А,С}

1

 

 

 

 

 

С

 

 

А,С

1

 

 

 

 

 

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис. 4.10. Процедура преобразования НДКА в ДКА

Введя обозначения множеств состояний, получим ДКА на рис. 4.11.

 

0

1

 

 

 

 

 

S

S

X

1

 

 

 

 

X

E

Y

1

 

 

 

 

Y

S

Y

1

 

 

 

 

E

E

E

0

 

 

 

 

Рис. 4.11. Результат преобразования НДКА в ДКА

44

Автоматы с магазинной памятью

Конечный автомат может решать вычислительные задачи, требующие фиксированного и конечного объема памяти. Однако в компиляторе возникают задачи, которые не могут быть решены при таком ограничении и поэтому нужна модель более сложного автомата, позволяющего анализировать синтаксис входной программы.

Наглядным примером того, когда конечный автомат не работает, является задача обработки скобок в арифметических выражениях. В этой задаче компьютер должен эффективно подсчитывать левые скобки, чтобы сбалансировать их с правыми.

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

Для получения более мощного автомата память конечного автомата расширяется за счет дополнительного механизма хранения информации: использование магазина или стека.

Основная особенность магазина состоит в том, что символы можно помещать в магазин и удалять из него по одному, причем удаляемый символ – это всегда тот, который был помещен в магазин последним (рис. 4.12).

На дне магазина находится символ – это специальный символ, который помечает «начало» или «дно» магазина и называется маркером дна. Он используется только как метка дна и никогда не выталкивается из магазина. Если – верхний символ, значит магазин пуст.

 

 

D

 

 

 

 

 

 

 

С

 

C

 

 

 

 

 

 

 

А

 

A

 

A

 

 

 

 

 

В

 

B

 

B

 

 

 

 

 

А

 

A

 

A

 

 

 

 

 

 

 

 

 

 

Рис. 4.12. Примеры изображения магазина

Еще один способ изображения магазина – линейный: CABA или ABAC

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

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

45

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

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

Конфигурация памяти, которая может возникнуть при обработке входной цепочки 100110 некоторого МП-автомата, приведена на рис. 4.13.

Рис. 4.13. Графический пример конфигурации памяти МП-автомата

Каждый шаг процесса обработки задается множеством команд, использующих информацию трех видов:

1)cостояние;

2)верхний символ магазина;

3)текущий входной символ.

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

механизмом управления.

В зависимости от полученной информации, управляющее устройство выбирает либо выход из процесса (т.е. прекращает обработку), либо переход в новое состояние.

Переход состоит из трех операций: над магазином, над состоянием, над входной цепочкой.

Операции над магазином:

1.Втолкнуть в магазин определенный магазинный символ.

2.Вытолкнуть верхний символ магазина.

3.Оставить магазин без изменения.

Операции над состоянием:

1.Перейти в заданное новое состояние.

2.Остаться в текущем состоянии. Операции над входной цепочкой:

1.Перейти к следующему входному символу и сделать его текущим

входным символом.

46

2.Оставить данный входной символ текущим, иначе говоря, держать его до следующего шага.

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

Определение 4.8. МП-автомат задается пятеркой МПА=<A, M, Q, УУ, M0>, где

1.А – конечное множество входных символов, в которое входит концевой маркер.

2.М – конечное множество магазинных символов, включающее маркер дна.

3.Q – конечное множество состояний, включающее начальное со-

стояние.

4.УУ – управляющее устройство, которое каждой комбинации входного символа, магазинного символа и состояния ставит в соответствие выход или переход.

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

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

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

Полное определение МП-автомата, реализующего описанный алгоритм распознавания:

1.

Входное множество А ={ (, ), }

2.

Множество магазинных символов М ={А, }

3.Множество состояний Q = {S}, где S – начальное состояние

4.Переходы:

Управляющая информация

 

Операции над

 

 

 

 

 

 

 

 

входной

магазинный

состояние

входом

магазином

 

состоянием

символ

символ

 

 

 

 

 

 

(

 

S

СДВИГ

ВТОЛКНУТЬ

 

ОСТАВИТЬ S

 

 

 

 

 

 

 

(

А

S

СДВИГ

ВТОЛКНУТЬ

 

ОСТАВИТЬ S

 

 

 

 

 

 

 

)

А

S

СДВИГ

ВЫТОЛКНУТЬ

 

ОСТАВИТЬ S

 

 

 

 

 

 

 

 

 

 

47

 

 

 

Выходы:

Управляющая информация

 

 

 

 

Результат выхода

входной

магазинный

состояние

 

символ

символ

 

 

 

)

 

S

ОТВЕРГНУТЬ

 

 

 

 

 

А

S

ОТВЕРГНУТЬ

 

 

 

 

 

 

S

ДОПУСТИТЬ

 

 

 

 

5. Начальное содержимое магазина – .

 

 

Пример распознавания цепочки:

( ( ) ( ) )

 

 

Конфигурация памяти МП-автомата при распознавании заданной

цепочки:

 

 

 

 

 

 

№ шага

Содержимое магазина

 

Состояние

Входная цепочка

 

 

 

 

 

 

 

 

 

1

 

 

S

( ( ) ( ) )

 

 

 

 

 

 

 

 

2

А

S

( ) ( ) )

 

 

 

 

 

 

 

 

3

S

) ( ) )

 

 

 

 

 

 

 

 

4

А

S

( ) )

 

 

 

 

 

 

 

 

5

АA

S

) )

 

 

 

 

 

 

 

 

6

А

S

)

 

 

 

 

 

 

 

 

 

7

 

 

S

 

 

 

 

 

 

 

 

 

 

8

 

 

 

ДОПУСТИТЬ

 

 

 

 

 

 

 

 

На каждом шаге распознавания информация, поступающая в управляющее устройство, расположена в середине линейного представления. Например, на 1-м шаге: , S, ( , на 2-м шаге: А, S, ( , на 3-м шаге: A, S, ) и т.д.

На практике многие МП–автоматы, как и построенный, имеют одно состояние, тогда эту информацию можно опустить.

Управляющее устройство такого автомата с одним состоянием удобно представить в виде управляющей таблицы, которая строится по следующим правилам (рис. 4.14):

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

2.Строки слева помечены магазинными символами плюс маркер дна.

3.Элементами таблицы являются операции над входом, магазином и состоянием, если оно не одно, а также результат выхода: Отвергнуть или Допустить, соответствующие входным символам столбцов и магазинным символам строк.

 

(

)

 

А

Втолкнуть(А)

Вытолкнуть

Отвергнуть

Сдвиг

Сдвиг

 

 

 

Втолкнуть(А)

Отвергнуть

Допустить

 

Сдвиг

 

 

 

Рис. 4.14. Управляющая таблица МП-автомата для распознавания цепочек из скобок

48

Такие таблицы являются стандартным представлением МП-автома- тов с одним состоянием.

Расширенные МП-автоматы

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

Работа с примитивными МП-автоматами часто приводит к использованию более чем одного состояния для реализации алгоритма распознавания.

Рассмотрим пример распознавания с помощью примитивного МПавтомата заданного множества цепочек: {0n1n | n> 0}.

Схема распознавания может выглядеть следующим образом. Начальный отрезок цепочки, состоящий из 0, вталкивается в магазин. Затем, как только встречается 1, один символ из магазина выталкивается. Цепочка допускается, если в момент окончания считывания цепочки магазин пуст. Если после первого вхождения 1 встречается 0, цепочка отвергается.

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

Процесс обработки распадается на две фазы:

1– фаза вталкивания (помещение Z в магазин),

2– фаза выталкивания (при появлении 1 – удаление Z из магазина, появление 0 после 1 – отвержение всей цепочки).

Чтобы автомат «помнил», в какой фазе он находится, вводятся два состояния, соответствующие этим фазам.

Рассмотрим работу этого алгоритма на примере.

Распознавание допустимой цепочки 000111

№ шага

Содержимое магазина

Состояние

Входная цепочка

 

 

 

 

1

 

S1

000111

2

Z

S1

00111

3

ZZ

S1

0111

4

ZZZ

S1

111

5

ZZ

S2

11

6

Z

S2

1

7

 

S2

 

8

 

 

ДОПУСТИТЬ

 

 

 

 

Распознавание недопустимой цепочки 001011

№ шага

Содержимое магазина

Состояние

Входная цепочка

 

 

 

 

1

 

S1

001011

 

 

 

 

2

Z

S1

01011

3

ZZ

S1

1011

4

Z

S2

011

 

 

 

 

5

 

 

ОТВЕРГНУТЬ

 

 

 

 

 

49

 

 

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