
formal_language_theory / lectures / unit_4
.pdf
Теория формальных языков и трансляций
Глава 4.
Контекстно-свободные грамматики
1

§ 4.1. Упрощение контекстно-свободных грамматик
Вэтой главе мы
•опишем некоторые основные упрощения КС-грамматик;
•докажем несколько важных теорем о нормальных формах Хомского (N. Chomsky)
и Грейбах (S. Greibach);
•покажем, что существуют алгоритмы для определения, является ли язык, порождаемый КС-грамматикой, пустым, конечным или бесконечным.
2

Avram Noam Chomsky
born December 7, 1928
3

Упрощение контекстно-свободных грамматик
•определим так называемое свойство самовложенности КС-грамматик и покажем, что КС-язык нерегулярен тогда и только тогда, когда каждая КС-грамматика, порождающая его, обладает этим свойством.
•наконец, рассмотрим специальные типы КС-грамматик и языков, такие, как
последовательные и линейные грамматики.
4

Упрощение контекстно-свободных грамматик
Формальное определение КС-грамматики допускает структуры, которые в некотором смысле являются “расточительными”.
Например, словарь может включать нетерминалы, которые не используются в выводе хотя бы одной терминальной цепочки; или не запрещено иметь такое правило, как A A, и т. д.
Несколько последующих теорем дают ключ для исключения таких “излишеств”.
Будем предполагать, что КС-грамматики, рассматриваемые в этой главе, не содержат-правил.
5

Теорема 4.1. Существует алгоритм для определения, является ли язык, порождаемый данной КС-грамматикой, пустым.
Доказательство. Пусть G = (VN, VT, P, S) — cfg, и L = L (G).
Предположим, что L , т. е. существует вывод S * x, где x VT+.
Рассмотрим дерево, представляющее этот вывод. Пусть в нём есть путь с узлами n1 и n2, имеющими одну и ту же метку A VN, причём узел n1 расположен ближе к корню S,
чем узел n2 (рис. 4.1, a).
6

(a)
n1
A
a
n2 A
a
x1 = aaba
S |
(б) |
|
S |
|
|
|
|
a |
n2 |
A |
a |
|
B |
|
|
a |
|
|
|
|
|||
|
B |
|
||||||||
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
a |
|
|
|
|
|
|
||
|
|
|
|
|
|
|
||||
|
|
|
b |
|
|
|||||
|
|
|
|
|
|
|
|
|
||
B |
G = ({S, A, B}, {a, b}, |
|
|
|
|
|
||||
|
{S Aa, A aB, B Aa, B b}, S) |
|||||||||
|
|
|
||||||||
|
|
x = x3x1x4 |
|
|
|
|
|
|||
|
|
|
|
|
|
|
||||
b |
x3 = ; x4 = a |
|
|
|
|
|
Рис. 4.1. |
x2 = ab. |
|
Ret 9 |
7 |
|

Алгоритмическая разрешимость проблемы пустоты языка, порождаемого данной КС-грамматикой
Поддерево с корнем n1 представляет вывод
* |
|
|
представляет |
A x1. Поддерево с корнем n2 |
|||
|
|
|
|
вывод A |
* |
x2. |
|
|
|
Заметим, что x2 является подцепочкой цепочки x1, которая, впрочем, может совпадать с x1.
Кроме того, x = x3x1x4, где x3, x4 VT*, причём одна из них или обе могут быть пустыми
цепочками.
8

Алгоритмическая разрешимость проблемы пустоты языка, порождаемого данной КС-грамматикой
Если в дереве с поддерево с корнем n1 n2, то получим дерево представляющее вывод
корнем S заменить поддеревом с корнем
(см. рис. 4.1, б ),
|
|
|
S |
* |
x3x2x4. |
|
Так мы исключили, по крайней мере, один узел (n1) из исходного дерева вывода.
Если в полученном дереве имеется путь с двумя узлами, помеченными одним и тем же нетерминалом, процесс может быть повторен с деревом вывода S * x3x2x4.
9

Алгоритмическая разрешимость проблемы пустоты языка, порождаемого данной КС-грамматикой
Фактически процесс может повторяться до тех пор, пока в очередном дереве имеется путь, в котором находятся два узла, помеченных одинаково.
Поскольку каждая итерация исключает один или более узлов, а дерево конечно, то процесс в конце концов закончится.
10