Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СОКОЛОВЛЕКЦИИ.pdf
Скачиваний:
138
Добавлен:
28.05.2015
Размер:
919.88 Кб
Скачать

Регулярные выражения

Лекция

и регулярные грамматики

6

Регулярные грамматики

ОпределениеГрамматика 6.1.G = (N, T, S, P) называется праволинейной, если все продукции имеют вид

A → α B

A → α , где А, В N, α T*.

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

A B α

A → α.

Грамматика называется регулярной, если она или праволинейная, или леволинейная.

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

Пример 6.2.

G1 = ({S}, {a, b}, S, P)

S abS a

50

Регулярные выражения и регулярные грамматики

Пример 6.3.

G = ({S, A, B}, {a, b}, S, P)

S A

AaB ε

BAb

Грамматика G – линейная, но не регулярная.

Заметим, что при выводе сентенциальных форм в праволинейной грамматике эти формы будут иметь вид ab . . . cD.

Пусть к этой сентенциальной форме применяется продукция

D dE,

т.е. имеем в G:

ab ... cD ab ... cd E.

Этому шагу в выводе можно сопоставить такт работы НКА М, который из состояния D, прочитав символ d, переходит в состояние

Е:

d

D E

Тогда, очевидно, выводу в G соответствует путь в диаграмме переходов автомата М, и наоборот.

Теорема 6.4.

Пусть G = (N, T, S, P) – праволинейная грамматика. Тогда L(G) – автоматный язык.

Доказательство.

Положим N = {А0, А1, ...}, S = А0 и допустим, что продукция имеет вид

А0 → α1Аi ,

Аi → α2Аj ,

. . . . . . . . . .

Аn → αl. .

Лекция 6

51

 

Если α L(G), тогда, в силу вида продукций G, вывод должен иметь вид:

А0 α1Аi α1α2Аj *

α1α2 ... αk Аn α1α2 ... αkαl = α.

(6.5)

Соответствующий

автомат будет воспроизводить вывод,

поглощая по очереди каждую αi.

 

Начальное состояние автомата – А0, а для каждой переменной Аi он будет иметь нефинальное состояние, помеченное буквой Аi .

Для каждой продукции вида

Аi a1a2 ... amАj

автомат будет иметь переходы, связывающие вершины Аi и Аj , т.е. функция переходов θ будет определена так, что

θ*( Аi , а1а2 . . . аm) = Аj.

Для каждой продукции вида

Аi a1a2 ... am

соответствующий переход

θ*(Аi , а1а2 . . . аm) = Аf ,

где Аf – финальное состояние.

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

Допустим, что α L(G) и (6.5) имеет место. Тогда, по построению НКА, в диаграмме переходов есть путь из А0 в Аi , помеченный α1, путь из Аi в Аj , помеченный α2 и т.д., откуда ясно, что

Аf θ*(А0, α),

т.е. α допускается автоматом М.

52

Регулярные выражения и регулярные грамматики

Обратно, пусть α допустима М. В силу построения М, допустить α – это пройти через последовательность состояний А0, Аi,

... до Аf, используя пути, помеченные α1, α2, ... . Таким образом, α должна иметь вид

α = α1α2 . . . αкαl,

следовательно, возможен вывод

А0 α1Аi α1α2Аj * α1α2 ... αk Аn α1α2 ... αkαl L(G).

Пример 6.6.

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

грамматикой

 

 

 

А0 аА1

 

 

А1аbА0 b

 

a

b

 

А0

А1

Аf

b

a

 

 

Теорема 6.7.

Если L – автоматный язык в алфавите Σ, тогда существует праволинейная грамматика G = (N, T, S, P) такая, что L = L(G).

Доказательство.

Пусть М – ДКА, допускающий L,

M = (Q, Σ, θ, q0, F).

Предположим, что Q = {q0, q1, . . ., qn}, Σ = {a1, a2, . . ., am}.

Построим праволинейную грамматику G = (N, Σ, S, P), где

N = {q0, q1, . . ., qn}, S = q0.

Для каждого перехода в ДКА М

Лекция 6

53

 

θ(qi, aj) = qk

мы помещаем в Р продукцию qi ajqk.

В дополнение к этому, если qk F, то мы добавляем в Р еще продукцию qk → ε.

Покажем вначале, что так определенная грамматика G порождает любую строку из L. Пусть α L и α = ai aj . . . akal .

Для M принять α означает совершить переходы:

θ(q0, ai) = qp θ(qp, aj) = qr

. . .

θ(qs, ak) = qt

θ(qt, al) = qf, qf F.

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

q0 aiqp aiajqr aiaj ... akq t aiaj ... akalqf aiaj ... akal, (6.8)

следовательно, α L(G).

Обратно, если α L(G), то ее вывод имеет вид (6.8), но это влечет соотношение θ*(q0, aiaj ... akal) = qf, т.е. α L(M).

Пример 6.9.

Построить праволинейную грамматику для L(aab*a).

По выражению aab*a построим соответствующий НКА M:

54

Регулярные выражения и регулярные грамматики

q0

a

a

a

q1

q2

qf

 

 

 

b

В данном случае НКА совпадает с ДКА. Как показано выше, имеем соответствие между М и искомой грамматикой G:

M

G

θ(q0, a) = q1;

q0 aq1

θ(q1, a) = q2;

q1 aq2

θ(q2, b) = q2;

q2 bq2

θ(q2, a) = qf, f F;

q2 aqf, qf → ε.

Тогда, к примеру, строка aaba будет иметь вывод в G:

q0 aq1 aaq2 aabq2 aabaqf aaba.

Аналогично нетрудно доказать следующую теорему:

Теорема 6.10.

Язык L - автоматный тогда и только тогда, когда существует леволинейная грамматика G такая, что L = L(G).

Объединяя, получаем:

Теорема 6.11.

Язык L - автоматный тогда и только тогда, когда существует регулярная грамматика G такая, что L = L(G).

Таким образом, любой автоматный язык является регулярным и наоборот.

Лекция 6

55

 

Свойства регулярных

 

Лекция

языков

7

 

 

 

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

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

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

И наконец, последний вопрос: можно ли по данному языку определить, регулярен он или нет? Если язык регулярен, можно попытаться построить для него ДКА, регулярное выражение или регулярную грамматику. Но если язык не является регулярным, то требуется иной способ для ответа на вопрос. В частности, если известно некоторое свойство, которым в обязательном порядке

56

Регулярные выражения и регулярные грамматики