
43
Глава 4
КОНТЕКСТНО-СВОБОДНЫЕ ГРАММАТИКИ
§ 4.1. Упрощение
контекстно-свободных грамматик
В этой главе мы опишем некоторые основные упрощения КС-грамматик и
докажем несколько важных теорем о нормальных формах Хомского и Грейбах.
Мы также покажем, что существуют алгоритмы для определения, является ли
язык, порождаемый КС-грамматикой, пустым, конечным или бесконечным.
Будет определено так называемое свойство самовложенности КС-грам-
матик и показано, что КС-язык нерегулярен тогда и только тогда, когда каждая
КС-грамматика, порождающая его, обладает этим свойством.
Наконец, мы рассмотрим специальные типы КС-грамматик, такие, как по-
следовательные и линейные грамматики.
Формальное определение КС-грамматики допускает структуры, которые в
некотором смысле являются “расточительными”. Например, словарь может
включать нетерминалы, которые не могут использоваться в выводе хоть какой-
нибудь терминальной цепочки; или в множестве правил не запрещено иметь та-
кое правило, как A → A. Мы докажем несколько теорем, которые показывают,
что каждый КС-язык может порождаться КС-грамматикой специального вида.
Более того, будут даны алгоритмы, которые для любой КС-грамматики находят
эквивалентную КС-грамматику в одной из заданных форм.
Прежде всего мы докажем результат, который важен сам по себе. Будем
предполагать, что КС-грамматики, рассматриваемые в этой главе, не содержат
ε-правил.
Теорема 4.1. Существует алгоритм для определения, является ли язык, по-
рождаемый данной КС-грамматикой, пустым.
Доказательство. Пусть G = (V
N
, V
T
, P, S) — контекстно-свободная грамма-
тика. Предположим, что S x для некоторой терминальной цепочки x. Рассмот-
рим дерево вывода, представляющее этот вывод. Предположим, что в этом де-
реве есть путь с узлами n
1
и n
2
, имеющими одну и ту же метку A. Пусть узел n
1
расположен ближе к корню S, чем узел n
2
(рис. 4.1, a).
Поддерево с корнем n
1
представляет вывод A x
1
цепочки x
1
. Аналогично
поддерево с корнем n
2
представляет вывод A x
2
цепочки x
2
. Заметим, что x
2
яв-
ляется подцепочкой цепочки x
1
, которая, впрочем, может совпадать с x
1
. Кроме
того, цепочка x = x
3
x
1
x
4
, где x
3
,x
4
∈Σ
*
, причем одна из них или обе могут быть
пустыми цепочками. Если в дереве с корнем S мы заменим поддерево с корнем
n
1
поддеревом с корнем n
2
, то получим дерево (см. рис. 4.1, б), представляющее