151
Министерство общего и профессионального образования Российской Федерации Ярославский государственный университет имени П.Г. Демидова Учебное пособие В.А. Соколов Формальные языки и грамматики Рекомендовано Министерством общего и профессионального образования России в качестве учебного пособия для студентов университетов по специальности 010200 «Прикладная математика» и по направлению 510200 «Прикладная математика и информатика» ЯРОСЛАВЛЬ 1998 курс лекций

Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Министерство общего и профессионального образованияРоссийской Федерации

Ярославский государственный университет имени П.Г. Демидова

Учебное пособие

В.А. Соколов

Формальные языкии грамматики

Рекомендовано Министерством общего и профессионального образования Россиив качестве учебного пособия для студентов университетов

по специальности 010200 «Прикладная математика»и по направлению 510200 «Прикладная математика и информатика»

ЯРОСЛАВЛЬ 1998

курслекций

Page 2: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

ББК В185.2 С 59УДК 519.682

Соколов В.А.

Формальные языки и грамматики. Курс лекций: Учеб.пособие / Яросл. гос. ун-т. Ярославль, 1998. 152 с.

ISBN 5-8397-0025-8

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

Пособие предназначено для студентов университетов, обучающихся поспециальности «Прикладная математика» и направлению «Прикладнаяматематика и информатика».

Ил. 19.

Рецензенты: кафедра алгебры и математической логики Ивановскогогосударственного университета; профессор Д.О. Бытев

ISBN 5-8397-0025-8 Ярославскийгосударственныйуниверситет, 1998

В.А. Соколов, 1998

Page 3: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Оглавление 3

Оглавление

Предисловие_____________________________________________ 5Лекция 1. Языки и грамматикиЯзыки___________________________________________________ 7Грамматики_____________________________________________ 11Лекция 2. Конечные автоматыАвтоматы ______________________________________________ 15Детерминированные конечные автоматы (распознаватели) _____ 18Языки и детерминированные конечные автоматы _____________ 21Лекция 3. Конечные автоматыНедетерминированные конечные автоматы (распознаватели) ___ 24Эквивалентность ДКА и НКА _____________________________ 28Лекция 4. Конечные автоматыМинимизация конечных автоматов _________________________ 32Лекция 5. Регулярные выражения и регулярные грамматикиРегулярные выражения ___________________________________ 39Связь между регулярными выражениямии автоматными языками __________________________________ 43Лекция 6. Регулярные выражения и регулярные грамматикиРегулярные грамматики __________________________________ 50Лекция 7. Свойства регулярных языковЗамкнутость класса регулярных языков _____________________ 57Алгоритмические проблемы регулярных языков______________ 60

Page 4: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Оглавление4

Лемма о расширении регулярных языков ____________________ 63Лекция 8. Контекстно-свободные языкиКонтекстно-свободные грамматики_________________________ 68Лекция 9. Контекстно-свободные языкиГрамматический разбор___________________________________ 75Неоднозначность грамматик и языков_______________________ 80Лекция 10. Преобразования КС-грамматик и нормальные формыМетоды преобразования грамматик_________________________ 87Лекция 11. Преобразования КС-грамматик и нормальные формыНормальные формы КС-грамматик ________________________ 102Лекция 12. Магазинные автоматыМагазинные автоматы ___________________________________ 109Недетерминированные магазинные автоматы _______________ 110Лекция 13. Магазинные автоматыМагазинные автоматы и КС-языки ________________________ 118Лекция 14. Магазинные автоматыДетерминированные магазинные автоматыи детерминированные КС-языки __________________________ 129Лекция 15. Свойства контекстно-свободных языковЛемма о расширении ____________________________________ 135Свойства замкнутости класса контекстно-свободных языков __ 139Лекция 16. Свойства контекстно-свободных языковНекоторые алгоритмические проблемы для КС-языков _______ 145

Page 5: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Предисловие 5

Предисловие

анное пособие предназначено для студентов университетов,обучающихся по специальности "Прикладная математика" инаправлению "Прикладная математика и информатика". В нем

представлен материал, составляющий теоретическую основу дляразработки языков программирования и конструированиякомпиляторов и ставший уже классическим элементом системыподготовки студентов в области прикладной математики иинформатики. В пособии рассматриваются детерминированные инедетерминированные конечные автоматы, регулярные иконтекстно-свободные языки, регулярные выражения, формальныеграмматики и выводимость в них, свойства замкнутости различныхклассов языков, их структурные свойства, магазинные автоматы иих связь с контекстно-свободными языками. Объем материаласоответствует семестровому лекционному курсу, который автор втечение ряда лет читал на факультете информатики ивычислительной техники Ярославского государственногоуниверситета. При выборе способа подачи материала предпочтениеотдавалось простым, наглядным, но строгим рассуждениям.Доказательства теорем, как правило, опираются на алгоритмическиеконструкции. В основу критерия отбора материала был положенпринцип "минимальной достаточности", при этом имелось в видусуществование изданий энциклопедического характера, таких, какдвухтомная монография А. Ахо и Дж. Ульмана "Теориясинтаксического анализа, перевода и компиляции" (М.: Мир, 1978),которые могут служить источником дополнительных сведений.

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

Д

Page 6: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Предисловие6

Кушнаренко О.Б., Бадин Н.М. Формальные языки и грамматики:Задачи и упражнения. Ярославль, 1993).

Автор выражает глубокую признательность Н.С. Сидоровой иА.Н. Бадиной за большую помощь при подготовке рукописи кпечати.

Page 7: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Лекция 1 7

Языки и грамматики

Языкиюбой язык основан на использовании определенного алфа-вита. Алфавит – это конечное непустое множество символовΣ = {a1, a2, a3, ... , an}, n>0. Строка – упорядоченная конечная

последовательность символов алфавита Σ. Для обозначения строкбудем использовать строчные буквы греческого алфавита α, β, γ, ...Например, α = aabb означает, что строка, обозначаемая буквой α,представляет собой последовательность из четырех символов aabb.

Конкатенация двух строк α и β – это бинарная операция, ре-зультат которой есть строка αβ, полученная приписыванием к стро-ке α справа строки β, т.е. если α = a1 a2 a3 ... an , β = b1 b2 b3 ... bm , то αβ = a1 a2 a3 ... an b1 b2 b3 ... bm .

Очевидно, что конкатенация является ассоциативной, но не-коммутативной операцией, т.е. для любых строк α, β, γ в алфавите Σсправедливо равенство α(βγ) = (αβ)γ, но неверно, что для любых α, β αβ = βα. Например, если α = ab, β = ba, то αβ = abba, а βα = baab,т.е. αβ ≠ βα.

Операция обращения строки α обозначается α-1 и дает строку,полученную из α выписыванием всех входящих в нее символов вобратном порядке, т.е. если α = a1 a2 a3 ... an , то α-1 = an an -1 ... a2 a1 .Нетрудно видеть, что для любых строк α и β верносоотношение (αβ)-1 = β-1α-1.

Длина строки α обозначается |α| и равна числу символов (сучетом повторений) в этой строке. Так, если α = a1a2a3 ... an, то |α| =n, n ≥ 0.

Лекция

Page 8: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Языки и грамматики8

Пустой строкой называется строка ε, для которой |ε| = 0.Очевидно, что для любой строки α εα = αε = α, т.е. строка εявляется нейтральным элементом относительно конкатенации. Вразных ситуациях бывает необходимо рассматривать структурустроки α, т.е. выделять в ней отдельные части, которые самиявляются строками. Пусть

α = βγδ, где |β| ≥ 0, |γ| ≥0, |δ| ≥ 0.

Тогда строка β называется префиксом строки α, строка δ – еесуффиксом, а δ – ее подстрокой. Отсюда, в частности, следует, чтопустая подстрока ε является подстрокой любой строки α.

Длина строки связана с операцией конкатенации простымсоотношением: |αβ| = |α| + |β|.

Введем полезное обозначение для результата конкатенациистроки α с самой собой: αα = α2, ααα = α3 и т.д.

В общем виде эту операцию над строкой α можно определитьрекурсивно: α0 = ε, αn+1 = αnα, n ≥ 0. В частности, если α = aa ... a и |α| = n, то α = аn.

Теперь введем одно из основных понятий информатики –понятие формального языка. Формальным языком называется любоемножество строк (в данном алфавите Σ).

Пример 1.1.

Пусть Σ = {a, b}. Тогда множество L = {a, b, aa, bb, ab, aab}является (конечным) формальным языком в алфавите Σ.

В дальнейшем в этом курсе лекций слово «язык» будетобозначать формальный язык в некотором заранее фиксированномалфавите.

Page 9: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Лекция 1 9

Пример 1.2.

Множество L = {anbn| n ≥ 0} является (бесконечным) языком валфавите Σ = {a, b}. Его элементами являются строки вида ab, aabb,aaabbb, ... , в том числе пустая строка ε.

Заметим, что не следует путать пустой язык L = ∅, несодержащий ни одной строки, и язык L = {ε}, состоящий изединственной (пустой) строки ε.

Язык, состоящий из всех строк в алфавите Σ, обозначается Σ*.Если L – язык в алфавите Σ, то, очевидно, L ⊆ Σ*.

Так как языки – это множества (строк), то над ними можносовершать обычные теоретико-множественные операции объеди-нения ∪, пересечения ∩, разности \ и образования дополнения (поотношению к Σ*), т.е. если L – язык в алфавите Σ, то его дополнениеесть множество L = Σ* \ L.

Наряду с этими операциями над языками можно определитьеще ряд специфических операций. Пусть L1, L2 – языки в алфавитеΣ, тогда их сцепление – это язык

L1L2 = {αβ | α ∈ L1, β ∈ L2},

состоящий из всевозможных конкатенаций строк α языка L1 и строк β языка L2, образованных в указанном порядке.

Нетрудно заметить, что операция сцепления двух языков ассо-циативна, но не коммутативна, т.е. для любых языков L1, L2, L3 из Σ*

(L1L2)L3 = L1(L2L3),

но существует пара языков L1, L2 такая, что L1L2 ≠ L2L1.

Определим еще одну операцию – итерацию языка L:

L0 = {ε}, L1 = L, L2 = LL, L3 = LLL, ...

Page 10: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Языки и грамматики10

В общем виде операцию Ln (n ≥ 0) можно определитьрекурсивно следующим образом: L0 = {ε}, Ln+1 = LnL, n ≥ 0.

Пример 1.3.Если L = {anbn | n ≥ 0}, то L2 = {anbnambm| n ≥ 0, m ≥ 0}.Полезно отметить, что если итерировать алфавит Σ, который

сам, в свою очередь, является (конечным) языком, все строкикоторого имеют длину 1, то последовательно будем иметь:

Σ0 = {ε} = {α | α ∈ Σ* & |α| = 0},

Σ1 = Σ = {α | α ∈ Σ* & |α| = 1},

Σ2 = {a1a2 | a1 ∈ Σ, a2 ∈ Σ} = {α | α ∈ Σ* & |α| = 2},

и т.д.

В общем случае, Σn = {α | α ∈ Σ* и |α| = n}, n ≥ 0, т.е. Σn – этомножество всех строк длины n в алфавите Σ.

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

L* = L0 ∪ L1 ∪ L2 ∪ ... = i=

0U Li.

Для удобства, чтобы отделить пустую строку ε, которая всегдапринадлежит L*, иногда используется позитивное замыкание языкаL, обозначаемое L+:

L+ = i=

1U Li = L1 ∪ L2 ∪ ... .

Из определения следует, что L* = {ε} ∪ L+.

Заметим, что ранее введенное обозначение языка Σ* вполнесогласуется с только что введенной операцией замыкания:объединение Σ0 ∪ Σ1 ∪ Σ2 ∪ ... как раз и представляет собоймножество всех строк в алфавите Σ (включая пустую строку).

Page 11: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Лекция 1 11

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

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

Пример 1.4.

Рассмотрим фрагмент грамматики (обозначим его GA) языкапрограммирования, описывающий все арифметические выражения,которые можно построить, используя идентификаторы a, b, c.

<выражение> : : = <терм> | <выражение> + <терм> | <выражение> –<терм>

<терм> : : = <множитель> | <терм> × <множитель> |<терм>/<множитель>

<множитель> : : = a | b | c | (<выражение>)

Эту стандартную запись в форме Бэкуса-Наура можноупростить, введя буквенные обозначения для входящих вграмматические правила понятий:

<выражение> = Е<терм> = Т<множитель> = F.

Тогда грамматика GA будет выглядеть следующим образом:

E → T | E + T | E – TT → F | T × F | T / FF → a | b | c | (Е).

Определение 1.5.

Грамматикой G называется следующая упорядоченнаячетверка объектов G = (N, T, S, P), где

Г

Page 12: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Языки и грамматики12

N – конечное множество нетерминальных символов,называемых переменными (или нетерминалами);

T – конечное множество терминальных символов, называемыхтерминалами;

S – начальный символ, S ∈ N;P – конечное множество правил вывода, называемых

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

не пересекаются.

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

Каждая продукция р ∈ Р имеет вид α → β, где

α ∈ (N ∪ T)+, β ∈ (N ∪ T)*.

Результатом применения продукции р : α → β к строке γ = ϕαψ является строка δ = ϕβψ, полученная из γ подстановкой вместоподстроки α (левой части продукции) строки β (правой частипродукции).

Это преобразование записывается так: γ p⇒ δ, или γ ⇒

G δ, когда

просто хотят сказать, что δ получается из γ применением некоторойпродукции из грамматики G. В этом случае говорят, что строка δвыводится из строки γ (в грамматике G) применением продукции p.

Если применять продукции p1, p2, ..., pn-1 грамматики Gпоследовательно к получающимся строкам, то это можно записать ввиде:

α1 ⇒Р1

α2 ⇒Р2

α3 ⇒Р3

... ⇒−Рn 1

αn.

В этом случае говорят, что строка αn выводится из строки α1 (в

грамматике G) и пишут α1 G

*⇒αn. Символ * указывает здесь любое

Page 13: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Лекция 1 13

конечное число шагов, включая 0, т.е. случай α G

*⇒α. Если же надо

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

должна быть применена, то пишут α G

+⇒β.

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

Определение 1.6.

Пусть G = (N, T, S, P) – грамматика. Тогда множество

L(G) = {α | α∈ T* и S G

*⇒α}

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

Если α ∈ L(G), то любая последовательность вида

S ⇒G

α1 ⇒G

α2 ⇒G

α3 ⇒G

... ⇒G

αn ⇒G

α

называется выводом строки α в грамматике G; при этом, еслиα ∈ T*, то α называется сентенцией (или словом), а αi –сентенциальной формой (в грамматике G).

Если известно, в какой грамматике G рассматривается вывод

α ⇒* β, то можно не писать символ G.

Пример 1.7.

Рассмотрим грамматику

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

где Р состоит из двух продукций:

S → aSb ,S → ε.

Тогда, очевидно, в G можно построить вывод:

Page 14: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Языки и грамматики14

S ⇒ aSb ⇒ aaSbb ⇒ aabb,

т.е. S ⇒* a2b2.Следовательно, строка a2b2 ∈ L(G).

Как получить явное описание этого языка? К сожалению, этоне всегда возможно. В данном случае можно показать, что L(G) ={anbn | n ≥ 0}. Докажем это индукцией. В качестве параметра nиндукции возьмем длину вывода, т.е. число применений продукцийв последовательности S⇒α1⇒...⇒αn.. Покажем, что получающиесяпри этом сентенциальные формы αn имеют вид anSbn или a n – 1b n – 1,n ≥1.

Пусть n = 1, тогда либо α1 = aSb, либо α1 = ε, что составляетбазу индукции.

Допустим, что наше утверждение верно для всех n ≤ k. Пустьтеперь n = k + 1, k ≥ 0. Рассмотрим вывод длины k + 1:

S ⇒ α1 ⇒ ... ⇒ αk ⇒ αk+1.

По нашему предположению, αk = akSbk, так как к строкеak–1bk–1 продукции применить уже нельзя. На (k+1)-м шаге возможноприменение одной из двух продукций грамматики G. Еслиприменить первую, то получим строку ak+1Sbk+1, а если вторую, тостроку akbk, что согласуется с предположением индукции. Такимобразом, наше утверждение верно, и ничего другого, кроме строквида anSbn или anbn, из S получить невозможно. В то же время легкозаметить, что любая строка вида anbn для n ≥ 0 выводима из S.

Может случиться, что две разные грамматики порождают одини тот же язык. Так, если в грамматику G из примера 1.5. добавитьпродукцию S → A, то это не изменит язык (хотя и изменитмножество сентенциальных форм).

Две грамматики G1 и G2 называются эквивалентными, если онипорождают один и тот же язык, т.е. если L(G1) = L(G2).

Page 15: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Лекция 2 15

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

Автоматывтомат можно рассматривать как упрощенную абстрактнуюмодель компьютера. Он имеет способность восприниматьвходную информацию, которую мы будем представлять в

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

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

Лекция

Page 16: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

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

Устройство Выход Временная управления память

Читающая

головка

a a b b Входная лента

Направление чтения

Рис. 2.1. Схема автомата

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

Состояние устройства управления, прочитанный входнойсимвол и содержимое временной памяти определяют то, чтоназывается конфигурацией автомата в данный момент времени.Переход от одной конфигурации в момент времени t к другойконфигурации в момент t + 1 называется шагом. Таким образом,функционирование автомата состоит из последовательности шагов(конечной или бесконечной). Различают два типа автоматов:детерминированные и недетерминированные. Поведениедетерминированного автомата в каждый следующий моментвремени полностью предопределено его внутренним состоянием впредыдущий момент, прочитанным символом и содержимымвременной памяти, т.е. если автомат может совершить следующий

C

Page 17: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Лекция 2 17

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

Автомат, выход которого ограничен двумя сообщениями {да,нет}, называется распознавателем. Реагируя на входную строку,распознаватель или распознает ее (допускает), или отвергает. Этоткласс автоматов представляет наибольший интерес с точки зренияформальных языков и грамматик. Автомат более общего типа,выдающий на выходе целую строку символов, называетсяпреобразователем (этот тип автоматов не изучается в нашем курсе).

Пример 2.1.Рассмотрим грамматику GI , порождающую подъязык

идентификаторов LI в языке Паскаль:

GI: <идентификатор> → <буква> <хвост> | <буква><буква> ,<хвост > → <буква> <хвост> | <цифра> <хвост> | <цифра>,<буква> → a | b | c | ... | A | B | ... | Z

<цифра> → 0 | 1 | 2 | ... | 9

Здесь N = {<идентификатор>, <буква>, <цифра>, <хвост>},

T = {a, b, ..., A, B, ..., Z, 0, 1, 2, ..., 9, ε}, S = <идентификатор>.

Вывод идентификатора А1 выглядит так:

<идентификатор> ⇒ <буква><хвост> ⇒ A<хвост> ⇒A<цифра> ⇒ A1.

Page 18: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

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

Построим автомат, распознающий только язык LI и никакойдругой:

Пуск буква буква Да или цифра

цифра

Нет буква

или цифра

Рис. 2.2. Автомат, распознающий язык LI

Детерминированные конечныеавтоматы (распознаватели)

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

а реакция на входную строку выражается ответами «да» или «нет».

Определение 2.2.Детерминированный конечный автомат (распознаватель), или

сокращенно ДКА, – это пятерка

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

где:

Q – конечное множество внутренних состояний;

Р

Page 19: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Лекция 2 19

Σ – конечное множество символов, называемое входнымалфавитом;

θ: Q × Σ → Q – всюду определенная функция, называемаяфункцией переходов;

q0∈ Q – начальное состояние;F ⊆ Q – множество заключительных состояний.

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

Для наглядного представления функционирования автоматаиспользуются диаграммы переходов. Это ориентированныеконечные графы, в которых вершины соответствуют внутреннимсостояниям автомата (и помечаются соответствующими символами).

Если M = (Q, Σ, θ, q0, F) – ДКА, тогда его диаграммапереходов – это граф DM, имеющий ровно |Q| вершин, каждая изкоторых помечена некоторым qi ∈ Q. Для каждого правилаперехода θ(qi, a) = qj в DM существует дуга (qi, qj), помеченнаясимволом a. Вершина, помеченная q0, называется начальной, а тевершины, метки которых qf ∈ F, называются финальными (илизаключительными). Финальные вершины будем изображатьквадратиками, а нефинальные - кружочками.

Page 20: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

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

Нетрудно видеть, что определения ДКА с помощью пятерки(Q, Σ, θ, q0, F) и посредством диаграммы переходов DMравносильны.

Полезно ввести обобщенную функцию переходов

θ*: Q × Σ* → Q.

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

Пример 2.3.Рассмотрим ДКАM = ({q0, q1, q2}, {a, b}, θ, q0, {q1}),где θ(q0, a) = q0 , θ(q0, b) = q1,

θ(q1, a) = q0 , θ(q1, b) = q2,θ(q2, a) = q2 , θ(q2, b) = q1.

Ему соответствует диаграмма DM:

a a a b q0 q1 q2

b b

Этот автомат распознает строки ab, bab, abbb, bbaab, ноотвергает baa или bbaa.

В заключение дадим рекурсивное определение функции θ*:θ*(q, ε) = q,θ*(q, αa) = θ(θ*(q, α), a) для всех q ∈ Q, α ∈ Σ*, a ∈ Σ.

Page 21: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Лекция 2 21

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

адим теперь строгое определение языка, связанного сконкретным ДКА.

Определение 2.4.

Язык, допустимый ДКА M = (Q,Σ,θ,q0,F), – это множество всехстрок из Σ*, допустимых автоматом М, т.е. L(M) = {α | α ∈ Σ* иθ*(q0, α) ∈ F}.

Так как функции θ и θ* являются всюду определенными икаждый шаг работы автомата определяется единственным образом,то любая строка α ∈ Σ* после прочтения ее либо допускается(распознается) автоматом, либо отвергается им. Отсюда следует, что

LM( ) = {α | α ∈ Σ* и θ*(q0, α) ∉ F}.

Пример 2.5.

a a, b

q0 b q1 a, b q2

Этой диаграмме соответствует ДКА, допускающий язык L ={anb| n ≥ 0}.

Теорема 2.6.Пусть M = (Q, Σ, θ, q0, F) – детерминированный конечный авто-

мат (распознаватель) и пусть DM – соответствующая диаграмма пе-реходов. В этом случае для любых qi, qj ∈ Q и α ∈ Σ + θ*(qi, α) = qjтогда и только тогда, когда в DM существует путь, помеченныйпоследовательностью символов α, из вершины qi в вершину qj.

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

Д

Page 22: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

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

Проведем его индукцией по длине строки α.

Пусть |α| = 1, т.е. α = а для некоторого a ∈ Σ. Тогда θ*(qi, α) =θ(qi, а) = qj, по определению, соответствует дуге (qi, qj), помеченнойа, в DM. Допустим, что для всех α таких, что |α| ≤ n, утверждениеверно. Пусть |α| = n + 1, и пусть θ*(qi, α) = qj. Можно положитьα = βа, где |β| = n. Тогда для некоторого qk

θ*(qi, β) = qk и θ*(qi, α) = θ(qk, a) = qj.По предположению, равенство θ*(qi, β) = qk эквивалентно

существованию пути в DM из qi в qk, помеченному β. Кроме того,соотношение θ*(qk, a) = qj эквивалентно существованию дуги (qk, qj)с меткой а, что дает нам в DM путь из qi в qj, проходящий черезвершину qk и помеченный строкой βa, который соответствуетсоотношению θ*(qi, α) = qj. Теорема доказана.

Функция θ может быть задана таблицей:

a1 a2 ... ak ... an

q0

q1

.

.

.

qi qj

.

.

.

qm

Здесь на пересечении i-й строки и k-го столбца находится qjтогда и только тогда, когда θ(qi, ak) = qj.

Page 23: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Лекция 2 23

Если функция θ не всюду определенная, то ее можнодоопределить так, что соответствующий автомату язык неизменится.

Для любой пары (q, a), для которой θ(q, a) не определено,положим θ(q, a) = ∆, где ∆ ∉ Q ∪ Σ. Кроме того, для любого а ∈ Σположим θ(∆, a) = ∆.

При этом функция θ становится всюду определенной. Так как∆ ∉ Q, то ∆ ∉ F, а отсюда следует, что для любой строки α ∈ Σ*α ∈ L(M) тогда и только тогда, когда в модифицированном ДКА М∆

θ*∆(q0, α) ∈ F, что означает, что α ∈ L(M∆). Следовательно, L(M) =L(M∆).

Пример 2.7.

b a, b a q0 q1 ∆

b a a b

q2 q3 q4

a b b aУ приведенного на диаграмме автомата функция переходов не

является всюду определенной. Вводя новое состояние ∆,являющееся «ловушкой», мы доопределяем эту функцию (достройкадиаграммы показана штрихами).

Определение 2.8.

Язык L называется автоматным, если существует ДКА Мтакой, что L = L(M).

Таким образом, семейство всех ДКА определяет классавтоматных языков.

Page 24: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

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

b

аа,b

ε

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

Недетерминированныеконечные автоматы (распознаватели)

пределение 3.1.

Недетерминированный конечный автомат (распознаватель),или НКА, – это пятерка М = (Q, Σ, θ, q0, F), где Q, Σ, q0, Fопределяются так же, как и для ДКА, а функция переходов θвыглядит так:

θ: Q × (Σ ∪ {ε}) → 2Q.

Пример 3.2.

q0 q1 q2

Заметим, что здесьθ(q0, a) = {q0},θ(q0, b) = ∅,θ(q1, a) = {q2},

θ(q1, b) = {q0, q2},θ(q0, a) = ∅,θ(q0, b) = ∅,

значит, это НКА.

Лекция

3

О

Page 25: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Лекция 3 25

Определение 3.3.

Для НКА обобщенная функция переходов θ* определяетсяследующим образом: для любых qi, qj ∈ Q и α ∈ Σ* θ*(qi, qj)содержит qi тогда и только тогда, когда в диаграмме переходов этогоНКА существует путь из qi в qj, помеченный α.

Определение 3.4.

Язык, допускаемый НКА М, определяется так:L(M) = {α | α ∈ Σ* и θ*(q0,α) ∩ F = ∅}.

Пример 3.5.

Рассмотрим НКА, заданный диаграммой:

q0 a q1 ε q2

εВычислим θ*(q1, а) и θ*(q2, ε).Рассмотрим сначала все пути из q1, соответствующие

прочитанному символу а: {εεa(q1), εεaε(q2), εεaεε(q0)}. В круглыхскобках указаны вершины, в которых оканчиваются эти пути.Тогда, по определению,

θ*(q1, а) = {q0, q1, q2}.Аналогично

θ*(q2, а) = {q0, q2}.Заметим, что для любого q: q ∈ θ*(q, ε).

От НКА М, содержащего ε-переходы, можно перейти к М' безε-переходов так, что L(M) = L(M'). Для этого нужно для каждой пары(qi, а), qi ∈ θ, a ∈ Σ, определить множество всех путей вида

α = ε ε ... ε а ε ... ε,выходящих из вершины qi, и сформировать множество всех вершинqj

1, ..., qjk, которыми оканчиваются эти пути.

Page 26: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

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

Вводим новую функцию переходов θ' для НКА М':θ'(qi, а) = {qj

1, ..., qjk},

и полагаемМ' = (Q, Σ, θ', q0, F).

Нетрудно видеть, что при этом

L(M) = L(M').Это дает нам возможность в дальнейшем, при рассмотрении

НКА как средства задания языков, считать, что НКА не содержитε-переходов, т. е. θ: Q х Σ → 2Q.

Пример 3.6.Рассмотрим НКА М, заданный диаграммой DМ:

q0 a, ε q1 b Здесь Q = {q0, q1, q2, q3}, Σ ={a, b}, F = {q1}. a ε b b a

q2 b q3

b a

Построим автомат (недетерминированный) М' = (Q, Σ, q0', θ',F') без ε-переходов и такой, что L(M) = L(M'). Берем начальноесостояние q0 и вычисляем все состояния, в которые М переходит изq0 по символу а и по символу b:

q0a → q1, q0b→ q3,q0εa → q3, q0εb → q2,q0εa → q0, q0εb → q3,q0εaε → q2, q0εb → q1,т.е. θ'(q0, a) = {q0, q1, q2, q3} θ'(q0, b) = {q1, q2, q3}.

Page 27: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Лекция 3 27

Теперь то же самое сделаем для q1:q1a → q3, q1b→ q1,т.е. θ'(q1, a) = {q3}, θ'(q1, b) = {q1}.

Далее для q2 :q2a → q0, q2b→ q3,q2aε → q2, q2b → q2,q2aε→ q1,

т.е. θ'(q2, a) = {q0, q1, q2}, θ'(q2, b) = {q2, q3}.Для q3 получаем:

q3a → q3, q3b→ q1,т.е. θ'(q3, a) = {q3}, θ'(q3, b) = {q1}.

Наконец заметим, что q1∈ θ(q0, ε), т.е. ε допускается автоматомМ, следовательно, q0 должно быть помещено в F'.

Таким образом, диаграмма DМ' автомата М' будет выглядетьследующим образом:

a q0 a, b q1 b

b, a a b a a a,b q2 b q3

b,a a

Нетрудно видеть, что если некоторая строка α ∈ L(M), то α ∈L(M'), и наоборот, т. е. L(M) = L(M').

Page 28: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

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

Эквивалентность ДКА и НКАВведем отношение эквивалентности на множестве всех конечныхавтоматов (распознавателей).

Определение 3.7.

Два автомата эквивалентны, если они допускают один и тот жеязык.

Например, автоматы М и М' из предыдущего примера эквива-лентны. Пусть LD – класс языков, допускаемых детерминиро-ванными конечными автоматами, а LN – класс языков, допускаемыхнедетерминированными конечными автоматами. Наша цель -показать, что LD = LN. В этом смысле понятия ДКА и НКА равно-сильны. Так как ДКА есть частный случай НКА (когдаθ(q, a) = 1), то, очевидно, LD ⊂ LN. Покажем, что LN ⊂ LD. Дляэтого для любого НКА М, допускающего язык L(M), достаточнопостроить ДКА М' такой, что L(M') = L(M), т.е. эквивалентный М.

Рассмотрим преобразование НКА в эквивалентный ДКАсначала на примере.

Пример 3.8.

Обозначим через М следующий НКА М = (Q, Σ, q0, θ, F):

q0 a q1 a

b ε

q2

Построим эквивалентный ему ДКА M' = (Q', Σ, {q0}, T ', F').

Page 29: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Лекция 3 29

1. Положим q0' ={q0}.

2. θ'(q0', a) = θ(q0, a) = {q1, q2}, θ'(q0', b) = θ(q0, b) = ∅.

3. Положим q1' = {q1, q2}, q2' = ∅.

4. Вычисляем:

θ'(q1', a) = θ(q1, a) ∪ θ (q2, a) = {q1, q2} ∪ ∅ = {q1, q2} = q1',

θ'(q1', b) = θ(q1, b) ∪ θ(q2, b) = ∅ ∪ {q0} = {q0} = q0'.

θ'(q2', a) = ∅ = q2', θ'(q2', b) = ∅ = q2'.

Так как новых состояний q' не появилось, то процесс закончен.Получился M':

b

q'0 a q'1 a

b

q'2 a, b

Легко видеть, что это ДКА и что L(M') = L(M).

Теорема 3.9.Пусть L – язык, допускаемый недетерминированным конечным

автоматом MN = (QN, Σ, θN, q0, FN). Тогда существуетдетерминированный конечный автомат MD = (QD, Σ, θD, q0, FD)такой, что L = L(MD).

Доказательство.Покажем, как по данному НКА MN построить ДКА MD. Будем

использовать для этого процедуру (назовем ее Det), описаннуюниже, которая по MN строит диаграмму переходов ГD автомата MD.Заметим, что, по определению, каждая вершина ГD должна иметьΣ выходящих дуг, помеченных различными символами из Σ.

Page 30: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

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

Процедура Det останавливается лишь после того, как будутпостроены все такие дуги.

Процедура Det:Шаг 1. Строим граф ГD, состоящий из единственной вершины

{q0}, которую считаем начальной.

Шаг 2. Повторяем этот шаг до тех пор, пока у каждойпостроенной вершины в ГD не будет ровно Σ выходящих дуг:

1. Берем вершину {qi, qj, . . ., qk}, принадлежащую ГD, вкоторой отсутствует выходящая дуга, помеченная некоторымсимволом а ∈ Σ.

2. Вычисляем θN(qi, a), θN(qj, a), . . ., θN(qk, a).

3. Образуем объединение этих множеств: θN(qi, a) ∪θN(qj, a) ∪ ... ∪ θN(qk, a) = {ql, qm, ..., qn}.

4. Добавляем в ГD вершину, помеченную {ql, qm, ..., qn}(если она еще не была помещена в ГD).

5. Добавляем в ГD дугу, ведущую из вершины {qi, qj, . . .,qk} в вершину {ql, qm, ..., qn} и помеченную символом а.

Шаг 3. Каждая вершина в ГD, чья метка содержит некоторуюqf ∈ F, считается финальной и помещается в множество FD.

Шаг 4. Если MN допускал строку ε, то вершина {q0} такжепомещается в FD.

Ясно, что процедура Det сходится (т.е. заканчивает своюработу через конечное число шагов). Действительно, каждый витокцикла в Шаге 2 добавляет дугу в ГD. Но ГD может иметь самоебольшее NQ

2 ×Σ дуг, так что этот цикл рано или поздноостанавливается.

Покажем теперь, что в результате работы процедуры Det мыполучим требуемый автомат MD (заданный своей диаграммойпереходов ГD). Используем индукцию по длине n входной строки.

Page 31: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Лекция 3 31

Очевидно, что при n = 0 ε ∈ L(MN) тогда и только тогда, когдаε ∈ L(MD). Предположим, что для любой строки α ∈ Σ*, длинакоторой α ≤ n, существование в ГN пути, помеченного строкой α,из вершины q0 в вершину qi влечет существование в ГD пути,помеченного α, из вершины {q0} в вершину Si = {..., qi, ...}, инаоборот.

Пусть теперь α = n + 1. Положим α = βа и рассмотрим путьв ГN из q0 в qj, помеченный строкой α. Тогда должен существоватьпуть, помеченный β, из q0 в qi и дуга (или совокупность дуг) из qi вqj, помеченная символом а. По предположению индукции, в ГD

существует путь из q0 в Si, помеченный строкой β, а по построениюв ГD должна существовать дуга, помеченная а, из Si в некоторуювершину, чья метка содержит qj. Аналогичным образом, несложнопровести и обратное рассуждение. Таким образом, видим, что нашеутверждение верно и для случая α = n + 1, откуда следует егоистинность для любого натурального числа n. Наконец, замечаем,что если θN*(q0, α) содержит некоторое финальное состояние qf, тоqf ∈ θD*(q0, α) и, значит, θD*(q0, α) ∈ FD, и наоборот, еслиqf ∈ θD*(q0, α), то qf ∈ θN*(q0, α). Следовательно, L(MN) = L(MD).Теорема доказана.

Page 32: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

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

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

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

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

Пример 4.1.

Нетрудно проверить, что представленные на рис. 4.1. автоматы(а) и (б) эквивалентны. В этом можно убедиться с помощьюиндукции, непосредственно выписывая строки, допускаемые тем идругим автоматом.

Лекция

4

Л

Page 33: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Лекция 4 33

(а) (б)

q1 q3а b a,b b

q0 a q0 q1 q2

b q2 q4 q5b b a a,b

a a,b a

Рис.4.1. Эквивалентные ДКА с разным числом состояний

Заметим, что состояние q5 не играет никакой роли враспознавании строк, так как никогда не может быть достигнуто изначального состояния q0. Подобные состояния, называемыенедостижимыми, заведомо могут быть удалены из диаграммы ДКАвместе с входящими в них и выходящими из них дугами без ущербадля допускаемого автоматом языка. Но даже после удалениявершины q5 число состояний может быть сокращено до трех так, какэто, например, показано на рис. 4.1 (б).

Пусть M = (Q, Σ, θ, q0, F) - ДКА.

Определение 4.2.

Два состояния p и q детерминированного конечного автоматаназываются неразличимыми, если для любой строки α ∈ Σ* верноодно из двух:

a,b

Page 34: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

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

(1) θ*(q, α) ∈ F и θ*(p, α) ∈ Fили

(2) θ*(q, α) ∉ F и θ*(q, α) ∉ F.

Состояния p и q называются различимыми, если существуетстрока α ∈ Σ* такая, что одно из состояний

θ*(q, α), θ*(p, α)

принадлежит множеству F, а другое - нет.

Ясно, что любые два состояния автомата M либо различимы,либо неразличимы. Отношение неразличимости состояний являетсяэквивалентностью на множестве Q, так как оно рефлексивно,симметрично и транзитивно.

Метод редукции (т.е. уменьшения) числа состояний ДКА M,который мы собираемся рассмотреть, основан на нахождениимножеств неразличимых состояний автомата M. Эти множествапредставляют собой классы эквивалентности по отношениюнеразличимости, которые образуют разбиение множества Q нанепересекающиеся подмножества. Эти классы эквивалентности ибудут состояниями нового редуцированного автомата.

Вначале дадим описание алгоритма нахождения парразличимых состояний автомата M.

Процедура DIS:

Шаг 1. Удаляем все недостижимые состояния автомата. Этисостояния определяются простым просмотром всех путей (безциклов), ведущих из начальной вершины диаграммы переходов.Любая вершина, не принадлежащая ни одному из этих путей,является недостижимой.

Шаг 2. Рассмотрим все пары состояний (p, q). Если p ∈ F и q ∉F или наоборот, то пара (p, q) помещается во множество D.

Шаг 3. Повторяем следующий цикл до тех пор, пока неперестанут добавляться в D новые пары:

Page 35: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Лекция 4 35

для всех пар (p, q) и всех а ∈ Σ вычисляем θ(p, a) = pa и θ(q, a) = qa;если пара (pa, qa) была уже помещена в D, то пару (p, q) тожепомещаем в D.

Теорема 4.3.Процедура DIS сходится и помещает в D все различные

состояния автомата M.Доказательство.Очевидно, алгоритм сходится, так как множество всех пар,

которые надо просмотреть, конечно, а на каждом витке цикла Шага3 в множество D помещается хотя бы одна пара. Нетрудно заметитьтакже, что пары, помещенные в множество D, различимы. Остаетсяпоказать, что процедура DIS помещает в D все различимые пары (p,q).

Будем говорить, что состояния qi и pj различимы строкойдлины n (n > 0), если существуют переходы

θ(qi, a) = qk (4.4)и

θ(qj, a) = ql (4.5)

для некоторого а ∈ Σ, где qk и ql - состояния, различимые строкойдлины n-1. Для n = 0 состояния p и q различимы строкой длины 0,если одно из них принадлежит F, а другое - нет.

Покажем, что после n витков цикла на Шаге 3 все парысостояний, различимые строкой длины n или меньшей, будутпомещены во множество D. Шаг 2 служит базой индукции: на этомшаге все пары, различимые пустой строкой, помещаются в D.Допустим, что наше утверждение верно для всех длин k = 0, 1, 2, ...,n-1. Тогда на n-м витке цикла все пары, различимые строками,длины которых меньше n, будут уже содержаться в D.

Тогда, учитывая соотношения (4.4) и (4.5), замечаем, что всепары, различимые строками длины n, будут помещены в D. Поиндукции заключаем, что после завершения n-го витка цикла всепары (p, q), различимые строками длины n или меньшей, будут в D.

Page 36: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

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

Покажем, что после завершения работы алгоритма не останетсяни одной различимой пары, не помещенной в D. Предположим, чтоалгоритм DIS остановился после (n+1)-го витка цикла Шага 3. Какмы показали, после n-го витка цикла все пары, различимые строкамидлины n или меньшей, будут уже содержаться в D. Раз циклостановился на (n+1)-м витке, это означает, что на этом витке небыло добавлено в D ни одной неразличимой пары. Следовательно,не существуют пары, различимые строкой длины n+1. Но тогда изсоотношений (4.4) и (4.5) получаем, что не может быть пар,различимых строкой длины n+2, n+3 и так далее. Значит, послезавершения работы цикла все различимые пары окажутся в D.

Используя множество D, разобьем множество Q нанепересекающиеся подмножества неразличимых состояний

{qi, qj, ..., qk}, {ql, qm, ..., qn}, ...так, чтобы каждое q ∈ Q входило ровно в одно подмножество ичтобы любые два состояния из различных подмножеств былиразличимы. Так как свойство неразличимости является отношениемэквивалентности на множестве Q, то такое разбиение существует.Возьмем построенные подмножества в качестве состояний новогоавтомата, построим этот автомат и покажем, что он минимальный.Построение минимального автомата производится процедурой MIN,которая использует процедуру DIS.

Процедура MIN:По данному ДКА M = (Q, Σ, θ, q0, F) строим ДКА M' = (Q', Σ, θ',

q0', F') следующим образом:Шаг 1. Используя процедуру DIS, находим все пары

различимых и, соответственно, все пары неразличимых состояний.По ним строим подмножества

{qi, qj, ..., qk}, {ql, qm, ..., qn}, ...как это было описано выше.

Шаг 2. Для каждого такого множества{qi, qj, ..., qk}

неразличимых состояний образуем состояние автомата M',обозначаемое меткой

Page 37: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Лекция 4 37

<ij ... k>.Для каждого перехода ДКА M вида

θ (qr, a) = qs

находим соответствующие подмножества, которым qr и qsпринадлежат. Если

qr ∈ {qi, qj, ..., qk}и

qs ∈ {ql, qm, ..., qn},то добавляем в Q’ соотношение:

θ (<ij ... k>, a) = <lm ... n>.Шаг 4. Начальным состоянием q0' объявляем такое состояние

M', метка которого содержит 0.Шаг 5. В F' помещаем каждое состояние, метка которого

< ..., i, ... > содержит i для некоторого qi ∈ F.Теорема 4.6.Пусть M – произвольный ДКА, тогда применение к нему

процедуры MIN дает ДКА M' такой, чтоL(M) = L(M'),

