Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Glava10 r.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
339.97 Кб
Скачать

Пример преобразования регулярной грамматики к автоматному виду

Рассмотрим в качестве примера следующую простейшую регулярную грамматику: G( { " a " . " ( " . " * " . " ) "."{"."}"}.{S.C.K},Р, S)(символы а, (. *. ). {, } из множества терминальных символов грамматики взяты в кавычки, чтобы выделить их среди фигурных скобок, обозначающих само множество):

Если предположить, что а здесь — это любой алфавитно-цифровой символ, кроме символов (, *, ), {, }, то эта грамматика описывает два типа комментариев, допустимых в языке программирования Borland Pascal. Преобразуем ее в автоматный вид.

Шаг 1. Построим множество VN' = {S,C,K}.

Шаг 2. Начинаем просматривать множество правил Р грамматики G.

Для правила S -> С*) во множество VN' включаем символ S1,а само правило разбиваем на два: S -» S1) и S1 -> С*; включаем эти правила во множество правил Р'.

Правило S -> К} переносим во множество правил Р' без изменений.

Для правила С -» (* во множество VN' включаем символ С1,а само правило разбиваем на два: С -> C1* и С1 -> (; включаем эти два правила во множество правил Р'.

Правила С -> Са | С{ | С} | С( | С* | С) переносим во множество правил Р' без изменений.

Правила К -> { | Ка | К( | К* | К) | К{ переносим во множество правил Р' без изменений.

Шаг 3. Правил вида А-»В или А-»λ, во множестве правил Р' не содержится.

Шаг 4. Переходим к шагу 5.

Шаг 5. Целевым символом грамматики G' становится символ S.

В итоге получаем автоматную грамматику:

Эта грамматика, так же как и рассмотренная выше, описывает два типа комментариев, допустимых в языке программирования Borland Pascal.

Конечные автоматы

Определение конечного автомата

Конечным автоматом (КА) называют пятерку следующего вида:

где

---Q — конечное множество состояний автомата;

---V — конечное множество допустимых входных символов (алфавит автомата);

---δ — функция переходов, отображающая V*Q (декартово произведение множеств) в множество подмножеств Q: R(Q), то есть δ(a,q) = R, aeV, qeQ, RcQ;

--- q0 — начальное состояние автомата Q, qoeQ;

--- F — непустое множество конечных состояний автомата, FcQ, F≠O.

КА называют полностью определенным, если в каждом его состоянии существует функция перехода для всех возможных входных символов, то есть VasV, VqeQэδ(a,q) = R, RcQ.

Работа конечного автомата представляет собой последовательность шагов (или тактов). На каждом шаге работы автомат находится в одном из своих состояний Q (в текущем состоянии), на следующем шаге он может перейти в другое состояние или остаться в текущем состоянии. То, в какое состояние автомат перейдет на следующем шаге работы, определяет функция переходов 8. Она зависит не только от текущего состояния, но и от символа из алфавита V, поданного на вход автомата. Когда функция перехода допускает несколько следующих состояний автомата, то КА может перейти в любое из этих состояний. В начале работы автомат всегда находится в начальном состоянии q0. Работа КА продолжается до тех пор, пока на его вход поступают символы из входной цепочки wеV+.

Видно, что конфигурацию КА на каждом шаге работы можно определить в виде (q,w,n), где q — текущее состояние автомата, qeQ; w — цепочка входных символов, weV+; n — положение указателя в цепочке символов, neNu{0}, n<|w| (N — множество натуральных чисел). Конфигурация автомата на следующем шаге — это (q',w,n+l), если q'eδ(a,q) и символ aeV находится в позиции n+1 цепочки w. Начальная конфигурация автомата: (q0,w,0); заключительная конфигурация автомата: (f,w,n), feQ, n = |w|, она является конечной конфигурацией, если feF.

КА M(Q,V,δ,q0,F) принимает цепочку символов weV+, если, получив на вход эту цепочку, он из начального состояния q0 может перейти в одно из конечных состояний feF. В противном случае КА не принимает цепочку символов.

Язык L(М), заданный КА M(Q,V,δ,q0,F), — это множество всех цепочек символов, которые принимаются этим автоматом. Два КА эквивалентны, если они задают один и тот же язык.

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

КА часто представляют в виде диаграммы или графа переходов автомата. Граф переходов КА — это направленный помеченный граф, с символами состояний КА в вершинах, в котором есть дуга (p,q) p.qeQ помеченная символом aeV, если в КА определена δ(а,р) и qeδ(a,p). Начальное и конечные состояния автомата на графе состояний помечаются специальным образом (в данном пособии начальное состояние — дополнительной пунктирной линией, конечное состояние — дополнительной сплошной линией).

Рассмотрим конечный автомат M({H,A,B,S},{a,b},δ,H,{S}); δ: S(H.b) = В, δ{В.а) = А, δ(A,b) = {B.S}. Ниже на рис. 10.1 приведен пример графа состояний для этого КА.

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

Если преобразовать подобным образом рассмотренный выше автомат М, то получим полностью определенный автомат: M({H,A,B,E,S},{a,b},δ,H,{S}); δ: δ(Н,а) = Е, δ(H,b) = B, δ(В,а) = А, δ(B,b) = E, δ(A,a) = {E}, δ(A,b) = {B,S}, δ(E,a) ={Е}, δ(Е,Ь) = {Е}, δ(S,a) = {Е}, δ(S,b) = {Е}. Состояние Е как раз соответствует состоянию «ошибка». Граф переходов этого КА представлен на рис. 10.2.

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