Формальні граматики
Формальна граматика або просто граматика в теорії формальних мов — спосіб опису формальної мови, тобто виділення деякої підмножини з множини всіх слів деякого скінченного алфавіту. Розрізняють породжувальні і аналітичні граматики — перші ставлять правила, за допомогою яких можна побудувати будь-яке слово мови, а другі дозволяють по даному слову визначити, входить воно в мову чи ні. Формальні граматики були введені американським вченим, математиком та філософом, Н. Хомським в 50-тих роках ХХ сторіччя.
Зміст |
Поняття алфавіту [ред.]
Алфавіт — скінченна множина символів. ε — порожній ланцюжок, слово, послідовність. Алфавітом є об'єднання алфавітів, перетин, різниця алфавітів. Нехай Т — алфавіт, тоді:
- Т+ — множина усіх можливих послідовностей, що складені з елементів цього алфавіту крім порожньої послідовності ε.
- Т* — множина усіх можливих послідовностей, що складені з елементів цього алфавіту, будь-якої довжини. Отже:

- Тk — множина усіх можливих послідовностей,що складені з елементів цього алфавіту, довжини не більше k.
Мова в алфавіті Т це множина ланцюжків скінченної довжини в цьому алфавіті. Зрозуміло, що кожна мова в алфавіті Т є підмножиною множини Т*.
Формальна граматика [ред.]
Формальна граматика - це четвірка
. Де:
- Т — алфавіт термінальних символів, терміналів (від англ. terminate - завершитись). Термінальні символи є алфавітом мови.
- N — алфавіт нетермінальних символів, нетерміналів.
; Нетермінали не входять в алфавіт мови. - S — аксіома, спеціально виділений нетермінальний символ.
- P — скінченна підмножина множини
. Інколи визначають так:
.
Елемент (α,β) з множини Р називається правилом виводу і записується у вигляді
. Таким чином, ліва частина правила не може бути порожньою. Правила з однаковою лівою частиною записують:
,
- називаются альтернативами правила виводу з ланцюжка
.
Виведення в формальних граматиках [ред.]
Ланцюжок
назвемо безпосередньо виведеним з ланцюжка
в граматиці
(позначається
), якщо
.
Ланцюжок
назвемо виведеним з ланцюжка
в граматиці
(позначається
), якщо
Термінальний рядок називається правильним(або сентенціальною формою) відносно граматики G якщо він виводиться з аксіоми цієї граматики.
Неоднозначності, та стратегії виводу [ред.]
Граматика G називається неоднозначною, якщо існує декілька варіантів виводу слова ω в G ( ω ∈ L(G ) ).
Приклад. Розглянемо таку граматику G = <N, Σ, P, S> зі схемою Р.
S → S +S |S *S |a
Покажемо, що для ланцюжка ω = a + a + a існує щонайменше два варіанти виводу:
-
S ⇒ S + S ⇒ S + S + S ⇒ a + S + S ⇒ a + a + S ⇒ a + a + a
-
S ⇒ S + S ⇒ a + S ⇒ a + S + S ⇒ a + a + S ⇒ a + a + a
В теорії граматик розглядається декілька стратегій виведення ланцюжка ω в G.
Лівостороння стратегія виводу ланцюжка ω в G — це послідовність кроків безпосереднього виводу, при якій на кожному кроку до уваги береться перший зліва направо нетермінал.
Правостороння стратегія виводу ω в G протилежна лівосторонній стратегії. З виводом ω в G пов'язане синтаксичне дерево, яке визначає синтаксичну структуру програми.
Формальні мови [ред.]
Формальна мова породжена граматикою G - це множина термінальних рядочків, що виводяться з аксіоми, тобто множина усіх правильних рядків.
З іношого боку, множина термінальних рядків, таких, що вони можуть бути виведені в граматиці G, називається мовою, що може бути розпізнана в даній граматиці, або допускається даною граматикою.
- Граматики G1 та G2 називаються еквівалентними, якщо
. - Граматики G1 та G2 називаються майже еквівалентними, якщо
, тобто мови, ними породжувані, відрізняються не більш ніж на ε.
Граматика може бути породжуючою та розпізнавальною, це залежить від "напрямку" застосування правил. Для породжучих граматик виведення починається з аксіоми і закінчується термінальним рядком (рядком, що скаладається тільки з терміналів). А розпізнавальні аналізують вхідний термінальний рядок на правильність, чи можна такий рядок вивести в цій граматиці. Коротше кажучи - породжуючі це "згори вниз", а розпізнавальні - "знизу вгору". Остання задача є практичнішою і гострою.
Класифікація граматик [ред.]
Хомський також запропонував класифікацію граматик. Він виділив чотири типи граматик.
Класифікація за Хомським [ред.]
- Тип 0. Граматики Типу 0
- це найзагальніший клас граматик. На правила не накладаються ніяких обмежень, окрім зазначених у визначенні. Вони еквівалентні Машині Тюринга. Доведено існування мов, які породжуються граматиками типу 0, але не граматиками типу 1, але невідомі прості приклади таких мов.
- Тип 1. Граматики Типу 1
- нескорочуюча або контекстно-залежна(КЗ) граматика. Вибір означення не впливає на множину мов, породжуваних граматиками цього класу, оскільки доведено, що множина мов, породжуваних граматиками, що не укорочують, збігається із множиною мов, породжуваних КЗ-граматиками.
- Нескорочуючі граматики. Всі правила мають вигляд