причем автомат M' минимален, т.е. не существует другого ДКА сменьшим числом состояний, эквивалентного автомату M.

Доказательство.Пусть M – произвольный детерминированный конечный

автомат. Применим к нему процедуру MIN. В результате получаем,очевидно, некоторый ДКА, который обозначим M'. Доказатьэквивалентность M и M' можно по индукции аналогично тому, какэто было сделано для установления эквивалентности ДКА и НКА.Действительно, достаточно показать, что для любых qi ∈ Q и α ∈ Σ*θ*(qi, α) = qj тогда и только тогда, когда θ '*(<…qi…>, α) имеетметку вида <…j…>. Это легкое упражнение мы оставляем читателю.

Сложнее показать, что M' минимален. Пусть ДКА M' имеетсостояния

Page 38: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

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

{p0, p1, p2, …, pm},

где p0 – начальное состояние. Допустим, что существует другойДКА M1, эквивалентный M', но имеющий меньше состояний:{r0, r1, …, rs}, s < m, где r0 – начальное состояние M1, и пусть θ1 –функция переходов автомата M1.

Так как в автомате M' нет недостижимых состояний, то всесостояния p1, p2, …, pm достижимы из p0, т.е. существуют строки α1,α2, …, αm такие, что

θ '*(p0, αi) = pi, i = 1, 2, …, m.Но в силу того, что M1 имеет меньше состояний, нежели M', тодолжны существовать, по меньшей мере, две такие различныестрочки αk и αl, 1 ≤ k ≤ m, 1 ≤ l ≤ m, что

θ1*(r0, αk) = θ1*(r0, αl).

Так как pk и pl различимы, то должна существовать некоторая строкаβ такая, что θ'*(p0, αkβ) = θ '*(pk, β) является заключительнымсостоянием, а

θ'*(p0, αlβ) = θ '*(pl, β)

не является заключительным состоянием (или наоборот). Этоозначает, что строка αkβ допускается автоматом M', а αlβ - нет. Но вто же время имеем:

θ1*(r0, αkβ) = θ1*(θ1*(r0, αk), β) = θ1*(θ1*(r0, αl), β) = θ1*(r0, αlβ).

А это означает, что строки αkβ и αlβ одновременно или допускаютсяавтоматом M1, или отвергаются, что противоречит эквивалентностиM' и M1. Следовательно, M1 не существует.

Page 39: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Лекция 4 39

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

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

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

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

себя строки символов в некотором фиксированном алфавите Σ,скобки и символы операций +, • и *. Простейшим случаем являетсяобозначение языка {a} регулярным выражением а. Чуть сложнеевыглядит регулярное выражение, обозначающее {a, b, c}:

a + b + c,

где символ + используется для операции объединения множеств.Аналогичным образом будем использовать символы • и * дляобозначения операций сцепления и итерации. Так, например,выражение (a + b • c)* обозначает язык ({a}∪{b}{c})*={ε, a, bc, aa, abc, ... }. Заметим, что здесь использована обычнаяиерархия операций, т.е. предполагается, что символ • связываетоперанды сильнее, чем +, а символ * – сильнее, чем обапредыдущие.

Лекция

О

Page 40: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

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

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

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

Определение 5.1.

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

1. Пустое множество ∅ – регулярное.2. Множество {ε} – регулярное.3. Для любого a ∈ Σ множество {a} – регулярное (в алфавите Σ).4. Если P и Q – регулярные множества в алфавите Σ, торегулярными являются и множества P ∪ Q, P Q, P*.

5. Других регулярных множеств в алфавите Σ нет.

Итак, множество в алфавите Σ регулярно тогда и только тогда,когда оно либо ∅, либо {ε}, либо {a}, где a ∈ Σ, либо получено изэтих множеств применением конечного числа операцийобъединения, сцепления и итерации.

Определение 5.2.

Регулярные выражения в алфавите Σ и обозначаемые имирегулярные множества в том же алфавите определяются рекурсивноследующим образом:

1. φ – регулярное выражение, обозначающее регулярноемножество ∅.

2. e – регулярное выражение, обозначающее регулярноемножество {ε}.

Page 41: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Лекция 5 41

3. Если а ∈ Σ, то а – регулярное выражение, обозначающеерегулярное множество {a}.

4. Если p и q – регулярные выражения, обозначающиерегулярные множества L(p) и L(q), то (p + q) – регулярноевыражение, обозначающее регулярное множество L(p) ∪L(q); (p•q) – регулярное выражение, обозначающеемножество L(p)L(q); (р)* – регулярное выражение,обозначающее множество (L(p))*.

5. Других регулярных выражений в алфавите Σ нет.

Учитывая наше соглашение относительно приоритетовопераций +, • и *, мы будем избегать употребления избыточныхскобок в регулярных выражениях. Например, запись a + b•a*означает выражение (a + (b•(a*))).

Пример 5.3.Для Σ = {a, b, c} строка (a + b•c)* •(c + φ) является регулярным

выражением, обозначающим множество {a, bc}*{c}.Пример 5.4.Найти множество L(a*•(a + b)).По определению 5.2. имеем: L(a*•(a + b)) = L(a*)L(a + b) =

(L(a*))(L(a) ∪ L(b)) = {ε, a, aa, ...}{a, b} = {a, aa, aaa, ..., b, ab,aab, ...}.

Пример 5.5.Выражение p = (aa)*(bb)*b обозначает множество

L(p) = {a2nb2n + 1 n ≥ 0, m ≥ 0}.Пример 5.6.В алфавите Σ = {a, b} найти регулярное выражение p такое, что

L(p) = {α ∈ Σ* α имеет, как минимум, два соседних символа а}. Вэтом случае любая строка α ∈ L(p) может быть представлена в видеα = βaaγ, где β и γ – произвольные строки из Σ*. Тогда, очевидно,можно записать: p = (a + b)*•a•a•(a + b)*.

Определение 5.7.

Page 42: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

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

Регулярные выражения p и q эквивалентны, если L(p) = L(q),т.е. если они обозначают одно и то же множество. Будем в этомслучае писать p =q.

Ясно, что для каждого регулярного выражения можнопостроить регулярное множество, обозначаемое этим выражением.Понятно, что и для каждого регулярного множества можно найти,по крайней мере, одно регулярное выражение, обозначающее этомножество. Но таких выражений для одного и того же регулярногомножества существует бесконечно много. Действительно, если p –регулярное выражение в алфавите Σ, обозначающее множество L(p),то регулярные выражения p + φ, (p + φ) + φ, ((p + φ) + φ) + φ, ... будутобозначать одно и то же множество L(p).

Лемма 5.8.Пусть p, q, r – регулярные выражения. Тогда:

1. p + q = q + p2. φ* = e3. p + (q + r) = (p + q) + r4. p•(q•r) = (p•q)•r5. p•(q + r) = p•q + p•r6. (p + q)•r = p•r + q•r7. p•e = e•p = p8. φ•p = p•φ = φ9. p* = p + p*10. (p*)* = p*11. p + p = p12. p + φ = p.

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

Пусть p и q обозначают множества L(p) и L(q) соответственно.Тогда p + q обозначает L(p) ∪ L(q), а q + p обозначает L(q) ∪ L(p).

Page 43: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Лекция 5 43

Но L(p) ∪ L(q) = L(q) ∪ L(p) по свойству операции объединениямножеств, следовательно, p + q = q + p. Доказательства остальныхэквивалентностей проводятся по той же схеме и оставляютсячитателю.

Связь между регулярными выражениямии автоматными языками

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

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

Вначале мы покажем, что если p – регулярное выражение, тоL(p) – автоматный язык, т.е. существует конечный автомат(детерминированный или недетерминированный), которыйдопускает L(p). Построение такого автомата (на самом деленедетерминированного) мы будем осуществлять в соответствии срекурсивной схемой определения 5.1 регулярного выражения.

Теорема 5.9. Пусть p – регулярное выражение. Тогда существует некоторый

недетерминированный конечный автомат M(p), который допускаетязык L(p), т.е. L(p) – автоматный язык.

Доказательство.Рассмотрим элементарные выражения φ, e и a ∈ Σ. Автоматы,

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

a) b) c) ε а q0 q1 q0 q1 q0 q1

НКА, распознающий ∅ НКА, распознающий {ε} НКА, распознающий {a}

М

Page 44: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

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

Рис. 5.1. НКА для элементарных выражений

Пусть теперь p и q – произвольные выражения, а M(p) и M(q) –конечные автоматы, допускающие множества, обозначаемые этимивыражениями. Договоримся схематично изображать автомат M(r),допускающий множество, обозначаемое регулярным выражением r,так, как это представлено на рис. 5.2.

M(r)

q0 qf

Рис. 5.2. Схематичное представление НКА, допускающего L(r)

На этой схеме левая вершина-кружок представляет собойначальное состояние в диаграмме переходов автомата M(r), а праваявершина-квадрат – его заключительное состояние. Так как длякаждого конечного автомата существует эквивалентный емуконечный автомат с одним заключительным состоянием, то данноепредставление не уменьшает общность рассуждений. Пользуясьтаким схема-тическим представлением для НКА M(p) и M(q),нетрудно построить диаграммы переходов НКА для множеств L(p +q) = L(p) ∪ L(q) (см. рис. 5.3), для L(p•q) = L(p) L(q) (см. рис. 5.4) идля L(p*) =(L(p))* (см. рис. 5.5).

M(p)

ε ε

Page 45: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Лекция 5 45

ε M(q) ε

Рис. 5.3. НКА для L(p + q)

M(p) M(q) ε ε ε

Рис. 5.4. НКА для L(p •q)

ε

М(р) ε ε

ε

Рис. 5.5. НКА для L(p*)

Как видно из рисунков, заключительные состояния автоматовM(p) и M(q) перестают быть таковыми при конструировании новыхавтоматов, имеющих свои собственные заключительные состояния,обозначаемые, как обычно, квадратиками.

На основании индукции заключаем, что, поступая таксистематически, мы можем построить НКА для любого регулярноговыражения r, а значит, язык L(r) – автоматный. Теорема доказана.

Пример 5.10.

Page 46: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

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

Найти НКА, допускающий язык L(p), где

p = (a + b•b)* • (b•a* + ε).

Сначала строим автоматы М1 и М2 для выражений (a + b•b) и(b•a* + ε) (см. рис. 5.6). Затем, соединяя их по теореме 5.9, получаемтребуемый НКА (рис. 5.7).

a ε b b b ε

М1 a M2

a) НКА для (а + b•b) б) НКА для (b•a* + ε)

Рис. 5.6. Автоматы М1 и М2

ε

a ε ε b b ε ε b ε ε

М1 a M2

ε

Рис. 5.7. НКА, допускающий язык L((a + b•b)* •(b•a* + ε))

Ожидаемым, но отнюдь не очевидным является обратноеутверждение. Оно известно под названием "теорема Клини".

Теорема 5.11.

Для любого автоматного языка L существует регулярноевыражение р такое, что L = L(p).

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

Page 47: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Лекция 5 47

Пусть L – автоматный язык, т.е. существует ДКА

М = (Q, Σ, θ, q0, F)

такой, что L = L(M). Если F = {qr1, qr2, ..., qrt}, тогда из ДКА М можнополучить m автоматов М1, М2, ..., Ме, положив

Мi = (Q, Σ, θ, q0, {qri}), i = 1, ..., t.

Нетрудно видеть, что

L = L(M1) ∪ L(M2) ∪ ... ∪ L(Mt).

Если мы сможем доказать, что для любого L(Мi) существуетрегулярное выражение pi, которое обозначает это множество, тогдадля L искомое регулярное выражение будет следующим:

p = p1 + p2 + ... + pt.

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

М = (Q, Σ, θ, q1, {q1}),

где Q = {q1, q2, ..., qn}. Возьмем D(M) – диаграмму переходовавтомата М и рассмотрим множество всех путей в D(M), ведущих извершины qi в вершину qj и проходящих через вершины, номеракоторых не превышают s, s ≤ n. Если промежуточных вершин нет, тобудем считать, что s = 0. Соответствующее множество строк,помечающих эти пути, обозначим через Ls

ij, 1 ≤ i ≤ n, 1 ≤ j ≤ n, 1 ≤ s ≤n.

Покажем индукцией по s, что для любых i, j, s,удовлетворяющих указанным выше условиям, множеству Ls

ijсоответствует некоторое регулярное выражение ps

ij, котороеобозначает это множество.

Пусть s = 0. Возможны два случая:1) i ≠ j, т.е. вершины qi и qj различны. Если дуга между нимиотсутствует, то L0

ij = ∅ и p0ij = φ. Если же дуга (qi, qj)

существует, она может быть помечена любым символом из

Page 48: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

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

φ++++=rkakakaijp ...

210

tka

ekakakaijpr++++= ...

210

Σ = {a1, a2, ..., am}, следовательно, множество L0

ij в этом случае представимовыражением вида

где ∈ Σ, 1 ≤ kt ≤ m.

2) i = j, т.е. вершины qi и qj совпадают. В этом случае дугапредставляет собой петлю в вершине qi, помеченнуюнекоторым символом из Σ. Если же дуга отсутствует, то этоможно интерпретировать как ε-переход из вершины qi в qi.Таким образом, можем положить здесь

Допустим, что для любого s ≤ k наше утверждениеотносительно множеств Ls

ij верно. Пусть теперь s = k + 1. Тогдамножество Lk+1

ij можно представить следующим образом:

Lk+1ij = Lk

ij ∪ Lki k+1•(Lk

k+1 k+1)* •Lkk+1 j .

Действительно, множество путей из вершины qi в вершину qj вэтом случае состоит из всех путей, либо не проходящих черезвершину qk+1 (это Lk

ij), либо проходящих через qk+1 (и в этом случаевесь путь разбивается на 3 участка: от qi до qk+1, из qk+1в qk+1 и от qk+1до qj). По предположению индукции существуют регулярныевыражения

pkij, pk

i k+1, pkk+1 k+1, pk

k+1 j,

обозначающие, соответственно, множества Lkij, Lk

i k+1, Lkk+1 k+1 и

Lkk+1 j. Но тогда выражение

pk+1ij = pk

ij + pki k+1 • (pk

k+1 k+1)* • pkk+1 j

будет искомым регулярным выражением для множества Lk+1ij. По

индукции заключаем, что наше утверждение верно, т.е. для любогоs ≥ 0 существует регулярное выражение ps

ij, обозначающее

Page 49: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Лекция 5 49

множество Lsij. Для завершения доказательства теоремы нам теперь

достаточно заметить, что

L(M) = Ln1n,

a следовательно, для автоматного языка L(M) тоже существуетрегулярное выражение, которое его обозначает.

Теорема доказана.

Следствие 5.12.Класс автоматных языков совпадает с классом регулярных

множеств.

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

Page 50: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

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

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

Регулярные грамматикипределение 6.1.

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

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

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

A → B αA → α.

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

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

Пример 6.2.

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

S → abSa

Лекция

6

О

Page 51: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Лекция 6 51

Пример 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, переходит в состояниеЕ:

dD E

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

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

L(G) – автоматный язык.Доказательство.Положим N = {А0, А1, ...}, S = А0 и допустим, что продукция

имеет видА0 → α1Аi ,Аi → α2Аj ,. . . . . . . . . .Аn → αl. .

Page 52: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

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

Если α ∈ 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, α),

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

Page 53: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Лекция 6 53

Обратно, пусть α допустима М. В силу построения М,допустить α – это пройти через последовательность состояний А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А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.

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

Page 54: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

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

θ(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:

Page 55: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Лекция 6 55

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, 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).

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

Page 56: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

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

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

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

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

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

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

Лекция

7

И

Page 57: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Лекция 7 57

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

Замкнутость класса регулярных языковеорема 7.1.

Класс регулярных языков замкнут относительно операции

объединения, пересечения, дополнения, сцепления и итерации, т.е.

если L1 и L2 – регулярные языки, то языки

L1∪ L2, L1∩ L2, L1, L1 L2, L1*

также будут регулярными.

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

Пусть L1 и L2 – регулярные языки, тогда существуютрегулярные выражения p1 и p2 такие, что L1 = L(p1) и L2 = L(p2). Поопределению,

p1 + p2, p1•p2 и p1*

– регулярные выражения, обозначающие языки L1 ∪ L2, L1L2, L1*соответственно. Следовательно, эти языки тоже регулярны, т.е.класс регулярных языков замкнут относительно объединения,конкатенации и итерации.

Для доказательства замкнутости относительно дополнениярассмотрим ДКА M = (Q, Σ, θ, q0, F), который допускает язык L1.Тогда нетрудно видеть, что ДКА

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

допускает именно язык L1, являющийся дополнением к L1 вмножестве Σ* ( т.е. L1 = Σ* \ L1). Действительно, заметим, что вопределении ДКА мы предполагали, что θ* является всюдуопределенной функцией, т.е. для любой строки α ∈ Σ* θ*(q0, α)

Т

Page 58: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

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

определено. Следовательно, либо θ*(q0, α) ∈ F, т.е. являетсязаключительным состоянием автомата М и в этом случае α ∈ L1, илиже θ*(q0, α) ∈ F = Q \ F и α ∈ L1, откуда и получаем, что

L1 = L(M ).

Наконец, для доказательства замкнутости относительнопересечения воспользуемся известным соотношением:

L1 ∩ L2 = ( )L L1 2∪ .

Так как L1 и L2 регулярны, то их объединение тоже регулярно, аследовательно, и его дополнение - регулярный язык.

Следствие 7.2.

Класс регулярных языков замкнут относительно операцииразности двух множеств.

Действительно, это немедленно получается из равенстваL1 \ L2 = L1 ∩ L2

и предыдущей теоремы.

Определение 7.3.Пусть Σ и Г - алфавиты, тогда функция

h : Σ → Г*называется гомоморфизмом.

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

Область определения функции h может быть расширена намножество строк Σ* очевидным образом:

если α = а1а2...аn и α ∈ Σ*,то h(α) = h(а1)h(а2)...h(аn).

Page 59: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Лекция 7 59

Если L – язык в алфавите Σ, то его гомоморфный образ поотношению к функции h определяется так:

h(L) = {h(α) | α ∈ L}.Пусть p – регулярное выражение для языка L, тогда регулярное

выражение для языка h(L) может быть получено простой заменой в pкаждого символа на его гомоморфный образ.

Пример 7.4.Пусть Σ = {0,1} и Г = {a, b, c}.

Определим отображение h так:h(0) = ab,h(1) = bbc.

Тогда h(010) = abbbcab. Гомоморфный образ языка L = {00,010} –это язык h(L) = {abab, abbbcab}.

Пример 7.5.Возьмем Σ = {a, b}, Г = {b, c, d}. Положим

h(a) = dbcc,

h(b) = bdc.

Предположим, что язык L обозначается выражением

p = (a + b*) • (aa)*.

Тогда выражениеp1 = (dbcc + (dbc)*) • (dbccdbcc)*

будет обозначать язык h(L).

Теорема 7.6.

Пусть L – регулярный язык, а h – гомоморфизм, тогда h(L) –регулярный язык. Следовательно, класс регулярных языков замкнутотносительно гомоморфизмов.

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

Page 60: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

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

Пусть L – регулярный язык, обозначаемый некоторымрегулярным выражением p. Находим h(p), подставляя в p вместокаждого символа а ∈ Σ его образ h(a). Нетрудно видеть изопределения регулярного выражения, что h(p) – тоже регулярноевыражение. Кроме того, легко заметить, что это выражение h(p)обозначает именно язык h(L). Действительно, достаточно показать,что если строка α ∈ L(p), то образ этой строки h(α) принадлежитL(h(p)), и, наоборот, для каждой строки β ∈ L(h(p)) существует α ∈L(p) такая, что β = h(α). Оставляя детали этого рассуждениячитателю в качестве упражнения, мы завершаем тем самымдоказательство.

Алгоритмические проблемырегулярных языков

