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

§ 6.7. Нормальная форма Грейбах 311
получится следующая грамматика:
S → Ab | AbS
S0→ a | aS
0
0
A → BA | a
B → aA | abb | abS0b | aAB0| abbB0| abS0bB
B0→ Abb | AbS0b | AbbB0| AbS0bB
0
0
Задачи
249. Устраните левую рекурсию из следующих грамматик.
(а) S → Sa | Bb
A → SS | a
B → aA | Sb | AA
250.
Докажите, что существуют сколь угодно большие КС-грамматики, для
которых алгоритм из теоремы 164 приводит к экспоненциальному увеличению
размера.
251.
Предложите алгоритм, который по КС-грамматике находит все леворекурсивные и праворекурсивные нетерминалы.
252.
Предложите алгоритм для устранения правой рекурсии из КС-грамматики.
(б) S → SS | Aa | BB
A → AB | SA | b
B → AA | BB
§ 6.7. Нормальная форма Грейбах
Важным частным случаем грамматик без левой рекурсии явля-
ются грамматики в нормальной форме Грейбах.
Оп ределен ие 108.
КС-грамматикаG= (N,Σ
, P, S
) называется
КС-грамматикой в ( с л а б о й ) н о р м а л ь н о й ф о р м е Г р е й б а х, еслиG— грамматика безε-правил и все её правила имеют
один из следующих видов:
1) S → ε;
2) A → aα, где A ∈ N, a ∈ Σ, α ∈ N∗.

312 Глава 6. Нормальные формы КС-грамматик
Для построения нормальной формы Грейбах покажем сначала,
что на множестве нетерминалов грамматики без левой рекурсии
можно определить специальный линейный порядок.
Ле мма 165.
рекурсии. Тогда существует линейный порядок<на множестве
ПустьG= (N,Σ
, P, S
) — КС-грамматика без левой
N
такой, что если A → Bα ∈ P , где B ∈ N , то A < B.
Доказательство. Сначала определим на множестве
шение<следующим образом:
A ⇒+Bα
для некоторого
α ∈(Σ∪N
A < B
тогда и только тогда, когда
)∗. Отношение<антирефлексив-
N
отно-
но, так какGнелеворекурсивна. Оно антисимметрично, поскольку
из
A ⇒+Bα,B ⇒+Aβ
отсутствия левой рекурсии. Наконец, из
A ⇒+Cβα
, так что отношение<транзитивно. Итак,<является
следует
A ⇒+Aβα
A ⇒+Bα,B ⇒+Cβ
, что невозможно в силу
следует
отношением частичного порядка. Поэтому его можно расширить до
линейного порядка.
Теперь докажем основной результат о нормальной форме Грейбах.
Теорема 166.
По любой КС-грамматике можно построить эквива-
лентную КС-грамматику в нормальной форме Грейбах.
Доказательство. ПустьG= (N,Σ
, P, S
) — приведённая КСграмматика без левой рекурсии. Построим отношение<из леммы 165.
Пусть
A1< A2< ··· < An. Алгоритм, приведённый на рис. 46,
преобразуетGв эквивалентную грамматику, в которой правые части
всех правил (кроме S → ε) начинаются на терминалы.
Докажем, что следующее утверждение является инвариантом
цикла: послеkитераций цикла в строках 2–5 правые части всех
непустых правил начинаются либо на терминал, либо на нетерминал
с б´ольшим номером. При этом никакое правило не начинается на
нетерминалы An, . . . , A
n−k+1
.
Индукция по k.
Б а з и с и н д у к ц и и . Если итераций ещё не было, то имеем
исходную грамматику. Каждое правило начинается либо на терминал,

§ 6.7. Нормальная форма Грейбах 313
Algorithm НормальнаяФормаГрейбах
Input: G = (N, Σ, P, S) — приведённая КС-грамматика
без левой рекурсии.
Output: G0— КС-грамматика эквивалентная G, в которой
правила не начинаются на нетерминалы.
0
1: G
= G;
2: for i = n to 2 step −1 do
3: Пусть A
4: Заменить каждое правило A → A
→ γ1| · ·· | γq— все Ai-правила.
i
α на правила
i
A → γ1α | ·· · | γqα.
5: end for
6: return G
0
;
Рис. 46. Построение нормальной формы Грейбах
либо на нетерминал с большим номером в силу выбора порядка
<
. Второе условие также выполнено, поскольку в грамматике нет
нетерминалов с номерами больше n.
Ш а г и н д у к ц и и . Пусть послеkитераций цикла выполняется
индукционное предположение. На (k+1)-й итерации рассматривается
нетерминал
налы, так как нетерминалы с номерами больше
с первых позиций. После подстановки вместо
нетерминал
A
. При этом все
n−k
A
будет удалён с первых позиций, а на первых по-
n−k
A
-правила начинаются на терми-
n−k
n − k
уже удалены
A
всех следствий
n−k
зициях окажутся терминалы. Поэтому утверждение выполняется и
после (k + 1)-й итерации.
Приk=
на
A2, . . . , An. Но ни одно правило не начинается и на
нетерминал
n −
1 получаем, что ни одно правило не начинается
A1, так как
A1имеет наименьший номер. Следовательно, правые
части всех непустых правил начинаются на терминалы.

