Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Теория автоматов и формальных языков. Учебник.pdf
Скачиваний:
1
Добавлен:
08.09.2026
Размер:
2 Мб
Скачать
☆
§ 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.
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]