дной из основных проблем, относящихся к разрядуалгоритмических, является так называемая проблемавхождения (или проблема принадлежности): можно ли по

данному языку L и данной строке α определить, входит ли строка αв L или нет? Под методом, с помощью которого предполагаетсянаходить ответ, понимается алгоритм, решающий проблемувхождения. Если для какого-то класса языков такого алгоритма несуществует, то языки этого класса не имеют сколько-нибудьсущественных приложений. Помимо проблемы вхождения, имеютсяи другие проблемы относительно языков, где речь идет осуществовании некоторого алгоритма. Все такие проблемы будемназывать алгоритмическими. Необходимо, однако, уточнить, что мыпонимаем под выражением "задан язык". Дело в том, что существуетмного способов описания одного и того же семейства языков. Так,для регулярных языков имеется возможность неформальногоописания языка, представление его в теоретико-множественнойнотации, задание с помощью конечного автомата регулярноговыражения и регулярной грамматики. Так как для конструированияалгоритмов требуется однозначность исходных данных, то мыостановимся на трех последних способах. Будем называтьстандартным представлением регулярного языка задание его или

О

Page 61: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Лекция 7 61

конечным автоматом, или регулярным выражением, или регулярнойграмматикой.

Теорема 7.7.

Пусть фиксирован алфавит Σ, тогда существует алгоритм,который для любого регулярного языка L ⊆ Σ* в стандартномпредставлении и любой строки α ∈ Σ* определяет, входит α в L илинет.

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

Вначале переходим к представлению языка L с помощьюконечного автомата (если L был задан в иной форме, т.е.регулярным выражением или регулярной грамматикой). Это можносделать эффективно за конечное число шагов. Затем строимдиаграмму переходов автомата (также за конечное число шагов) и,перебирая все пути, ведущие из начальной вершины и имеющиедлину |α|, определяем, есть ли среди них путь, помеченный α иоканчивающийся в одной из заключительных вершин (это тожеосуществимо за конечное число шагов). Если такой путь найдется,то делаем вывод, что α ∈ L, а если нет, то α ∉ L.

Описанный алгоритм универсален в том смысле, что он даетответ на вопрос "α ∈ L?" для любой пары (L, α). Это отражаетмассовый характер алгоритмической проблемы, что являетсячрезвычайно важным обстоятельством. Именно оно придаетзначение любому алгоритму, так как освобождает от необходимостив каждом частном случае изобретать каждый раз новый методрешения проблемы.

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

Page 62: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

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

Теорема 7.8.Существуют алгоритмы, которые для любого регулярного

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

Доказательство.Как и в предыдущей теореме, строим диаграмму переходов

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

Теорема 7.9.Существует алгоритм, который по стандартному

представлению любых двух регулярных языков L1 и L 2 определяет,равны ли они.

Доказательство.Пусть даны два регулярных языка L1 и L2. Построим новый

язык

L3 = (L1 ∩ L2) ∪ (L1 ∩ L2).

Очевидно, L3 – тоже регулярный язык. Кроме того, нетруднозаметить, что L1 = L2 тогда и только тогда, когда L3 = ∅. Но потеореме 7.8 существует алгоритм, который для любого языкавыясняет, пуст ли он. Применив его в данном случае к языку L3,получаем ответ на вопрос, равны ли L1 и L2.

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

Page 63: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Лекция 7 63

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

Лемма о расширении регулярных языковледующий результат, известный как Лемма о расширениирегулярных языков (Pumping Lemma) основан на том простомзамечании, что в диаграмме переходов с n вершинами любой

путь длины, большей или равной n, должен содержать цикл, т.е.повторяющуюся вершину.

Теорема 7.10.Пусть L – бесконечный регулярный язык. Тогда существует

целое число m > 0 такое, что для любой строки α ∈ L, длина которой|α| ≥ m, возможно представление

α = βγδ,где |γ| ≠ 0 и |βγ| ≤ m, такое, что для любого i = 0, 1, 2, ... строка

αi = βγiδтакже принадлежит L.

Доказательство.Если язык L регулярный, тогда существует ДКА M, который

распознает его. Пустьq0, q1, ..., qn

– множество всех состояний автомата M. Возьмем любую строку α∈ L такую, что

|α| = k ≥ m = n+1.

Так как по предположению L бесконечен, то такая достаточнодлинная строка всегда найдется. Рассмотрим все те состоянияавтомата M, через которые он проходит, когда прочитывает строкуα; пусть это будут состояния

q0, qi, qj, ..., qf.

Так как эта последовательность имеет k + 1 вершину и

С

Page 64: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

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

k + 1 > n + 1,

то, как минимум, одна вершина должна повториться, по крайнеймере, на n-м шаге. Таким образом, последовательность должнаиметь следующий вид:

q0, qi, qj, ..., qr, ..., qr, ..., qf.,

причем, очевидно, можно считать, что последовательности q0, qi, qj,..., qr и qr, ..., qf уже не содержат повторяющихся элементов.Но тогда должны существовать подстроки β, γ, δ строки α такие, что

θ*(q0, β) = qr,

θ*(qr, γ) = qr,

θ*(qr, δ) = qf,

причем |βδ| ≤ n+1 = m и |γ| ≥ 1. Отсюда непосредственно получаем,что

θ*(q0, βδ) = qf,а также

θ*(q0, βγ2δ) = qf,

θ*(q0, βγ3δ) = qf,

и так далее, что и завершает доказательство.

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

Впрочем, это не является недостатком, так как все конечныеязыки заведомо регулярны, а Лемма о расширении главным образомприменяется для доказательства того, что какой-то данный язык неявляется регулярным. Это доказательство всегда проводится попринципу "от противного", чтобы затем получить противоречие. Но,как и любое другое необходимое условие, Лемма о расширении не

Page 65: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Лекция 7 65

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

Пример 7.11.

Показать, используя Лемму о расширении, что язык

L = {an bn | n ≥ 0}

не является регулярным.

Допустим противное, т.е. что язык L – регулярный. Тогда для Lсправедлива Лемма о расширении, а значит, и должно существоватьтакое m, что если |α| = n > m, где α ∈ L, то α можно представить ввиде β γ δ.

Для строки γ возможны три случая:

1) γ = аk,

2) γ = bt

3) γ = akbt.

В каждом из этих случаев мы получаем:

1) αi = an - k (ak)i bn,

2) αi = an (bt)i bn - t,

3) αi = an - k (akbt)i bn - t.

Полагая i = z, убеждаемся, что ни в одном из случаев α2 непринадлежит L, что противоречит утверждению Леммы орасширении. Следовательно, наше первоначальное предположение орегулярности языка L неверно, т.е. язык {anbm | n ≥ 0} не являетсярегулярным.

Пример 7.12.

Page 66: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

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

Показать, что язык

L = {anbm | n ≠ m, n ≥ 0, m ≥ 0}

не является регулярным.

Можно и здесь попытаться прямо использовать Лемму орасширении, но мы дадим более изящное решение, опирающееся напредыдущий пример. Допустим, что L – регулярный язык. Тогдарегулярным должен быть и язык

L1 = L ∩ L(a* •b*).

Но L1 = {an bn | n ≥ 0} и, как уже было показано, не являетсярегулярным. Следовательно, и L не может быть регулярным.

Page 67: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Лекция 7 67

Контекстно-свободныеязыки

ак мы уже показали, не все языки регулярны. Так, например,применив лемму о расширении регулярных языков, мыубедились, что язык L = {anbn | n ≥ 0} не является регулярным.

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

Лекция

8

К

Page 68: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Контекстно-свободные языки68

Контекстно-свободные грамматики регулярной грамматике класс продукций очень ограничен: влевой части любой продукции А → α фигурирует одиннетерминальный символ А, а правая часть α имеет

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

Определение 8.1.

Грамматика G = (N, T, S, P) называется контекстно-свободной(или КС-грамматикой), если любая ее продукция имеет вид А → α,где А ∈ N, α ∈ (N ∪ T)*.

Язык L называется контекстно-свободным (или КС-языком),если существует контекстно-свободная грамматика G такая, что

L = L(G).

Так как, очевидно, любая регулярная грамматика контекстно-свободна, то и любой регулярный язык является КС-языком. Сдругой стороны, язык L = {anbn | n ≥ 0} не регулярный, но, как этовидно из примера 1.7, является контекстно-свободным.Следовательно, класс регулярных языков есть собственноеподмножество класса КС-языков.

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

Пример 8.2.

В

Page 69: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Лекция 8 69

Грамматика G = ({S}, {a, b}, S, P), где Р есть множествопродукций

S → aSa

S → bSb

S → ε,

является контекстно-свободной. Типичным выводом в этойграмматике является следующий:

S ⇒ aSa ⇒ abSba ⇒ abbSbba ⇒ abbbba.

Отсюда нетрудно видеть, что L(G) = {αα-1 | α ∈ {a, b}*}.Этот язык контекстно-свободный, но, как было показано ранее, нерегулярный.

В контекстно-свободных грамматиках вывод может включатьсентенциальные формы, содержащие более одного нетерминальногосимвола. В этом случае появляется возможность выбора, какой изэтих символов заменять раньше другого. В качестве примерарассмотрим КС-грамматику G = ({E, T, F}, {a, +, *, (, )}, E, P) спродукциями

1) Е → Е + Т , 2) E → Т ,3) Т → Т * F, 4) Т → F ,5) F→ (E) , 6) F → a.

Рассмотрим два вывода в G строки а + а:

l) E ⇒1

E + T ⇒2

T + T ⇒4

F + T ⇒6

a + T ⇒4

a + F ⇒6

a + a;

r) E ⇒1

E + T ⇒4

E + F ⇒6

E + a ⇒2

T + a ⇒4

F + a ⇒6

a + a.

В этих двух выводах над стрелками указаны номерапримененных на соответствующем шаге продукций из Р. Можнозаметить, что в выводах l) и r) использованы одни и те жепродукции, но в разном порядке: в выводе l) на каждом шаге

Page 70: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Контекстно-свободные языки70

заменяется самый левый нетерминальный символ, а в выводе r) –самый правый.

Определение 8.3.

Вывод в КС-грамматике называется левосторонним, если накаждом шаге замещается самый левый нетерминальный символ.Если замещается всегда самый правый символ, то вывод называетсяправосторонним.

Таким образом, в рассмотренном ранее примере вывод l)является левосторонним, а вывод r) – правосторонним.

Другой способ представления вывода вне зависимости отпорядка применения продукций - представление его в виде деревавывода. Это упорядоченное дерево, вершины которого помеченылевыми частями продукций, а непосредственные потомки вершиныв совокупности представляют собою правую часть соответствующейпродукции. Так, если на некотором шаге вывода в грамматике G =(N, T, S, P) была применена продукция X → Y1Y2 ... Ym, а затемпродукция Y2 → Z1Z2 ... Zn, где

Yi, Zi ∈ N ∪ T, 1 ≤ i ≤ m, 1 ≤ j ≤ n, Y2 ∈ N,то этой части вывода будет соответствовать фрагмент деревавывода, представленный на рис. 8.1. X

Y1 Y2 Y3 K Ym

Z1 Z2 K Zn

Рис. 8.1. Фрагмент дерева выводаКорень дерева вывода помечается начальным символом

грамматики, а листья – терминальными символами. В целом, дерево

Page 71: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Лекция 8 71

вывода показывает, как в процессе вывода происходит замещениенетерминальных символов.

Определение 8.4.

Пусть G = (N, T, S, P) – контекстно-свободная грамматика.Дерево вывода в грамматике G – это упорядоченное дерево,удовлетворяющее следующим условиям:

1) корень помечен начальным символом S;

2) каждый лист помечен символом из множества T ∪ {ε};

3) каждая вершина, не являющаяся листом, помечена символомиз N;

4) если вершина имеет метку А ∈ N, а ее потомки помечены(слева направо) символами X1, X2, ... , Xn, тогда продукцияА→X1X2 ... Xn содержится в Р;

5) лист, помеченный ε, является единственной дочернейвершиной своей родительской вершины.

Если в этом определении исключить условие 1, а условие 2заменить на условие

2') каждый лист помечен символом из множества N ∪ T ∪ {ε},

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

Кроной дерева вывода назовем строку, которая получится, есливыписать слева направо все метки листьев (опуская при этомсимволы ε):

Пример 8.5.Рассмотрим грамматику G с продукциями

S → aSbS | bSaS | ε.

Тогда следующим двум выводам в G строки abab:

Page 72: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Контекстно-свободные языки72

а) S ⇒ aSbS ⇒ abSaSbS ⇒∗

abεaεbε ;

б) S ⇒ aSbS ⇒ aεbS ⇒ aεbaSbS ⇒∗

aεbaεbε

будут соответствовать деревья выводов, изображенные на рис.8.2.

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

a) S б) S

a S b S a S b S

b S a S ε ε a S b S

ε ε ε ε

Рис. 8.2. Деревья выводов

Теорема 8.6.

Пусть G = (N, T, S, P) – КС-грамматика. Тогда для любойстроки α ∈ L(G) существует дерево вывода, крона которогосовпадает с α. И обратно, крона любого дерева в G принадлежитL(G). Кроме того, крона любого частичного дерева вывода в G,корень которого помечен S, является сентенциальной формой в G.

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

Page 73: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Лекция 8 73

Покажем вначале, что каждой сентенциальной форме в Gсоответствует частичное дерево вывода. Используем для этогоиндукцию по длине вывода. Пусть длина вывода равна 1. Так каквывод S ⇒ α влечет наличие продукции S → α в G, то требуемоеутверждение немедленно следует из Определения 8.4.

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

Пусть произвольная сентенциальная форма ϕ выводима за(n + 1) шаг, тогда вывод можно разбить на две части:

вывод длины n: S ⇒∗αSβ, где α, β ∈ (N ∪ T)*, A ∈ N;

и вывод длины 1: αAβ ⇒ αX1X2 ... Xnβ = ϕ, где Xi ∈ N ∪ T.

Так как по предположению индукции существует частичноедерево вывода с кроной αАβ и так как грамматика содержитпродукцию А → Х1Х2 ... Хn, то, наращивая это дерево в вершине А спомощью указанной продукции, мы получим частичное деревовывода с кроной αХ1Х2 ... Хnβ = ϕ, что и требовалось.

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

Так как любое дерево вывода является в то же время ичастичным деревом вывода, листья которого помеченытерминальными символами, то из предыдущих рассужденийследует, что каждая строка в L(G) является кроной некоторогодерева вывода в G, а крона любого дерева вывода в G принадлежитL(G).

Итак, для каждой строки α ∈ L(G) существуетсоответствующее дерево вывода, которое показывает, какиепродукции участвуют в выводе этой строки, но без указания ихстрогого порядка применения. Но можно представить себе, что припостроении дерева вывода наращивается самая левая вершина,

Page 74: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Контекстно-свободные языки74

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

Следствие 8.7.

В КС-грамматике G любая строка α ∈ L(G) имеетлевосторонний и правосторонний вывод.

Page 75: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Лекция 8 75

Контекстно-свободные языки

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

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

S → ϕи находим все строки ϕ, которые могут быть получены из S за одиншаг. Если ни одна из них не совпадает с α, то переходим кследующему этапу: применяем все продукции из G, применимые кα, к самому левому нетерминальному символу в каждой строке ϕ.

Лекция

9

В

Page 76: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Контекстно-свободные языки76

Это дает нам множество всех сентенциальных форм, некоторые изкоторых могут вести нас к α. Далее, на каждом промежуточномэтапе мы каждый раз выбираем самые левые переменные вполученных на предыдущем этапе строках и применяем к ним всевозможные продукции. Может случиться, что некоторыесентенциальные формы не ведут к α, тогда они могут бытьисключены из рассмотрения. Вообще говоря, на первом этапе мыполучим множество всех сентенциальных форм, которые могут бытьвыведены в G применением n продукций. Если α ∈ L(G), то этастрока α должна иметь левосторонний вывод конечной длины.Следовательно, применяя описанную процедуру к α, мы нанекотором шаге n получим левосторонний вывод для α. Будемназывать эту процедуру грамматического разбора методом полногоперебора, который относится к группе методов, имеющих общееназвание – "нисходящий разбор", который соответствуетпостроению дерева вывода сверху вниз, начиная с корня.

Пример 9.1.

Рассмотрим грамматику S → SSaSbbSaε и строку α = aabb.Однократное применение продукций грамматики дает следующиевыводы:

S ⇒ SS,S ⇒ aSb,S ⇒ bSa,S ⇒ ε.Имея в виду построение вывода строки α, мы можем

исключить из дальнейшего рассмотрения последние два вывода какзаведомо не ведущие к цели. Рассмотрим теперь выводы длины 2для первых двух случаев:

1) S ⇒ SS ⇒ SSS,S ⇒ SS ⇒ aSbS,S ⇒ SS ⇒ bSaS,S ⇒ SS ⇒ S.

2) S ⇒ aSb ⇒ aSSb,

Page 77: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Лекция 9 77

S ⇒ aSb ⇒ aaSbb,S ⇒ aSb ⇒ abSab,S ⇒ aSb ⇒ ab.

Как и на предыдущем шаге, некоторые выводы могут бытьисключены из дальнейшего рассмотрения (третий вывод в группе 1и два последних – в группе 2).

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

S ⇒ aSb ⇒ aaSbb ⇒ aabb.

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

Грамматический разбор методом полного перебора имеетсерьезные недостатки. Во-первых, этот алгоритм недостаточноэффективен по времени работы и по объему используемой памяти, аво-вторых, он может расходиться на строке, не принадлежащейпорождаемому языку. Так, в только что рассмотренном примере,если мы вместо строки α возьмем строку β = abb и запустимописанный выше алгоритм, то он будет без конца порождать всеновые и новые сентенциальные формы, безуспешно пытаясьпостроить несуществующий вывод строки β в данной грамматике.

Заметим, что если грамматика не содержит продукций видаA→ε и A→B, то применение любой продукции такой грамматикилибо увеличивает длину сентенциальной формы, либо добавляет внее терминальный символ. А это дает нам эффективный критерийостановки алгоритма: как только длина сентенциальной формыстановится больше длины данной строки, то работа алгоритма наданной ветке прекращается. Очевидно, что через конечное числошагов работа алгоритма на всех ветвях прекратится, даже еслиданная строка не принадлежит рассматриваемому языку. Вследующих лекциях будет показано, что указанное ограничение навид продукций грамматики не сужает класс языков, к которым

Page 78: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Контекстно-свободные языки78

может применяться рассмотренный алгоритм. Так, например,грамматика

S ⇒ SS aSbbSaabba

удовлетворяет указанным требованиям и порождает тот же язык, чтои в примере 9.1, но не содержащий пустой строки. При этом длялюбой строки α ∈ {a, b}+ грамматический разбор методом полногоперебора всегда заканчивается не более чем за α шагов. Врезультате мы получаем либо вывод строки α, либо информацию отом, что α не принадлежит языку, порождаемому даннойграмматикой.

Резюмируем сказанное в виде следующей теоремы дляКС-языков.

Теорема 9.2.

Пусть G = (N, T, S, P) – контекстно-свободная грамматика, несодержащая продукций вида A → ε или A → B, где A, B ∈ N. Тогдаграмматический разбор методом полного перебора может бытьтрансформирован в алгоритм, который для любой строки α ∈ T*либо строит ее вывод, либо сообщает, что вывод для α несуществует.

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

Рассмотрим α ∈ T* и любой вывод в G:

S ⇒ ϕ1 ⇒ ϕ2 ⇒ … ⇒ ϕn,

где ϕi – сентенциальные формы. Для каждой сентенциальной формывведем две числовые характеристики: ее длину и количествотерминальных символов в ней. Очевидно, при переходе от ϕi к ϕi+1возрастает, по крайней мере, одна из этих характеристик. Если насинтересует вывод строки α, то ни длина ϕi, ни число терминальныхсимволов не могут превышать α. Следовательно, сам вывод неможет иметь более 2iα шагов. Просмотрев все такие выводы, мылибо найдем среди них вывод α, либо заключим, что α ∉ L(G).

Page 79: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Лекция 9 79

Что касается неэффективности метода полного перебора приграмматическом разборе, то эта проблема намного сложнее. Напервом шаге мы можем породить P сентенциальных форм (есликаждая из продукций применима к S), на втором шаге к каждой изполученных сентенциальных форм мы снова можем применить Pпродукций, т.е. получаем P2 форм, и так далее. В целом,применение полного перебора может дать Pα сентенциальныхформ. Если под строкой α понимать текст программы в некоторомязыке программирования, то легко понять, что полученнаяэкпоненциальная оценка сложности делает невозможнымпрактическое применение данного метода. Существуют болееэффективные алгоритмы грамматического разбора, но они не стольпросты для понимания и их изучение выходит за рамки нашегокурса. Такие алгоритмы рассматриваются в курсе, посвященномметодам построения компиляторов. Мы здесь лишь отметим, чтопрактически применимыми являются те методы грамматическогоразбора, для которых время работы пропорционально длинерассматриваемой строки. В общем случае нам известны такиеалгоритмы, применимые ко всем КС-языкам, но они существуют дляцелого ряда ограниченных, но практически важных специальныхклассов КС-языков.

