Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Теория автоматов и формальных языков. Учебник.pdf

§ 5.1. Примеры контекстно-свободных языков 221
Пусть теперь
слова 0v1, поэтому|0
|v0|0=
скобочное слово, что противоречит предположению. Итак, для любого
префикса
правильное скобочное слово. По индукционному предположению
Применяя правило S → 0S1, получаем вывод
то есть S ⇒∗w.
|v0|1−
v0— произвольный префикс словаv, тогда 0
v0|0> |0v0|1и
1 и|0
v0|0=|0
v0словаvвыполняется неравенство
v0|1. Но тогда по лемме 111 0
S ⇒ 0S1 ⇒∗0v1,
|v0|0+ 1
> |v0|1. Если
|v0|0> |v0|1, а значит,v—
v0— префикс
|v0|0< |v0|1, то
v0— правильное
S ⇒∗v
Одним из основных КС-языков является язык Дика, представляющий собой обобщение языка правильной расстановки скобок. В языке
Дика есть несколько типов скобок, а в каждом слове они расставлены правильно «в совокупности», при этом закрывающие скобки
могут предшествовать открывающим. Точное определение даётся в
терминах свободных групп.
Оп ределен ие 84.
∆ = Σ
∪ Σ
. Я з ы к о м Д и к а
Пусть Σ =
Dnв алфавите ∆ называется множе-
{a1, . . . , an},Σ
=
{¯a1, . . . , ¯an}
ство всех слов равных единице в свободной группе с множеством
образующих Σ (элементы aiи ¯aiсчитаются обратными).
.
,
Пусть, например, Σ =
а слово
ab¯a¯b
не принадлежит. Интуитивно это объясняется тем, что
{a, b }
. Слово
¯ab¯ba
принадлежит языку
пары скобок разных типов a¯a и b¯b оказываются «сцепленными».
Язык Dnпорождается следующей КС-грамматикой G
D
:
n
S → ε | SS
S → aiS¯ai| ¯aiSaiдля 1 6 i 6 n.
Пр име р 73.
удобства будем писатьaвместо
D
G
слово ¯ab¯ba¯bb:
2
Рассмотрим в качестве примера язык
a1иbвместо
S ⇒ SS ⇒ ¯aSaS ⇒ ¯abS¯baS ⇒ ¯ab¯baS ⇒ ¯ab¯ba¯bSb ⇒ ¯ab¯ba¯bb.
a2. Выведем в грамматике
D2, в котором для
D2,

222 Глава 5. Контекстно-свободные грамматики и языки
Докажем, что грамматика
D
G
порождает язык
n
Dn. Назовём слово
в алфавите ∆ п р и в е д ё н н ы м, если оно не содержит подслов вида
ai¯aiили
¯aiai. В следующих двух леммах символ = служит для обо-
значения равенства слов, а символ≈— для обозначения равенства
элементов группы. Например, aba¯ab ≈ abb, но aba¯ab 6= abb.
Ле мма 112.
Пусть
x ≈ b1. . . bmв свободной группе с множеством
образующих Σ, где bi∈ Σ ∪ Σ и слово b1. . . bmприведённое. Тогда x
можно представить в виде x1x2. . . xmтак, что xi≈ bi.
Доказательство. Так как слово
b1. . . bmприведённое, то
|x| > m
Проведём индукцию по |x|−m.
Б а з и с и н д у к ц и и . Если
|x|=m
, тоx=
b1. . . bmи можно
положить xi= bi.
Ш а г и н д у к ц и и . Пустьx=
у словxи
b1. . . bmнаибольший общий суффикс. Пусть длина этого
c1c2. . . ck,
ci∈Σ∪ Σ
. Выделим
суффикса равнаj. Случайj=kрассмотрен в базисе, поэтому будем
считать, что j < k. Тогда
x = c1. . . c
поэтому c1. . . c
k−j
k−jck−j+1
≈ b1. . . b
. . . ck= c1. . . c
, причём c
m−j
k−j
k−j
b
6= b
m−j+1
. Получаем
m−j
. . . bm,
.
c1. . . c
k−j−1
≈ b1. . . b
m−j
¯c
k−j
,
причём слово в правой части приведённое. По индукционному предположению слово из левой части равенства можно представить в виде
y1y2. . . y
m−jym−j+1
так, что
yi≈ biдля 1 6 i 6 m − j,
Поэтому y
m−j+1
y
m−j+1
c
≈ ε. Теперь для слова x можно положить
k−j
≈ ¯c
k−j
.
xi= yiдля 1 6 i < m − j,
x
m−j
x
m−j+i
= y
m−jym−j+1
= b
m−j+i
c
,
k−j
для 1 6 i 6 j,

