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

10.5.2. Ліве і праве виведення. Серед різних типів виведення найбільший інтерес становлять наступні два типи виведення.

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

Наприклад, вище наведене виведення ланцюжка i * i + i в граматиці Г10.9 є лівостороннім виведенням. Слід зазначити, що різним виведенням ланцюжка i + i в граматиці Г10.9 відповідає те ж саме синтаксичне дерево. Аналогічна ситуація має місце і при виведенні ланцюжка i * i + i.

10.6. Неоднозначні та еквівалентні граматики

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

Г10.10: Vт = {a, b, c, d}, Va = {I, A, B},

R = {I AB (1)

A a (2)

A ac (3)

B b (4)

B cb}. (5)

Перше виведення цього ланцюжка має вигляд:

1) I AB Ab acb,

а друге можна одержати так:

2) I AB Acb acb.

Цим виведенням відповідають різні синтаксичні дерева і розбори (Рис. 6.2).

Рисунок 10.2.– Синтаксичні дерева і розбори виразу acb

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

Г10.11: Vт = {0, +}, Va = {I},

R = {I 0 (1)

I I + 0 (2)

I 0 + I}. (3)

Два виведення цієї граматики, що породжують однакові ланцюжки, мають вигляд:

1) II + 0I + 0 + 0 0 + 0 + 0,

2) I0 + I 0 + 0 + I 0 + 0 + 0,

а синтаксичні дерева, що відповідають цим виведенням, зображені на Рис. 10.3.

Рисунок. 10.3. Синтаксичні дерева виведення виразу: 0 + 0 + 0

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

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

Неоднозначність може існувати не тільки в штучних мовах. Добре відомо, що в природних мовах можуть бути пропозиції, які допускають неоднозначне написання. Наприклад, у фразі "Вино забруднило вікно" не ясно, що є підметом, а що доповненням. Іншим прикладом служить англійська фраза: "They are flying planes", яка може бути зрозуміла подвійно: “Вони пілотують літак” або “Це літаки, що летять”.

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

У загальному випадку можна зробити такий висновок:

1) кожному ланцюжку, виведеному в граматиці, можуть відповідати одне або кілька синтаксичних дерев;

2) кожному синтаксичному дереву можуть відповідати кілька виведень;

3) кожному синтаксичному дереву відповідають єдине праве і єдине ліве виведення.

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

Визначення. Дві граматики – Г1 і Г2 – називаються еквівалентними, якщо вони породжують одну і ту ж саму мову, тобто L1) = L2).

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