Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

XVYggbpFw2

.pdf
Скачиваний:
2
Добавлен:
15.04.2023
Размер:
2.31 Mб
Скачать

S

1 B 2

1 2 == 1A 2

1A 2

1 2

Но тогда по нашему построению правило B

, где

получено вычерки-

ванием из

на нужном месте символа A, также можно использовать. А это

сразу дает слово

1 2

и сокращает вывод.

 

 

 

 

S

1 B 2

1 2 == 1 2

1 2

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

S

Отсюда теорема очевидна.

Процедура добавления к имеющимся правилам новых продукций, описанная в начале доказательства, является простой алгоритмической процедурой, показывающей, во-первых, как эффективно узнать, выводится в данной грамматике пустое слово или не выводится. Выводится тогда и только тогда, когда в результате получается правило S . Во-вторых, получается, что кроме этого правила остальные попросту не нужны и их можно выбросить.

Итак, алгоритм превращения КС-грамматики в свободную со-

стоит в следующем:

 

1.

Берем произвольное -правило A

и произвольное правило

B , содержащее в правой части нетерминал A. Вычеркиваем в слове у

правила

B , любой (один!) символ A. Полученное правило добавляем к

грамматике. Так делаем, пока получаются новые правила.

2. В полученной грамматике выкидываем все -правила кроме пра-

вила S , если такое найдется.

 

Пример 5.1. Дана грамматика

 

S

BACAA

 

A

 

 

BAA | ab | AC

Cb | AB

Надо привести ее к –свободной. В этом и следующих аналогичных примерах по умолчанию считаем, что список терминалов – это все, встречающиеся в продукциях, маленькие латинские буквы. Список нетерминалов - все, встречающиеся в продукциях, большие латинские буквы, причем S – стартовый нетерминал.

В грамматике имеется –правило A . Согласно описанному алгоритму на первом этапе надо добавлять новые правила за счет вычеркивания буквы A в правых частях, причем во всевозможных сочетаниях. В результате вместо первого правила получим

S BACAA | BCAA | BCA | BAC | BC

Вместо третьего

B AA | ab | AC | A | | C

Вместо четвертого

C b | AB | B

Появилось новое –правило B . Поэтому процесс продолжается за счет зачеркивания букв B. Первая строка преобразуется:

S BACAA | BCAA | BCA | BAC | BC | ACAA | CAA | CA | AC | C

Третья не изменится. Четвертая:

C b | AB | B | A |

Опять появилось новое –правило C . Вычеркиваем в правых частях букву C.

Получим, завершая первый этап, грамматику

S BACAA | BCAA | BCA | BAC | BC | ACAA | CAA | CA | AC | C | BAAA | BAA | BA | B | AAA | AA | A |

A

B AA | ab | AC | A | | C C b | AB | B | A |

На втором этапе просто выкидываем все –правила кроме S . Получим ответ:

S BACAA | BCAA | BCA | BAC | BC | ACAA | CAA | CA | AC | C | BAAA | BAA | BA | B | AAA | AA | A |

BAA | ab | AC | A | C

Cb | AB | B | A

Замечание 5.1. Если в грамматике имеется единственное –правило и оно есть

S .

то это не значит, что данная грамматика является –свободной. Это можно гарантировать в случае, когда нетерминал S не встречается ни в одной из продукций справа от знака . Но в общем случае надо проделать всю процедуру избавления от –правил. Рассмотрим еще пример.

Пример 5.2. Дана грамматика

S BSAS |

Aba

Bab

Приведем ее к –свободной. Применяя алгоритм получим: На этапе 1

S

BSAS | | BAS | BSA| BA

A

ba

B ab

Этап 2 ничего не меняет. Т.е. это уже –свободная грамматика.

Упражнения

5.1.Найти –свободную грамматику, эквивалентную данной.

a)S F|FEd|D|aAD A EDb

B BbA|FbSC|b C ED

D

EDD|ASd

FBA

G|adFdE|FBa

b)S dSdc

ADcaa

BDcAca|abb|E|A

CAFa|bb|aBc

ESF|d|

FaCd|aSGB

GbGCG

c) S |BDbAG|ddBS

Aca|FFC|b

BdCFSb|GS|c|F

CE|Dc

DAGFCD

EaDa|

F

GDDc

d)S F|

AbAGC

BEbaaC|CDDS

CdEc|SSS|a

D|GEE|c

EEcBF

FdEBa|

G

e) S

A|Ec

BFG

CEGAC

DCaA|Gbc|SbF|FcCB

EddG

FbS| |dD

GDcFF|F

6. УДАЛЕНИЕ ЦЕПОЧНЫХ ПРАВИЛ

Цепочными (или цепными) называются правила вида A B, где A, B – нетерминалы.

Теорема 6.1. Каждая КС-грамматика эквивалентна КСграмматике без цепочных правил.

Доказательство. Пусть G – произвольная КС-грамматика. Допустим, что G содержит цепочные правила. Расширяем набор правил G, для каждой пары правил A B и B . добавляя правило A . Эта процедура продолжается до тех пор, пока появляются новые правила. Очевидно, что новая грамматика эквивалентна исходной и мы ее обозначаем той же буквой G. Теперь вычеркиваем из правил G все цепочные. Получим искомую грамматику G1.

Докажем, что G и G1 эквивалентны. Допустим, что

L(G) и рас-

смотрим самый короткий вывод этой цепочки

с помощью таким образом

расширенного множества продукций.

 

 

 

 

 

 

 

 

 

S

 

 

 

 

 

Если этот вывод не использует цепочных правил, то он является вы-

водом в G1, а это то, что нам надо. Допустим, что в выводе использовалось

какое-то цепочное правило A

B,.

 

 

 

 

 

 

 

S

 

1 A 2

 

1 B 2

 

 

 

Проследим момент исчезновения символа B.

 

 

 

S

1 A 2

1 B 2

1 B 2

1 2

с помощью какого-то правила B

. По построению G среди правил этой

грамматики должно быть правило

A

. А оно позволяет сделать вывод

короче:

 

 

 

 

 

 

 

 

 

 

S

1 A 2

1

2

1 2

 

что приводит к противоречию и доказывает теорему.

 

 

 

Итак, процедура превращения грамматики в грамматику, свободную

от цепочных правил, состоит в следующем:

 

 

 

 

1. Берем произвольное цепочное правило A

 

B

и произвольное

правило B

. К правилам грамматики добавляем A

 

. Так делаем до

тех пор, пока получаются новые правила.

2. В полученной грамматике выкидываем все цепочные правила.

Пример. Дана грамматика

 

 

 

 

 

S

BC

 

 

 

B

C | ab

 

 

 

C

S | B

Надо найти эквивалентную грамматику без цепочных правил.

Этап 1. Добавляем правила:

 

B

S (по B

C, C

S);

 

B

B (по B

C, C

B); (такие правила можно и не добавлять)

C

BC (по C

S, S

BC);

C

C (по C

B, B

C); (и такие правила можно не добавлять)

C

ab (по C

B, B

ab);

B

BC (по B

C, C

BC);

Этап 2. Выкидываем цепочные правила и получаем ответ:

S BC

Bab

CBC

C

ab

B

BC

или, короче,

S BC

Bab | BC

Cab | BC

Упражнения

6.1.Найти КС-грамматику без цепочных правил, эквивалентную

данной.

a)S dCF

A aS|Sadb|cE

Bc

C|ED|FCD

DF|dC|CD

EabGd

FG|A|GEcB|

GBcB

b)S FdC| |CSDbA

ADaaS|bBC

BbSc|GFa

CdDb|bacb|

DcD|DSC|S|BSEA

EG

FCbGS

G

c) S |dbCaB

A

BGDG

CCccG|c|CBB|AFBGC|EbcGC

DC|cFbcc|b

EBaCB

FEBBG

G

 

d) S

E| |FSB

A

Cb

B

 

C|EdB

DGaAcd|CBc|b

ECSda|aAd

FA|DF

GcSaA

e)S bFEd

BC

C|CaFSS|dE

D|GACD|SdcGa

ECE|BaAbA

Fddc|cGaSa|

GbaG|C|cabSC

f)S EGdC|dSBBA|DdDS

AC

B|cEFC

Cbc|E

D|CdD

EBadGd

FBcCdD

G|a|DaGa

g)S cEBCd

AbS|D

B

CaEcSB|d

DG|DbaD

Eb|dCdC|GFcS

FGASC|DdD

G|cAcG

h)S D|C|d

AccAad

BS|bASG|

CBcB|dEC

DCCc

EF|Acb

F

G CaF|CC

7. ПРИВЕДЕННЫЕ ГРАММАТИКИ

Эквивалентные преобразования КС-грамматик в предыдущих параграфах позволяют делать следующие три вещи:

1.Сделать грамматику –свободной.

2.Исключить цепные правила.

3.Исключить бесполезные нетерминалы.

Возникает вопрос, можно ли все это сделать одновременно? Грамматика называется приведенной, если она одновременно –

свободна, не имеет цепочных правил и не имеет бесполезных нетерминалов.

Теорема 7.1. Каждая КС-грамматика эквивалентна приведенной КС-грамматике.

Доказательство. Сначала преобразуем грамматику так, чтобы она не имела бесполезных нетерминалов. Далее, по соответствующему алгоритму предыдущего параграфа преобразуем ее в –свободную. Вспомним, что по

этому алгоритму к грамматике добавляется правило A 1 1,

если в нее

уже входят правила A

1B 1 и B . После “насыщения” все

–правила,

кроме S , удаляются. Если вдруг в полученной грамматике появятся бесполезные нетерминалы, то надо проделать процедуру их удаления. Т.к. она заключается только в выкидывании лишних правил, то грамматика, очевидно, останется –свободной.

Замечание 7.1. При применении стандартной процедуры приведения грамматики к –свободной действительно некоторые нетерминалы могут стать непродуктивными. Проверьте это на следующем примере: S aB, B . Однако нетрудно доказать, что все достижимые нетерминалы останутся достижимыми.

Далее рассмотрим два случая.

