Нормальні форми Хомського та Грейбах
Теорія: …
+ алгоритм: як позбутися ε-правил (ε-переходів) !!! + який сенс застосування (отримаємо нескорочуючі правила, ефективний синтаксичний аналіз)
Означення: Нетермінал КС-граматики називається -нетерміналом, якщо .
Алгоритм.Пошук -нетерміналів:
….
…. Пn
Тоді множина — множина -нетерміналів.
+ алгоритм: як позбутися лівої рекурсії + сенс застосування (ефективний синтаксичний аналіз – LL(k), тоді можлива однозначна (без повернень) побудова зліва-направо = лівостороння стратегія виводу)
Запропонуємо декілька прийомів, що дають можливість при побудові граматик уникнути лівої рекурсії. Розглянемо граматику зі схемою правил , яка має ліворекурсивний нетермінал . Замінимо схему правил новою схемою з трьома правилами
.
Теорія про НФ Хомського та Грейбах:
· визначення,
· можливо, алгоритм зведення,
o для Хомського:
§ виключити непродуктивні і недосяжні нетермінали
§ позбутися ε-продукцій (стандартним алгоритмом підстановки та виключення), та ввести нову аксіому, якщо ε виводиться в граматиці
§ для всіх терміналів ввести допоміжні нетермінали, відповідні правила (A ® a, B ® b) та виконати заміни
§ всі продукції з «довшими» за 2 символи правими частинами розбиваємо на декілька (довжина – 1), вводячи допоміжні нетермінали
§ якщо в правій частині продукції залишився 1 нетермінал, виконати його «каскадні»/«ланцюжкові» заміни
|
|
§
o для Грейбах:
§ виключити непродуктивні і недосяжні нетермінали
§ позбутися ε-правил (стандартним алгоритмом підстановки та виключення), та ввести нову аксіому, якщо ε виводиться в граматиці
§ позбутись лівої рекурсії
§ підставити замість нетерміналів на 1 місці в правих частинах їх праві частини згідно правил граматики
§
· застосування (навіщо вони потрібні?) …
Завдання 2.7.
Звести наступну КВ-граматику до нормальної форми Хомського:
S ® bS | pCD
C ® aaD | CCD
D ® ε
Розв’язок.
1) Нетермінал S присутній в правих частинах продукцій, тому додаємо продукцію S0®S, S0 – нова аксіома
2) Термінал b замінюємо на B, a замінюємо на А, p – на P, тобто вводимо нові нетермінали і замінюємо входження терміналів у правила на нові, щойно введені, нетермінали.
S ® BS | PCD
C ® AAD | CCD
D ® ε
Додаємо продукції A ® a, B ® b, P ® p
3) Всі продукції з правими частинами, довжина яких (l) більша за 2, «розкладаємо» на (l–1) продукції так, щоб у правих частинах було тільки по 2 нетермінальних символи, при цьому вводимо нові допоміжні нетермінали. Так, Q ®AA, W ® PC, E ® CC – нові правила, тоді:
вводимо також правила S ® WD, C ® QD, C ® ED
виключаємо правила S ® PCD, C ® AAD , C ® CCD
|
|
{Q, W, E} Î N – нові нетермінали
Отримали:
S ® BS | WD
C ® QD | ED
Q ® AA
W ® PC
E ® CC
D ® ε
A ® a, B ® b, P ® p
4) У нас є продукція D ® ε, тому позбуваємось e-нетерміналу стандартним способом (виключення з правих частин), отримуючи:
виключається правило D ® ε,
додаються: S ® W, C ® Q, C ® E
5) Маємо продукції з одним нетерміналом у правій частині: S ® W, C ® Q, C ® E, тому проводимо відповідну «каскадну підстановку»:
S ® W, W ® PC,
C ® Q, Q ® AA,
C ® E, E ® CC, отже, отримуємо нові правила: S ® PC, C ® AA, C ® CC, а старі S ® W, C ® Q, C ® E – виключаються.
6) Оскільки в правилі S0 ® S права частина теж закоротка, підставимо для S0 всі альтернативи для S. В результаті отримаємо граматику у нормальній формі Хомського, еквівалентну початковій:
S0 ® BS | WD | PC
S ® BS | WD | PC
C ® QD | ED | AA | CC
Q ® AA
W ® PC
E ® CC
A ® a, B ® b, P ® p
Завдання 2.8.
Звести наступну КВ-граматику до нормальної форми Хомського:
S ® bC | aD
C ® bCC | aS | a
D ® aDD | bS | b
P ® aD
Розв’язок.
1) Відкинемо недосяжні і непродуктивні нетермінали.
Ітераційно побудуємо множини досяжних:
R0 = {S}
R1 = {C,D,S}
R2 = {C,D,S} = R1 = R
та продуктивних нетерміналів:
P0={C,D}
P1={C,D,S,P}
P2={C,D,S,P} = P1=P
Тоді недосяжні нетермінали: N\R = {P}, а непродуктивних – немає: N\P = Æ
Тому правило P ® aD слід виключити з граматики і подальшого розгляду.
|
|
2) Нетермінал S присутній в правих частинах продукцій тому додаємо продукцію S0 ® S, S0 – нова аксіома граматики
3) Вводимо нові допоміжні нетермінали A та B, і в правилах b замінюємо на B, a замінюємо на А – отримуємо:
S ® BC | AD
C ® ACC | AS | A
D ® ADD | BS | B
Додаємо також продукції A ® a, B ® b
4) Вводимо допоміжні нетермінали для правил з довшими за 2 елементи правими частинами, а також відповідні правила для них: Q ® AC, W ® AD, C ® QC, D ® WD, виключаючи при цьому C ® ACC і D ® ADD ({Q, W} Î N)
5) Маємо продукції C ® A, A ® a, D ® B, B ® b, тому вводимо продукції C ® a, D ® b, натомість виключаємо C ® A, D ® B.
6) Отримуємо еквівалентну граматику у нормальній формі Хомського, підставивши у правило S0 ® S всі альтернативи для S:
S0 ® BC | AD
S ® BC | AD
C ® QC | AS | a
D ® WD | BS | b
Q ® AC
W ® AD
A ® a, B ® b
Завдання 2.9.
Звести наступну КВ-граматику до нормальної форми Хомського:
S ® aKd
K ® aKd | P | ε
P ® bPc | F | ε
Розв’язок.
1) Відкинемо недосяжні і непродуктивні нетермінали. F-непродуктивний.
2) Позбудемось ε–правил.
Замість K ® ε додаємо: K ® ad, S ® ad; замість P ® ε – додаємо P ® bc.
Отримаємо:
S ® aKd | ad
K ® aKd | ad | P
P ® bPc | bc
3) Замість правила K ® P (із закороткою правою частиною), враховуючи P ® bPc | bc, додамо нові правила: K ® bPc | bc
|
|
4) Вводимо допоміжні нетермінали та правила: A ® a, B ® b,D ® d,C ® c, отримуємо відповідно:
A ® a, B ® b,D ® d,C ® c
S ® AKD | AD
K ® AKD | AD | BC | BPC
P ® BPC | BC
5) Врешті, розбивши «довгі» праві частини правил шлязом введення допоміжних нетерміналів, отримаємо результуючу граматику у нормальній формі Хомського:
S ® XD | AD
K ® XD | AD | BC | YC
P ® YC | BC
A ® a, B ® b,D ® d,C ® c
X ® AK, Y ® BP
Завдання 2.10.
Звести наступну КВ-граматику до нормальної форми Хомського:
S ® aUbU | CCb | e
U ® S | C | ba
Розв’язок.
1) Відкинемо недосяжні і непродуктивні нетермінали: C-непродуктивний.
2) Введемо нову аксіому S0, оскільки символ S присутній в правих частинах правил, при цьому позбудемось ε–правила S ® e (S і U є ε–нетерміналами). Отримаємо:
S0 ® e | S
S ® aUbU | ab | abU | aUb
U ® S | ba
3) Додамо допоміжні нетермінали і правила: Ta ® a, Tb ® b, отримаємо:
S0 ® e | S
S ® TaUTbU | TaTb | TaUTb | TaTbU
U ® S | TbTa
Ta ® a, Tb ® b
4) Для довгих правих частин введемо допоміжні нетермінали, щоб розбити їх на частини:
S0 ® e | S
S ® AB | TaTb | ATb | TaB
A ® TaU
B ® TbU
U ® S | TbTa
Ta ® a, Tb ® b
5) Закороткі правила U ® S та S0 ® S заміняємо всіма можливими замінами S:
S0 ® e| AB| TaTb | ATb | TaB
S ® AB | TaTb | ATb | TaB
A ® TaU
B ® TbU
U ® AB | TaTb | ATb | TaB | TbTa
Ta ® a, Tb ® b
Таким чином отримаємо результуючу еквівалентну граматику у нормальній формі Хомського.
Завдання 2.11.
Звести наступну КВ-граматику до нормальної форми Хомського:
S ® aD | D
U ® bb | Cb
D ® e | Db | Ua
L ® UD
Розв’язок.
1) Оскільки C – непродуктивний, а L – недосяжний нетермінали, вхідна граматика еквівалентна наступній:
S ® aD | D
U ® bb
D ® e | Db | Ua
2) Оскільки граматика породжує, зокрема, порожнє слово, необхідно ввести нову аксіому S0 та правило S0 ® S | e.
3) Введемо допоміжні нетермінали і правила: A ® a, B ® b, отримаємо:
S0 ® S | ԑ
S ® AD | D
U ® BB
D ® ԑ | DB | UA
A ® a, B ® b
4) Позбавляємось e-правила D ® ԑ :
S0 ® S | ԑ
S ® AD | D | A
U ® BB
D ® DB | UA | B
A ® a, B ® b
5) Нарешті, для односимвольних правих частин робимо заміни: для S ® A і D ® B виконуємо заміни на відповідно термінали, а для S ® D – підставляємо всі альтернативи для нетермінала D:
S0 ® ԑ | AD | DB | UA | b | a
S ® AD | DB | UA | b | a
U ® BB
D ® DB | UA | b
A ® a, B ® b
Отримаємо результуючу еквівалентну граматику у нормальній формі Хомського.
Завдання 2.12.
Звести наступну КВ-граматику до нормальної форми Грейбах:
S ® AB
A ® ε | aC
B ® Bb | ε
C ® Cc | ε
Розв’язок.
1) Легко перевірити, що всі нетермінали суттєві, тобто досяжні й продуктивні: R0 = {S}, R1 = {S, A, B}, R2 = {S, A, B, C} = N; P0 = {A, B, C} P1 = {S, A, B, C} = N.
2) Позбудемось ε-переходів (ε-правил), для цього додамо правила, отримані шляхом підстановок ε-нетерміналів:
S ® B, S ® A, S ® ε, B ® b, C ® c, A ® a
та вилучимо ε-правила:
A ® ε, B ® ε, C ® ε
Отримаємо еквівалентну граматику:
S ® AB | A | B | ε
A ® aC | a
B ® Bb | b
C ® Cc | c
3) Позбудемось лівої рекурсії. Для цього правило
C ® Cc | c
замінемо сукупністю еквівалентних правил (ввівши новий нетермінал D):
C ® cD, D ® cD, D ® ε
Позбудемось отриманого ε-правила D ® ε:
додамо правила C ® c, D ® c
і одержимо: C ® cD | c, D ® cD | c
Аналогічно для B ® Bb | b :
B ® bF | b, F ® bF | b
В решті отримаємо:
S ® AB | A | B | ε
A ® aC | a
B ® bF | b, F ® bF | b
C ® cD | c, D ® cD | c
4) Для всіх правил, де у правій частині перший символ – нетермінал, робимо всі можливі для нього підстановки, а саме:
S ® a, S ® aC для S ® A
S ® b, S ® bF для S ® B
S ® aB, S ® aCB для S ® AB
вилучаючи при цьому самі такі правила, тобто:
S ® A, S ® B, S ® AB
Отримаємо еквівалентну даній граматику у нормальній формі Грейбах:
S ® aB | aCB | a | aC | b | bF | ε
A ® aC | a
B ® bF | b, F ® bF | b
C ® cD | c, D ® cD | c
Завдання 2.13.
Звести наступну КВ-граматику до нормальної форми Грейбах:
S ® aAC | BA
B ® Pk | ε
A ® a | aA
C ® c | cC
Розв’язок.
1) Знайдемо продуктивні нетермінали:
P0 = {A, B, C}
P1 = {S, A, B, C}
P2 = {S, A, B, C} = P1 = P
Отже, CP = {P} – непродуктивний нетермінал, тому виключаємо з граматики правило B ® Pk
2) Позбудемось ε-правила B ® ε, для цього додамо правило S ® A.
При цьому виключаємо продукції B ® ε та S ® BA, оскільки більше не залишається продукцій з нетерміналом B у лівій частині.
Отримаємо:
S ® aAC | A
A ® a | aA
C ® c | cC
3) У правилі S ® A заміняємо перший у правій частині нетермінал на всі можливі для нього альтернативи, тобто додаємо правила S ® a, S ® aA
В решті отримаємо еквівалентну граматику у нормальній формі Грейбах:
S ® aAC | a | aA
A ® a | aA
C ® c | cC
Завдання 2.14.
Звести наступну КВ-граматику до нормальної форми Грейбах:
S ® AS | ε
A ® aS | P | b
P ® Pc | b
Розв’язок.
1) Всі нетермінали граматики – суттєві, тобто досяжні і продуктивні.
2) Оскільки слово ε виводиться в граматиці, вводимо окрему нову аксіому, для якої будуть лише два правила, щоб відділити вивід слова ε від усіх інших можливих виводів у граматиці: S0 ® ε та S0 ® S. Також позбудемось ε-переходу S ® ε шляхом підстановки у інші правила, де S є у правих частинах, отримаємо:
S0 ® ε | S
S ® AS | A
A ® aS | P | b | a
P ® Pc | b
3) Позбудемось лівої рекурсії для нетермінала P, замінивши правила
P ® Pc | b
сукупністю правил
P ® bP1, P1 ® cP1, P1 ® ε
Далі позбудемось отриманого ε-правила P1 ® ε, для цього виконаємо можливі підстановки P1 і одержимо нові правила: P ® b та P1 ® c замість P1 ® ε, тобто в решті решт одержимо такі нові правила:
P ® bP1 | b
P1 ® cP1 | c
Отримаємо:
S0 ® ε | S
S ® AS | A
A ® aS | P | b | a
P ® bP1 | b
P1 ® cP1 | c
4) Підставляємо замість нетермінала P на першому місці правих частин правил слова, що безпосередньо вивдяться з P:
S0 ® ε | S
S ® AS | A
A ® aS | bP1 | b | a
P ® bP1 | b
P1 ® cP1 | c
аналогічно – для нетермінала A:
S0 ® ε | S
S ® aSS | bP1S | bS | aS | bP1 | b | a
A ® aS | bP1 | b | a
P ® bP1 | b
P1 ® cP1 | c
Оскільки нетермінали A та P стали в результаті перетворень недосяжними, виключимо їх з правил граматики – отримаємо граматику, еквівалентну початковій, у нормальній формі Грейбах:
S0 ® ε | aSS | bP1S | bS | aS | bP1 | b | a
S ® aSS | bP1S | bS | aS | bP1 | b | a
P1 ® cP1 | c
Завдання 2.15.
Звести наступну КВ-граматику до нормальної форми Грейбах:
S ® A | bD
D ® Ԑ | aa | CD
A ® u | ε | C
K ® Bf
Розв’язок.
1) Знайдемо недосяжні і непродуктивні нетермінали.
R0 = {S}
R1 = {S, A, D}
R2 = {S, A, D, C}
R3 = {S, A, D, C} = R2 = R
Отже, недосяжні нетермінали N\R = {K}, тобто нетермінал K виключаэмо з правил граматики. Щодо продуктивних нетерміналів:
P0 = {D, A}
P1 = {S, D, A}
P2 = {S, D, A} = P1 = P
Отже, непродуктивні нетермінали – N\P = {C} , тому виключаємо нетермінал C з граматикики також, залишиться:
S ® A | bD
D ® ε | aa
A ® u | ε
2) Оскільки нетермінал A – на першій позиції в правій частині правила S ® A, замінимо його можливими підстановками: A ® u | ε, отримаємо:
S ® u | ԑ | bD
D ® ε | aa
A ® u | ε
Тепер нетермінал A став недосяжним, отже, виключаємо його з граматики і отрумуємо:
S ® u | ԑ | bD
D ® ε | aa
3) Позбудемось ε-продукцій, замінивши входження ε-нетерміналів (S та D) у всіх правилах, а також ввівши нову аксіому S0 (для збереження можливості породження слова ε):
S0 ® S | ԑ
S ® u | bD | b
D ® aa
Отже, отримаємо еквівалентну початуовій граматику у нормальній формі Грейбах:
S0 ® ԑ | u | bD | b
S ® u | bD | b
D ® aa
Завдання 2.16.
Звести наступну КВ-граматику до нормальної форми Грейбах:
S ® c | aABU | cC
A ® Aa | bU | ԑ
B ® aa | Cc
U ® bA | BB | ԑ
M ® AB
Розв’язок.
1) Легко визначити, що C – непродуктивний, М – недосяжний нетермінали, тому виключимо їх з правил граматики:
S ® c | aABU
A ® Aa | bU | ԑ
B ® aa
U ® bA | BB | ԑ
2) Виключимо ԑ-переходи (A ® ԑ та U ® ԑ) з граматики, отримаємо:
S ® c | aABU | aBU | aAB | aB
A ® Aa | bU | b | a
B ® aa
U ® bA | BB | b
3) Позбавимось лівої рекурсії для нетермінала A:
S ® c | aABU | aBU | aAB | aB
A ® bUW | bW | aW
W ® aW | ԑ
B ® aa
U ® bA | BB | b
4) Залишилось позбутись ԑ-переходу W ® ԑ та першого входження нетерміналу B у правилі U ® BB (шляхом підстановки можливих виведень згідно продукцій граматики):
S ® c | aABU | aBU | aAB | aB
A ® bUW | bW | aW | bU | b | a
W ® aW | a
B ® aa
U ® bA | aaB | b
і ми отримали граматику у нормальній формі Грейбах, яка еквівалентна початковій.
Завдання для самостійної та контрольної роботи
……
Дата добавления: 2018-04-05; просмотров: 663; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!