§ 5.1. Примеры контекстно-свободных языков 223
что доказывает лемму.
Ле мма 113. КС-грамматика G
Доказательство. ВключениеL(
средственной индукцией по длине вывода. Докажем включение
D
L(G
). Пусть w ≈ ε. Проведём индукцию по длине w.
n
D
порождает язык Dn.
n
D
G
)
⊆ Dnдоказывается непо-
n
Dn⊆
Б а з и с и н д у к ц и и . Словоεдлины 0 выводимо за один шаг,
слова вида ai¯aiи ¯aiaiдлины 2 выводимы за два шага.
Ш а г и н д у к ц и и . Рассмотрим произвольное слово
w ∈ D
длины больше 2. Рассмотрим два случая.
Предположим, чтоwможно представить в виде
w1и
w2непусты и
предположению
w1≈ ε
S ⇒∗w1,
(тогда и
w2≈ ε
S ⇒∗w2, поэтому можно построить вывод
). По индукционному
w1w2, так что
S ⇒ SS ⇒∗w1S ⇒∗w1w2= w.
Теперь предположим, что представленияwиз первого случая не
существует, то есть всякий непустой собственный префиксwне равен
единице группы. Пустьaиb— первая и последняя буква словаw,
то естьw=
ратными элементами группы. Тогда
По лемме 112
aw0b
. Предположим, что буквыaиbне являются об-
w0=xy, так что
w0≈ ¯a¯b
x ≈ ¯a,y ≈¯b
и слово
¯a¯b
неприводимо.
. Поэтомуw=
axyb
имеет непустой собственный префикс равный единице (словоax), что
противоречит предположению. Поэтомуaиbявляются обратными
элементами. Следовательно,
жению
S ⇒∗w0. В грамматике есть правило
w0≈ ε
и по индукционному предполо-
S → aSb
, а значит,
существует вывод S ⇒ aSb ⇒∗aw0b = w.
Существует и другой вариант скобочного языка, в котором открывающие скобки должны предшествовать закрывающим. Такой язык
является непосредственным обобщением языка правильной расстановки скобок на случай нескольких типов скобок.
n
Оп ределен ие 85.
∆ = Σ
∪ Σ
. О г р а н и ч е н н ы м я з ы к о м Д и к а
Пусть Σ =
{a1, . . . , an},Σ
=
{¯a1, . . . , ¯an}
0
D
n
,
в алфа-

224 Глава 5. Контекстно-свободные грамматики и языки
вите ∆ называется множество всех слов равных единице в моноиде
с множеством образующих Σ и определяющими соотношениями
ai¯ai≈ ε.
Язык правильной расстановки скобок является частным случаем
ограниченного языка Дика
Ограниченный язык Дика D
0
порождается следующей КС-грам-
n
матикой:
S → ε | SS
S → aiS¯aiдля 1 6 i 6 n.
Доказательство правильности этой грамматики аналогично доказательству правильности грамматики G
D
.
n
В последующих примерах мы будем опускать формальные доказательства и ограничимся только содержательными комментариями.
Пр име р 74. Рассмотрим язык
i
i
i
i
i
L1= {a
1
1
2
b
2
a
b
. . . a
i
n
n
b
: n > 0, ij> 0 }.
Слова этого языка состоят из произвольного числа блоков вида
aibiс
равным числом символовaиb, при этом в разных блоках число символов
a может быть одинаковым, а может и различаться. Язык L1порождается
КС-грамматикой G1со следующими правилами:
S → T S | T
T → aT b | ab.
Правила дляSпорождают произвольные последовательности символовT:
что разные блоки вида
этому числа
S ⇒∗T T . . . T
. Правила дляTпорождают слова вида
aibiникак не взаимодействуют друг с другом, по-
ijмогут быть произвольными, то есть разные блоки могут
aibi. Заметим,
иметь разную длину в соответствии с определением языка L1.
Пр име р 75.
Построим КС-грамматику
G2, порождающую множество
всех инфиксных булевых формул с переменнымиx,y,zи пропозициональными связками ∧, ∨, ¬.
S → x | y | z | (S ∧S) | (S ∨ S) | ¬S

