русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Перетворення граматик


Дата додавання: 2013-12-24; переглядів: 1683.


Рис.3.1. Дерево висновку для ланцюжка a+b+a у граматиці G

 

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

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

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

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

Приклад неоднозначної граматики:

 

G=({if, then, else, a, b}, {S}, P,S), де P={Sif b then S else S½if b then S½a}.

 

У цій граматиці для ланцюжка if b then if b then a else a можна побудувати два дерева висновку. Однак це не означає, що мова L(G) обов‘язково неоднозначна.

Визначена нами неоднозначність – це властивість граматики, а не мови, тобто для деяких неоднозначних граматик існують еквівалентні їм однозначні граматики. Якщо граматика використовується для визначення мови програмування, то вона повинна бути однозначною. У наведеному вище прикладі різні дерева висновку припускають відповідність else різним then, і якщо підправити граматику G, то неоднозначність буде усунута:

 

Sif b then S½if b then S| else S½a

S|b then S| else S| | a

 

Проблема, чи породжує дана КС-граматика однозначну мову (тобто чи існує еквівалентна їй однозначна граматика), є алгоритмічно нерозв‘язуваною.

Однак можна вказати деякі види правил висновку, що приводять до неоднозначності.

1. AAA |

2. AAA½

3. AA |A|

4. AA½AA½

 

Приклад неоднозначної КС мови:

 

L = {a ibj ck | i=j чи j=k}.

 

Інтуїтивно це пояснюється тим, що ланцюжки з i=j повинні породжуватись групою правил висновку, відмінних від правил, що породжують ланцюжки з j=k. Але тоді, певні з ланцюжків з i=j=k будуть породжуватись обома групами правил, та відповідно будуть мати по два різних дерева висновку.

Одна з граматик, що породжує L така:

 

SAB | DC

AaA |

BbBc½

CcC½

DaDb½

 

Очевидно, що вона неоднозначна.

Дерево виведення можна будувати знизу вверх, чи з гори вниз.

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

Метод «знизу до гори» полягає у тому, що вихідний ланцюжок намагаються «згорнути» до початкового символу S; на кожному крокові шукають ланцюжок який співпадає з правою частиною будь-якого правила висновку; якщо такий підланцюжок знаходиться, то вона замінюється нетерміналом з лівої частини правила.

Якщо граматика однозначна, то при будь-якому способі побудови, буде отримане одне й те саме дерево.

 

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


<== попередня лекція | наступна лекція ==>
Визначення | Зауваження


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн