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
- Beweisen Sie .L⊆L(G)
- 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=0∞tnzn
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,a0…ak)∈δ ∏i=0k τ(ai) :A∈N⎤⎦ with τ(a)={a(z)z,a∈N,a∈T.
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
S→aSa∣bSb∣ε .
Es ist klar, dass (Schritt 1, Beweis durch Induktion). Es gibt Palindrome der Länge wenn ist, sonst .2 nL(G)={wwR∣w∈{a,b}∗} nn02n2nn0
Aufstellung des Gleichungssystems ergibt
S(z)=2z2S(z)+1
wessen Lösung ist
SG(z)=11−2z2 .
Die Koeffizienten von stimmen mit der Anzahl der Palindrome überein , so dass eindeutig ist. GSG G
- Die algebraische Theorie kontextfreier Sprachen von Chomsky, Schützenberger (1963)
- Zur Entropie kontextfreier Sprachen von Kuich (1970)
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.
quelle
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}
Alle Wörter der Länge in L ( G ) - es gibt nur ε - haben nur noch eine Ableitung.≤1 L(G) ε
Dies wird schwieriger, wenn
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.
quelle
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)
quelle