Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
NikitchenkoNEWNEW.doc
Скачиваний:
26
Добавлен:
08.11.2019
Размер:
2.99 Mб
Скачать

4.4. Породжуючі граматики

Як зазначалося на початку розділу, породжуючі граматики можуть розглядатися як конкретизації транзиційних систем або дедуктивних систем. Для таких систем головним є відношення переходів. У граматиках відношення переходу (виведення) задається за допомогою правил граматики (продукцій), які мають вигляд α→β, де α та β – ланцюжки в певному алфавіті . Таке правило дозволяє перетворити ланцюжок γ1 у ланцюжок γ2 ( γ1, γ2 *) тоді і тільки тоді, коли γ1 = δ1αδ2, γ2 = δ1βδ2 для деяких ланцюжків δ1 і δ2, що належать *. Змістовно це правило дозволяє замінити підланцюжок γ1, який співпадає з лівою частиною правила, на праву його частину, отримуючи ланцюжок γ2.

Нехай P – множина продукцій. Тоді кожна продукція з P може розглядатися як правило виводу на *. Сама послідовність правил, використаних в процесі породження деякого ланцюжка, є його виводом. Визначена таким способом граматика представляє собою формальну систему. Відомими прикладами формальних систем слугують логічні числення (числення висловлювань, числення предикатів), які детально вивчаються у відповідних розділах математичної логіки. Низку формальних систем для програм буде наведено в цьому посібнику.

Наведені міркування приводять до наступного визначення.

Визначення 4.14. Породжуючою граматикою (граматикою типу 0) називається четвірка G=(N, T, P, S), де N і T – скінчені алфавіти, NT=Ø, , скінчена і . Тут

  • нетермінальний алфавіт (допоміжний алфавіт), його елементи називаються нетермінальними символами, нетерміналами, змінними;

  • Tтермінальний алфавіт (основний алфавіт), його елементи називаються термінальними символами або терміналами;

  • множина продукцій. Продукцію інколи називають правилом підстановки, правилом виводу, або просто правилом і записують у вигляді ;

  • початковий символ (аксіома).

Зробимо декілька зауважень до наведеного визначення. По-перше, слід пам’ятати про те, що вказана четвірка є просто екстенсіональним (одиничним) об’єктом поняття породжуючої граматики і без посилань на інтенсіональні властивості граматик вона не є самодостатньою. Оскільки для нас важливою є єдність екстенсіональних та інтенсіональних аспектів, то ми вважаємо, що і у визначенні граматики така єдність повинна бути відзначена. По-друге, умова, що ліва частина правил належить множині означає, що в лівій частині обов’язково повинен бути нетермінал. Це обмеження фактично індукується інтенсіональною ознакою породження, бо воно не повинно вестися із завершеного (термінального) ланцюжка. Разом з тим у лівій частині можуть фігурувати і термінальні символи, які можуть замінюватись на символи правої частини правила. Це дозволяє говорити, що визначення породжуючої граматики не достатньо підтримує розподіл символів на термінальні та нетермінальні. Як вже зазначалось, від такого часткового рішення можна відмовитись, розглядаючи системи Туе (де нема розподілу на термінальні та нетермінальні символи), або розглядаючи контекстні граматики (де дозволена заміна лише нетермінального символу, але в певному контексті). По-третє, множини були визначені як скінченні. Проте, більшість результатів, що стосуються породжуючих граматик, може бути перенесена на нескінчені множини.

У прикладах нетермінальні символи зазвичай позначаємо великими літерами, термінальні – маленькими, для правил з однаковими лівими частинами часто будемо використовувати скорочений запис . Крім того, у прикладах інколи будемо задавати граматику не як відповідну четвірку, а просто списком правил, вважаючи, що алфавіт N складають всі великі літери, які зустрічаються в правилах, а алфавіт T – всі маленькі літери, що зустрічаються в правилах. При цьому ліва частина першого правила є початковий символ .