314 Глава 6. Нормальные формы КС-грамматик
Итак, любое правило получившейся грамматики имеет вид
aα
, где
α ∈(Σ∪ N
дый терминалbна новый нетерминал
)∗. Еслиαсодержит терминалы, то заменим каж-
Abи добавим правила
A →
Ab→ b
Получится грамматика в нормальной форме Грейбах эквивалентная G.
Пр име р 98.
вилами
Упорядочим нетерминалы следующим образом: S, A, B.
На первом этапе все начальные вхождения символаBзаменяются на
его следствия. Получаются правила
На втором этапе все начальные вхождения символаAзаменяются на
его следствия. Получаются правила
Приведём к нормальной форме Грейбах грамматику с пра-
S → ba | AS | Bb | BB
A → BaS | b
B → aSA | a
S → ba | AS | aSAb | ab | aSAB | aB
A → aSAaS | aaS | b
B → aSA | a
.
S → ba | aSAaSS | aaSS | bS | aSAb | ab | aSAB | aB
A → aSAaS | aaS | b
B → aSA | a
Наконец, заменим терминалы в правых частях на нетерминалы (кроме
тех, которые стоят на первых позициях). В результате получается следующая КС-грамматика в нормальной форме Грейбах:
S → bAa| aSAAaSS | aAaSS | bS | aSAAb| aAb| aSAB | aB
A → aSAAaS | aAaS | b
B → aSA | a
Aa→ a
Ab→ b

§ 6.7. Нормальная форма Грейбах 315
В определении 108 требуется только, чтобы первый символ правой
части был терминалом, а дальше стояли нетерминалы в произвольном
количестве. Можно рассматривать грамматики с правилами ещё более
ограниченного вида.
Оп ределен ие 109.
КС-грамматикаG= (N,Σ
, P, S
) называется
КС-грамматикой в с и л ь н о й н о р м а л ь н о й ф о р м е Г р е й б а х, еслиG— грамматика безε-правил и все её правила имеют
один из следующих видов:
1) S → ε;
2) A → aα, где A ∈ N, a ∈ Σ, α ∈ N∗, |α| 6 2.
Теорема 167.
По любой КС-грамматике можно построить эквива-
лентную КС-грамматику в сильной нормальной форме Грейбах.
Доказательство. ПустьG= (N,Σ
, P, S
) — КС-грамматика в
нормальной форме Грейбах. Пустьk— наибольшее число нетерминалов в правых частях правилG. Построим новую КС-грамматику
G0= (
N0,Σ, P0, S0). Нетерминалами новой грамматики являются все
непустые последовательности нетерминалов исходной грамматики
длины не более k:
N0= {[α] : α ∈ N+, |α| 6 k }.
Начальным нетерминалом является [S]:
ются следующим образом. Для каждого старого правила
S0= [S]. Правила определя-
A → aα
для каждого нового нетерминала [Aβ] добавим в P0правило
и
[Aβ] → a[α][β].
Если α = ε или β = ε, то [ε] в правой части правила мы опускаем.
Установим связь между выводами в грамматикахGи
ей по длине вывода докажем следующее утверждение: если [S]
w[α1] . . . [αm], где w — терминальное слово, то S ⇒
G0. Индукци-
∗
wα1. . . αm.
G,l
⇒
∗
G0,l

