Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пособие / 10_12.doc
Скачиваний:
45
Добавлен:
02.02.2015
Размер:
786.94 Кб
Скачать

I  aAi  aAai  abAi  abbI  abba.

10.4.3. Граматики типу 2. Граматики типу 2 називають контекстно вільними (кв) граматиками, або безконтекстними граматиками.

Правила виведення таких граматик мають вигляд:

A ,

де A Va і (Vт Va).

Очевидно, що ці правила випливають із правил граматики типу 1 за умови, що 1 = 2 = $. Оскільки контекстні умови відсутні, то правила КВ–граматик виходять простіші, ніж правила граматик типу 1. Саме такі граматики використовують для опису мов програмування. Прикладом КВ–граматики може служити така граматика.

Г10.5: Vт = {a, b}, Va = {I},

R = {I aIa (1)

I bIb (2)

I(3)

I bb}. (4)

Ця граматика породжує мову, що складається з ланцюжків, кожний з яких у свою чергу складається з двох частин: ланцюжка Vт і дзеркального відображення цього ланцюжка '.

За допомогою правил цієї граматики може бути побудований, наприклад, ланцюжок:

I aIa abIba abaIaba ababbaba.

10.4.4. Граматики типу 3. Граматики типу 3 називають автоматними граматиками (а-граматиками). Правила виведення в таких граматиках мають вигляд:

Aa, або AaB, або ABa,

де a Vт, і A, BVa, причому граматика може мати тільки правила вигляду AaB – правосторонні правила, або тільки вигляду A Ba – лівосторонні правила. Прикладами автоматних граматик можуть бути правостороння граматика Г10.6 і лівостороння граматика Г10.7.

Г10.6: Vт = {a, b}, Va = {I, A, Z},

R = {I aI (1)

I aA (2)

A bA (3)

A aZ (4)

A bZ (5)

Z $}. (6)

Г10.7: Vт = {a, b}, Va = {I, A, Z},

R = {I Ab (1)

A Ab (2)

A Za (3)

Z Za (4)

Z $}. (5)

Ці граматики є еквівалентними і породжують мову

L(Г7) = {a...ab...b | n, m 0}.

Між множинами мов різних типів існує відношення включення:

{L типу 3}  {L типу 2}  {L типу 1}  {L типу 0}.

Доведено, що існують: мови типу 0, що не є мовами типу 1; мови типу 2, що не є мовами типу 1; мови типу 3, які не є мовами типу 2.

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

10.5. Виведення у кв-граматиках і правила побудови дерева виведення

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

1) як початок чи вершину кореня дерева візьмемо вершину, яку позначимо початковим символом граматики I; ця вершина утворить нульовий ярус дерева;

2) якщо при виведенні ланцюжка, на черговому кроці використовується правило граматики A, і вершина, позначена нетермінальним символом A, розташована на ярусі з номером k – 1, то до побудованого дерева потрібно додати стільки вершин, скільки міститься символів у ланцюжку ; треба розташувати ці вершини на ярусі k , позначити їх символами ланцюжка  і з'єднати ці вершини дугами з вершиною A.

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

Розглянемо, наприклад, граматику Г10.10.

Г10.8: Vт = {a, b}, Va = {I},

R = {I aIb (1)

I ab}, (2)

яка породжує мову L8) = {aa...abb...b}, де а і b повторюються по n разів (n = 1, 2, ...).

Виведення ланцюжка за допомогою правил цієї граматики має вигляд дерева, відображеного на Рис. 10.1.

Рисунок 10.1 – Виведення ланцюжка aaabbb

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

Визначення. Послідовність номерів правил граматики Г, застосування яких дозволяє побудувати виведення заданого ланцюжка з початкового символу граматики, називається синтаксичним розбором ланцюжка.

Наприклад, у граматиці Г10.9:

Г10.9: Vт = {i, +, *, (, )}, Va = {E, T, P}

R = {E E + T (1)

E T (2)

T T * P (3)

T P (4)

P (E) (5)

P i}, (6)

правила якої пронумеровані, виведення ланцюжка i * i + i буде таким:

E E + T T + T T * P + T P * P + T i * P + T i * i + T

i * i +P i * i + i

Отже послідовність використання правил є такою – 1, 2, 3, 4, 6, 6, 4, 6.

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

Наприклад, виведення ланцюжка i + i в граматиці Г10.9 може бути отримане декількома різними способами.

Соседние файлы в папке Пособие