Як довести, що граматика однозначна?


25

Моя проблема полягає в тому, як я можу довести, що граматика однозначна? У мене є така граматика:

Sstatementif expression then Sif expression then S else S

і зробити це однозначною граматикою, я вважаю її правильним:

  • SS1S2

  • S1if expression then Sif expression then S2 else S1

  • S2if expression then S2 else S2statement

Я знаю, що однозначна граматика має одне дерево розбору на кожен термін.

Відповіді:


20

Існує (принаймні) один з способів довести однозначність граматики для мови . Він складається з двох етапів:LG=(N,T,δ,S)L

  1. Доведіть .LL(G)
  2. Доведіть.[zn]SG(z)=|Ln|

Перший крок досить зрозумілий: покажіть, що граматика породжує (принаймні) потрібні слова, тобто правильність.

Другий крок показує, що має стільки синтаксичних дерев для слів довжини скільки має слова довжини - з 1. Це означає однозначність. Він використовує структурну функцію яка повертається до Хомського та Шютценбергера [1], а самеn L n GGnLnG

SG(z)=n=0tnzn

при кількість синтаксичних дерев має слова довжини . Звичайно, потрібно матищоб це працювало.G n | L n |tn=[zn]SG(z)Gn|Ln|

Приємно, що (як правило) легко отримати для без контекстних мов, хоча знайти закриту форму для може бути складно. Перетворіть у систему рівнянь функцій з однією змінною на нетермінальний:t n GSGtnG

[A(z)=(A,a0ak)δ i=0k τ(ai) :AN] with τ(a)={a(z),aNz,aT.

Це може виглядати непросто, але насправді є лише синтаксичною трансформацією, як стане зрозуміло в прикладі. Ідея полягає в тому, що генеруються термінальні символи враховуються в показнику , і тому , що система має той же вигляд, , відбувається так часто , в сумі , як термінали можуть бути отримані з допомогою . Перевірте Kuich [2] для подробиць.G z n n GzGznnG

Розв’язуючи цю систему рівнянь (комп'ютерна алгебра!), ; тепер вам "лише" доводиться тягнути коефіцієнт (у закритому, загальному вигляді). Лист ТКС Чит та комп'ютерної алгебри часто може зробити це.S(z)=SG(z)


Приклад

Розглянемо просту граматику з правиламиG

SaSabSbε .

Зрозуміло, що (крок 1, доведення індукцією). Є паліндроми довжиною якщо парне, інакше.2 nL(G)={wwRw{a,b}} nn02n2nn0

Налаштування виходу системи рівнянь

S(z)=2z2S(z)+1

рішення якого

SG(z)=112z2 .

Коефіцієнти збігаються з числами паліндромів, тому неоднозначно.SG G


  1. Алгебраїчна теорія безконтекстних мов Хомського, Шютценбергер (1963)
  2. Про ентропію без контекстних мов Куйча (1970)

3
Як відомо @Raphael, неоднозначність не вирішується, тому принаймні один із ваших кроків не можна механізувати. Будь-яка ідея, які з них? Отримання закритої форми для ? tn
Мартін Бергер

2
Система рівнянь може бути алгоритмічно вирішена, якщо ступінь занадто висока, і витягнути точні коефіцієнти з функцій, що генерують, може бути (занадто) важко. Однак у "практиці" часто йдеться про граматики невеликого "ступеня" - зауважте, що, скажімо, нормальна форма Хомського призводить до систем рівнянь малого ступеня - і існують методи отримати принаймні -симптотику для коефіцієнти; цього може бути достатньо для встановлення неоднозначності. Зауважте, що для доведення однозначності достатньо показувати без витягуючих коефіцієнтів; доведення цієї ідентичності може бути важким, хоча. SL(z)=SG(z)
Рафаель

Дякую @Raphael Чи знаєте ви з будь-яких текстів, які детально розробляють, як нерозбірливість вступає в дію, навіть якщо використовується, наприклад, нормальна форма Чомського? (Я не можу одержати Куйча.)
Мартін Бергер

@MartinBerger Я щойно відкрив ваш коментар у моєму списку Тодо; вибачте за довгу тишу. Є три кроки, які (я думаю) загалом не піддаються обчисленню: 1) Визначте . 2) Обчислити. 3) Визначте . Зокрема, яке представлення використовувати для 2)? SG|Ln|[zn]Sg(z)L
Рафаель

Чому подання є проблемою? Наприклад, ми можемо використовувати будь-який із кількох способів представлення CFG для компіляторів. Можливо, ви маєте на увазі, як представляти ? LLn
Мартін Бергер

6

Це гарне запитання, але якийсь Гуглінг сказав би вам, що не існує загального методу вирішення двозначності , тому вам потрібно зробити своє питання більш конкретним.


2
ОП просить довести методи, а не алгоритми.
Рафаель

Я також так думаю; це може бути зазначено у питанні.
reinierpost

1
Google не є оракулом істини, оскільки knowlede не є демократичним, а результати Google є. Я б не розраховував на Google у цьому випадку, тому що люди часто копіюють один одного в інший, не перевіряючи правильність того, що вони копіюють. Не показавши доказ, вони можуть помилитися.
SasQ

5
@SasQ: Ти занадто буквально читаєш мої слова. Що дає мені Google - це URL-адреси до атрибулів, які пояснюють речі.
reinierpost

4

Для деяких граматик можливе доведення за допомогою індукції (над довжиною слова).


Розглянемо для прикладу граматику над Σ = { a , b }, задану такими правилами:GΣ={a,b}

SaSabSbε

Усі слова довжиною у L ( G ) - є лише ε - мають лише одне лівослівне.1L(G)ε

Припустимо, що всі слова довжиною для деякого n N мають лише одне лівослівне.nnN

Тепер розглянемо довільне для деяких n > 0 . Ясна річ, w 1Σ . Якщо w 1 = a , ми знаємо, що першим правилом у кожному лівому виведенні має бути S a S a ; якщо w 1 = b , це повинно бути S b S bw=w1wwnL(G)Σnn>0w1Σw1=aSaSaw1=bSbSb. Це стосується всіх справ. За індукційною гіпотезою ми знаємо, що для існує точно одне ліве виведення . У поєднанні ми робимо висновок, що для w є також точно одна ліва деривація .ww


Це стає складніше, якщо

  • є кілька нетерміналів,
  • граматика не є лінійною та / або
  • граматика ліво-рекурсивна.

Це може допомогти посилити претензію до всіх сентенційних форм (якщо граматика не має непродуктивних нетерміналів) та «кореневих» нетерміналів.

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

Ключ - визначити одну особливість кожного слова, яка фіксує (принаймні) один крок виведення. Решта слід індуктивно.


3

В основному це проблема покоління дитини. Почніть з першого виразу та генеруйте це діти .... Продовжуйте це робити рекурсивно (DFS), і після досить кількох ітерацій, перевірте, чи зможете ви генерувати те саме розширене вираження у двох різних дітей. Якщо ви можете це зробити, це неоднозначно. Однак немає можливості визначити час роботи цього алгоритму. Припустимо, що це безпечно, після того, як, можливо, народиться 30 рівнів дітей :) (Звичайно, це може бомбити 31-го)


1
ОП просить довести методи, а не алгоритми.
Рафаель

2
це не може бути способом довести, граматика неоднозначна чи ні. Власне кажучи, коли це бомбардування відбувається не можна.
Snađошƒаӽ
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.