You are on page 1of 4

Лекція №20. Мови та формальні граматики Рядком називається впорядкована сукупність символів алфавіту.

Рядок
є елементом декартового добутку A n  
A 
A  ...
 
A . n – довжина рядка.
n
Будь-яка формальна мова − це множини слів у деякому алфавіті.
Символ є рядком для випадку n = 1. Рядки зазвичай позначаються
Приклад. Мови програмування − штучні мови для спілкування людини з
обчислювальною машиною. маленькими буквами грецького алфавіту, наприклад  ,  ,  . В тексті
Для того, щоб задати штучну мову, необхідно: значення рядка приводиться у лапках.
1) Задати алфавіт, тобто множину символів (чи букв), кожну з яких можна Порожній рядок, позначається як  , це рядок, який не має символів.
розмножувати в необмеженій кількості екземплярів. Порожній рядок не є символом і не належать ніякому алфавіту.
2) Описати формальну граматику мови, тобто множину правил, за Через A позначається множина усіх рядків алфавіту А, включаючи
допомогою яких з символів алфавіту будуються такі послідовності порожній рядок. Символ * називається зірочкою Кліні, на честь
символів, які належать цій мові і називаються правильними словами. математика і логіка Стівена Коула Кліні. Ясно, що
Слова відділяються одне від іншого за допомогою спеціального A  A0  A1  A 2  ...., A0   . Множина A − нескінченна.
символу алфавіту − пропуску (інтервали стандартної довжини) між
Через A  позначається множина усіх рядків алфавіту А, не включаючи
символами алфавіту, що перевершує довжину будь-якого з проміжків, що
можливо зустрічаються в середині символів алфавіту. порожній рядок, тобто A  A0  A  .
Правила формальної граматики можна розглядати як правила Довжина рядка  дорівнює кількості символів в рядку і позначається
виведення − елементарні операції, що застосовуються в деякій  . Конкатенацією або злиттям рядків  і  називається рядок  .
послідовності до деякого початкового слова, і які породжують тільки
правильні слова. Вважається, що      . Запис  n означає  ... – n разів.
Послідовність правил, які використовуються в процесі породження Наприклад, 0 312  00011 .
цього слова, називається виводом. Рядок  є підрядком рядка виду  , причому  і  можуть бути
Формальні граматики за способом завдання правильних слів діляться на будь-ким, у тому числі і порожніми рядками.
граматики, що породжують слова, і граматики, що розпізнають слова. Порожній рядок  є підрядком будь-якого рядка.
Поняття формальної граматики сформульоване Хомським в 1967 році.
Мова L − це множина рядків скінченної довжини в заданому
Формальний алфавіт – множина неподільних символів. Скінченні скінченному алфавіті.
послідовності букв алфавіту називаються рядками, виразами цього алфавіті. Якщо верхню межу допустимої довжини рядка не задано, то мову не
Алфавіти будемо позначати великими буквами латинського алфавіту, можна визначити перерахунком усіх рядків. Опис мови має бути
наприклад, А, В, С. Символи алфавіту будемо позначати маленькими скінченним, тоді як мова може бути нескінченною.
буквами латинського алфавіту з індексами або без них. Ми розглядатимемо породжуючі граматики, називаючи їх надалі
Якщо А і В є алфавітами і A  B , то A називається підалфавітом В і В є просто граматиками.
розширення А. Для кожної граматики задаються дві непересічні скінченні множини:
термінальних символів Т і нетермінальних символів N. З термінальних
символів утворюються рядки певної мови.

1 2
Нетермінальні символи використовуються як допоміжні або проміжні в Особливість запису продукції у формі нотації Бекуса-Наура
процедурах побудови рядків мови, але вони не входять в остаточні 1) Символ "  " замінюється на "::=".
("правильні") вирази мови. Для позначення нетермінальних символів 2) У кутові дужки "< >" заключаються нетермінальні символи.
використовуватимемо великі букви латинського алфавіту. 3) Знак "|", що використовується для скорочень запису продукцій, означає
"або" і об'єднує групу продукцій з однаковою лівою частиною, але з
Продукції − це впорядкована пара рядків, першим елементом якої є різними правими частинами.
будь-який рядок, складений з символів алфавіту N  T , причому цей рядок
обов'язково містить хоч би один нетермінальний символ. Другим Типи граматик
елементом пари є будь-який рядок, що складається з символів алфавіту, Граматики можна класифікувати по виду їх продукцій (ієрархія
тобто P  ( N  T )* N ( N  T )*  ( N  T )* . Множина продукцій описує Хомського):
Тип 0. Граматика загального вигляду.
процес породження рядків мови. Породження рядків в граматиках
Тип 1. Контекстно-залежна (КЗ) або нескорочувана. Якщо кожна
позначається з особливого рядка, що складається з одного виділеного
продукція з Р має вигляд α→β, де |α| ≤ | β | або    .
символу, який називається початковим символом і позначається s.
Тип 2. Контекстно-вільна (КВ), якщо кожна продукція з Р має вигляд
Граматикою називається структура виду G  ( N , T , P, s ) , де A   , де A  N ,  ( N  T )* .
N − скінченна множина нетермінальних символів. Тип 3. Праволінійна (ліволінійна) якщо кожна продукція з Р має
Т – скінченна множина термінальних символів, що не перетинається з N. вигляд А→xB (А→Bx) або А→x, де A, B  N , x  T * . Ліволінійні і
Р − множина продукції – скінченна підмножина праволінійні граматики називаються регулярними.
( N  T )* N ( N  T )*  ( N  T )
s − початковий символ з N.
Граматика визначає мову рекурсивно, за допомогою рядків, що
виводяться. Рядки, що виводяться, в граматиці G  ( N , T , P, s )
визначається таким чином:
1) s − рядки, що виводяться.
2) Якщо  − рядки, що виводяться, і продукція    − міститься в Р,
то  − рядки, що теж виводяться.
Мова L(G), яка визначаться граматикою G, – це множина рядків, які
складаються тільки з терміналів і виводяться в граматиці G. Граматики
еквівалентні, якщо породжувані ними мови одинакові. Рис.20.1. Типи граматик.
Можливість виведення рядків в граматиці позначається так    Приклад граматики, що породжує послідовність з цифр 0, 1, 2, де кожна
наступна цифра дорівнює сумі двох попередніх по модулю 3.
(безпосередньо виводиться)  *  (послідовно виводиться).
G = ({A, C, S}, {0, 1, 2}, P, S).
P: 1. S → AAC, 2. A → 0, 3. A→1, 4. A → 2, 5. C →  , 6. 00C → 000C,