316 Глава 6. Нормальные формы КС-грамматик
Б а з и с и н д у к ц и и . Если длина вывода равна нулю, то вывод
имеет вид [S] ⇒0[S], поэтому S ⇒0S.
Ш а г и н д у к ц и и . Пусть вывод имеет вид
∗
[S] ⇒
w[α1] . . . [αm] ⇒
G0,l
wa[α][β][α2] . . . [αm].
G0,l
Здесь на очередном шаге применяется правило [Aβ]
α1=
Aβ
(если какое-то из словαилиβпусто, то соответствующий
→ a[α][β
], где
символ [α] или [β] отсутствует). По построению в грамматикеGесть
правило
вод
S ⇒
A → aα
∗
G,l
. По индукционному предположению существует вы-
wα1. . . αm. Учитывая, что
Aβ=α1, и применяя правило
A → aα, получаем
∗
S ⇒
Теперь докажем обратное утверждение: если
где
w ∈
Σ∗, то существуют нетерминалы [
∗
[S] ⇒
w[α1] . . . [αp] и α1. . . αp= A1. . . Am.
G0,l
wAβα2. . . αm⇒
G,l
waαβα2. . . αm.
G,l
α1]
, . . . ,[αp]
∗
S ⇒
wA1. . . Am,
G,l
∈ N0такие, что
Индукция по длине вывода.
Б а з и с и н д у к ц и и . Если длина вывода равна нулю, то вывод
имеет вид S ⇒0S, поэтому [S] ⇒0[S].
Ш а г и н д у к ц и и . Пусть вывод имеет вид
∗
S ⇒
wA1. . . Am⇒
G,l
waαA2. . . Am.
G,l
Тогда по индукционному предположению существуют нетерминалы [
α1]
w[α1]
. . .[αp]. Пусть
вило
A1→ aα
, . . . ,[αp]
∈ N0такие, что
α1=
A1β
α1. . . αp=
A1. . . Amи [S]
. Так как в грамматикеGесть пра-
, то в новой грамматике есть правило [
α1]
→ a[α][β
⇒
∗
G0,l
Применяя его, получаем
].
∗
[S] ⇒
w[α1] . . . [αp] ⇒
G0,l
wa[α][β][α2] . . . [αp].
G0,l
Если нетерминальные суффиксы в утверждениях пусты, то полу-
чается, что [S]
⇒
∗
w
тогда и только тогда, когда
0
G
S ⇒
∗
w
. Поэтому
G
L(G) = L(G0).

§ 6.7. Нормальная форма Грейбах 317
Пр име р 99.
форме Грейбах:
Мы будем выписывать только те нетерминалы, которые оказываются
достижимыми из [S].
На первом шаге выпишем все правила для нетерминала [S]. Получаем
На втором шаге рассмотрим нетерминал [
A
на все следствия и допишем в конец новый нетерминал [BB]. Получаем
правила
Далее продолжаем этот процесс до тех пор, пока не перестанут появляться новые нетерминалы. В результате получаем следующее множество
правил:
Приведём следующую КС-грамматику к сильной нормальной
S → aABB | bA
A → bAAA | aBB | b
B → aABBA | aAAA | b
[S] → a[ABB] | b[A].
ABB
]. Заменим первый символ
[ABB] → b[AAA][BB] | a[BB][BB] | b[BB].
[S] → a[ABB] | b[A]
[ABB] → b[AAA][BB] | a[BB][BB] | b[BB]
[A] → b[AAA] | a[BB] | b
[AAA] → b[AAA][AA] | a[BB][AA] | b[AA]
[BB] → a[ABBA][B] | a[AAA][B] | b[B]
[AA] → b[AAA][A] | a[BB][A] | b[A]
[ABBA] → b[AAA][BBA] | a[BB][BBA] | b[BBA]
[B] → a[ABBA] | a[AAA] | b
[BBA] → a[ABBA][BA] | a[AAA][BA] | b[BA]
[BA] → a[ABBA][A] | a[AAA][A] | b[A]
Конечно, в некоторых случаях можно построить сильную нормальную форму Грейбах, не используя общий алгоритм. Типичный
приём — разбиение длинного правила на два коротких по границе,
проходящей по внутреннему терминалу: правило
няется на правила
A → aα[bβ
] и [bβ]
→ bβ
A → aαbβ
заме-
. Например, правило

318 Глава 6. Нормальные формы КС-грамматик
A → aAbbBaCa можно заменить на группу правил
A → aA[bbBaCa] [aC a] → aCA
a
[bbBaCa] → b[bBaC a] Aa→ a
[bBaCa] → bB[aCa]
С помощью нормальной формы Грейбах можно показать, что
любой МП-автомат также можно преобразовать к очень простому
виду.
Теорема 168.
автомат
M
По любой КС-грамматикеGможно построить МП-
такой, чтоL(G) =
Le(M), дополнительно обладающий
тремя свойствами:
1) M содержит единственное состояние q0;
2) M
не содержит пустых команд, кроме, быть может, команды
q0, ε, z0→ q0, ε, причём в последнем случае z0не встречается в
правых частях команд;
3)
для каждой команды
q0, a, z → q0, α
выполняется неравенство
|α| 6 2.
Доказательство. ПустьG= (N,Σ
, P, S
) — КС-грамматика в
сильной нормальной форме Грейбах. Построим МП-автомат
M = ({q0}, Σ, N, δ, q0, S, ∅)
аналогично тому, как это было сделано доказательстве теоремы 128.
Главное отличие состоит в том, что новый автомат будет считывать
входной символ на каждом шаге, так как каждое правило грамматики начинается на терминал. Функция переходовδопределяется
следующим образом:
1) если S → ε ∈ P , то q0, ε, S → q0, ε ∈ δ;
2) если A → a ∈ P , то q0, a, A → q0, ε ∈ δ;
3) если A → aB ∈ P , то q0, a, A → q0, B ∈ δ;

§ 6.7. Нормальная форма Грейбах 319
4) если A → aBC ∈ P , то q0, a, A → q0, BC ∈ δ.
Автомат может распознать пустое слово, только если вGесть
правило
S → ε
. Поэтому
ε ∈ L(G
) тогда и только тогда, когда
ε ∈ Le(M). Для непустых слов нужно доказать вспомогательное
утверждение:
(
q0, a1. . . an, S)`n(
n
S ⇒
a1. . . anA1. . . Akтогда и только тогда, когда
l
q0, ε, A1. . . Ak). Утверждение проверяется непо-
средственной индукцией по длине вывода и вычисления. Приk= 0
из него следует, что
S ⇒
∗
a1. . . anтогда и только тогда, когда
l
(q0, a1. . . an, S) `∗(q0, ε, ε). Это и означает, что L(G) = Le(M).
Задачи
253. Приведите следующие грамматики к нормальной форме Грейбах:
(а) S → SS | S a | b
(б) S → Ab | SA | a
A → Ab | aa
254. Приведите следующие грамматики к сильной нормальной форме Грейбах:
(а) S → aSbAab | abba | bAbb
A → b | aBB | aSbS
B → bb | bSabSbA
(б) S → aSSSSSS | b
255.
Докажите, что любой КС-язык порождается некоторой КС-грамматикой
G
= (N,Σ
где A ∈ N , a ∈ Σ, α ∈ N∗, |α| 6 2.
256.
вил нет двух стоящих рядом нетерминалов. Докажите, что любой КС-язык
порождается операторной грамматикой.
257.
порождается КС-грамматикойG= (N,Σ
A → aαb, где a, b ∈ Σ, α ∈ N∗.
258. Завершите доказательство теоремы 168.
, P, S
) безε-правил, в которой все правила имеют вид
КС-грамматикаGназывается о п е р а т о р н о й , если в правых частях пра-
Докажите, что любой КС-язык, не содержащий слов длины меньше 2,
(в) S → aS | AB | Ba
A → Ab | SS
B → S a | aB | b
(в) S → aASASA | bBBB | a
A → bASASB | bS
B → bAS B | aS | a
S → ε,A → αa
, P, S
), в которой все правила имеют вид
,

320 Глава 7. Свойства КС-языков
Глава 7
Свойства КС-языков
§ 7.1. Лемма о разрастании для КС-языков
В параграфе 3.1 мы доказали лемму о разрастании для регулярных
языков. Аналогичный результат можно получить и для КС-языков.
Лемма о разрастании утверждает, что любое достаточно длинное
слово из КС-языка можно разбить на пять частей так, что вторую
и четвёртую части можно повторять произвольное число раз, и при
этом слово по-прежнему будет принадлежать языку.
Ле мма 169
КС-языкаLсуществует натуральное числоkтакое, что любое слово
z ∈ L
длины большеkможно представить в видеz=
выполняются три условия:
1) |vwx| 6 k;
2) |vx| 6= 0;
3) для любого i ∈ ω слово zi= uviwxiy принадлежит языку L.
Условие
Доказательство. Пусть языкLпорождается приведённой КС-
грамматикойG= (N,Σ
(Лемма о разрастании для КС-языков).Для любого
|vx| 6
= 0 можно заменить на более сильное условие
, P, S
). Обозначим черезlдлину самой длин-
uvwxy
так, что
|v| 6
= 0.
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
