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

§ 4.3. Нормальная форма Грейбах

Определение 4.4. Говорят, что КС-

грамматика G = (VN, VT, P, S) представлена в

нормальной форме Грейбах, если каждое её правило имеет вид

A a , где a V , V * .

T N

Для доказательства того, что всякая КСграмматика может быть приведена к нормальной форме Грейбах, нам потребуется обосновать эквивалентность используемых при этом преобразований.

61

Лемма 4.2 — о подстановке.

Пусть G = (VN, VT, P, S) — cfg,

A 1B 2 P, A, B VN , 1, 2 V *, и

{B i i V , i =1, 2,..., m} — множе-

ство всех B-порождений, т. е. правил с нетерминалом B в левой части.

Пусть грамматика G1= (VN, VT, P1, S) получается из грамматики G отбрасыва-

нием правила A 1B 2 и добавлением правил вида A 1 i 2, i =1, 2,..., m.

Тогда L(G) = L(G1).

Ret 75 Ret 78 Ret 80 Ret 81 Ret 122

62

Лемма о подстановке

Доказательство.

I. Докажем, что L(G1) L(G).

 

 

 

Пусть S

*

*

G

x, x VT .

 

1

 

Использование в этом выводе правила

A 1 i 2 P1\ P

равносильно двум шагам вывода в G:

A G

1 B 2

G

1 i 2.

Шаги вывода в грамматике G1, на которых используются другие правила, общие для двух этих грамматик, являются шагами

вывода в грамматике G. Поэтому S * x.

G

63

Лемма о подстановке

II. Докажем, что L(G) L(G1).

Пусть S * x. G Если в этом выводе используется правило

A 1B 2 P \ P1,

то рано или поздно для замены B будет

использовано правило вида

B i P..

Эти два шага вывода в грамматике G

равносильны одному

A G1

шагу вывода в G1:

1 i 2.

64

Лемма о подстановке

Шаги вывода в грамматике G, на которых используются другие правила, общие для двух грамматик, являются шагами вывода в грамматике G1.

Поэтому S * x. G1 Что и требовалось доказать.

65

Лемма 4.3 — об устранении левой рекурсии.

Пусть G = (VN, VT, P, S) — КСграмматика,

{A A i A VN, i V , i = 1, 2, ..., m}

множество всех леворекурсивных A-порождений, {A j j = 1, 2, ..., n} — множество всех прочих

A-порождений.

Пусть G1 = (VN {Z}, VT, P1, S) — КС-

грамматика, образованная добавлением нового нетерминала Z и заменой всех A-порождений

правилами:

 

1) A j ,

2) Z i ,

A j Z, j = 1, 2, ..., n;

Z i Z, i = 1, 2,..., m.

Тогда L(G1) = L(G).

 

Ret 74 Ret 76 Ret 80 Ret 81 Ret 84 Ret 124

66

 

Об устранении левой рекурсии

Доказательство. Прежде всего заметим, что посредством левосторонних выводов в грамматике G при использовании одних лишь A-порождений порождаются множества вида

{ 1, 2,..., n}{ 1, 2,..., m}*,

и это является в точности множеством, порождаемым правилами грамматики G1, имеющими A или Z в левых частях.

67

Об устранении левой рекурсии

I. Докажем, что L(G) L(G1). Пусть x L(G). Левосторонний

можем перестроить Именно, каждый

в вывод S * G раз, когда1

x.

вывод S * x мы G

в левостороннем

выводе встречается последовательность шагов:

tA

tA i1 tA i2 i1

 

...

tA ip... i2 i1

 

G

 

 

G

 

 

G

 

 

G

*

 

 

 

G

 

 

 

 

 

 

V

*

 

 

 

 

 

 

 

G

t j ip... i2 i1 (t

T

, V

 

),

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

заменим их последовательностью шагов:

 

 

 

tA

 

t j Z

t j ip Z

... t j

ip ... i

2 Z

 

G

 

G

 

 

1

 

G

1

G

1

 

G

1

 

 

 

1

 

 

t j ip

... i2 i1 .

 

 

 

 

 

 

 

 

 

 

 

 

G

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

образом

 

вывод

является

Полученный таким

 

выводом цепочки x в грамматике G1, хотя и не левосторонним. Следовательно, x L(G1).

68

Об устранении левой рекурсии

II. Докажем, что L(G1) L(G).

Пусть x L(G1). Рассмотрим левосторонний

 

 

 

 

 

вывод S

*

 

x,

и перестроим его в

вывод в

G

 

 

1

 

 

 

 

грамматике G следующим образом.

 

Всякий

раз,

как Z появляется в

сентен-

циальной форме, мы приостанавливаем левосторонний порядок вывода, и вместо того, чтобы производить замены нетерминалов в цепочке , предшествующей Z, займемся замещением Z с помощью правил вида Z Z.

69

Об устранении левой рекурсии

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

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

Результат этого, уже не левостороннего, вывода будет тем же самым, что и при исходном левостороннем выводе в грамматике G.

70

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