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

§ 6.3. Пустые правила 291
Теорема 155.
По любой КС-грамматике можно построить эквива-
лентную КС-грамматику без пустых правил.
Доказательство. ПустьG= (N,Σ
грамматика. Построим по ней множество
два случая: либо S ∈ E
Сначала предположим, что
, либо S /∈ E
кон
S /∈ E
, P, S
) — произвольная КС-
E
. Далее рассмотрим
кон
.
кон
. Удалим из грамматики
кон
G
все пустые правила, а в каждом непустом правиле вычеркнем всеми
возможными способами все нетерминалы из
E
так, чтобы правая
кон
часть оставалась непустой. Если правая часть правила содержит
нетерминалов из
заменяется на 2k−
E
и не содержит других символов, то это правило
кон
1 правил. Если же правая часть содержит другие
символы, то правило заменяется на 2kправил. Обозначим полученное множество правил через
доказать эквивалентность грамматикGи
ную грамматику
G2= (N,Σ
, P ∪P1, S
G2, содержащую все правила как изP, так и из
). Очевидно, чтоL(G)
P1, а грамматику — через
G1, введём вспомогатель-
⊆ L(G2),L(
G1. Чтобы
G1)
⊆ L(G2).
P1:
Докажем обратные включения L(G2) ⊆ L(G), L(G2) ⊆ L(G1). Тогда
из четырёх включений будет следовать равенство языковL(G) и
L(G1).
Сначала докажем, чтоL(
смотрим вывод
α0⇒
G
2
α1⇒
G2)
G
. . . ⇒
2
⊆ L(G
G
2
). Пусть
αn,
α0=S,
w ∈ L(G2). Рас-
αn=w. Нужно
перестроить этот вывод в вывод в грамматикеG. Проведём индукцию
по числу новых правил в выводе (то есть правил из P1\ P ).
Б а з и с и н д у к ц и и . Если новых правил нет, то вывод уже
является выводом в G.
Ш а г и н д у к ц и и . Пусть
α
получается из
i+1
αiпо новому пра-
вилу:
αi= βAγ, α
= βδγ, A → δ ∈ P1\ P.
i+1
k
Правило A → δ было получено из некоторого правила
A → δ1B1δ2B2. . . δkBkδ
k+1