Пример 9.3.Рассмотрим такой тип контекстно-свободной грамматики, у

которой все продукции имеют видA → aα,

где A ∈ N, a ∈ T, α ∈ N*, причем каждая пара символов (A, a) можетвходить не более чем в одну продукцию. Покажем, что для любойстроки α, выводимой в этой грамматике, грамматический разборможет быть произведен не более чем за α шагов. Возьмемпроизвольную строку

α = a1a2 … anи применим к ней метод полного перебора для построения еевывода. Так как существует единственная пара (S, a1), входящая впродукцию, применимую на первом шаге, то единственным образомполучаем:

Page 80: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Контекстно-свободные языки80

S ⇒ a1A1A2 … Am.Затем, заменяя переменную A1 и учитывая, что существует лишьединственная продукция, соответствующая паре (A1, a2), получаем:

S ⇒∗

a1A1A2 … Am.

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

Рассмотренная грамматика называется простой грамматикой(или S-грамматикой). Несмотря на кажущуюся простоту S-грам-матик, в них могут быть выражены многие распространенныеконструкции языков программирования.

Неоднозначность грамматик и языковз предыдущих рассуждений ясно, что для произвольнойстроки α ∈ L(G) грамматический разбор методом полногоперебора дает нам некоторое дерево вывода для α. Если

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

Определение 9.4.

Контекстно-свободная грамматика G называетсянеоднозначной, если существует некоторая строка α ∈ L(G), котораяимеет в G, по крайней мере, два различных дерева вывода. Впротивном случае КС-грамматика называется однозначной.

Нетрудно заметить, что неоднозначность влечет существованиедвух или более различных левосторонних (или правосторонних)выводов.

Пример 9.5.Покажем, что грамматика

S → aSbSSε

И

Page 81: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Лекция 9 81

неоднозначна. Для этого возьмем строку α = aabb и построим длянее два вывода в этой грамматике:

а) S б) Sa b S S

S a ba b ε S

S a bS

ε

ε

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

Пример 9.6.Рассмотрим грамматику G = (N, T, S, P), где N = {E, T}, T = {a,

b, c, +, ∗, (,)} и Р - множество следующих продукций:E → I,E → E + E,E → E ∗ E,E → (E),I → abc.Нетрудно видеть, что эта грамматика порождает собственное

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

Page 82: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Контекстно-свободные языки82

Покажем, что эта грамматика неоднозначна. Возьмем строкуa+b∗c, которая принадлежит языку L(G), и построим для нее двадерева вывода:

а) Е б) Е

Е + Е Е ∗ Е

I E ∗ E E + E I

a I I I I c

b c a b

Рис. 9.1. Два дерева вывода для a+b∗c

Для того чтобы устранить неоднозначность, в подобныхслучаях иногда вводят дополнительные правила, устанавливающиеотносительные приоритеты арифметических операций. Так, обычносчитают, что операция умножения ∗ связывает операнды сильнее,чем сложение +. Тогда на рис. 9.1 дерево вывода а) должно будетрассматриваться как правильное, соответствующее тому, чтопроизведение b∗c является подформулой, значение которой должнобыть вычислено раньше, чем будет произведено сложение. Однакоэти правила не соответствуют нашим грамматическим правилам,имеющим строго определенную форму продукций. Поэтомупопробуем так видоизменить данную грамматику, чтобы она сталаоднозначной. Для этого в качестве N возьмем следующее множествопеременных: {E, M, F, I} и новый набор продукций:

E → M ,M → F ,F → I ,

Page 83: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Лекция 9 83

E → E + M ,M → M∗F ,F → (E) ,I → abc.

В этой грамматике строка a+b∗c будет иметь уже единственноедерево вывода, представленное на рис. 9.2. Более того, можнопоказать, что и для любой другой строки, выводимой в этойграмматике, соответствующее дерево вывода единственно. А этоозначает, что преобразованная грамматика однозначна. Если жеучесть, что она эквивалентна исходной грамматике (в чем нетрудноубедиться), то можно считать, что мы достигли цели и избавились отнеоднозначности.

E

E + M

M M ∗ F

F F I

I I c

a b

Рис. 9.2. Единственное дерево вывода для a+b∗c

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

Page 84: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Контекстно-свободные языки84

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

Определение 9.7.Контекстно-свободный язык L называется однозначным, если

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

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

Пример 9.8.Язык L = {anbncm n, m ≥ 0}∪{anbmcm n, m ≥ 0} является

существенно неоднозначным контекстно-свободным языком.

Покажем, что язык L – контекстно-свободный. Нетруднопроверить, что язык

L = {anbncm n, m ≥ 0}порождается грамматикой G1:

S1 → aS1bCε,

C → cCε,

а язык

L2 = {anbmcm n, m ≥ 0}

порождается грамматикой G2:

S2 → aS2B,

B → bBcε.

Page 85: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Лекция 9 85

Тогда, очевидно, язык L = L1 ∪ L2 порождается грамматикой,множество продукций которой состоит из всех продукцийграмматик G1 и G2 и двух дополнительных продукций

S → S1S2.

Мы не будем приводить здесь технически сложноедоказательство существенной неоднозначности языка L, а отметимтолько, что эта неоднозначность связана с невозможностьювыразить с помощью одного и того же множества продукций два"противоречивых" требования: в языке L1 количества символов a и bв строке должны совпадать между собой и почти всегда отличатьсяот количества символов с, тогда как в языке L2 количества символовb и c в строке совпадают между собой и почти всегда отличаются отколичества символов a.

Page 86: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Контекстно-свободные языки86

ПреобразованияКС-грамматик и нормальныеформы

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

умаляя общности, отказаться от некоторых случаев, которыезатрудняют синтаксический анализ. Так, например, можно безизменения порождаемого языка исключить из грамматикипродукции вида А → ε и А → В. В связи с этим возникаетнеобходимость изучения проблемы преобразования КС-грамматикик эквивалентному виду, удовлетворяющему определеннымограничениям на вид продукций. Наибольший интереспредставляют для нас так называемые нормальные формыКС-грамматик с весьма сильными ограничениями на вид продукций,которые, однако, достаточно широки для того, чтобы любую КС-грамматику можно было преобразовать к эквивалентной КС-грамматике в нормальной форме. В этой лекции мы рассмотрим двенормальные формы КС-грамматик: нормальную форму Хомского инормальную форму Грейбах, имеющих исключительно полезныетеоретические и практические приложения.

Лекция

10

О

Page 87: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Лекция 10 87

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

грамматики, поэтому будем предполагать, что рассматриваемыенами КС-грамматики не содержат ε-продукций, т.е. продукций видаА → ε. Это не сузит наши возможности в изучении свойств КС-грамматик и КС-языков. Действительно, пусть L – контекстно-свободный язык и пусть

G = (N, T, S, P)

– КС-грамматика, порождающая язык L\{ε}. Тогда, добавив к Nновый нетерминальный символ S' в качестве начального символа ирасширив P двумя новыми продукциями

S' → S│ε,мы получим новую грамматику G', порождающую язык L. Поэтомулюбое нетривиальное заключение по поводу свойств языка L\{ε}может быть перенесено и на язык L. Кроме того, существует методполучения из любой КС-грамматики G некоторой другой КС-грам-матики Gε такой, что L(Gε) = L(G)\{ε}. Следовательно, для всехприложений можно ограничиться случаем, когда контекстно-свободный язык не содержит ε, что мы и будем предполагать вдальнейшем.

Изучение преобразований КС-грамматик начнем с такназываемых правил подстановки.

Определение 10.1.

Продукции вида A → α, где A – нетерминальный символ,отличный от ε, будем называть A-продукциями.

Теорема 10.2.

П

Page 88: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Преобразования КС-грамматик и нормальные формы88

Пусть G = (N, T, S, P) – КС-грамматика. Предположим, что Pсодержит продукции вида

A → α1Bα2 (10.3)

где А и В – различные символы из N. Допустим, что

B → β1|β2|...|βn (10.4)

множество всех B - продукций в P. Пусть G' = (N, T, S, P') –грамматика, в которой P' получено удалением из P продукции (10.3)и добавлением новых продукций

A → α1β1α2|α1β2α2|...|α1βnα2.