Повторимо ще раз визначення відношення безпосередньої вивідності, яке задає граматика G=(N, T, P, S).

Визначення 4.15. Нехай задано граматику G=(N, T, P, S). Пишемо γ1Gγ2 1, γ2 ), якщо γ1 = δ1αδ2, γ2 = δ1βδ2 для деяких слів δ 1, δ2  , і .

Коли з контексту зрозуміло, про яку граматику йде мова, замість G можна писати просто .

Визначення 4.16. Рефлексивне транзитивне замикання відношення безпосередньої вивідності називається відношенням вивідності і позначається через *G (або G).

Нагадуємо, що рефлексивним транзитивним замиканням бінарного відношення R на множині ST є найменше відношення R, яке містить R, і яке є рефлексивним та транзитивним, тобто

  1. sRs для всіх s з ST;

  2. якщо s1Rs2 та s2Rs3, то s1Rs3.

Наведене визначення не вказує на спосіб побудови рефлексивного транзитивного замикання. Разом з тим з властивостей рефлексивного транзитивного замикання випливає, що ланцюжок γn виводиться з ланцюжка γ00 *Gγn) тоді і тільки тоді, коли деяка послідовність (можливо порожня) замін лівих частин продукцій з P їхніми правими частинами переводить ланцюжок γ0 в γn. Інакше кажучи, коли існує послідовність виду γ0G γ1G... G γn ( ).

Визначення 4.17. Послідовність ланцюжків γ01,...γn, така, що γi-1Gγi для 1in, називається виводом (виведенням) γn з γ0 в G. Число називається довжиною (кількістю кроків) цього виведення.

Зауважимо, що для довільного ланцюжка γ має місце γ *γ (адже можливе виведення довжини 0). Слід також сказати, що вивід γ01,...γn не дає однозначного опису, які саме правила граматики були застосовані і до яких підланцюжків. Якщо така інформація є важливою, то можна застосовувати розмічений вивід, вказуючи входження лівої частини правила, що замінюється, та позначення правила, що було застосовано.

Визначення 4.18. Ланцюжки, що виводяться з певного нетерміналу A, називаються його словоформами (A-словоформами), або його сентенційними формами. Якщо вивід іде із аксіоми, то говоримо просто – словоформа, або сентенційна форма.

Приклад 4.11. Для граматики з правилами { SaBSc, S  , B  } та аксиомою S словоформами будуть ланцюжки aBSc, aBaBaBSccc, aaaBccc, та інші, які виводяться з S.

Центральним є визначення, яке задає мову, що породжується граматикою.

Визначення 4.19. Мова, що породжується граматикою , – це множина ланцюжків L(G)={w | S *Gw, wT*}. Будемо також говорити, що граматика породжує мову .

Говорячи просто, мова є мовою, що породжується граматикою , якщо вона складається із ланцюжків (слів) у термінальному алфавіті, які виводяться із аксіоми S.

Інтенсіональні аспекти цього визначення були обговорені раніше. Зауважимо, що в попередньому підрозділі для побудови моделей формальних мов використовувався підхід від загального (абстрактного) до конкретного (одиничного). Спочатку вводилось поняття мови як множини речень, а в кінці побудов вводилося поняття породжуючої граматики. Це був інтенсіональний аналіз поняття граматики. В цьому підрозділі зроблено навпаки – ідуть екстенсіональні побудови: від екстенсіонального визначення породжуючої граматики через поняття виводу та його абстракції і завершується поняттям мови, що породжується граматикою. Тут фактично можна говорити про визначення знизу-вверх: від індивідуальних понять – до загальних.

Ці міркування говорять про те, що поняття породжуючої граматики треба розглядати як єдність екстенсіоналу, що визначається четвірками вигляду G=(N, T, P, S) з указаними раніше параметрами, та інтенсіоналу, що дає загальне визначення відношення безпосередньої вивідності , його рефлексивного транзитивного замикання *, та визначення мови, що породжується, за формулою L(G)={w | S *Gw, wT*}.

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