Wie kann man beweisen, dass eine Grammatik eindeutig ist?


25

Mein Problem ist, wie kann ich beweisen, dass eine Grammatik eindeutig ist? Ich habe die folgende Grammatik:

Sstatementif expression then Sif expression then S else S

und mache dies zu einer eindeutigen Grammatik, ich denke, es ist richtig:

  • SS1S2

  • S1if expression then Sif expression then S2 else S1

  • S2if expression then S2 else S2statement

Ich weiß, dass eine eindeutige Grammatik einen Analysebaum für jeden Begriff hat.

Antworten:


20

Es gibt (mindestens) einen Weg, die Eindeutigkeit einer Grammatik für die Sprache zu beweisen . Es besteht aus zwei Schritten:G=(N,T,δ,S)L

  1. Beweisen Sie .LL(G)
  2. Man beweise.[zn]SG(z)=|Ln|

Der erste Schritt ist ziemlich klar: Zeigen Sie, dass die Grammatik (zumindest) die gewünschten Wörter generiert, das heißt, Richtigkeit.

Der zweite Schritt zeigt, dass so viele Syntaxbäume für Wörter der Länge wie Wörter der Länge - mit 1. Dies impliziert Eindeutigkeit. Es verwendet die Strukturfunktion von die auf Chomsky und Schützenberger [1] zurückgeht, nämlichn L n GGnLnG

SG(z)=n=0tnzn

mit die Anzahl der Syntaxbäume für Wörter der Länge . Natürlich müssen Siedamit dies funktioniert.G n | L n |tn=[zn]SG(z)Gn|Ln|

Das Schöne ist, dass für kontextfreie Sprachen (normalerweise) leicht zu bekommen ist, obwohl es schwierig sein kann , eine geschlossene Form für finden. Transformiere in ein Gleichungssystem von Funktionen mit einer Variablen pro Nichtterminal:t n GSGtnG

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

Dies mag einschüchternd aussehen, ist jedoch nur eine syntaktische Transformation, wie im Beispiel deutlich wird. Die Idee ist, dass generierte Terminalsymbole im Exponenten von gezählt werden. Da das System dieselbe Form wie , kommt in der Summe so oft vor, wie Terminals von generiert werden können . Überprüfen Sie Kuich [2] auf Details.G z n n GzGznnG

Die Lösung dieses Gleichungssystems (Computeralgebra!) Ergibt ; Jetzt müssen Sie "nur" den Koeffizienten ziehen (in geschlossener, allgemeiner Form). Das TCS Cheat Sheet und die Computeralgebra können dies häufig.S(z)=SG(z)


Beispiel

Betrachten Sie die einfache Grammatik mit RegelnG

SaSabSbε .

Es ist klar, dass (Schritt 1, Beweis durch Induktion). Es gibt Palindrome der Länge wenn ist, sonst .2 nL(G)={wwRw{a,b}} nn02n2nn0

Aufstellung des Gleichungssystems ergibt

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

wessen Lösung ist

SG(z)=112z2 .

Die Koeffizienten von stimmen mit der Anzahl der Palindrome überein , so dass eindeutig ist. GSG G


  1. Die algebraische Theorie kontextfreier Sprachen von Chomsky, Schützenberger (1963)
  2. Zur Entropie kontextfreier Sprachen von Kuich (1970)

3
Wie Sie bei Raffael wissen, ist Mehrdeutigkeit nicht bestimmbar, sodass mindestens einer Ihrer Schritte nicht mechanisiert werden kann. Irgendeine Idee welche? Erhalten Sie ein geschlossenes Formular für ? tn
Martin Berger

2
Das Gleichungssystem ist möglicherweise nicht algorithmisch lösbar, wenn der Grad zu hoch ist, und das Herausziehen der genauen Koeffizienten aus den Erzeugungsfunktionen kann (zu) schwierig sein. In der "Praxis" befasst man sich jedoch oft mit Grammatiken kleinen "Grades" - man beachte, dass beispielsweise die Chomsky - Normalform zu Gleichungssystemen kleinen Grades führt - und es gibt Methoden, um mindestens Asymptoten für die zu erhalten Koeffizienten; Dies kann ausreichen, um Mehrdeutigkeiten festzustellen. Um die Eindeutigkeit zu beweisen, ist es , ohne Ziehungskoeffizienten zu zeigen. Der Nachweis dieser Identität kann jedoch schwierig sein. S L ( z ) = S G ( z )SL(z)=SG(z)
Raphael