Тогда L(G') = L(G).

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

Пусть ϕ ∈ L(G), т.е.

S ⇒G

* ϕ.

(10.5)

Если в этом выводе продукция (10.3) не участвует, тогда, очевидно,

S ⇒G'

*ϕ.

Допустим, что продукция (10.3) существенным образомиспользуется в выводе (10.5). Тогда, не уменьшая общности, можнопредположить, что символ B замещается сразу на следующем шагевывода (10.5) по одному из правил (10.4), т.е.

S ⇒G

*γ1Aγ2

G⇒ γ1α1Bα2γ2

G⇒ γ1α1βjα2γ2.

Так как в выводе S ⇒G

*γ1Aγ2 продукция (10.3) не используется, то мы,

очевидно, можем записать:

Page 89: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Лекция 10 89

S ⇒G '

*γ1Aγ2

)4.10(

'G⇒ γ1α1βjα2γ2.

Таким образом, если сентенциальная форма выводится в G, тоона выводима и в G'. Если далее в выводе (10.5) продукция (10.3)снова используется, опять повторяем то же рассуждение.Окончательно получаем, что

S ⇒G '

*ϕ.

Значит, из того, что ϕ ∈ L(G), следует ϕ ∈ L(G').

Аналогичными рассуждениями можно легко показать, что еслиϕ ∈ L(G'), то ϕ ∈ L(G), что и завершает доказательство.

Пример 10.6.

Рассмотрим КС-грамматику

G = ({B,S}, {a, b}, S, P)с продукциями

S → a|ааS|abBc

B → abbS|b.

Производя подстановку вместо символа B в правой частипродукции S → abBc на правые части B-продукций, получаем новуюграмматику G' с множеством продукций

S → a|ааS|ababbSc|abbcB → abbS|b.

При этом G' эквивалентна G. В частности, строка aaabbc выводимакак в G:

S ⇒ aaS ⇒ aaabBc ⇒ aaabbc,

так и в G':

Page 90: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Преобразования КС-грамматик и нормальные формы90

S ⇒ aaS ⇒ aaabbc.

В Теореме 10.2 мы рассмотрели случай замены продукцииA → α1Bα2, когда A ≠ B. В следующей теореме рассматриваетсяслучай A = B.

Определение 10.7.

Продукции вида A → Aα, где A ∈ N, α ∈ (N ∪ T)*, назовемлеворекурсивными продукциями.

Теорема 10.8.

Пусть дана КС-грамматика G = (N, T, S, P). Допустим, чтоA → Aα1| Aα2|...| Aαn, (10.9)

где A ∈ N, αi∈ (N ∪ T)*, i = 1, 2, 3, ..., n, – все ее леворекурсивныеA-продукции, а

A → β1|β2|...|βm, (10.10)

где βi∈ (N ∪ T)*, i = 1, 2, 3, ..., m, – все остальные ее A-продукции.

Рассмотрим грамматику

G' = (N ∪ {ZA}, T, S, P'),

где ZA ∉ N, а P' получен заменой всех продукций вида (10.9) и(10.10) на следующую совокупность продукций:

A → βi |βi ZA, i = 1, 2, ..., m,

ZA → α i |αi ZA, i = 1, 2, ..., n.

Тогда L(G) = L(G').

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

Рассмотрим вывод в грамматике G, использующейнетерминальный символ A в последовательности шагов, на каждомиз которых применяется продукция вида (10.9):

Page 91: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Лекция 10 91

A ⇒ Aαi ⇒ Aαjαi *

G⇒ Aαk...αjαi.

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

A ⇒G

* βrαk...αjαi, 1 ≤ r ≤ m.

Но этот вывод можно заменить выводом в G' с тем же результатом:

A ⇒ βr ZA ⇒ βr αk ZA ⇒*βr αk...αj ZA ⇒ βr αk...αj αi.

Следовательно, для любой строки ϕ такой, что S ⇒G

* ϕ, мы

имеем: A⇒G '

*ϕ. Нетрудно показать и обратное, т.е. если имеет место

вывод A ⇒G '

* ϕ, то возможен и вывод S ⇒

G

* ϕ.

Итак, мы получили способ избавиться от леворекурсивныхпродукций в КС-грамматиках. Эти продукции являются частнымслучаем левой рекурсии; в общем случае грамматика G называетсялеворекурсивной, если существует нетерминал A, для которого

возможен вывод A⇒G '

*Aα. Это свойство чаще всего является

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

Пример 10.11.Пусть G0 – грамматика с продукциями:

E → E + T | TT → T × F | F

Page 92: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Преобразования КС-грамматик и нормальные формы92

F → (E)| a.

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

E → T | TZEZE → +T | +TZET → F | FZTZT → ×F | ×FZTF → (E) | a.

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

S → aSb|ε|AA → aA

последняя продукция является бесполезной, так как символ Aникогда не может быть преобразован в строку терминалов. Если привыводе из S символ A окажется входящим в сентенциальную форму,то она никогда не сможет быть трансформирована в сентенцию.Значит, удаление продукции A → aA не окажет влияния на язык,порождаемый грамматикой, а лишь приведет к упрощениюмножества продукций.

Определение 10.12.

В КС-грамматике G = (N, T, S, P) нетерминал A∈ N называетсяполезным, если существует хотя бы одна строка ϕ ∈ L(G) такая, что

S ⇒*

αAβ ⇒*ϕ, α, β ∈ (N∪T)*.

Нетерминал, не являющийся полезным в грамматике G,называется бесполезным.

Продукция в грамматике G является бесполезной, если в неевходит хотя бы один бесполезный нетерминал.

Page 93: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Лекция 10 93

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

S → AA → aA|εB → bA.

Здесь как символ B, так и продукция B → bA являютсябесполезными и, хотя из B можно вывести терминальную строку, но

не существует ни одного вывода вида S ⇒*

αBβ.Для исключения нетерминалов, недостижимых из начального

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

Определение 10.13.

Для КС-грамматики граф зависимости – это граф, вершиныкоторого помечены нетерминалами и в котором дуга между двумявершинами A и B существует тогда и только тогда, когда вграмматике есть продукция вида A → αBβ.

Нетрудно заметить, что нетерминал X полезен только тогда,когда в графе зависимости существует путь из вершины S в вершинуX.

Пример 10.14.

Пусть дана КС-грамматика G = (N, T, S, P), где N = {S, A, B, C},T = {a, b}, а P состоит из продукций

S → aS|A|C

A → a

Page 94: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Преобразования КС-грамматик и нормальные формы94

B → aaC → aCb.

Требуется удалить из G все бесполезные символы и продукции.

Вначале определим множество терминалов, которые могутпородить терминальные строки. Так как A→a и B→aa, то A и Bпринадлежат этому множеству. То же самое справедливо для S, таккак S ⇒ A⇒ a. А вот нетерминал C не войдет в это множество, т.е.он является бесполезным символом так же, как и те продукции,которые его содержат. Исключая нетерминал C вместе ссоответствующими продукциями, получаем грамматику G' =(N', T, S, P'), где N' = {S, A, B}, а P' включает продукции

S → aS|AA → aB → aa.

Теперь наша задача – удалить из G' недостижимые нетерминалы, т.е.символы из N', недостижимые с помощью вывода из S.Воспользуемся для этого графом зависимости для N', изображеннымна рис. 10.1:

S A B

Рис. 10.1. Граф зависимости

На основании вида этого графа делаем вывод, что терминал Bнедостижим, а следовательно, и бесполезен. Удаляя его исоответствующую продукцию, окончательно получаем грамматикуG'' = ({S,A}, {a}, S, P''), где P'' состоит из трех продукций:

S → aS|AA → a.

Очевидно, что при этом L(G'') = L(G).Обобщим наши рассуждения в следующей теореме.

Page 95: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Лекция 10 95

Теорема 10.15.

Для любой КС-грамматики G = (N, T, S, P) существуетэквивалентная грамматика $G = ( $N , $T , S, $P), не содержащая нибесполезных нетерминальных символов, ни бесполезныхпродукций.

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

Построение $G проведем в два этапа. Сначала постоимграмматику G' = (N', T, S, P') такую, что N' содержит только такие

нетерминалы A, для которых возможен вывод A ⇒G '

* ϕ, ϕ ∈ T*. Это

построение проведем с помощью следующего алгоритма:

Шаг 1. Полагаем N' равным Ø.Шаг 2. Выполнять цикл до тех пор, пока больше не будет

добавлен новый символ в N':для каждого A ∈ N, для которого в P есть продукциявидаA → α1α2...αn, где αi ∈ T* ∪ N', i = 1, 2, ..., n,добавить A в N'.

Шаг 3. Поместить в P' все продукции из P, образованные изсимволов (кроме →), входящих в множество N' ∪ T ∪{ε}.

Нетрудно видеть, что этот алгоритм, начав работать на G, черезконечное число шагов останавливается. Ясно также, что если A ∈ N',

то в G' возможен вывод A ⇒*

ϕ, ϕ ∈ T*. Надо лишь показать, что

каждый символ A, для которого A ⇒*ϕ = ab..., будет добавлен к N'

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

На уровне k присутствуют лишь вершины, помеченныетерминалами, поэтому каждый символ Ai на уровне k-1 будетпомещен в N' на первом витке цикла Шага 2 алгоритма. Любой

Page 96: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Преобразования КС-грамматик и нормальные формы96

нетерминал на уровне k -2 будет добавлен к N' на втором виткецикла Шага 2. На третьем витке все переменные уровня k - 3 будутдобавлены к N' и т.д. Алгоритм не остановится до тех пор, пока вдереве есть еще нетерминалы, не вошедшие в N'. Следовательно,рано или поздно A будет добавлен к N'.

A…

Aj Уровень k-2

Ai a Уровень k-1

a b Уровень k

Рис. 10.2. Частичное дерево вывода

Теперь переходим ко второму этапу построения грамматики $G .Построим граф зависимости для $G и с помощью него найдем всенедостижимые нетерминальные символы. Исключим их из G' вместес содержащими эти символы продукциями. Исключим также тетерминалы, которые не входят в какую-нибудь полезнуюпродукцию. В результате получим грамматику $G = ( $N , $T , S, $P).По построению, $G не содержит бесполезных символов илипродукций.

Пусть для произвольной строки ϕ ∈ L(G) существует вывод вG:

S ⇒G

* αAβ ⇒

G

* ϕ.

Page 97: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Лекция 10 97

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

S ⇒$

*

G αAβ ⇒

$

*

Gϕ.

Грамматика $Gполучилась из G удалением части продукций,значит, $P ⊆ P и L( $G ) ⊆ L(G).

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

L( $G ) = L(G),

т.е. грамматики G и $G эквивалентны.Следующий тип продукций, которые в ряде случаев

нежелательны, - это продукции с пустой строкой в правой части.Определение 10.16.

Продукция КС-грамматики, имеющая вид

A → ε,

называется ε-продукцией. Нетерминал A, для которого в программе

возможен вывод A ⇒*ε, называется обнуляемым.

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

Теорема 10.17.Пусть КС-грамматика G порождает язык L(G), не содержащий

ε. Тогда существует эквивалентная ей грамматика G', не содержащаяε-продукций.

Доказательство.Вначале построим множество N0 всех обнуляемых

нетерминалов в G, используя следующую процедуру:

Page 98: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Преобразования КС-грамматик и нормальные формы98

Шаг 1. Для всех продукций A → ε помещаем A в N0.Шаг 2. Повторяем следующий цикл до тех пор, пока возможно

добавление нетерминалов в N0:для всех продукцийB → A1A2...An,где A1, A2, ..., An ∈ N0, поместить B в N0.

После окончания формирования множества N0 можем перейтик построению P'. Рассмотрим все продукции из P вида

A → X1X2...Xm, m ≥ 1,для которых Xi ∈ N ∪ T. Для каждой такой продукции из P мыпомещаем в P' как саму эту продукцию, так и все производные отнее продукции, получающиеся стиранием любого количестваобнуляемых символов в правой части исходной продукции, за однимисключением: если все Xi обнуляемые, то продукция A → ε в P' недобавляется.

Эквивалентность получившейся при этом грамматики G'исходной грамматике G почти очевидна, и мы оставляемдоказательство этого в качестве упражнения читателю.

Пример 10.18.Найти КС-грамматику без ε-продукций, эквивалентную

грамматике с продукциями:

S → AbaC ,A → BC ,B → b|ε ,C → D|ε ,D → d.

Находим множество обнуляемых нетерминалов: A, B, C. Затемвидоизменяем совокупность продукций; получаем:

S → ABaC|BaC|AaC|ABa|aC|Aa|Ba|a ,A → B|C|BC ,B → b ,C → D ,

Page 99: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Лекция 10 99

D → d.

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

Определение 10.19.Продукция КС-грамматики, имеющая вид A → B, где A, B –

нетерминальные символы, называется цепной продукцией.Теорема 10.20.Любая КС-грамматика G = (N, T, S, P) без ε-продукций может

быть преобразована к эквивалентной грамматике G' = (N', T', S, P'),не имеющей цепных продукций.

Доказательство.Очевидно, любая цепная продукция вида A → A может быть

удалена из грамматики без всякого ущерба для порождаемого языка,поэтому будем рассматривать продукции вида A → B, где A и Bразличные нетерминалы.

Прежде всего, для каждого A ∈ N найдем множество

D(A) = {B|A *

G⇒ B}.

Это можно сделать с помощью графа зависимости для G: он будетсодержать дугу (С, D), если в грамматике есть продукция C → D.

Тогда A *

G⇒ B имеет место всякий раз, когда существует путь из A в

B.Построение новой грамматики G' начинаем с помещения в P'

всех продукций из P, не являющихся цепными. Пусть, далее, B ∈D(A).

Тогда добавляем в P' новые продукции

A → β1|β2|...|βn,

где B → β1|β2|...|βn - множество всех B-продукций в P' (не вP!). Заметим, что, так как продукции B → βi берутся из P', ни одна

Page 100: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Преобразования КС-грамматик и нормальные формы100

из строк βi не может быть единственным нетерминалом,следовательно, ни одной цепной продукции в P' добавлено не будет.Как это было сделано в теореме 10.2, нетрудно показать, чтополучившаяся грамматика G' эквивалентна G.

Пример 10.21.

Исключить все цепные продукции из грамматики

S → Aa|BB → A|bbA → a|bc|B.

Строим граф зависимости (рис. 10.3):

S A B

Рис. 10.3. Граф зависимости

Видим, что D(S) = {A, B}, D(A) = {B}, D(B) = A. Исключаем изграмматики все цепные продукции C → B, B → A и A → B идобавляем к оставшимся новые продукции; получаем:

S → AaA → a|bc "старые" продукцииB → bb

S → a|bc|bbA → bb "новые" продукцииB → a|bc

Объединяя полученные результаты, можно показать, чтоКС-грамматики могут быть "очищены" от бесполезных продукций,ε-продукций и цепных продукций.

Page 101: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Лекция 10 101

Теорема 10.22.Для любого КС-языка L, не содержащего ε, существует

КС-грамматика, порождающая L и не содержащая ни бесполезныхпродукций, ни ε-продукций, ни цепных продукций.

Доказательство.Теоремы 10.15, 10.17 и 10.20, каждая по отдельности,

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

1. Удаляем ε-продукции.2. Удаляем цепные продукции.3. Удаляем бесполезные продукции.Рассмотренные методы преобразования КС-грамматик будут

использованы нами в следующем разделе для приведения этихграмматик к нормальным формам.

Page 102: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Преобразования КС-грамматик и нормальные формы102

ПреобразованияКС-грамматики нормальные формы

Нормальные формы КС-грамматикуществует много различных нормальных форм контекстно-свободных грамматик, имеющих разные области примененияи широту использования. Мы здесь остановимся на двух из

них как на наиболее важных и полезных для наших целей.

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

Определение 11.1.

КС-грамматика G = (N, T, S, P) имеет нормальную формуХомского, если любая ее продукция имеет вид либо A → BC, либо A→ a, где A, B, C ∈ N, a ∈ T.

Теорема 11.2.

Любая КС-грамматика G = (N, T, S, P) такая, что ε∉L(G), можетбыть преобразована в эквивалентную ей грамматику G1 = (N1, T, S,P1), имеющую нормальную форму Хомского.

Лекция

11

C

Page 103: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Лекция 11 103

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

В силу теоремы 10.22 мы можем, не нарушая общности,считать, что G не содержит ни ε-продукций, ни цепных продукций.Построение грамматики G1 осуществим за два шага.

Шаг 1. Построим грамматику

G' = (N', T, N, P').

Рассмотрим все продукции из P вида: A → X1X2...Xn, (11.3)

где каждый символ Xi либо терминал из T, либо нетерминал изN. Если n = 1, тогда X1 должен быть терминалом, так как в P нетцепных продукций. В этом случае помещаем эту продукцию в P'.Если n ≥ 2, то вводим новые нетерминальные символы Za длякаждого X = a, где a ∈ T. Каждой продукции из P, имеющей вид(11.3), ставим в соответствие продукцию:

A → B1B2...Bn,где

Bi ={Для каждого нового нетерминального символа Za мы

формируем продукциюZa → a

и помещаем ее в P'.На этом шаге удаляются все терминалы из продукций, правая

часть которых имеет длину больше 1, а вместо них на их меставводятся новые нетерминалы. В результате после завершенияданного шага получаем грамматику G' = (N', T, S, P'), все продукциикоторой имеют вид

либо

Xi, если Xi ∈ N,

Za, если Xi = a и a ∈ T.

Page 104: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Преобразования КС-грамматик и нормальные формы104

A → a, a ∈ T, (11.4)либо

A → B1B2...Bn, (11.5)

где Bi ∈ N, i = 1,2,...n.По теореме 10.2 заключаем, что

L(G') = L(G).Шаг 2. На втором шаге мы вводим вспомогательные

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

Сперва помещаем все продукции вида (11.4) в P1, а такжепомещаем в P1 все продукции вида (11.5), правая часть которыхимеет длину 2 (т.е. когда n = 2). Если n ≥ 2, вводим новыенетерминалы ′B1 , ′B2 , ... и добавляем в P' новые продукции:

A → B1 ′B1B'1 → B2 ′B2

. . .′−Bn 2 → Bn-1Bn.

Очевидно, полученная в результате этого шага грамматика G1= (N1, T, S, P1) будет иметь нормальную форму Хомского, причем,как это следует из теоремы 10.2, L(G') = L(G1). Окончательно имеем:

L(G) = L(G1),что и требовалось доказать.Пример 11.6.Преобразовать грамматику G с продукциями

S → Aba ,A → aab ,B → Ac

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

ε-продукций. На шаге 1 вводим новые нетерминалы Za, Zb, Zc иизменяем множество продукций:

Page 105: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Лекция 11 105

S → ABZa ,A → ZaZaZb ,B → AZc ,Za → a ,Zb → b ,Zc → c.

На втором шаге вводим новые нетерминалы и редуцируем правыечасти продукций (первой и второй); в результате получаем грам-матику в нормальной форме Хомского с множеством продукций:

S → AB' ,B' → BZa ,A → Za ′Za ,

′Za → ZaZb ,

B → AZc ,Za → a ,Zb → b ,Zc → c.

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

Определение 11.7.

КС-грамматика G = (N, T, S, P) имеет нормальную формуГрейбах, если все ее продукции имеют вид

Page 106: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Преобразования КС-грамматик и нормальные формы106

A → aα, (11.8)

где A ∈ N, a ∈ T, α ∈ N*.Заметим, что, в силу определения, грамматика в нормальной

форме Грейбах не может быть леворекурсивной.

Теорема 11.9.

Для любой КС-грамматики G = (N, T, S, P) такой, что ε ∉ L(G),существует эквивалентная нормальная форма Грейбах

G2 = (N2, T, S, P2).Доказательство.

Алгоритм преобразования данной грамматики G в нормальнуюформу Грейбах состоит из нескольких шагов.

Шаг 1. Преобразуем грамматику G к нормальной формеХомского G1.Шаг 2. Упорядочим и перенумеруем все нетерминалы:A1, A2, ..., An

так, чтобы A1 = S.Шаг 3. Используя теоремы 10.2 и 10.8, преобразуемграмматику G1 таким образом, чтобы все продукции былиследующих форм:

Ai → Ajαj, j > i, Zi → Ajαj, j ≤ n,

(11.10)

Ai → aαi,

где a ∈ T, αi ∈ N1* , и Zi - нетерминалы, появившиеся приприменении теоремы 10.8 для устранения левой рекурсии.

Покажем, что это всегда можно сделать. Возьмем продукции изG1, левая часть которых A1. Все такие продукции удовлетворяютусловиям (11.10), за исключением продукций вида

A1 → A1α.

Page 107: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Лекция 11 107

Применим теорему 10.8 к этим продукциям и введемнетерминал Z1, исключив эти леворекурсивные продукции.

Теперь рассмотрим продукции вида

A2 → A1α.

Если в правой части, применив теорему 10.2, заменить A1, тополучим или допустимую продукцию, удовлетворяющую условиям(11.10), или продукцию вида

A2 → A2α.Применяя теорему 10.8, исключаем этот случай. Для

нетерминала A3 сначала исключаем по теореме 10.2 случайA3 → A1α, потом случай A3 → A2α. А затем по теореме 10.8 удаляемлеворекурсивные A3-продукции. И так далее, пока не получим лишьте продукции, которые удовлетворяют условиям (11.10).

Шаг 4. После шага 3 все An-продукции будут иметь вид:An → aαn,

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

An-1 → Anα, получим:An-1 → aαnα,

т.е. продукции типа (11.8), затем подставим их правые части вместонетерминала An-1 в An-2-продукции и т.д. В конце концов всепродукции приобретут требуемый вид (11.8), а грамматика G1трансформируется тем самым в грамматику G2 = (N2, T, S, P2),имеющую нормальную форму Грейбах. Так как все использованныепри этом преобразования сохраняли эквивалентность грамматик, то,очевидно, имеем:

L(G)=L(G2).Пример 11.11.Найти нормальную форму Грейбах для грамматики

A1 → A2A2 | aA2 → A1A2 | b.

Данная грамматика уже имеет нормальную форму Хомского, анетерминалы перенумерованы нужным образом. Поэтому можем

Page 108: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Преобразования КС-грамматик и нормальные формы108

начать сразу с шага 3, описанного в теореме 11.9 алгоритма.Продукции

A2 → b и A1 → A2A2 | aуже в требуемой по условиям (11.8) форме. Чтобы привестипродукцию

A2 → A1A2

к нормальной форме, используем теорему 10.2; подставим вместо A1строки A2A2, a, b и получим все A2-продукции:

A2 → A2A2A2 | aA2 | b.Теперь используем теорему 10.8 для удаления левой рекурсии.Вводя нетерминал Z и полагая в теореме 10.8 A = A2, α1 = A2A2, β1 =aA2, β2 = b, получим:

A2 → aA2 | aA2Z | b | bZZ → A2A2 | A2A2Z.

На последнем шаге подставляем вместо A2 в других продукцияхправые части A2-продукций и получаем грамматику в нормальнойформе Грейбах:A1 → aA2A2 | aA2ZA2 | bA2 | bZA2 | a;Z → aA2A2 | aA2ZA2 | bA2 | bZA2 | aA2A2Z | aA2ZA2Z | bA2Z | bZA2Z;A2 → aA2 | aA2Z | b | bZ.

Page 109: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Лекция 11 109

Магазинные автоматы

Магазинные автоматыписание контекстно-свободных языков посредствомконтекстно-свободных грамматик хорошо согласуется сиспользованием нотации Бэкуса-Наура при определении

языков программирования. Возникает вопрос, существует ли классавтоматов, соответствующий классу КС-языков. Как мы уже видели,конечные автоматы не могут распознавать КС-языки. Интуитивноможно предположить, что это происходит оттого, что конечныеавтоматы имеют только строго ограниченную – конечную – память,тогда как распознавание контекстно-свободного языка можетпотребовать запоминания неограниченного объема информации.Например, когда считывается строка из языка L = {anbn | n ≥ 0}, мыдолжны не только проверить, что все символы а предшествуютпервому символу b, но также должны запоминать количествосимволов а. Так как n неограничено, то этот подсчет невозможносделать, располагая лишь конечной памятью. Для этого требуетсямашина, которая не содержит такого ограничения. Более того, длянекоторых языков, таких, как {αα-1}, требуется нечто большее,нежели просто способность к неограниченному счету, а именноспособность запоминать и сравнивать последовательность символовв обратном порядке. Это наводит на мысль использовать в качествеустройства памяти магазин (или стек). Так мы приходим к классумашин, называемых магазинными автоматами.

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

Лекция

12О

Page 110: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Магазинные автоматы110

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

Недетерминированные магазинныеавтоматы

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

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

Устройство Стек управления

Рис. 12.1. Магазинный автоматКаждый следующий шаг, совершаемый устройством управ-

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

C

Page 111: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Лекция 12 111

рассмотрением лишь автоматов-распознавателей. В этом случаеформальное определение выглядит следующим образом.

Определение 12.1.

Недетерминированный магазинный автомат (НМА)определяется как семерка

M = (Q, Σ, V, θ, q0, z0, F),где

Q = {q0, q1, ...,qn} – конечное множество внутренних состоянийавтомата;Σ – конечное множество символов, называемых входнымалфавитом;V – конечное множество символов, называемое стековымалфавитом;θ – функция переходов автомата, определяемая отображениемθ: Q × (Σ ∪ {ε} × V → {S | S – конечное подмножествомножества Q × V*};q0 – начальное состояние автомата, q0 ∈ Q;z0 – начальный символ стека, z0∈ V;F – множество заключительных (или финальных) состояний

автомата, F ⊆ Q.Функция θ зависит от трех аргументов (q, a, z), из которых q

обозначает текущее состояние автомата в данный момент, а –обозреваемый входной символ и z – символ в вершине стека.Значением θ(q, a, z) является конечное множество пар (qi, βi), где qi –следующее состояние автомата, а βi – строка, помещаемая ввершину стека вместо символа а. Заметим, что вторым аргументом уфункции θ может быть символ пустой строки ε, означающий, чтовозможен такт работы автомата, на котором ни один из входныхсимволов не читается. Такой такт называется ε-переходом. В то жевремя следует отметить, что третий аргумент не может бытьпустым, т.е. переход невозможен, если стек пуст.

Пример 12.2.

Page 112: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Магазинные автоматы112

Предположим, что множество правил перехода НМА содержитправило

θ(q1, a, b) = {(q1, cd), (q3, ε)}.

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

- автомат переходит в состояние q2, а строка cd занимаетсимвол в вершине стека (при этом в вершине стека оказываетсясимвол с);

- автомат переходит в состояние q3, при этом символ bудаляется из вершины стека.

Пример 12.3.

Рассмотрим НМА, у которогоQ = {q0, q1, q2, q3},Σ = {a, b},V = {0, 1},z0 = 0,F = {q3},

а функция θ определяется соотношениями:

θ(q0, a, 0) = {(q1, 10), (q3, ε)},θ(q0, ε, 0) = {(q3, ε)},θ(q1, a, 1) = {(q1, 11)},θ(q1, b, 1) = {(q2, ε)},θ(q2, b, 1) = {(q2, ε)},θ(q2, ε, 0) = {(q3, ε)}.

Заметим, что функция θ не всюду определена. Так, например,для (q0, b, 0) соотношение, указывающее значение θ, отсутствует. В

Page 113: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Лекция 12 113

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

Основными соотношениями для θ являются следующие два:первое - θ(q1, a, 1) = {(q1, 11)},

которое добавляет 1 в стек, когда прочитан очередной символ а, ивторое - θ(q2, b, 1) = {(q2, ε)},

которое удаляет 1 из стека, когда встречается во входной строке b.Эти два шага подсчитывают число символов а и сравнивают с

числом символов b. Автомат находится в состоянии q1 до тех пор,пока не встретит на ленте первый символ b, и тогда переходит всостояние q2. Это гарантирует, что ни одно b не встретится раньшепоследнего а. Анализируя остальные соотношения для θ,убеждаемся, что автомат переходит в состояние q3 тогда и толькотогда, когда входная строка имеет вид

anbn или а,т.е. принадлежит языку

L = { anbn | n ≥ 0} ∪ {a}.По аналогии с конечными автоматами мы можем сказать, что

НМА допускает язык L.Пусть q1 – текущее состояние НМА, aα – непрочитанная часть

входной строки, bβ – содержимое стека с символом b в его вершине.Тогда упорядоченная тройка

(q1, aα, bβ)называется конфигурацией магазинного автомата. Переход из однойконфигурации в другую с помощью одного такта работы автоматаобозначается символом :

(q1, aα, bβ) (q2, α, γβ)

возможно тогда и только тогда, когда

(q2, γ) ∈ θ(q1, a, b).

Page 114: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Магазинные автоматы114

Переходы, включающие произвольное число тактов, будутобозначаться (или для случая, когда хотя бы один шагдействительно имеет место). Чтобы идентифицировать переход,совершенный данным автоматом М, будем использовать символ M.

Определение 12.4.

Пусть М = (Q, Σ, V, θ, q0, z0, F) – недетерминированныймагазинный автомат. Тогда язык, допускаемый автоматом М, – этомножество

L(M) = {α | α ∈ Σ * и (q0, α, z0) M (qf, ε, β), qf ∈ F, β ∈ V*}.

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

Пример 12.5.

Построить НМА для языка

L = {α | α ∈ {a, b}* и na(α) = nb(α)},

где na(α) и nb(α) обозначают число символов а и b в строке α.Нетрудно проверить, что НМА

M = ({q0, qf), {a, b}, {0, 1, z}, θ, q0, z, {qf}),где θ определяется соотношениями:

θ(qo, ε, z) = {(qf, z)},θ(qo, a, z) = {(q0, 0z)},θ(qo, b, z) = {(q0, 1z)},θ(qo, a, 0) = {(q0, 00)},θ(qo, b, 0) = {(q0, ε)},θ(qo, a, 1) = {(q0, ε)},

Page 115: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Лекция 12 115

θ(qo, b, 1) = {(q0, 11)},

действительно допускает язык L. В частности, при чтении строкиbaab НМА М совершает следующие такты:

(qo, baab, z) (qo, aab, 1z) (qo, ab, z) (qo, b, 0z) (qo, ε, z) (qf, ε, z),

следовательно, эта строка допускается автоматом М.

Пример 12.6.Построить НМА, допускающий язык

L = {αα-1 | α ∈ {a, b}+}.

Для построения недетерминированного магазинного автомата,распознающего данный язык, воспользуемся тем фактом, чтосимволы извлекаются из стека в порядке, обратном тому, в которомони туда заносились. Во время чтения первой половины входнойстроки мы помещаем последовательно читаемые символы в стек, апри чтении второй половины строки мы сравниваем текущийвходной символ с тем, который находится в вершине стека,продолжая это сравнение до окончания входной строки. Так каксимволы извлекаются из стека в порядке, обратном тому, в которомони заносились в стек, то полностью сравнение будет успешнымтогда и только тогда, когда входная строка имеет вид αα-1 длянекоторой строки α ∈ {a, b}+.

Очевидной трудностью здесь является то, что мы не знаем, гдесередина входной строки, т.е. где кончается α и начинается α-1. Нонедетерминированный характер автомата приходит нам на помощь:НМА правильно указывает, где середина, и сигнализирует своимисостояниями об этом. Итак, строим НМА М = (Q, Σ, V, θ, q0, z0, F),

гдеQ = {q0, q1, q2},Σ = {a, b},

Page 116: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Магазинные автоматы116

V = {a, b, z},F = {q2}.

Соотношения, определяющие функцию θ, можно разбить нанесколько групп:

а) команды, записывающие α в стек:

θ(qo, а, a) = {(q0, aa)},θ(qo, b, a) = {(q0, ba)},θ(qo, a, b) = {(q0, ab)},θ(qo, b, b) = {(q0, bb)},θ(qo, a, z) = {(q0, az)},θ(qo, b, z) = {(q0, bz)},

b) команды, определяющие середину строки, чтосигнализируется переходом из состояния q0 в q1:

θ(qo, ε, a) = {(q1, a)},θ(qo, ε, b) = {(q1, b)},

c) команды, сравнивающие α-1 с содержимым стека:

θ(q1, а, a) = {(q0, ε)},θ(q1, b, b) = {(q1, ε)},θ(q1, ε, z) = {(q2, z}.

Рассмотрим последовательность тактов при распознаванииэтим автоматом строки abba:

(qo, abba, z) (qo, baa, az) (qo, ba, z) (q1, ba, baz) (q1, a, az) (q1, ε, z) (q2, ε, z).

Недетерминированный выбор при определении серединывходной строки возникает на третьем такте. На этом шаге НМАимеет конфигурацию (q0, ba, baz) и две возможности дляследующего шага: один из них использует команду

Page 117: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Лекция 12 117

θ(qo, b, b) = {(q0, bb)}

и порождает такт

(q0, ba, baz) (q0, a, bbaz),

а другой – порождается использованной выше командой

θ(qo, ε, b) = {(q1, b)},

и только он ведет к распознаванию входной строки.

Page 118: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Магазинные автоматы118

Магазинные автоматы

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

НМА, который допускает его, и, наоборот, любой язык,допускаемый недетерминированным магазинным автоматом,является контекстно-свободным.

Итак, покажем вначале, что для каждого КС-языка существуетраспознающий его НМА. Основная идея построения такого НМАзаключается в том, чтобы он мог каким-то способом воспроизводитьлевосторонний вывод любой строки данного языка. Для упрощенияпостроения такого автомата будем предполагать, что языкпорождается КС-грамматикой в нормальной форме Грейбах.Магазинный автомат будет производить вывод, запоминаяпеременные правой части сентенциальной формы в стеке, тогда каклевая часть, целиком состоящая из терминалов, должна бытьидентична прочитанной части входной строки. Начинаем сзанесения в стек начального символа, после чего для моделированияприменения некоторой продукции A → aα нам нужно иметьпеременную A в вершине стека, а терминал a - в качестве читаемоговходного символа. Затем переменная из вершины стека удаляется изаменяется на строку нетерминальных символов α. Нетруднопонять, каковы должны быть при этом команды, определяющиефункцию θ.

Лекция

13

В

Page 119: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Лекция 13 119

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

грамматикой с продукциямиS → aSbb | a.

Преобразуем грамматику к нормальной форме Грейбах:S → aSA | a,

A → bB,B → b.

Соответствующий автомат будет иметь три состояния {q0, q1, q2},q0 - начальное, q2 - финальное состояние. Вначале заносим в стекначальный символ грамматики S командой

θ(q0, ε, z) = {(q1, Sz)}.Продукция S → aSA моделируется автоматом посредством

извлечения S из стека и заменой на SA, когда читается входнойсимвол a. Аналогично продукция S → a соответствует извлечениюсимвола S из стека в результате чтения символа a из входной строки.Таким образом, обе эти продукции представляются в НМАсоотношением

θ(q1, a, S) = {(q1, SA), (q1, ε)}.Аналогичным образом остальным продукциям соответствуют

команды:θ(q1, b, A) = {(q1, B)},θ(q1, b, B) = {(q1, ε)}.

Появление в вершине стека начального символа стека z означаетзавершение вывода, и НМА переходит в заключительное состояние:

θ(q1, ε, z) = {(q2, ε)}.

Теорема 13.2.Для любого контекстно-свободного языка L, не содержащего ε,

существует НМА M такой, чтоL = L(M).

Page 120: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Магазинные автоматы120

Доказательство.Если L - ε-свободный КС-язык, то существует КС-грамматика в

нормальной форме ГрейбахG = (N, T, S, P),

порождающая L. Построим автомат, моделирующий левостороннийвывод в этой грамматике. Положим

M = ({q0, q1, qf}, T, N∪{z0}, θ, q0, z0, {qf}),где z0 ∉ N. Таким образом, видим, что входной алфавит автоматасовпадает с множеством терминалов грамматики G, стековыйалфавит содержит множество всех нетерминалов из G.

Функция переходов θ будет содержать соотношениеθ(q0, ε, z0) = {(q1, Sz0)}; (13.3)

таким образом, после первого шага автомата M стек будетсодержать стартовый символ S вывода. (Стековый начальныйсимвол z0 будет служить нам для сигнализации окончания вывода.)

Кроме того, множество правил перехода будет обладатьследующим свойством:для любой продукции A → aα из P

(q1, ϕ) ∈ θ(q1, a, A). (13.4)По этому соотношению НМА M читает входной символ a,

удаляет переменную A из стека и заменяет ее на ϕ. Это и дает нампереходы, которые позволяют НМА моделировать выводы в G.Наконец, добавим соотношение

θ(q1, ε, z0) = {(qf, z0)}, (13.5)которое переводит M в заключительное состояние.

Чтобы показать, что M допускает любую строку α∈L(G),рассмотрим частичный левосторонний вывод

S ⇒*

a1a2...anA1A2...Am ⇒ a1a2...anbB1B2...BkA2...Am.

Page 121: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Лекция 13 121

Так как M моделирует этот вывод, то после прочтения строкиa1a2...an стек должен содержать A1A2...Am. Для построенияследующего шага вывода в G должна иметься продукция

A1 → bB1...Bk.Но конструкция M такова, что M должен иметь правило

перехода, по которому(q1, B1...Bk) ∈ θ(q1, b, A1),

так что, стек после прочтения части a1a2...anb входа должен теперьсодержать

B1...BkA2...Am.Индукцией по длине вывода убеждаемся, что если

S ⇒*

α,то

(q1, α, Sz0) (q1, ε, z0).С учетом (13.3) и (13.5), получаем:

(q0, α, z0) (q1, α, Sz0) (q1, ε, z0) (qf, ε, z0),следовательно,

L(G) ⊆ L(M).Покажем теперь, что L(M) ⊆ L(G).Пусть α ∈ L(M), тогда, по определению,

(q0, α, z0) (qf, ε, ϕ).Нетрудно видеть, что для перехода из q0 в q1 существует лишьединственный путь, как и для перехода из q1 в qf. Поэтому верносоотношение

(q1, α, Sz0) (q1, ε, z0).Возьмем α = a1a2a3...an. Тогда в последовательности

(q1, a1a2a3...an, Sz0) (q1, ε, z0) (13.6)

Page 122: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Магазинные автоматы122

первый шаг, очевидно, должен совершаться по правилу типа (13.4),что дает

(q1, a1a2a3...an, Sz0) (q1, a2a3...an, ϕ1z0).

Но это означает, что грамматика G должна иметь продукцию видаS → a1ϕ1,

что позволяет записатьS ⇒ a1ϕ1.

Далее, полагая ϕ1 = Aϕ2, получим

(q1, a2a3...an, Aϕ2z0) (q1, a3...an, ϕ3ϕ2z0),

откуда заключаем, что G должна содержать продукцию A → a2ϕ3, азначит,

S ⇒*

a1a2ϕ3ϕ2.

Отсюда несложно видеть, что на каждом шаге содержимое стека(исключая z0) совпадает с еще не замещенной терминалами частьюсентенциальной формы. С учетом (13.6) получаем

S ⇒*

a1a2...an.

Следовательно, L(M) ⊆ L(G), и теорема доказана.

Пример 13.7.По грамматике

S → aA,A → aABC | bB | a,B → b,C → c

построить НМА, допускающий язык L(G).

Page 123: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Лекция 13 123

Так как грамматика уже в нормальной форме Грейбах,переходим сразу к построению НМА:

θ(q0, ε, z0) = {(q1, Sz0)},θ(q1, ε, z0) = {(qf, z0)},θ(q1, a, S) = {(q1, A)},θ(q1, a, A) = {(q1, ABC), (q1, ε)},θ(q1, b, A) = {(q1, B)},θ(q1, b, B) = {(q1, ε)},θ(q1, c, C) = {(q1, ε)}.

Рассмотрим шаги автомата на входной строке aaabc:

(q0, aaabc, z0) (q1, aaabc, Sz0)

(q1, aaabc, Az0) (q1, abc, ABCz0)

(q1, bc, BCz0) (q1, c, Cz0)

(q1, ε, z0) (qf, ε, z0).Эта последовательность шагов соответствует выводу:

S ⇒ aA ⇒ aaABC ⇒ aaaBC ⇒ aaabC ⇒ aaabc.

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

Для того чтобы избавить рассуждения от излишних деталей,мы потребуем, чтобы НМА удовлетворял следующим условиям:

1. НМА имеет единственное финальное состояние, котороедостигается тогда и только тогда, когда стек полностью пуст;

Page 124: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Магазинные автоматы124

2. Все переходы должны иметь вид:θ(qi, a, A) = {k1k2...kn},

где для любого r = 1, 2, ..., nkr = (qj, ε) (13.8)

илиkr = (qj, BC). (13.9)

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

Считая условия 1 и 2 вспомогательными, построим КС-грамма-тику для языка, допускаемого таким НМА.

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

(qi A qj) ⇒*

α

тогда и только тогда, когда НМА стирает A в стеке и в результатечтения входа α переходит из состояния qi в состояние qj. "Стирание"означает, что A удаляется из стека и на его место ничего незаписывается, т.е. в вершине стека оказывается символ,непосредственно находившийся под самым верхним символом A.

Используя эту интерпретацию, нетрудно видеть, что продукцииграмматики с необходимостью должны соответствовать одному издвух типов переходов. Так как (13.8) влечет немедленное стирание A(в стеке), то грамматика будет иметь соответствующую продукцию

(qi A qj) → a.

Переходы типа (13.9) порождают продукцию вида

Page 125: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Лекция 13 125

(qi A qk) → a(qj B qt)(qt C qk),

где qk и qt могут принимать любые значения из Q. Это объясняетсятем, что для стирания A мы сначала заменяем его на BC в результатечтения a и переходим из состояния qi в qj, а затем последовательнопереходим из qj в qt, стирая B, а потом - из qt в qk, стирая из стека C.

Наконец, в качестве начального символа грамматики возьмем(q0 z0 qf), где qf - единственное заключительное состояние нашегоНМА.

Теорема 13.10.Если язык L допускается некоторым НМА M, тогда L является

контекстно-свободным.Доказательство.Предположим, язык L допускается недетерминированным

магазинным автоматомM = (Q, Σ, V, θ, q0, z0, {qf}),

удовлетворяющим условиям 1 и 2, указанным выше. Построим для Lграмматику G = (N, T, S, P), где T = Σ, а N состоит из элементов вида(qi A qj). Используем описанную ранее конструкцию и покажем, чтополученная грамматика такова, что для всех qi, qj ∈ Q; A ∈ V; ϕ ∈V*; α, β ∈ Σ* соотношение

(qi, αβ, Aϕ) (qj, β, ϕ), (13.11)

влечет

(qi A qj) ⇒*

α,и наоборот.

Итак, сначала нам надо показать следующее: если НМА таков,что символ A и его последователи могут быть удалены из стека врезультате чтения строки α и перехода из состояния qi в qj, тогда αможет быть выведена из нетерминала (qi A qj) в грамматике G. Этонетрудно сделать, потому что грамматика G как раз и былапостроена так, чтобы это имело место. Достаточно провести простое

Page 126: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Магазинные автоматы126

рассуждение индукцией по числу тактов работы НМА, чтобыубедиться в этом.

Для доказательства обратного утверждения рассмотримотдельный шаг вывода в G следующего вида:

(qi A qk) ⇒ a(qj B qt) (qt C qk).Используя соответствующий переход для НМА

θ(qi, a, A) = {(qj, BC), ...)}, (13.12)видим, что символ A в результате чтения a может быть удален изстека, а BC занесена в него с изменением состояния НМА с qi на qj.Аналогично, если

(qi A qj) ⇒ a, (13.13)то должен существовать соответствующий переход

θ(qi, a, A) = {(qj, ε)}, (13.14)по которому A может быть удален из стека.

Отсюда видно, что сентенциальные формы, выводимыеиз(qi A qj), определяют последовательность возможных конфигурацийНМА, которая соответствует (13.11).Заметим, что шаг

(qi A qj) ⇒ a(qj B qt) (qt C qk)

возможен для некоторых (qj B qt), (qt C qk), для которых нетсоответствующих переходов вида (13.12) или (13.14). Но в этомслучае по меньшей мере одна из этих переменных будетнесущественной и не будет оказывать влияние на язык,порождаемый грамматикой G. Но для всех сентенциальных форм,порождающих терминальную строку, приведенные рассуждениясправедливы.

Если применить полученный результат к последовательности

(q0, α, z0) (qf, ε, ε),

то замечаем, что это возможно тогда и только тогда, когда

Page 127: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Лекция 13 127

(q0 z0 qf) ⇒*

α.Следовательно, L(M) = L(G), что и требовалось доказать.

Пример 13.15.Рассмотрим НМА со следующими переходами:

θ(q0, a, z) = {(q0, Az)},θ(q1, a, A) = {(q0, A)},θ(q0, b, A) = {(q1, ε)},θ(q0, ε, z) = {(q2, ε)},

где q0 обозначает, как обычно, начальное состояние, а q2 –заключительное. Построим соответствующую грамматику G.Видим, что НМА удовлетворяет условию 1, но не удовлетворяетусловию 2. Чтобы выполнялось условие 2, введем новоедополнительное состояние q3 и промежуточный шаг, на котором мывначале удаляем А из стека, а затем вновь помещаем его туда наследующем шаге. Получаем, таким образом, новую совокупностьпереходов:

θ(q0, a, z) = {(q0, Az)},θ(q3, ε, z) = {(q0, Az)},θ(q1, a, A) = {(q3, ε)},θ(q0, b, A) = {(q1, ε)},θ(q1, ε, z) = {(q2, ε)}.

Последние три перехода имеют вид (13.8), поэтому имсоответствуют продукции:

(q0Aq3) → a,(q0Aq1) → b,(q1zq1) → ε,

а двум первым переходам сопоставим продукции:(q0Aq3) → a(q0Aq0)(q0zq0) | a(q0Aq1)(q1zq0) | a(q0Aq2)(q2zq0) |a(q0Aq3)(q3zq0),

Page 128: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Магазинные автоматы128

(q0zq1) → a(q0Aq0)(q0zq1) | a(q0Aq1)(q1zq1) | a(q0Aq2)(q2zq1) |a(q0Aq3)(q3zq1),(q0zq2) → a(q0Aq0)(q0zq2) | a(q0Aq1)(q1zq2) | a(q0Aq2)(q2zq2) |a(q0Aq3)(q3zq2),(q0zq3) → a(q0Aq0)(q0zq3) | a(q0Aq1)(q1zq3) | a(q0Aq2)(q2zq3) |a(q0Aq3)(q3zq3),(q3zq0) → (q0Aq0)(q0zq0) | (q0Aq1)(q1zq0) | (q0Aq2)(q2zq0) |(q0Aq3)(q3zq0),(q3zq1) → (q0Aq0)(q0zq1) | (q0Aq1)(q1zq1) | (q0Aq2)(q2zq1) |(q0Aq3)(q3zq1),(q3zq2) → (q0Aq0)(q0zq2) | (q0Aq1)(q1zq2) | (q0Aq2)(q2zq2) |(q0Aq3)(q3zq2),(q3zq3) → (q0Aq0)(q0zq3) | (q0Aq1)(q1zq3) | (q0Aq2)(q2zq3) |(q0Aq3)(q3zq3).Начальным символом грамматики будет (q0, z, q2).

Возьмем строку aab, которая допускается данным НМА всоответствии с последовательностью конфигураций:

(q0, aab, z) (q0, ab, Az) (q3, b, z)

(q0, b, Az) (q1, ε, z) (q2, ε, ε).Соответствующий вывод в G будет иметь следующий вид:

(q0zq2) ⇒ a(q0Aq3)(q3zq2) ⇒ aa(q3zq2) ⇒ aa(q3zq2)

⇒ aa(q0Aq1)(q3zq2) ⇒ aab(q1zq2) ⇒ aab.

Page 129: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Лекция 13 129

Магазинные автоматы

Детерминированные магазинныеавтоматы и детерминированныеКС-языки

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

магазинным автоматом-распознавателем (ДМА). Дадимопределение ДМА, основываясь на определении 12.1.

Определение 14.1.Магазинный автомат

M = (Q, Σ, V, θ, q0, z0, F)называется детерминированным, если он является НМА всоответствии с определением 12.1 и удовлетворяет следующимограничениям: для любых q ∈ Q, a ∈ Σ ∪ {ε} и b ∈ V1) |θ(q, a, b)| ≤ 1, т.е. θ(q, a, b) содержит не более одного элемента,

2) если θ(q, ε, b) = ∅, то для любого а ∈ Σ θ(q, a, b) = ∅.

Первое из этих условий означает, что для любого входногосимвола и любого символа в вершине стека не может существоватьболее одного шага, а второе условие говорит о том, что когда внекоторой конфигурации возможен ε-переход, то никакой другой

Лекция

14

Е

Page 130: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Магазинные автоматы130

переход, сопровождающийся чтением входного символа, уженевозможен.

Определение 14.2.Язык L называется детерминированным контекстно-свобод-

ным языком (ДКС-языком), если существует ДМА М такой, что L =L(M).

Пример 14.3.Покажем, что язык

L = {anbn | n ≥ 0}является детерминированным контекстно-свободным языком.Нетрудно убедится, что

М = ({q0, q1, q2}, {a, b}, {0, 1}, θ, 0, {q0}),где θ определена соотношениями

θ(q0, a, 0) = {(q1, 10)},θ(q1, a, 1) = {(q1, 11)},θ(q1, b, 1) = {(q2, ε)},θ(q2, b, 1) = {(q2, ε)},θ(q0, ε, 0) = {(q0, ε)},

является ДМА и допускает язык L.В отличие от конечных автоматов, детерминированные и

недетерминированные магазинные автоматы не эквивалентны.Существуют контекстно-свободные языки, которые не являютсядетерминированными.

Пример 14.4.Возьмем два языка:

L1 = {anbn | n ≥ 0}и

L2 = {anb2n | n ≥ 0}.

Page 131: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Лекция 14 131

Как ранее было показано, язык L1 контекстно-свободный.Несложной модификацией грамматики языка L1 можно получитьКС-грамматику для L2, значит, L2 – тоже КС-язык.

Покажем, что язык

L = L1 ∪ L2

является контекстно-свободным. Это можно сделать разнымиспособами. Пусть, скажем,

G1 = (N1, T, S1, P1)и

G2 = (N2, T, S2, P2)

– КС-грамматики, порождающие языки L1 и L2, соответственно.Предположим, что N1 ∩ N2 = ∅ и S ∉ N1 ∪ N2. Построим грамматикуG, являющуюся комбинацией грамматик G1 и G2:

G = (N1 ∪ N2 ∪ {S}, T, S, P),где

P = P1 ∪ P2 ∪ {S → S1, S → S2}.

Нетрудно показать, что G порождает язык L, а следовательно,L – контекстно-свободный язык. Покажем, что L не являетсядетерминированным КС-языком. Рассуждение построимследующим образом: предположив, что L – детерминированный КС-язык, приходим к заключению, что язык

L' = L ∪ {anbncn | n ≥ 0}

должен тогда быть контекстно-свободным, а это не так.Для доказательства того, что L' будет КС-языком, если L –

детерминированный КС-язык, построим НМА M', распознающий L',основываясь на ДМА М, распознающем L.

Идея построения этого НМА заключается в том, чтобыдобавить к устройству управления автомата М аналогичный блок, вкотором переходы, осуществляемые при чтении входного символа b,заменены на аналогичные переходы для символа с. Этот новый

Page 132: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Магазинные автоматы132

блок устройства управления вступает в работу после того, как Мзаканчивает чтение anbn. Так как этот второй блок реагирует на сn

совершенно так же, как первый (основной) блок на bn, то процессраспознавания anb2n превращается теперь в процесс распознаваниястроки anbncn. На рис. 14.1. эта конструкция изображенасхематически.

bn аnbn Диаграмма М

ε ε Диаграмма сn дополнительного блока

Рис. 14.1. Диаграмма переходов M'

Итак, пустьM = (Q, Σ, V, θ, q0, z0, F),

гдеQ = {q0, q1, ..., qn}.

РассмотримM' = (Q', Σ, V, θ ∪ θ', q0, z0, F' ),