292 Глава 6. Нормальные формы КС-грамматик
удалением нетерминалов
правило
Bj⇒
A → δ
∗
ε
для всехjпо лемме 154. Заменим участок вывода
G
имеет вид
Bj, где
Bj∈ E
A → δ1δ2. . . δkδ
,
δj∈(Σ∪ N
кон
. Поскольку
k+1
)∗, так что
Bj∈ E
кон
αi⇒ α
, то
i+1
на
βδ1B1δ2B2. . . δkBkδ
k+1
∗
γ ⇒
βδ1δ2B2. . . δkBkδ
G
⇒
∗
G
. . . ⇒
k+1
∗
G
∗
γ ⇒
G
βδ1δ2. . . δkδ
k+1
γ.
В получившемся выводе используется на одно новое правило меньше.
Значит, по индукционному предположению его можно перестроить в
вывод в G.
Теперь докажем, чтоL(
существует дерево выводаTв грамматике
перестроить это дерево в дерево вывода в грамматике
G2)
⊆ L(G1). Пусть
w ∈ L(G2). Тогда
G2с кронойw. Нужно
G1. Проведём
доказательство индукцией по числу пустых правил в T .
Б а з и с и н д у к ц и и . Если пустых правил нет, тоTуже является
деревом вывода в G1.
Ш а г и н д у к ц и и . Предположим, что в дереве применяется
правило
образом.
нет братьев, то
A → ε
. Построим последовательность вершин
viследующим
v0— вершина с сыном, помеченнымε. Если у вершины
v
i+1
— отец
vi, в противном случае
vi— последняя
v
вершина последовательности. Пусть получается последовательность
(
v0, v1, . . . , vn). В этой последовательности
vnне является корнем,
так как в противном случае изSбыло бы выводимо пустое слово.
Обозначим черезBнетерминал, которым помечен отец
левые братья вершины
вые — символами
нулю). Пустьα=
нетерминалом
вывод
An⇒
X1. . . Xk,β=
Ai, в частности,
∗
ε
, а значит, и вывод
G
2
пустых правил. Поэтому
B → αβ
. Удаляя ветвь, начинающуюся в вершине
vnпомечены символами
X1, . . . , Xk, а пра-
Y1, . . . , Yl(одно из чиселk,lможет быть равно
Y1. . . Yl. Пусть вершина
A0=A(рис. 43а). Тогда существует
∗
An∈ E
An⇒
по лемме 154, и в
кон
ε
, так как в
G
G1есть правило
vn, мы получаем
vn. Пусть
viпомечена
G2нет новых
i

§ 6.3. Пустые правила 293
B
α
A
A
A
n
n−1
1
β
B
αβ
A0= A
ε
(а) Исходное дерево T .
(б) Новое дерево T0.
Рис. 43. Удаление пустых правил.
дерево вывода
T0с кронойw, содержащее на одно пустое правило
меньше (рис. 43б). По индукционному предположению его можно
перестроить в дерево вывода без пустых правил.
Теперь рассмотрим случай
правил P1как в случае S /∈ E
S ∈ E
кон
. Сначала построим множество
кон
. Далее положим
G1= (N ∪ {S0}, Σ, P1∪ {S0→ S | ε }, S0).
Так как
правил грамматики
S0— новый символ, то он не встречается в правых частях
G1. В обеих грамматикахGи
G1выводимо пустое
слово. Рассмотрим произвольное непустое словоw. Оно выводимо
в
G1тогда и только когда, когда
могло применяться только правило
образуют грамматику для первого случая, поэтому
S ⇒
S0→ S
∗
w
, так как на первом шаге
G
1
. Но оставшиеся правила
w ∈ L(G1) тогда
и только тогда, когда w ∈ L(G).
Сл едствие 156. Любой КС-язык является КЗ-языком.

294 Глава 6. Нормальные формы КС-грамматик
Доказательство. Если устранить из КС-грамматикиε-правила,
то получившаяся грамматика будет удовлетворять всем пунктам
определения КЗ-грамматики.
Пр име р 92. Удалим ε-правила из грамматики с правилами
S → DS | ADaB | ABb C → C S | aD | b
A → DaD | BD | a D → ε | DD
B → ε | ab | SA
Вычислим последовательность множеств Ei.
E0= {B, D }, так как в грамматике есть правила B → ε и D → ε
E1= {B, D, A }, так как в грамматике есть правило A → BD
E2= E1, так как новые нетерминалы не добавляются
Итак,
E
=
{B, D, A }
кон
ловA,BиD. Так как
не нужно. Сначала мы удаляем из грамматики дваε-правила
D → ε
. Далее из каждого правила вычеркнем всеми возможными способами нетерминалыA,BиD. Например, из правила
два правила
A → BD | B | D
B → SA | S
. Применяя вычёркивание ко всем правилам, мы получаем
следующее множество правил:
, поэтому пустое слово выводимо из нетермина-
S /∈ E
, то добавлять новый начальный нетерминал
кон
B → SA
, а из правила
A → BD
получатся три правила
B → ε
получатся
и
S → DS | S | ADaB | DaB | AaB | ADa | aB | Da | Aa | a | ABb | Ab | Bb | b
A → DaD | Da | aD | a | BD | B | D
B → ab | SA | S
C → CS | aD | a | b
D → DD | D
Заметим, что после удаленияε-правил непустой нетерминалDстал
пустым, так как из него было выводимо только пустое слово. Также в
грамматике появились два правила
S → SиD → D
, которые никак не
влияют на возможности вывода в грамматике, их также можно удалить.
Пр име р 93. Удалим ε-правила из грамматики с правилами
S → AC | BB | Ca B → AA | ba
A → ε | B | aCC C → aA | bB | Sa

§ 6.3. Пустые правила 295
Вычисляя множества Ei, мы получаем
E0= {A } E2= {A, B, S }
E1= {A, B } E3= E2= E
кон
На этот раз
S0→ S | ε. Получается следующее множество правил:
S ∈ E
S0→ S | ε B → AA | A | ba
S → AC | C | BB | B | Ca C → aA | a | bB | b | Sa
A → B | aCC
, поэтому в грамматику добавляются правила
кон
Алгоритм, описанный в доказательстве теоремы 155, может привести к экспоненциальному увеличению размера грамматики. Пусть,
например, грамматика G содержит 2n + 1 правило
S → A1A2. . . An, A1→ a | ε, . . . , An→ a | ε
После удаления пустых правил в новой грамматике будет уже
2n+
n −
1 правило: 2n−
A1A2. . . An, а также останутсяnправил
1 правило получится из правила
A1→ a, . . . , An→ a
. Кроме
S →
того, все нетерминалы новой грамматики непусты. Несколько изменив
конструкцию, можно добиться линейного размера новой грамматики.
Теорема 157.
валентную КС-грамматику
По любой КС-грамматикеGможно построить экви-
G1без пустых правил такую, что
|G1|
=
O(|G|).
Доказательство. Сначала преобразуем грамматику
вивалентную бинарную грамматику
|G0|=O(|G|
). Далее применим к грамматике
G0по теореме 146, при этом
G0конструкцию из тео-
G
в эк-
ремы 157. Так как любое правило содержит не более двух символов
в правой части, то после вычёркивания получится не более четырёх
правил. Следовательно, |G1| = O(|G|).

296 Глава 6. Нормальные формы КС-грамматик
Пр име р 94. Удалим пустые правила из грамматики с правилами
S → A1A2. . . A
A1→ a | ε
. . .
An→ a | ε
Сначала перестроим грамматику в бинарную:
S → A1B
B1→ A2B
1
2
. . . . . .
B
→ A
Легко видеть, что
из E
, получаем следующие правила:
кон
n−3
B
n−2
E
n−2Bn−2
→ A
n−1An
содержит все нетерминалы. Вычёркивая символы
кон
S0→ S | ε
S → A1B1| A1| B
B1→ A2B2| A2| B
1
2
. . . . . .
B
→ A
n−3
B
n−2
→ A
n−2Bn−2
n−1An
| A
| A
n−1
n−2
| A
| B
n
Задачи
n
A1→ a | ε
A2→ a | ε
An→ a | ε
n−2
A1→ a
A2→ a
An→ a
233. Удалите пустые правила из следующих КС-грамматик:
(а) S → aA | bC b | DASD
A → Ab | CD | DC | aS
B → BA | CSS | BB
C → ε | DD | Sbb
D → CCC | CaS | b
234.
Докажите, что
вывода высоты не более i + 1 с пустой кроной в грамматике GA.
235.
Докажите, что если КС-грамматикаGне содержит бесполезных нетермина-
лов, а
G1получается изGудалением пустых правил по алгоритму из теоремы 155,
то G1не содержит недостижимых нетерминалов.
A ∈ Eiтогда и только тогда, когда существует полное дерево
(б) S → aS | AbA | BBD
A → aSB | aBC | Sb
B → ε | BD | a
C → aB | BC | S
D → ε | BB | aA | B

§ 6.4. Цепные правила 297
236.
Предложите эффективную реализацию алгоритма для удаления пустых
правил из КС-грамматики и оцените её временную сложность.
§ 6.4. Цепные правила
Опишем ещё одно полезное преобразование КС-грамматик, связанное с цепными правилами.
Оп ределен ие 103. Ц е п н о е правило — это правило вида A →
B, где A и B — нетерминалы.
Далее мы будем считать, что грамматика не содержитε-правил.
Для каждого нетерминалаAмы найдём нетерминалы, выводимые
изBс помощью только цепных правил. Для этого для каждого
нетерминала A построим последовательность множеств Ci(A):
C0(A) = {A },
C
(A) = Ci(A) ∪{B ∈ N : существует правило
i+1
C → B такое, что C ∈ Ci(A) }.
Как и ранее доказывается, что для каждого нетерминалаAсуществует множество
C
(A), начиная с которого последовательность
кон
Ci(A) не меняется.
Ле мма 158.
тогда, когда B ∈ C
ПустьA,B— нетерминалы.
(A).
кон
A ⇒∗B
тогда и только
Доказательство. Пусть A ⇒iB. Проведём индукцию по i.
Б а з и с и н д у к ц и и . Если
A ⇒0B
, тоA=B. По определению
A ∈ C0(A).
Ш а г и н д у к ц и и . Пусть
нет пустых правил, то вывод имеет вид
нетерминалаC. По индукционному предположению
кроме того, в грамматике есть правило
в C
(A) на следующем шаге.
кон
A ⇒
i+1
B
. Поскольку в грамматике
A ⇒iC ⇒ B
для некоторого
C ∈ C
C → B
. Значит,Bпопадает
кон
(A),

298 Глава 6. Нормальные формы КС-грамматик
Наоборот, пусть
B ∈ C
(A). Это значит, что
кон
B ∈ Ci(A) для
некоторогоi. Выберем наименьшее из такихiи проведём индукцию.
Б а з и с и н д у к ц и и . Если B ∈ C0(A), то A = B и A ⇒0B.
Ш а г и н д у к ц и и . Пусть
ществует нетерминалCтакой, что
правило
C → B
. По индукционному предположению
B ∈ C
i+1
(A),
B /∈ Ci(A). Тогда су-
C ∈ Ci(A) и в грамматике есть
A ⇒∗C
, следо-
вательно, A ⇒∗B.
Теорема 159.
вивалентную КС-грамматику
По любой КС-грамматикеGможно построить эк-
G1без цепных правил такую, что
|G1| = O(|G|2).
Доказательство. ПустьG= (N,Σ
, P, S
) — произвольная КСграмматика. По теореме 155 можно считать, что в ней нет пустых
правил. Построим для каждого нетерминалаAмножество
Построим новое множество правил
удалим изPвсе цепные правила. Если
α ∈ P
G1= (N,Σ
не является цепным, то добавим в
, P1, S
). Чтобы доказать эквивалентность грамматикGи
P1следующим образом. Сначала
B ∈ C
(A) и правило
кон
P1правило
A → α
C
(A).
кон
B →
. Пусть
G1, воспользуемся тем же приёмом, что и в теореме 155. Построим
КС-грамматику
G2= (N,Σ
, P ∪P1, S
) и докажем, чтоL(
G2)
⊆ L(G
L(G2) ⊆ L(G1).
Сначала докажем, чтоL(
рим вывод
α0⇒
G
α1⇒
2
G
. . . ⇒
2
G2)
⊆ L(G
αn,
G
2
). Пусть
α0=S,
w ∈ L(G2). Рассмот-
αn=w. Перестроим
его в вывод в грамматике G1индукцией по числу новых правил.
Б а з и с и н д у к ц и и . Если новых правил нет, то вывод уже
является выводом в G.
Ш а г и н д у к ц и и . Пусть
вилу:
αi=
βAγ,α
i+1
=
βδγ,A → δ ∈ P1\ P
ствует нетерминалBтакой, что
B ∈ C
кон
(A), то
A ⇒∗B
по лемме 158. Заменим один шаг
на последовательность шагов
α
i+1
B ∈ C
βAγ ⇒
получается из
. По построению суще-
(A),
кон
∗
βBγ ⇒Gβδγ
G
B → δ ∈ P
αiпо новому пра-
. Поскольку
αi⇒
α
i+1
G
2
. В новом выводе
используется на одно новое правило меньше, значит, по индукцион-
),

§ 6.4. Цепные правила 299
ному предположению его можно перестроить в вывод в грамматике
G.
Теперь докажем, чтоL(
существует дерево выводаTв
G2)
⊆ L(G1). Пусть
w ∈ L(G2). Тогда
G2с кронойw. Перестроим его в
дерево вывода в G1индукцией по числу цепных правил.
Б а з и с и н д у к ц и и . Если цепных правил нет, то дерево уже
является деревом вывода в G1.
Ш а г и н д у к ц и и . Пусть в дереве используется цепное пра-
вило
B → A
образом.
ственный сын и он помечен нетерминалом, то
в противном случае
Пусть получается последовательность (
стья помечены терминалами, то
Пусть вершины
в частности,
X1, X2, . . . , Xk. Обозначим
дереваTвершины
v0в том же порядке (рис. 44б). Поскольку
правило
но, полученное дерево
. Построим последовательность вершин
v0— это вершина, помеченнаяB. Если у
v
i+1
vi— последний элемент последовательности.
v0, v1, . . . , vn). Поскольку ли-
vn— внутренняя вершина дереваT.
v0, v1, . . . , vnпомечены нетерминалами
A0=B,
A1=A. Пусть сыновья
vnпомечены символами
X1X2. . . Xkчерезα(рис. 44а). Удалим из
An→ α
v1, . . . , vn, а всех сыновей
, то в
G2есть также правило
vnсделаем сыновьями
∗
B ⇒
G
B → α
T0является деревом вывода словаwв
viследующим
viесть един-
— этот сын
A0, A1, . . . , An,
Anи в
2
G2есть
. Следователь-
vi,
G2и
содержит меньше цепных правил, чем дерево T . По индукционному
предположению
T0можно перестроить в дерево вывода в грамматике
G1.
Теперь оценим размер грамматики
G1. Удалениеε-правил приво-
дит к линейному увеличению размера грамматики. При подстановке
каждое правило может быть продублировано не более чемkраз в
худшем случае, гдеk— число нетерминалов, для которых есть хотя
бы одно правило вывода. Поэтому общее число правил не превосходит
k|P |
. Поскольку
k 6 |G|и|P | 6 |G|
, то размер грамматики не
превосходит O(|G|2).

300 Глава 6. Нормальные формы КС-грамматик
A
A
A
A
0
1
n−1
n
A
0
α
α
(а) Исходное дерево T .
(б) Новое дерево T0.
Рис. 44. Удаление цепных правил.
Пр име р 95. Удалим цепные правила из грамматики с правилами
S → AB | B | SS | a C → bA | bB
A → B | aDD D → Sb | aDS | C
B → A | ba
Вычислим последовательность множеств Ci(S).
C0(S) = { S } по определению
C1(S) = { S, B }, так как в грамматике есть правило S → B
C2(S) = { S, B, A }, так как в грамматике есть правило B → A
C3(S) = C2(S), так как новые нетерминалы не добавляются
Применяя эту же процедуру к остальным нетерминалам, мы получим
следующие множества:
C
(S) = { S, B, A } C
кон
C
(A) = {A, B } C
кон
C
(B) = { B, A }
кон
(C) = {C }
кон
(D) = {D, C }
кон
Теперь для каждого нетерминала скопируем все нецепные правила
нетерминалов из соответствующего множества
C
. Например, для нетер-
кон
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