Vielen Dank an Raffael. Kennen Sie Texte, die detailliert aufzeigen, wie Unentscheidbarkeit ins Spiel kommt, auch wenn man zB Chomsky-Normalform verwendet? (Ich kann Kuich nicht erreichen.)
Martin Berger

@MartinBerger Ich habe gerade Ihren Kommentar in meiner Aufgabenliste wiederentdeckt. Entschuldigung für die lange Stille. Die Es gibt drei Schritte (glaube ich) ist nicht berechenbar im Allgemeinen: 1) Bestimmen . 2) Berechnen | L n | . 3) Bestimmen Sie [ z n ] S g ( z ) . Welche Darstellung von L ist insbesondere für 2) zu verwenden? SG|Ln|[zn]Sg(z)L
Raphael

Warum ist die Darstellung von ein Problem? Wir können zum Beispiel eine der vielen Möglichkeiten zur Darstellung von CFGs für Compiler verwenden. Vielleicht meinst du, wie man L n repräsentiert ? LLn
Martin Berger

6

Dies ist eine gute Frage, aber einige Googler hätten Ihnen gesagt, dass es keine allgemeine Methode für die Entscheidung über Mehrdeutigkeiten gibt. Sie müssen Ihre Frage daher präzisieren.


2
Das OP fragt nach Beweistechniken, nicht nach Algorithmen.
Raphael

Das denke ich auch; es könnte in der Frage erwähnt werden.
Reinierpost

1
Google ist kein Orakel der Wahrheit, weil Knowlede nicht demokratisch ist und Google-Ergebnisse es sind. In diesem Fall würde ich nicht auf Google zählen, weil die Leute oft eine Katze von einer anderen kopieren, ohne die Richtigkeit der von ihnen kopierten Daten zu überprüfen. Ohne einen Beweis zu zeigen, könnten sie falsch sein.
SasQ

5
@SasQ: Du liest meine Worte zu wörtlich. Was mir Google gibt, sind die URLs zu Artikeln, die Dinge erklären.
Reinierpost

4

Für einige Grammatiken ist ein Induktionsnachweis (über Wortlänge) möglich.


Betrachten Sie zum Beispiel eine Grammatik über Σ = { a , b }, die durch die folgenden Regeln gegeben ist:GΣ={a,b}

SaSabSbε

Alle Wörter der Länge in L ( G ) - es gibt nur ε - haben nur noch eine Ableitung.1L(G)ε

nnN

w=w1wwnL(G)Σnn>0w1Σw1=aSaSaw1=bSbSbww


Dies wird schwieriger, wenn

  • Es gibt mehrere Nicht-Terminals.
  • Die Grammatik ist nicht linear und / oder
  • Die Grammatik ist linksrekursiv.

Es kann hilfreich sein, den Anspruch auf alle sententialen Formen (wenn die Grammatik keine unproduktiven Nichtterminals hat) und "Wurzel" -Nichtterminals zu stärken.

Ich denke, die Umwandlung in die Greibacher Normalform bewahrt (Un-) Zweideutigkeit, diesen Schritt zuerst anzuwenden, kann die Linksrekursion gut erledigen.

Der Schlüssel besteht darin, ein Merkmal jedes Wortes zu identifizieren, das (mindestens) einen Ableitungsschritt festlegt. Der Rest folgt induktiv.


3

Grundsätzlich ist es ein Problem der Kindergeneration. Beginnen Sie mit dem ersten Ausdruck, und generieren Sie dessen untergeordnete Elemente. Führen Sie ihn weiterhin rekursiv aus (DFS), und prüfen Sie nach einigen Iterationen, ob Sie denselben erweiterten Ausdruck aus zwei verschiedenen untergeordneten Elementen generieren können. Wenn Sie das können, ist es nicht eindeutig. Es gibt jedoch keine Möglichkeit, die Laufzeit dieses Algorithmus zu bestimmen. Angenommen, es ist sicher, nachdem vielleicht 30 Levels von Kindern generiert wurden :) (Natürlich könnte es am 31. bombardieren)


1
Das OP fragt nach Beweistechniken, nicht nach Algorithmen.
Raphael

2
Das kann unmöglich ein Weg sein, um zu beweisen, ob eine Grammatik mehrdeutig ist oder nicht. Tatsächlich ist es nicht zu entscheiden, wann diese Bombardierung stattfindet .
Sнаđошƒаӽ
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.