гдеQ' = Q ∪ {q'0, q'1, ..., q'n},

F' = F ∪ {q'i | qi ∈ F},

а функция θ' построена из θ добавлением соотношений

θ'(qf, ε, x) = {(q'f, x)}

для всех qf∈ F и х ∈ V

Page 133: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Лекция 14 133

и

θ'(q'i, c, x) = {(q'j, ϕ)}

для всех θ(qi, b, x) = {(qj, ϕ)} и

qi ∈ Q, x ∈ V, ϕ ∈ V*.

Для М распознать строку anbn означает выполнение соотношения

(q0, anbn, z0)

M

* (qi, ε, ϕ), где qi ∈ F.

Так как М – детерминированный, должно также выполнятьсясоотношение

(q0, anb2n, z0)

M

* (qi, bn, ϕ),

откуда следует, что для распознавания строки anb2n необходимовыполнение соотношения

(qi, bn, ϕ)

M

* (qj, ε, ψ),

где qi – некоторое заключительное состояние из F. Но тогда, попостроению автомата М', мы имеем:

(q'i, cn, ϕ)

M'

* (q'j, ε, ψ),

т.е. M' допускает строку anbncn. Нетрудно видеть, что никакихдругих строк, кроме тех, которые содержатся в L', НМА M' недопускает. Следовательно, L' = L(M'), а это значит, что L' –контекстно-свободный язык. Но это не так!В следующей лекции, применяя Лемму о расширении, мы покажем(пример 15.8), что L' не является КС-языком. Поэтому наше

Page 134: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Магазинные автоматы134

исходное предположение о том, что L – детерминированныйКС-язык, неверно.

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

Page 135: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Лекция 14 135

Свойства контекстно-свободных языков

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

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

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

Подобные леммы о расширении известны и для других классовязыков.

Теорема 15.1.(Лемма о расширении для контекстно-свободных языков.)

Пусть L - бесконечный КС-язык. Тогда существует некотороецелое число m > 0 такое, что для любой строки α ∈ L из того, что

Лекция

15К

В

Page 136: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Свойства контекстно-свободных языков136

|α| ≥ m, следует, что строка α может быть представлена вследующем виде:

α = βγδϕψ, (15.2)

где |γδϕ| ≤ m, (15.3)

|γϕ| ≥ 1, (15.4)и так, что для любого i = 0,1, 2, ...

βγiδϕiψ ∈ L . (15.5)Доказательство.Рассмотрим ε-свободный язык L, порождаемый грамматикой G

без ε-продукций и без цепных продукций. Так как длины строк вправой части продукций ограничены в совокупности некоторымчислом k > 0, то длина вывода любой строки α ∈ L должна быть неменьше α

k, а так как язык L бесконечен, то, следовательно, в G

существуют сколь угодно длинные выводы.Рассмотрим левосторонний вывод достаточно длинной строки

из L. Так как число переменных в грамматике G ограничено, а длинавывода - нет, то, по крайней мере, одна переменная, скажем A,должна встретиться дважды в позиции самого левогонетерминального символа сентенциальной формы. Таким образом, вG должен существовать вывод

S ⇒*

βAϕ1 ⇒*

βγAϕ2ϕ1 ⇒*

βγδϕ2ϕ1, (15.6)где β, γ, δ ∈ T*; ϕ1, ϕ2 ∈ (N ∪ T)*.Будем считать, что A является "самой внутренней" повторяющейсялевой переменной в данном выводе, подразумевая под этим тотфакт, что в выводе

A ⇒*

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

Page 137: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Лекция 15 137

В силу нашего предположения о том, что G не содержит ниε-продукций, ни цепных продукций, ясно, что каждый шаг выводаили порождает новый терминальный символ в сентенциальнойформе, или увеличивает ее длину. Отсюда следует, что

|γϕ2| ≥ 1.Анализируя структуру (15.6), замечаем, что выводы

A ⇒*

γAϕ2и

A ⇒*

δвозможны в G. А это, в свою очередь, показывает, что в G возможнытакже выводы

S ⇒*

βδϕ1и

S ⇒*

βγiδϕ 2i ϕ1, i = 1, 2, ... (15.7)Вывод (15.6) заканчивается тогда, когда сентенциальная формапревращается в строку терминалов, а это означает, что существуютвыводы

ϕ2 → ϕ,ϕ1 → ψ,

где ϕ, ψ ∈ T*. Поэтому из того, что α = βγδϕψ, и из (15.7) получаем,что

βγiδϕiψ ∈ L.Так как |γϕ2| ≥ 1, то отсюда следует выполнение условия (15.4).Покажем, что (15.3) также имеет место. Выберем такое вхождение A

в (15.6), для которого в выводе A ⇒*δ отсутствуют повторяющиеся

самые левые переменные. Следовательно, |δ| может быть ограниченаконстантой независимо от строки α, откуда заключаем, что (15.3)может быть выполнено. Теорема тем самым доказана.

Page 138: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Свойства контекстно-свободных языков138

Эта Лемма о расширении полезна для доказательства того, чтотот или иной язык не принадлежит классу контекстно-свободныхязыков. В ней сформулировано необходимое условиепринадлежности этому классу, в силу чего эта лемма чаще всегоиспользуется в негативном смысле: если для некоторого языкаутверждение леммы неверно, то это означает, что этот язык неконтекстно-свободный.

Пример 15.8.

Показать, что языкL = {anbncn | n ≥ 0}

не является контекстно-свободным.

Допустим, что язык L не контекстно-свободный, и покажем,что это предположение приводит к противоречию. По теореме 15.1.для КС-языка должно существовать натуральное число m суказанными в теореме свойствами. Возьмем строку

ambmcm ∈ L.

Рассмотрим возможность выбора в ней подстроки γδϕ.Очевидно, она не может целиком входить ни в подстроку am, ни вподстроку bm, ни в cm, так как итерация γi и ϕi сразу нарушаетнеобходимую структуру строки из L. По тем же причинамневозможно выбрать подстроку γδϕ так, чтобы она содержалаодинаковое количество символов a и b. Значит, остаетсяединственный способ выбора такой подстроки, когда γϕ содержитодинаковое число символов a, b и c. Но это возможно, лишь когда bm

целиком входит в γδϕ, откуда следует, что

|γδϕ| > m,

а это противоречит условию (15.3). Итак, оказывается, что выбратьподстроку γδϕ в строке ambmcm невозможно, следовательно, язык Lне контекстно-свободный.

Page 139: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Лекция 15 139

Пример 15.9.Рассмотрим язык

L = {αα | α∈{a, b}*}.Покажем, что L не является контекстно-свободным.

Рассмотрим строкуambmambm ∈ L.

Нетрудно видеть, что при любом представлении этой строки в видеβγδϕψ,

как только мы начинаем итерировать γ и ϕ, так сразу нарушаемструктуру исходной строки и видим тем самым, что существует iтакое, что

βγiδϕiψ ∉ L.На основании этого заключаем, что L не может быть КС-языком.

Свойства замкнутости классаконтекстно-свободных языков

еорема 15.10.Класс контекстно-свободных языков замкнут относительнообъединения, сцепления и итерации языков.Доказательство.Пусть L1 и L2 - КС-языки, порождаемые КС-грамматиками

G1 = (N1, T1, S1, P1)и

G2 = (N2, T2, S2, P2),соответственно. Не уменьшая общности, можно предположить, чтомножества N1 и N2 не пересекаются.

Рассмотрим язык L(G3), порожденный грамматикойG3 = (N1∪N2∪{S3}, T1∪T2, S3, P3),

Т

Page 140: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Свойства контекстно-свободных языков140

где S3 ∉ N1∪N2, P3 = P1∪P2∪{S3 → S1, S3 → S2}. Очевидно, G3 - КС-грамматика, значит, L(G3) - КС-язык. В то же время легко видеть,что

L(G3) = L1∪L2.Действительно, пусть α∈L1. Тогда в G3 возможен вывод

S3 ⇒ S1 ⇒*

α,т.е. α∈L(G3). Для случая, когда α∈L2, рассуждение аналогично.

Обратно, если α∈L(G3), то первым шагом в выводе S3⇒*α

должен быть либоS3 ⇒ S1,

либоS3 ⇒ S2.

Предположим, что имеет место шагS3 ⇒ S1.

Так как сентенциальная форма, выводимая из S1, содержитпеременные только из N1 и при этом N1 и N2 не пересекаются, товывод

S1 ⇒*

αможет использовать лишь продукции из P1. Следовательно, α∈L1.Аналогичные рассуждения справедливы для второго случая S3 ⇒ S2.Таким образом, из того, что α∈L(G3), следует, что

α ∈ L1∪L2.Далее рассмотрим сцепление двух языков. Положим

G4 = (N1∪N2∪{S4}, T1∪T2, S4, P4).Здесь опять S4 - новый начальный символ и

P4 = P1∪P2∪{S4 → S1S2}.Тогда легко видеть, что

L(G4) = L1L2.Наконец, рассмотрим итерацию L1* языка L1. Положим

Page 141: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Лекция 15 141

G5 = (N1∪{S5}, T1, S5, P5),где S5 - новая переменная, а

P5 = P1∪{S5 → S1S5, S5 → ε}.Тогда

L(G5) = L1*.Теорема доказана.

Теорема 15.11.Класс КС-языков не замкнут относительно пересечения и

дополнения.Доказательство.Рассмотрим два языка

L1 = {anbncm | n ≥ 0, m ≥ 0}и

L2 = {anbmcm | n ≥ 0, m ≥ 0}.Оба эти языка контекстно-свободные. Действительно, L1 может бытьзадан, например, КС-грамматикой

S → S1S2,S1 → aS1b | ε,

S2 → cS2 | ε,или можно заметить, что L1 есть сцепление двух КС-языков:

{anbn | n ≥ 0} и {cm | m ≥ 0}и, следовательно, этот язык контекстно-свободный. Аналогичныерассуждения справедливы для L2. Но

L1 ∩ L2 = {anbncn | n ≥ 0},который, как было показано ранее, не является КС-языком. Значит,класс КС-языков не замкнут относительно пересечения.

Предположим теперь, что дополнение к любому КС-языку естьтоже КС-язык. Тогда для указанных выше L1 и L2 их дополнения L1

Page 142: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Свойства контекстно-свободных языков142

и L2 тоже должны быть КС-языками так же, как и L1∪L2 иL L1 2∪ . Но

L L1 2∪ = L1∩L2,который, как только что было сказано, не является КС-языком.Следовательно, наше предположение неверно, а это значит, чтокласс КС-языков не замкнут относительно операции дополнения.

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

Теорема 15.12.Пусть L1 - контекстно-свободный язык, а L2 - регулярный язык.

Тогда языкL1 ∩ L2

является контекстно-свободным.Доказательство.Пусть НМА

M1 = (Q, Σ, V, θ1, q0, z0, F1)допускает язык L1, а ДКА

M2 = (P, Σ, θ2, p0, F2)допускает язык L2. Построим магазинный автомат

M' = (Q', Σ, V, θ', q'0, z0, F'),который моделирует параллельное функционирование автоматов M1и M2: как только очередной символ читается из входной строки, такM' одновременно совершает шаги, производимые M1 и M2. Для этогомы полагаем

Q' = Q × P,q'0 = (q0, p0),F' = F1 × F2

и определяем θ' таким образом, чтобы соотношение

Page 143: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Лекция 15 143

((qk, pt), α) ∈ θ'((qi, pj), a, b)

имело место тогда и только тогда, когда

(qk, α) ∈ θ1(qi, a, b)и

θ2(pj, a) = pt.

В дополнение к этому мы также требуем, чтобы в случае, когдаa = ε, выполнялось равенство pj = pt. Иными словами, состоянияавтомата M' обозначаются парами (qi, pj), представляющими тесоответствующие состояния, в которых M1 и M2 могут оказатьсяпосле прочтения некоторой входной строки. Простым рассуждениемпо индукции можно показать, что соотношение

((q0, p0), α, z0) ((qf, pf), β),М'

где qf ∈ F1, pf ∈ F2, выполняется тогда и только тогда, когда ∗

(q0, α, z0) (qf, β) М1

иθ2

*(p0, α) = pf.

Это означает, что строка допускается автоматом M' тогда и толькотогда, когда она допускается автоматами M1и M2 одновременно, т.е.что она принадлежит пересечению L(M1) ∩ L(M2), что и требовалосьдоказать.

Перефразируя формулировку теоремы 15.12, будем говорить,что класс КС-языков замкнут относительно регулярного пересечения(понимая под этим пересечение с регулярным языком).

Пример 15.13.Показать, что язык

Page 144: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Свойства контекстно-свободных языков144

L = {anbn | n ≥ 0, n ≠ 100}является контекстно-свободным.

Заметим, чтоL = {anbn | n ≥ 0} ∩ L1,

где L1 = {α | α∈{a, b}*}\{a100b100}, т.е. L1 состоит из всех строк валфавите {a, b}, за исключением строки a100b100, а значит, являетсярегулярным. Так как язык

{anbn | n ≥ 0}контекстно-свободный, то, в силу теоремы 15.12, язык L тожеконтекстно-свободный.

Пример 15.14.Показать, что язык

L = {α | α∈{a, b, c}* и na(α) = nb(α) = nc(α)}не контекстно-свободный.

Здесь na(α) означает число вхождений символа a в строку α.Предположим противное, т.е. что L - КС-язык. Тогда язык

L ∩ L(a*b*c*) = {anbncn | n ≥ 0}также должен бы быть контекстно-свободным, так как L(a*b*c*)регулярен. Но ранее было показано, что это не так, следовательно, Lне является КС-языком.

Page 145: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Лекция 15 145

Свойства контекстно-свободных языков

Некоторые алгоритмические проблемыдля КС-языков

амой существенной проблемой для любого класса языков,используемых на практике, является проблема вхождения (илипроблема принадлежности): α∈L? При обсуждении этой и

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

Теорема 16.1.Существует алгоритм, который для любой КС-грамматики и

для любой строки α определяет, принадлежит строка α языку L(G)или нет. Иными словами, проблема принадлежности для КС-языковалгоритмически разрешима.

Доказательство.Очевидно, можно сразу предположить, что грамматика G

имеет нормальную форму Хомского (так как любая КС-грамматиказа конечное число шагов может быть приведена к ней ссохранением языка). Пусть

G = (N, T, S, P)и пусть дана произвольная строка

α = a1a2...an.Определим подстроки строки α

αij = ai...aj, i ≤ j,и подмножества

Лекция

16

С

Page 146: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Свойства контекстно-свободных языков146

Nij = {A | A∈N, A ⇒G

*

αij},

где 1 ≤ i ≤ n, 1≤ j ≤ n. Ясно, что α∈L(G) тогда и только тогда, когда

S ∈ N1 n.

Для вычисления Nij заметим, что A∈Nii тогда и только тогда,когда G содержит продукцию A → ai. Поэтому Nii может бытьвычислено для всех i = 1, 2, ..., n простым просмотром α и всехпродукций грамматики G. Далее заметим, что для j > i из Aвыводима αij тогда и только тогда, когда в G существует продукция

A → BC такая, что B ⇒G

*

αik и C ⇒G

*

αk+1, j для некоторого k в

интервале i ≤ k < j. Иначе говоря,

Nij = { }∪

∈ + −k i i j, ,...,1 1 {A | A → BC и B∈Nik, C∈Nk+1, j}.

Упорядочивая пары индексов (i, j) в этом выражении, видим,что множества Nij могут быть вычислены в следующейпоследовательности:

вычисляем сначала N11, N22, ..., Nnn;затем вычисляем N12, N23, ..., Nn-1, n;потом вычисляем N13, N24, ..., Nn-2, n;

и так далее.

Ясно, что через конечное число шагов все Nij будутвычислены, в том числе и N1 n, после чего останется убедиться,принадлежит S этому множеству или нет.

Пример 16.2.

Определить, принадлежит ли строкаα = aabbb

языку, порожденному КС-грамматикой G

S → AB,

Page 147: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Лекция 16 147

A → BB | a,B → AB | b.

Применим описанную в теореме 16.1 процедуру. Заметим, чтоданная грамматика уже в нормальной форме Хомского, поэтомусразу вычисляем множества Nij, где 1≤ i ≤ 5, 1≤ j ≤ 5:

N11 = {A}, N22 = {A}, N33 = {B}, N44 = {B}, N55 = {B},N12 = ∅, N23 = {S, B}, N34 = {A}, N45 = {A},N13 = {S, B}, N24 = {A}, N35 = {S, B},N14 = {A}, N25 = {S, B},N15 = {S, B}.

Видим, что S∈N15, значит, α∈L(G).Теорема 16.3.

Существует алгоритм, который по любой КС-грамматикеG = (N, T, S, P)

определяет, пуст язык L(G) или нет.Доказательство.Предположим, что ε∉ L(G). Это можно сделать, так как

привидением грамматики G к ε-свободному виду всегда можноэффективно определить, входит ли ε в L(G), и если ε∈ L(G), тоязык не пуст. Итак, пусть ε∉ L(G). Используем алгоритм удаленияиз G бесполезных символов и продукций. Если при этом S окажетсяв множестве бесполезных переменных, тогда язык L(G) пуст, а еслинет, то L(G) содержит по меньшей мере один элемент.

Теорема 16.4.Существует алгоритм, который по любой КС-грамматике

G = (N, T, S, P)определяет, бесконечен язык L(G) или нет.

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

Page 148: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Свойства контекстно-свободных языков148

Предположим, что G не содержит ни ε-продукций, ни цепныхпродукций, ни бесполезных символов.

Допустим, что грамматика обладает повторяющимисяпеременными в том смысле, что существует некоторый нетерминалA∈N, для которого существует вывод

A ⇒*

αAβ.

Так как G по предположению не имеет ε-продукций и цепныхпродукций, то α и β не могут быть одновременно пусты. Так как Aне является ни ε-порождающим, ни бесполезным символом, тоимеем:

S ⇒G

* ϕAψ ⇒

G

и

A ⇒G

* δ.

Но тогда

S ⇒G

* ϕAψ ⇒

G

*ϕαiAβiψ ⇒

G

*ϕαiδβiψ,

для любого i = 1, 2, ..., следовательно, L(G) бесконечен.Если ни одна из переменных не повторяется в выводах

грамматики G, тогда длина любого вывода в G ограничена числом|N|, а значит, множество всех выводов в G конечно. Следовательно,конечен и язык L(G).

Итак, для построения алгоритма, проверяющего, бесконеченли язык L(G), достаточно иметь алгоритм проверки наличия в Gповторяющихся переменных. Это может быть сделано посредствомпостроения графов зависимостей для переменных таким образом,что дуга (A, B) графа соответствует продукции

A → αBβ.

Page 149: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Лекция 16 149

Тогда любая переменная, которая является основанием некоторогоцикла, будет повторяющейся переменной в G. Следовательно, Gимеет повторяющиеся переменные тогда и только тогда, когда графзависимостей содержит цикл. В силу конечности графа этапроверка может быть проведена за конечное число шагов, а темсамым, мы получаем алгоритм проверки конечности языка L(G).

В заключение заметим, что далеко не все алгоритмическиепроблемы для контекстно-свободных языков разрешимы. Так,например, не существует алгоритма для определения, эквивалентныли две КС-грамматики. Правда, для доказательства этого нужновначале точно определить, что же такое алгоритм, так как иначеневозможно будет доказать его принципиальное несуществование.Но это уже тема другого курса лекций.

Page 150: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Свойства контекстно-свободных языков150

Предметный указатель

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

18недетерминированныйконечный, 16, 24

алфавит, 7алфавит входной, 19гомоморфизм, 59гомоморфный образ, 60грамматикалеволинейная, 51праволинейная, 51грамматикиэквивалентные, 14грамматический разбор, 76граф зависимости, 94диаграмма переходов, 19длина строки, 7дополнение, 9замыкание Клини, 10звездочка, 10информация входная, 15итерация языка, 9конкатенация, 7леворекурсивные продукции, 91лемма о расширении дляконтекстно-свободных языков,136лемма о расширении регулярныхязыков, 64минимизация конечныхавтоматов, 32неоднозначность грамматик, 81нетерминалы, 12нисходящий разбор, 77нормальные формы, 87Грейбах, 87, 107Хомского, 87, 103обнуляемый нетерминал, 98обращение, 7

однозначность грамматик, 81подстрока, 8полный перебор, 77правила подстановки, 88префикс строки, 8продукция, 12пустая строка, 8распознаватель, 17, 18, 24регулярное пересечение, 144регулярный язык, 23сентенциальная форма, 13сентенция, 13слово, 13состояниевнутреннее, 19заключительное, 19начальное, 19недостижимое, 33неразличимое, 33различимое, 34стандартное представление, 62строка, 7строка входная, 15суффикс строки, 8сцепление, 9теорема Клини, 48терминалы, 12устройство временной памяти,

15устройство управления, 15формальный язык, 8функция переходов, 19, 25цепная продукция, 100эквивалентныеавтоматы, 28языкавтоматный, 23однозначный, 85порождаемый грамматикой, 13существенно неоднозначный, 85

Page 151: Руководство профессионального стиля · 2004-11-24 · Лекция 1 7 Языки и грамматики Языки юбой язык основан

Свойства контекстно-свободных языков2

Валерий Анатольевич Соколов

ФОРМАЛЬНЫЕ ЯЗЫКИ И ГРАММАТИКИКУРС ЛЕКЦИЙ

Редактор, корректор В.Н. Чулкова

Лицензия ЛР № 020319 от 30.12.96

Подписано в печать 01.09.98. Формат 60×84/16.Бумага Data Copy. Печать офсетная.

Усл. печ. л. 9,0. Уч.-изд. л. 5,0. Тираж 200 экз.Заказ

Оригинал-макет подготовленредакционно-издательским отделом

Ярославского государственного университетаим. П.Г. Демидова

Ярославский государственный университет им. П.Г. Демидова150000 Ярославль, ул. Советская 14.

Отпечатано на ризографе.

ООО "Рио-Гранд",Ярославль, ул. Чкалова, 2