- •Курс лекций
- •Оглавление
- •Лекция 1 Языки и грамматики Языки
- •ГГрамматики
- •Лекция 2 Конечные автоматы Автоматы
- •Детерминированные конечные автоматы (распознаватели)
- •Языки и детерминированные конечные автоматы
- •Лекция 3 Конечные автоматы Недетерминированные конечные автоматы (распознаватели)
- •Эквивалентность дка и нка
- •Лекция 4 Конечные автоматы Минимизация конечных автоматов
- •Лекция 5 Регулярные выражения и регулярные грамматики
- •Регулярные выражения
- •Связь между регулярными выражениями и автоматными языками
- •Лекция 6 Регулярные выражения и регулярные грамматики Регулярные грамматики
- •Лекция 7 Свойства регулярных языков
- •Замкнутость класса регулярных языков
- •Алгоритмические проблемы регулярных языков
- •Лемма о расширении регулярных языков
- •Лекция 8 Контекстно-свободные языки
- •Контекстно-свободные грамматики
- •Лекция 9 Контекстно-свободные языки
- •Грамматический разбор
- •Неоднозначность грамматик и языков
- •Лекция 10 Преобразования кс‑грамматик и нормальные формы
- •Методы преобразования грамматик
- •Лекция 11 Преобразования кс‑грамматик и нормальные формы
- •Нормальные формы кс-грамматик
- •Лекция 12 Магазинные автоматы Магазинные автоматы
- •Недетерминированные магазинные автоматы
- •Лекция 13 Магазинные автоматы Магазинные автоматы и кс-языки
- •Лекция 14 Магазинные автоматы Детерминированные магазинные автоматы и детерминированные кс-языки
- •Лекция 15 Свойства контекстно-свободных языков
- •Лемма о расширении
- •Свойства замкнутости класса контекстно-свободных языков
- •Лекция 16 Свойства контекстно-свободных языков Некоторые алгоритмические проблемы для кс-языков
- •Предметный указатель
- •Формальные языки и грамматики Курс лекций
Лекция 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 abSa
Пример 6.3.
G = ({S, A, B}, {a, b}, S, P)
S A
A aB
B Ab
Грамматика 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. .
Если L(G), тогда, в силу вида продукций G, вывод должен иметь вид:
А0 1Аi 12Аj * 12 ... k Аn 12 ... kl = . (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, ),
т.е. допускается автоматом М.
Обратно, пусть допустима М. В силу построения М, допустить – это пройти через последовательность состояний А0, Аi, ... до Аf, используя пути, помеченные 1, 2, ... . Таким образом, должна иметь вид
= 12 . . . кl,
следовательно, возможен вывод
А0 1Аi 12Аj * 12 ... k Аn 12 ... kl L(G).
Пример 6.6.
Построить автомат, допускающий язык, порожденный грамматикой
А0 аА1
А1 аbА0b
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.
Для каждого перехода в ДКА М
(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:
a a a
q0 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, qf 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).
Таким образом, любой автоматный язык является регулярным и наоборот.