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