Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
57
Добавлен:
16.04.2015
Размер:
912.3 Кб
Скачать

Алгоритмическая разрешимость проблемы пустоты языка, порождаемого данной КС-грамматикой

Если в грамматике G имеется m нетерминалов, то в полученном дереве все ветви будут иметь длину (подразумевается, что длина ветви измеряется числом дуг, её составляющих) не больше m, ибо в противном случае на длинной ветви неминуемо встретились бы два узла с идентичными метками.

11

Алгоритмическая разрешимость проблемы пустоты языка, порождаемого данной КС-грамматикой

Алгоритм, определяющий, является ли язык L(G) пустым, можно организовать следующим образом.

Шаг 1. Начать построение коллекции деревьев вывода с единственного дерева, представленного только корнем — узлом с меткой S.

12

Алгоритмическая разрешимость проблемы пустоты языка, порождаемого данной КС-грамматикой

Шаг 2. Добавить к коллекции любое дерево, которое может быть получено из дерева, уже имеющегося в коллекции, посредством применения единственного правила, при условии, что образующееся дерево не имеет ни одной ветви, длиннее m, и если такого ещё нет в коллекции.

Поскольку число таких деревьев конечно, то процесс в конце концов закончится.

13

Алгоритмическая разрешимость проблемы пустоты языка, порождаемого данной КС-грамматикой

Шаг 3. Если в построенной коллекции есть хотя бы одно дерево, представляющее вывод терминальной цепочки, то язык L(G) не пуст. Иначе ― язык L(G) пуст.

Требуемый алгоритм построен и теорема доказана.

14

О продуктивости нетерминалов в cfg

Теорема 4.2 о продуктивности.

Для любой КС-грамматики G = (VN, VT, P, S), порождающей непустой язык, можно найти эквивалентную КС-грамматику G1, в которой для любого нетерминала A существует терминальная цепочка x,

 

A x.

такая, что

*

G

 

1

Доказательство. Для каждого нетерминала A VN рассмотрим грамматику

GA = (VN, VT, P, A).

Ret 20 Ret 88 Ret 102

15

О продуктивости нетерминалов в cfg

Если язык L(GA) пуст, то мы удалим A из алфавита VN, а также все правила, использующие A в правой или левой части.

После удаления из G всех таких нетерминалов и правил мы получим новую

грамматику

G1 = (VN1 , VT, P1, S ),

где VN1 и P1 — оставшиеся нетерминалы и правила. Ясно, что L(G1) L(G), поскольку вывод в G1 есть также вывод в G.

16

О продуктивости нетерминалов в cfg

Предположим теперь, что существует терминальная цепочка x L(G), но x L(G1).

Тогда вывод

S

 

 

 

*

 

 

G

тенциальную форму

x

должен включать сен-

вида 1A 2, в которой

A V

\ V

N

 

Однако

некоторая

1

,

 

S

 

A

 

x x x

 

x.

 

 

 

 

N

 

т. е.

 

G

1

 

2

*

1

2

3

 

 

 

 

 

*

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

G

 

 

 

 

 

 

тогда

 

должна

 

существовать

терминальная

цепочка

x2,

такая,

что A * x2 , — факт, противоречащий пред-

G

положению о том, что L(GA) = . Что и требовалось доказать.

17

О продуктивости нетерминалов в cfg

Определение 4.1. Нетерминалы из VN1 при-

нято называть продуктивными.

В дополнение к исключению нетерминалов, из которых невозможно вывести ни одной терминальной цепочки, мы можем также исключать нетерминалы, которые не участвуют ни в каком выводе сентенциальной цепочки. Такие нетерминалы называют-

ся недостижимыми.

18

О приведённых cfg

Теорема 4.3 о приведённости.

Для любой данной КС-грамматики, порождающей непустой язык L, можно найти КС-грамматику

G = (VN, VT, P, S),

порождающую язык L, такую, что для каждого её нетерминала A существует вывод вида

S * x1Ax3

G

* G

x1x2x3, где

x1, x2, x 3

V

*

 

T

.

Ret 25 Ret 124

19

О приведённых cfg

Доказательство. Принимая во внима-

ние теорему

1

, VT,

G1 = (VN

4.2, пусть L = L(G1), где

P1, S ) — КС-грамматика, все

нетерминалы которой продуктивные.

 

 

1A 2

, где 1, 2 V

,

 

Если S

*

то суще-

 

*

 

 

 

 

G

 

 

 

 

 

1

 

 

 

 

ствует вывод

 

 

 

S * G1 поскольку

1A 2

 

x1Ax3

 

*

 

 

G

 

 

1

 

терминальные

* x1x2x3, G1 цепочки

могут

быть выведены из A и из всех нетерминалов, появляющихся в 1 и 2.

20

Соседние файлы в папке lectures