Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ТЕМА 3_АЛГОРИТМІЧНІ СИСТЕМИ+++.doc
Скачиваний:
29
Добавлен:
05.12.2018
Размер:
634.88 Кб
Скачать

Класифікація формальних граматик.

Розрізняють розпізнавальні, породжувальні та перетворювальні формальні граматики, контекстовільні та контекстозалежні і т.д.

Розпізнавальна граматика — якщо для будь-якого ланцюжка символів вона може вирішити, чи є він правильним чи ні, і якщо так, то як він побудований.

Породжувальна граматика — якщо вона може побудувати будь-який правильний ланцюжок символів, даючи вказівки щодо його побудови, і не будує жодного неправильного ланцюжка.

Перетворювальна граматика — якщо для будь-якого правильно побудованого ланцюжка вона вміє побудувати відображення у вигляді знов-таки правильного ланцюжка, задаючи вказівки щодо порядку проведення відображень.

Контекстовільні граматики: правила підстановок застосовуються до ланцюжків символів (до окремих сполучень символів, до окремих символів) незалежно від тих символів, які їх оточують (від контексту), і при виконанні підстановок цей контекст залишається без змін.

Контекстозалежні граматики: до ланцюжків символів застосовуються різні правила підстановок залежно від їх контексту. Наприклад, при перекладі текстів з однієї мови спілкування на іншу використовуються правила контекстозалежних граматик, бо одному й тому самому слову у різних контекстах будуть ставитись у відповідність різні слова іншої мови. Водночас мови програмування побудовано за правилами контекстовільних граматик, і кожна конструкція такої мови завжди має один і той самий зміст, смисл і тлумачення, тому при перекладі (трансляції) на будь-яку іншу мову програмування та мову комп’ютерних команд (ЕХЕ-модулі), в першу чергу за правилами перетворювальних граматик можна отримати тільки один варіант вихідного тексту, з одним ланцюжком символів вхідного тексту, незалежно від контексту, зіставити один і той самий вихідний ланцюжок.

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

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

Формальні граматики є складовою частиною науки, що відокремилась від теорії алгоритмів, — математичної лінгвістики, яка вив-чає природні мови, їх розвиток та вживання за допомогою законів математики, а також є основою створення мов програмування.

Наведемо приклад формальної породжувальної граматики, за правилами якої будуються речення певної конструкції.

Нехай маємо граматику

G = {VT, VH, P, S},

де VH = {S, B, C, D, E, F, K} — нетермінальний словник, символи якого означають:

S — речення (виділений символ);

B — група підмета;

C — група присудка;

D — іменник;

E — прикметник;

F — дієслово;

K — прислівник.

Термінальний словник

VT = {a, b, c, d, e, f, i, j, k, e, m, n, p, r, t}, символи якого означають:

а — пес в — сніг с — малюк d — комар

е — білий f — пухнастий i — веселий j — бігає

к — кусає е — стрибає m — сміється n — падає

p — швидко r — голосно t — тихенько

Правила підстановок:

P = {SàBC, BàED, CàKF, Eàe, Eàf, Eài, Dàa, Dàb,

Dàc, Dàd, Kàp, Kàr, Kàt, Fàj, Fàk, Fàl, Fàm,Fàn}.

Таку граматику можна представити у вигляді графа (рис. 3.5):

Рис. 3.5. Граф породжувальної граматики

Виконуючи підстановки з множини Р, можна отримати будь-які речення, складені з термінальних символів, наприклад:

— веселий пес швидко бігає;

— білий сніг тихенько падає;

— пухнастий комар голосно сміється

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

Породжуючі граматики Хомського

Граматики, що породжують (граматики Н. Хомского).

Ноам Хомський (Noam Chomsky, p. 1928) - американський лінгвіст і політичний активіст. Починаючи з 1957 року опублікував ряд робіт, що заклали основи математичної лінгвістики).

Граматики, що породжують, - це простий і потужний механізм, який дозволяє задавати великий клас мов, які містять нескінченну множину ланцюжків. За допомогою граматик, що породжують, ми зможемо, зокрема, визначити мови L3, L4 і L5, для завдання яких ми раніше обмежувалися словесними формулюваннями. Граматики, що породжують, використовуються і при описі синтаксису мов програмування.

Граматикою, що породжує, називається четвірка:

G = (T,N,P,S),

де Т - кінцева множина термінальних (основних) символів - основний алфавіт. Елементами множини T являются символи, з яких в остаточному підсумку і складаються ланцюжки мови, породжуваної даною граматикою. Термінальний (від лат. termіnus - межа, кінець) і означає "кінцевий, кінцевий". Т - це не що інше, як алфавіт мови, породжуваною граматикою. Надалі, якщо не оговорено особливо, термінальні символи, або просто термінали, будуть позначатися малими буквами латинського алфавіту: а,b,с т.д.;

N- кінцева множина нетермінальних (допоміжних) символів - допоміжний алфавіт. Нетермінальні символи, по-іншому нетермінали, - це поняття граматики (мови), які використовуються при її описі. Нетермінали будемо позначати заголовними латинськими буквами: А, В, C,D,E і т.д.;

Р- кінцева множина правил виводу, що називається також продукціями. Кожне правило множини Р має вигляд:

,

де  і  - ланцюжки термінальних і нетермінальних символів. Ланцюжок  не повинен бути порожнім, ланцюжок  може бути порожнім:   (T  N)+;   (T  N)*. (ланцюжок символів  належить термінальному словнику T або N,  - символ об’єднання)

 означає множину елементів, що належать до множині A або B (або до двох множин відразу).

Правило  визначає можливість підстановки  замість  в процесі виводу (породженні) ланцюжків мови;

S (S  N) - початковий символ граматики - один з множини нетермінальних символів, початковий (стартовий) нетермінал. Початковий нетермінал - це поняття, що відповідає правильному реченню мови. Наприклад, початковий нетермінал граматики виразів позначає "вираз", а початковий нетермінал граматики мови Паскаль - "програма".