§ 5.1. Примеры контекстно-свободных языков 225
Пр име р 76.
всех формул логики предикатов сигнатуры Ω = (
Построим КС-грамматику
G3, порождающую множество
(2)
(0)
(1)
P
;
c
, f
, g
(2)
) с пере-
менными x, y, z.
S → A | (S ∧ S) | (S ∨ S) | ¬S | (∀V )S | (∃V )S
A → ⊥ | T = T | P (T, T )
T → c | V | f(T ) | g(T , T )
V → x | y | z
В этой грамматике нетерминалSпорождает все формулы, нетерминал
A
— все атомные формулы, а нетерминалT— все термы. Выведем формулу
(∀x)(¬P (x, c) ∨ (∃y)x = f (y)):
S ⇒ (∀V )S ⇒ (∀V )(S ∨ S) ⇒ (∀V )(¬S ∨ S) ⇒
⇒ (∀V )(¬S ∨ (∃V )S) ⇒ (∀V )(¬A ∨ (∃V )S) ⇒
⇒ (∀V )(¬A ∨ (∃V )A) ⇒ (∀V )(¬P (T, T ) ∨ (∃V )A) ⇒
⇒ (∀V )(¬P (T , T ) ∨(∃V )T = T ) ⇒
⇒ (∀V )(¬P (T , T ) ∨(∃V )T = f(T )) ⇒
⇒3(∀V )(¬P (V, T ) ∨ (∃V )V = f(V )) ⇒
3
6
⇒6(∀x)(¬P (x, c) ∨ (∃y)x = f (y)).
Пр име р 77.
Построим КС-грамматику
G4, порождающую множество
всех арифметических выражений с операциями + и∗. Мы придерживаемся
стандартных соглашений о приоритете операций и о расстановке скобок.
Так, например, слово «1∗2∗3 + 4∗5» является правильным выражением и
должно интерпретироваться как «(((1∗2)∗3) + (4∗5))». Слово «(((x)))»
также является правильным выражением и должно интерпретироваться как
«x». Мы будем предполагать, что имя переменной — это последовательность
латинских букв и арабских цифр, начинающаяся с буквы. В этом примере
начальный нетерминал обозначен E (от англ. expression — выражение).
E → E + T | T V0→ LV0| DV0| ε
T → T ∗ F | F L → a | b | ··· | z
F → C | V | (E) D → 0 | 1 | ··· | 9
V → LV
0
C → DC | D

226 Глава 5. Контекстно-свободные грамматики и языки
В последних строках вместо многоточия следует в явном виде выписать
все оставшиеся буквы и цифры. НетерминалEпорождает произвольные последовательности слагаемых, то есть слова видаT+T+
нетерминалTпорождает произвольные последовательности множителей,
то есть слова вида
которые нельзя представить в виде суммы или произведения выражений
меньшей длины. Такими выражениями могут быть только константы (они
выводятся изC), переменные (они выводятся изV) и выражения в скобках.
Построим для примера вывод выражения (1 + 2) ∗3:
E ⇒ T ⇒ T ∗F ⇒ F ∗F ⇒ (E) ∗F ⇒ (E + T ) ∗ F ⇒ (E + F) ∗F ⇒
⇒ (T + F ) ∗ F ⇒ (F + F) ∗F ⇒3(C + C) ∗ C ⇒3(1 + 2) ∗3.
F ∗ F ∗ · · · ∗ F
. НетерминалFпорождает выражения,
···+T
. Аналогично,
Пр име р 78.
упрощённый структурированный язык программирования. Язык содержит
следующие конструкции.
1) Оператор присваивания вида «переменная = выражение;».
2) Следование.
3) Полное ветвление вида «if условие then ... else ... end;».
4) Неполное ветвление вида «if условие then ... end;».
5) Цикл вида «while условие do ... end;».
6)
Условия в операторах ветвления и цикла имеют вид «
отношение выражение
<, >, <=, >=.
Для простоты будем считать, что в языке есть единственная операция +.
Также будем считать, что переменные и константы являются терминалами.
Для большей наглядности мы будем записывать нетерминалы в виде русских слов, заключённых в угловые скобки. Первые пять правил грамматики
соответствуют первым пяти пунктам описания синтаксиса и являются, фактически, его формализацией. Правила из последних двух строк порождают
Построим КС-грамматику
», где отношение может быть одним из
G5, порождающую некоторый
выражение
=, !=,