1. В данной –свободной грамматике G нет правила S . Приводим ее к грамматике без цепочных правил. Вспомним, что в этом случае алгоритм состоит в добавлении правил A по уже имеющимся правилам A B и B . После “насыщения” все цепочные правила удаляются. Ясно, что при этом не появятся –правила. Если появятся бесполезные нетерминалы, то надо проделать процедуру их удаления. Т.к. она заключается только в выкидывании лишних правил, то цепочных правил не появится. Значит полученная грамматика будет искомой.

Замечание 7.2. При применении стандартной процедуры удаления цепочных правил некоторые нетерминалы могут стать недостижимыми. Проверьте это на следующем примере: S aA, A B, B a. Однако также, как в доказательстве правильности метода избавления от цепочных правил (см. п. 6) нетрудно показать, что все продуктивные нетерминалы останутся продуктивными.

2. В данной –свободной грамматике G есть правило S . В этом случае прямая процедура избавления от цепочных правил, как в предыдущем пункте, может внести во множество правил новые –правила и грамматика перестанет быть –свободной. А процедура избавления от –правил опять вернуть цепочные (см. пример в конце параграфа). Поэтому надо поступить немного хитрее.

Сначала рассмотрим G0 - это G без правила S . Проделав для G0 процедуру избавления от цепочных правил, мы получим эквивалентную ей грамматику, в которой нет ни цепочных, ни –правил. Обозначим и ее за G0. Введем новый нетерминал, допустим A и заменим в G0 все буквы S на

этот A. К полученному множеству правил добавим S

| A. По существу,

это означает, что мы обозначили через A все непустые слова языка нашей

грамматики. Легко видеть, что новая грамматика

–свободна и эквива-

лентна исходной. Но в ней есть единственное цепочное правило S A. Еще раз проделаем стандартную процедуру избавления от цепочных правил.

 

Среди правил G0

есть S

1 |

2 |...|

n. Оно превратится в A

1 | 2

|...|

n, где i – результат замены в слове

i буквы S на A. Процесс избавле-

ния

от цепочных правил даст дополнительно S

1 | 2 |...| n и ничего

больше. Среди этих правил нет ни цепочных, ни

–правил. Выкидываем

S A и получаем искомую грамматику.

 

 

 

 

 

Пример 7.1. Рассмотрим грамматику G:

 

 

 

 

 

 

S

| Ab | b

 

 

 

 

 

A SA | S | Ab | b

 

 

 

 

Очевидно, что в G нет бесполезных нетерминалов. Применим проце-

дуру приведения к –свободной грамматике. Добавляем продукции A

A| .

Других вариантов нет,

т.к. A

S, A

b уже имеются. Убрав A

A |

, по-

лучим ту же грамматику G. Значит G

–свободна.

 

 

 

 

Попробуем применить к G стандартную процедуру избавления от

цепочных правил. Единственное в ней цепочное правило A S с помощью

S

| Ab | b даст A

| Ab | b. Новым тут является только A

. В ре-

зультате получим грамматику

 

 

 

 

 

 

 

 

 

S

| Ab | b

 

 

 

A SA | | Ab | b

 

 

Цепного правила не стало, но появилось новое

–правило A

!

Применим к этой грамматике процедуру избавления от –правил.

Добавится только одно новое правило A

S и мы вернемся к тому,

с чего

начали – грамматике G !

 

 

 

Правильная процедура. Рассматриваем грамматику G0

 

S Ab |

b

 

 

A SA | S | Ab | b

 

 

и избавляемся в ней от цепочных правил. Правило A

S вместе с S

Ab |

b дает A Ab | b, где нет ничего нового. Значит надо просто выкинуть цепочное правило. В результате получим

S Ab | b

A SA | Ab | b

Вводим новый нетерминал B, в этих правилах заменяем S на B и до-

бавляем S | B. Получим

 

B

Ab | b

A BA | Ab | b

S

| B

Избавляемся от цепочного правила S B. В результате добавится S Ab | b. Убираем S B и получаем окончательный результат

S

|Ab | b

B

Ab | b

A BA | Ab | b

Упражнения

7.1.Для каждой из грамматик упражнения 6.1 найти эквивалентную приведенную грамматику.

7.2.Найти приведенную грамматику, эквивалентную данной.

a)S A

A SEac|B

B b|dcaE| C b|AD

DbEdcC

E|a|c|cA

Fa

GbE|cbFcS

b)S FSF|AFCC|CGcBS

Aa|

BFGD|

CDS|DbDGb|F

DDBbDa

EEddD

GA|ACdcG|bFc

c)S Baddc

AFbFGE|b

BASEEb|AG

CGA|DE|aEFD|ECEd

Dd|CSA

Ed|adFb

FdGE

G

d) S bDCE|aBb

AbS|aSCB| |bG

Bc|cd|S|CdcFb

CSCSd

DBdAc|S

E|FaSd

FS

GDbA

7.3.Найти приведенную грамматику, эквивалентную данной.

a) S |SA|B

ASa|

BAB|ab

b)S AB|ab

ASA|

BAB|

c) S |SabA

AaAE

BE|D|

Cb|Bab

Db|Da

ESB

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]