- де
означає кількість символів у рядку
.
- Контекстно-залежні граматики. Всі правила мають вигляд:
- Нескорочуючі граматики. Всі правила мають вигляд
- Тип 2. Граматики Типу 2. Контекстно-вільні граматики(КВ)
- Всі правила мають вигляд


- Тобто в усіх правилах цього виду зліва стоїть тільки один нетермінал. Тому вони і контекстно вільні, бо на використання правила для даного нетерміналу не впливають символи, що оточують його. Ці символи називають контекстом.
- Тип 3. Граматики Типу 3. Регулярні граматики. А-граматики
- можна визначити як праволінійну або ліволінійну граматику, або як змішану. Також ці мови називають скінченно-автоматними, бо вони еквівалентні скінченним автоматам, тобто клас мов, що породжуються граматиками типу 3, збігається з класом мов, які розпізнаються скінченими автоматами. Також ці граматики є основою регулярних виразів.
- Праволінійна граматика. Всі правила мають вигляд:


- або

- Ліволінійна граматика. Всі правила мають вигляд:


- або

- Праволінійна граматика. Всі правила мають вигляд:
Доведено, що праволінійні та ліволінійні граматики еквівалентні, і існує алгоритм для переведення правил граматики одного типу в інший тип.
Співвідношення між типами граматик [ред.]
- Будь-які граматики типу 3 є граматиками типу 2.
- Будь-які КВ-граматики є граматиками типу 1 (КЗ або неукорочуючі), з точністю до ε.
- Будь-які граматики типу 1 є граматиками типу 0.
Мова L(G) є мовою типу k, якщо її можна описати граматикою типу k.
Співвідношення між типами мов [ред.]
- кожна регулярна мова є КВ-мовою, але існують КВ- мови, що не є регулярними (наприклад,
); - кожна КВ- мова є КЗ- мовою, але існують КЗ-мови, що не є КВ-мовами ( наприклад,
); - кожна КЗ-мова є мовою типу 0.
Варто підкреслити, що якщо мова задана граматикою типу k, то це не означає, що не існує граматики типу k' (k'>k), що описує ту ж мову. Тому, коли говорять про мову типу k, звичайно мають на увазі максимально можливе k.
Використання формальних граматик [ред.]
Формальні граматики це дуже потужній математичний інструмент, який використовується в математичній та комп'ютерній лінгвістиці, описі мов програмування, розробці компіляторів в теорії програмування. Найбільш вживаними є КВ-граматики і регулярні, бо їх найлегше описати алгоритмічно.
Сама по собі концепція формальних граматик доволі гнучка, тому не дивно, що з'явилося багато інших інструментів, що розширють використання та потужність КВ-граматик і граматик третього типу. Наприклад, атрибутні граматики, LL-k граматики, скінченні автомати, регулярні вирази та множини.
Дивіться також [ред.]
Посилання [ред.]
- Серебряков В.А., Галочкин М.П., Гончар Д.Р., Фуругян М.Г. Теория и реализация языков программирования //М.: МЗ-Пресс, 2006 г., 2-е изд. ISBN 94073-094-9. (рос.)
- Подборка ссылок на литературу по направлению.(рос.)
| Ця стаття не містить посилань на джерела. (квітень 2008) |


; Нетермінали не входять в алфавіт мови.
. Інколи визначають так:
.

.
, тобто мови, ними породжувані, відрізняються не більш ніж на ε.

означає кількість символів у рядку 




);
);