- •М. С. Нікітченко теорія програмування Частина 1
- •1. Формалізація простої мови програмування
- •1.1. Неформальний опис простої мови програмування
- •1.2. Формальний опис синтаксису мови sipl
- •1.3. Формальний опис семантики мови sipl
- •1.3.2. Функції
- •1.3.3. Композиції
- •1.3.4. Програмні алгебри
- •1.3.5. Визначення семантичних термів
- •1.3.6. Побудова семантичного терму програми
- •1.3.7. Обчислення значень семантичних термів
- •1.3.8. Загальна схема формалізації мови sipl
- •1.4. Властивості програмної алгебри
- •2. Розвиток основних понять програмування
- •2.1. Аналіз словникових визначень поняття програми
- •2.2. Розвиток поняття програми з гносеологічної точки зору
- •2.3. Розвиток основних понять програмування
- •2.3.1 Початкова тріада понять програмування
- •2.3.2. Тріада прагматичності програм
- •2.3.3. Тріада основних понять програмування
- •2.3.4. Пентада основних понять програмування
- •2.4. Розвиток основних програмних понять
- •2.4.1. Тріада основних програмних понять
- •Малюнок 2.7. Програма як діалектичне заперечення проблеми
- •2.4.2. Пентада основних програмних понять
- •2.5. Сутнісні та семіотичні аспекти програм
- •2.6. Програми і мови
- •2.7. Пентада програмних понять процесного типу
- •3. Формалізація програмних понять
- •3.1. Теоретико-функціональна формалізація
- •3.2. Класи функцій
- •3.3. Програмні системи
- •3.4. Рівні конкретизації програмних систем
- •4. Синтактика: формальні мови та граматики
- •4.1. Розвиток понять формальної мови та породжуючої граматики
- •4.2. Визначення основних понять формальних мов
- •4.3. Операції над формальними мовами
- •4.4. Породжуючі граматики
- •4.5. Приклад породжуючої граматики та її властивості
- •4.6. Ієрархія граматик Хомського
- •4.7. Автоматні формалізми сприйняття мов
- •4.7.1. Машини Тьюрінга
- •4.7.2. Еквівалентність машин Тьюрінга та породжуючих граматик
- •4.7.3. Лінійно-обмежені автомати
- •4.7.4. Магазинні автомати
- •4.7.5. Скінченні автомати
- •4.8. Методи подання синтаксису мов програмування
- •4.8.1. Нормальні форми Бекуса–Наура
- •4.8.2. Модифіковані нормальні форми Бекуса–Наура
- •4.8.3. Синтаксичні діаграми
- •4.9. Властивості контекстно-вільних граматик
- •4.9.1. Видалення несуттєвих символів
- •4.9.2. Видалення -правил
- •4.9.3. Нормальна форма Хомського
- •4.9.4. Нормальна форма Грейбах
- •4.9.5. Рекурсивні нетермінали
- •4.10. Властивості контекстно-вільних мов
- •4.11. Операції над формальними мовами
- •4.12. Дерева виводу
- •4.13. Однозначні та неоднозначні граматики
- •4.14. Розв’язні та нерозв’язні проблеми кв-граматик та мов
- •4.15. Рівняння в алгебрах формальних мов
- •5. Теорія рекурсії (теорія найменшої нерухомої точки)
- •5.1. Рекурсивні визначення та рекурсивні рівняння
- •5.2. Частково впорядковані множини, границі ланцюгів та -області
- •5.3. Неперервні відображення
- •5.4. Теореми про нерухомі точки
- •5.5. Конструювання похідних -областей
- •5.6 Властивості оператора найменшої нерухомої точки
- •5.7. Застосування теорії ннт
- •5.7.1. Уточнення синтаксису мов програмування
- •5.7.2. Семантика мов програмування
- •5.7.3. Рекурсивні розширення мови sipl
4.6. Ієрархія граматик Хомського
Дослідження будь-якого класу предметів, як правило, починається з їх класифікації. Це методологічне зауваження стосується і граматик. Однією з перших була класифікація, запропонована Н. Хомським. Суть цієї класифікації полягає в поступових обмеженнях, що накладаються на праві та ліві частини продукцій. Визначені Хомським чотири типи граматик виявились інваріантними відносно різних уточнень породжуючих граматик. Крім того, цим типам граматик природнім чином відповідають типи автоматів, що розпізнають (сприймають) формальні мови.
Визначення 4.20.
Граматиками типу 0 називають довільні породжуючі граматики загального виду, що не мають жодних обмежень на правила виводу.
Граматиками типу 1 (нескорочуючими граматиками) називають породжуючі граматики, кожне правило яких має вигляд α→β, де |α||β| (α(NT)*N(NT)*, β(NT)+).
Граматиками типу 2 (контекстно-вільними граматиками, КВ-граматиками) називають породжуючі граматики, кожне правило яких має вигляд A→β, де AN, β(NT)*.
Граматиками типу 3 (праволінійними граматиками) називають породжуючі граматики, кожне правило яких має вигляд A®αB або A®α, де A, BÎN, αÎTÈ{}. До граматик типу 3 відносять і ліволінійні граматики, кожне правило яких має вигляд A®Bα або A®α, де A, BÎN, αÎTÈ{}.
Приклад 4.12. Граматика G3 з попереднього підрозділу є граматикою типу 0. Якщо з цієї граматики видалити правило P2, вона стане граматикою типу 1, бо не буде скорочуючих правил. Граматика з правилами {S®AR, R®bRc, R®, A®aA, A®} є контекстно вільною граматикою (типу 2), а її підграматика {A®aA, A®} є праволінійною граматикою (типу 3).
Кожному типу граматик відповідають мови, яким будемо приписувати той же тип, що має граматика, яка її породжує.
Рисунок 4.3. Співвідношення типів граматик
Error: Reference source not found 4.3 демонструє співвідношення типів граматик. Як бачимо, граматики типів 2 та 3 не є підкласами граматик типу 1. Це викликано тим, що наведені класи граматик мають скорочуючі правила виду A®, які заборонені в граматиках типу 1. Як буде показано далі, ці відмінності не дуже позначаються на класах мов, породжуваних граматиками типів 2 та 3, і якщо ігнорувати порожній ланцюжок, то класи мов типів 3 та 2 будуть підкласами мов типу 1.
Перш ніж переходити до вивчення класів мов, покажемо, що без втрати виразної сили можна розглядати більш обмежений клас граматик, які називаються загально-контекстними граматиками. Цей клас видається більш природним для породження, ніж загальні породжуючі граматики.
Визначення 4.21
Загально-контекстними називають породжуючі граматики, кожне правило яких має вигляд 1A2→1β2, де AN, 1, 2, β(NT)*. Ланцюжки 1 і 2 називають лівим та правим контекстом символу A у вказаному правилі.
Контекстно-залежними називаються загально-контекстні граматики з нескорочуючими правилами, тобто правила мають вид 1A2→1β2 , де β(NT)+ (це означає, що|β|1).
Контекстно-залежні граматики інколи називають граматиками безпосередньо складових (БС-граматиками).
Слід сказати, що назва контекстно-залежних граматик не зовсім вдала, бо не підкреслює нескорочуваність правил граматики, а характеризує радше довільний клас контекстних граматик. Це ж стосується і назви граматик безпосередньо складових.
Граматики типів 2 та 3 (будучи безконтекстними) безпосередньо є підкласами загально-контекстних граматик.
З визначень видно, що класи загально-контекстних та контекстно-залежних граматик є власними підкласами відповідно граматик типів 0 та 1. Разом з тим відповідні класи мов співпадають, тобто використання лише контекстних правил не обмежує породжувальну здатність граматик.
Доведемо цей факт співпадіння мов.
Нехай G0=(N, T, P, S) – довільна породжуюча граматика типу 0. Побудуємо еквівалентну їй загально-контекстну граматику. Алгоритм побудови наступний.
Виділяємо термінальні символи, які входять до неконтекстних правил та вводимо нетермінали, які дублюють такі термінальні символи, тобто вводимо нові нетермінали Na для кожного такого термінального символу aÎT.
Далі всі неконтекстні правила з P замінюємо на нові правила, в котрих замість термінальних символів стоять їх нетермінальні дублери. Добавляємо нові правила Naa. Очевидно, що отримана граматика G еквівалентна початковій.
Побудуємо граматику G, яка буде контекстною та еквівалентною G. Спочатку пронумеруємо усі неконтекстні правила граматики G (контекстні не змінюємо). Розглянемо неконтекстне правило G з номером k виду , де = A1A2…An-1An, n>1. Це правило замінимо на наступну множину нових правил:
A1A2…An-1An NklA2…An-1An
NklA2…An-1An NklA2…An-1Nkr
NklA2…An-1 Nkr NklA3…An-1Nkr
NklA3…An-1 Nkr NklA4…An-1Nkr
… … …
NklAn-1Nkr NklNkr
NklNkr NkpNkr
NkpNkr Nkp
Nkp.
(Коментар. Ідея побудови наведених правил полягає у наступному: спочатку виставляємо лівий Nkl та правий маркери Nkr вибраного правила, далі видаляємо всі інші символи лівої частини продукції, потім переходимо до породження правої частини, але перед цим вносимо про це інформацію за допомогою Nkp. Наприкінці породжуємо в контексті Nkp праву частину продукції, а сам символ Nkp видаляємо.)
Можна довести, що вказана послідовність правил еквівалентна одному початковому правилу. Дійсно, ця послідовність індукує (майже детерміновано) однозначний вивід. Тільки правило Nkp порушує однозначність. Але якщо його застосувати до правила NkpNkrNkp, то не буде можливості позбавитися нетермінала Nkr. Тому справедлива наступна теорема.
Теорема 4.2. Для довільної породжуючої граматики G0 існує граматика GC у загально-контекстній формі, яка породжує ту саму мову, тобто L(G0)=L(GC).
Визначення 4.22. Довільні граматики G1 та G2 називаються еквівалентними, якщо вони породжують одну й ту саму мову, тобто G1 G2 L(G1)=L(G2).
Цілком очевидно, що так введене відношення є відношенням еквівалентності (рефлексивним, симетричним та транзитивним відношенням).
Приклад 4.13. Побудуємо за граматикою G3, що породжує мову L(G3)={anbncn|n0} еквівалентну їх загально-контекстну граматику G3C.
Граматика G3 має наступні правила:
P1: S aBSc
P2: S
P3: Ba aB
P4: Bb bB
P5: Bc bc
З них неконтекстними є правила P3 та P4. Спочатку перетворимо правило BaaB (правило P3) в послідовність контекстних правил. Отримуємо:
BaaB замінюємо на BAaAaB, Aaa.
Далі замість BAaAaB вводимо послідовність правил
BAaN31Aa
N31Aa N31N3r
N31N3rN3pN3r
N3pN3rN3pAaB
N3p
Аналогічно вчинимо з правилом P4: Bb bB. Після цих перетворень отримуємо нову граматику G3C, в якій пронумеруємо нові правила:
P1: S AaBSc,
P2: S
P31: Aaa
P32: BAaN3lAa
P33: N3lAa N3lN3r
P34: N3lN3rN3pN3r
P35: N3pN3rN3pAaB
P36: N3p
P41: Bb b
P42: BBbN4lBb
P43: N4lBb N4lN4r
P44: N4lN4rN4pN4r
P45: N4pN4rN4pBbB
P46: N4p
P5: Bc Bbc
Побудуємо декілька виводів у цій граматиці, тобто, говорячи в термінах програмування, зробимо «тестування» побудованої граматики.
Очевидно, що S та S AaBSc AaBc AaBbc aBbc abc. Побудуємо вивід ланцюжка a2b2c2. Маємо,
S AaBSc AaBAaBScc AaBAaBcc AaBAaBbcc Aa N3lAaBbcc
Aa N3lN3rBbcc Aa N3pN3rBbcc Aa N3p AaBBbcc AaAaBBbcc AaAaN4lBbcc AaAaN4lN4rcc AaAaN4pN4rcc AaAaN4pBbBcc AaAaBbBcc AaAaBbBbcc AaAaBbbcc AaAabbcc Aaabbcc aabbcc.
Еквівалентність нескорочуючих та контекстно-залежних граматик доводиться аналогічним чином.
Це дозволяє нам говорити про те, що різні варіанти визначень граматик (породжуючі та контекстні) є еквівалентними, і що ієрархія Хомського досить стабільна відносно варіантів граматик.
Перейдемо до дослідження зв’язків класів породжуючих граматик з класами формалізмів розпізнання (сприйняття), в першу чергу, з класами автоматів різного типу.