§ 5.1. Примеры контекстно-свободных языков 227
выражения аналогично грамматике из предыдущего примера.
<программа>→ v = <выражение>;
<программа>→<программа><программа>
<программа>→ if <условие> then <программа>
else <программа> end;
<программа>→ if <условие> then <программа> end;
<программа>→ while <условие> do <программа> end;
<условие>→<выражение><отношение><выражение>
<отношение>→ = | != | < | > | <= | >=
<выражение>→<выражение> + <слагаемое>|<слагаемое>
<слагаемое>→ c | v | (<выражение>)
Пр име р 79.
языка. В этом примере терминалами будут русские слова, а нетерминалы
соответствуют «словосочетаниям».
В качестве примера выведем в этой грамматике предложение «Бесцветные зелёные мысли яростно спят» (в оригинале Хомский использовал
Построим КС-грамматику, порождающую фрагмент русского
<предл>→<гр_подл><гр_сказ>
<гр_подл>→<опр><гр_подл>
<гр_подл>→<подл>
<подл>→<сущ>
<гр_сказ>→<обст><гр_сказ>
<гр_сказ>→<сказ>
<сказ>→<глагол>
<обст>→<наречие>
<опр>→<прил>
<сущ>→ мысли | студенты | автоматы | . . .
<прил>→ бесцветные | зелёные | умные | конечные | . . .
<глалог>→ спят | учатся | работают | . . .
<нар>→ яростно | крепко | хорошо | эффективно | . . .

228 Глава 5. Контекстно-свободные грамматики и языки
предложение «Colorless green ideas sleep furiously»).
<предл>⇒
⇒<гр_подл><гр_сказ>⇒
⇒<опр><гр_подл><гр_сказ>⇒
⇒<опр><опр><гр_подл><гр_сказ>⇒
⇒<опр><опр><подл><гр_сказ>⇒
⇒<опр><опр><подл><обст><гр_сказ>⇒
⇒<опр><опр><подл><обст><сказ>⇒
⇒5<прил><прил><сущ><нар><глагол>⇒
⇒5бесцветные зелёные мысли яростно спят
Несмотря на то, что предложение бессмысленно, синтаксически оно
полностью правильно. Примерами других выводимых предложений являются «Умные студенты хорошо учатся», «Конечные автоматы работают»,
«Студенты крепко спят» и т.п.
В приведённом примере русские слова были специально взяты во множественном числе, чтобы автоматически выполнялось согласование слов.
Также в грамматике нет дополнений, что позволяет не учитывать паде-
жи имён существительных и прилагательных. В более точной грамматике
необходимо учесть как минимум шесть падежей, два числа, три рода, а
также одушевлённость существительных1, три лица, два числа, три рода,
три времени, три наклонения глаголов и т.п. Тогда нетерминал
нужно заменить на 72 нетерминала (или даже больше) вида
где
x ∈ { им, род, дат, вин, тв, пр },y ∈ {ед, мн },z ∈ {муж, жен, ср },t ∈
{од, неод }
а одно правило
правил
. Аналогично заменяются нетерминалы
<гр_подл>→<опр><гр_подл>
<гр_подл>
x,y,z,t
→<опр>
x,y,z,t
<гр_подл>
степени сравнения).
1
На самом деле падежей в русском языке больше шести. В грамматике необходимо отличать предложный падеж («говорю о лесе») от местного («живу в лесу»),
для полноты следует учесть звательный падеж («отче», «старче») и т.п. Также
нужно учесть три варианта согласования существительных с числительными
(«один стул», «два стула», «пять стульев»), наличие существительных, которые
могут иметь разный род («врач», «невежда») и т.п.
5
5
<сущ>
<сущ>
x,y,z,t
<гр_подл>и<прил>
заменяется на множество
(здесь не учтены
x,y,z,t
,
,

§ 5.1. Примеры контекстно-свободных языков 229
Задачи
183.
Выведите в грамматике для языка Дика
a¯a¯bb¯aab¯b, w3= aba¯ab¯b¯ba¯a¯a.
184. Докажите правильность грамматики для ограниченного языка Дика.
185.
Постройте КС-грамматики, порождающие следующие языки, и докажите
их правильность:
(а) L1= { a2nb2n: n > 0 };
(б) L2= { w ∈ { a, b }∗: |w|a= |w|b};
(в) L3= { aibj: 0 < i < j };
(г) L4= { aibj: i, j > 0, i 6= j };
i
i
i
i
i
i
n
(д) L5= { a
(е) L6= { a
1
1
2
i
2
a
. . . a
2
b
. . . a
i
2n−1
b
i
1
b
n
b
: n > 0, ij> 0 };
i
i
2n
b
∗ b
i
2n
2n−1
a
(ж) L7= { ambnanbm: m, n > 0 };
(з) L8= { aibjck: i, j, k > 0, i = j или j = k };
(и) L9= { a
i
1
2
ba
b . . . ba
i
n
: n > 0, ij= i
j+1
i
(к) L10= { x#y : x, y ∈ { 0, 1 }∗, x 6= y };
(л) L11={0,1
}∗\ Lск, то есть
L11— это множество всех слов в алфавите
{ 0, 1 }, не являющихся правильными скобочными.
186.
Постройте КС-грамматику, порождающую объявления классов на языке
C++
. Объявления содержат только поля и прототипы методов. Требование
уникальности имён не учитывать.
187.
Постройте КС-грамматику, порождающую выражения на языкеC. Учтите,
что существуют ограничения на типы переменных, например, слово вида «x+
y
» не является правильным выражением, если переменнаяxимеет тип
а переменнаяy— тип
множество вида
int*
. Поэтому в качестве терминалов следует выбрать
{ vt}
, гдеtопределяет тип переменной. Можно считать, что
указатели на указатели не используются.
188.
Постройте КС-грамматику, порождающую оператор «
на языке C.
189.
Языком Лукасевича а алфавите
{ a0, a1, . . . , an}
D2слова
i
i
2
. . . b
1
a
: n > 0, ij> 0, ijнечётны };
для некоторого j };
switch-case-default
называется язык, порожда-
w1=
a¯ba¯ab¯a,w2=
int
,
»

230 Глава 5. Контекстно-свободные грамматики и языки
емый КС-грамматикой со следующими правилами:
S → a0,
S → a1S,
S → a2SS,
. . .
S → anSS . . . S
Докажите, что словоwпринадлежит языку Лукасевича тогда и только тогда,
когда выполняются два условия:
n
X
1)
(i − 1)|w|
i=0
n
X
2)
(i − 1)|u|
i=0
190.
Постройте КС-грамматику с двумя правилами, порождающую язык пра-
вильной расстановки скобок.
191.
Постройте КС-грамматику с тремя правилами, порождающую язык
{ ε }.
192.
Докажите, что язык
содержащей менее трёх правил.
193.
Сопоставим КС-грамматикеG= (N,Σ
множеством переменныхNследующим образом: если
A
-правила изP, то система содержит уравнениеA=
что для любой КС-грамматикиGсистемаEq(G) имеет наименьшее решениеf,
причём f (S) = L(G).
= −1;
a
i
> 0 для любого собственного префикса u слова w.
a
i
Lск\ { ε }
| {z }
не порождается никакой КС-грамматикой,
n раз
.
, P, S
) систему уравненийEq(G) с
A → α1| · · · | αn— все
α1+
· · ·+αn. Докажите,
Lск\
§ 5.2. Деревья вывода
Сначала мы докажем полезную техническую лемму о выводах в
КС-грамматиках.
Ле мма 114.
(Σ∪N)∗— произвольные слова. Если
β1, β2∈(Σ∪ N
n
α1⇒
1
β1, α2⇒
ПустьG= (N,Σ
, P, S
) — КС-грамматика,
α1α2⇒
)∗и натуральные числа
β2и n1+ n2= n.
n
2
n
β
, то существуют слова
G
n1, n2такие, что
α1, α2, β ∈
β1β2=β,
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