3 4
7. 01C → 011C, 8. 02C → 022C, 9. 10C → 101C, 10. 12C → 120C, визначає ту ж мову, що і граматики Gчисло.
11. 20C → 202C, 12. 21C → 210C, 13. 22C → 221C. Gчисло = {{Число, знак, ціле число, дрібна частина, цифри, S}}, {+, -, 0, 1, …,
Це контекстно-залежна граматика. 9}, ε, P, S)
Приклад. Побудувати граматику, що породжує рядки виду 0 n1n , n  N .
G = ({S}, {0, 1}, P, S) 1) Число → знак, ціле число, 11) Цифра → 0
P: 1. S→0S1, 2. S→ε – це контекстно-вільна граматика. дрібна частина 12) Цифра → 1
За допомогою КЗ граматики можна визначити більшу частину 2) Знак → + 13) Цифра → 2
синтаксичної структури мови програмування. Чи існує в деякій фіксованій 3) Знак → - 14) Цифра → 3
граматиці КЗ виведення вихідного рядка і якщо так, то як визначити вивід 4) Знак → ε 15) Цифра → 4
цього рядка? Для спрощення цього завдання застосовуються дерева виводу 5) Ціле число → Цифра 16) Цифра → 5
і еквівалентні перетворення граматик. Продукції містять рекурсії, а тому 6) Ціле число → Цифра, Ціле 17) Цифра → 6
дозволяють описати нескінченні мови. число 18) Цифра → 7
Праволінійні граматики називаються також праворекурсивними, а 7) Дрібна частина → Ціле число 19) Цифра → 8
ліволінійні – ліворекурсивними. Граматики, що містять продукції виду 8) Дрібна частина → ε Цифра → 9
9) Дрібна частина → ε
X * X , де X  N ,  ,   ( N  T )* , називають самовключающими.
10)
Для завдання регулярних мов використовують регулярні вирази.
Рекурсивне визначення регулярного виразу: Мова є регулярною тоді і тільки тоді, коли вона розпізнається за
1) Ø– регулярний вираз. допомогою кінцевого автомата.
2) ε – регулярний вираз.
Наприклад; мова L3  0*10*10*10* (10*10*10* )* можна задати за
3) X – регулярний вираз, якщо x  A (алфавіт), то XY, X  Y , X* –
регулярні вирази, якщо Х і Y – регулярні вирази. допомогою граматики G3 = ({A, B, C, S}, {0,1}, P, S)
Пріоритет операцій в регулярних виразах P. 1. S → AB, 2. A → C1C1C1C, 3. B → 1C1C1CB|ε, 4. C → 0C|ε.
1) X* У випадку КЗ граматики можна ввести зручне графічне представлення
2) XY – конкатенація. класу еквівалентних виводів, що називається деревом виводу.
3) 3. X  Y – об'єднання множин рядків. Помічене упорядковане дерево Р називається деревом виводу (або
Приклади. деревом розбору) в КЗ граматиці G = (N, T, P, S), якщо виконуються
наступні умови:
1) Вираз aaa  bbb означає два рядки – рядок "aaa" або "bbb".
1) Корінь дерева T позначено S, а кожна вершина дерева T символом з
2) Вираз (10)* означає будь-яку кількість "10", що йдуть підряд, або
порожній рядок. N  T  { } .
3) Вираз a (a  a  a) * означає будь-який рядок, що складається з символів 2) Для будь-якої внутрішньої вершини X 0 дерева і впорядкованого
"a", "b", "c", яка починається з символу "a". списку її синів X 1 X 2 ... X n множина продукції граматики Р включає
Вираз таку продукцію A  a1 , a2 ,..., an так що A, a1 , a2 ,..., an є мітками
(     )(0  1  ...  9)(0  1  ...  9) * ((, (0  1  ...  9)(0  1  ...  9)*)   вершин X 0 X 1 X 2 ... X n .

5 6
3) Якщо корінь дерева має єдиного нащадка, що позначений як ε, то цей
нащадок домінує над деревом, що складається єдиної вершини S і
S   – продукція з множини Р.

Приклад дерева виводу в граматиці G з продукцією S → aSbS|bScS|ε.

Рис.20.2. Приклад дерева виводу.

You might also like