Kontextfreie Grammatik
Im formelle Sprache Theorie, a Kontextfreie Grammatik (CFG) ist ein formelle Grammatik Deren Produktionsregeln sind von der Form
mit a Single nicht terminal Symbol und ein Faden von Terminals und/oder nicht terminale ( kann leer sein). Eine formale Grammatik ist "kontextfrei", wenn ihre Produktionsregeln unabhängig vom Kontext eines Nicht -terminalen Antrags angewendet werden können. Unabhängig davon, welche Symbole es umgeben, kann der einzelne nicht terminale auf der linken Seite immer durch die rechte Seite ersetzt werden. Das unterscheidet es von a Kontextsensitive Grammatik.
Eine formale Grammatik ist im Wesentlichen eine Reihe von Produktionsregeln, die alle möglichen Zeichenfolgen in einer bestimmten formalen Sprache beschreiben. Produktionsregeln sind einfache Ersetzungen. Zum Beispiel die erste Regel im Bild,
ersetzt mit . Es kann mehrere Ersatzregeln für ein bestimmtes nicht terminales Symbol geben. Die von einer Grammatik erzeugte Sprache ist die Menge aller Zeichenfolgen von Terminalsymbolen, die durch wiederholte Regelanwendungen aus einem bestimmten nicht terminalen Symbol abgeleitet werden können ("Startsymbol"). Nicht terminale Symbole werden während des Ableitungsprozesses verwendet, erscheinen jedoch nicht in seiner Endergebniszeichenfolge.
Sprachen Erzeugt durch kontextfreie Grammatiken sind als bekannt als als Kontextfreie Sprachen (CFL). Verschiedene kontextfreie Grammatiken können dieselbe kontextfreie Sprache erzeugen. Es ist wichtig, die Eigenschaften der Sprache (intrinsische Eigenschaften) von den Eigenschaften einer bestimmten Grammatik (extrinsische Eigenschaften) zu unterscheiden. Das Sprachgleichheit Frage (zwei gegebene kontextfreie Grammatiken erzeugen dieselbe Sprache?) ist unentscheidbar.
Kontextfreie Grammatiken entstehen in Linguistik wo sie verwendet werden, um die Struktur von Sätzen und Wörtern in a zu beschreiben Natürliche Spracheund sie wurden vom Linguisten erfunden Noam Chomsky für diesen Zweck. Dagegen in InformatikMit zunehmender Verwendung rekursiv definierter Konzepte wurden sie immer mehr verwendet. In einer frühen Anwendung werden Grammatiken verwendet, um die Struktur von zu beschreiben Programmiersprachen. In einer neueren Anwendung werden sie in einem wesentlichen Teil der verwendet Erweiterbare Markup -Sprache (Xml) genannt die Dokumenttypdefinition.[2]
Im LinguistikEinige Autoren verwenden den Begriff Phrasenstruktur Grammatik sich auf kontextfreie Grammatiken beziehen, wobei die Phrase-Struktur-Grammatiken sich von unterschiedlich unterscheiden Abhängigkeitsgrammatiken. Im InformatikEine beliebte Notation für kontextfreie Grammatiken ist Backus -Naur -Form, oder Bnf.
Hintergrund
Seit der Zeit von PāṇiniZumindest haben Linguisten das beschrieben Grammatiken von Sprachen in Bezug auf ihre Blockstruktur und beschrieben, wie Sätze sind rekursiv aus kleineren Sätzen und schließlich einzelne Wörter oder Wortelemente aufgebaut. Eine wesentliche Eigenschaft dieser Blockstrukturen ist, dass sich logische Einheiten nie überlappen. Zum Beispiel der Satz:
- John, dessen blauer Auto in der Garage war, ging zum Lebensmittelgeschäft.
kann logisch klammern (mit den logischen Metasymbolen [ ]) folgendermaßen:
- [John[, [Deren [blaues Auto]] [war [in [die Garage]]],]] [ging [zu [das [Lebensmittelmarkt]]]].
Eine kontextfreie Grammatik bietet einen einfachen und mathematisch präzisen Mechanismus, um die Methoden zu beschreiben, mit denen Phrasen in einer natürlichen Sprache aus kleineren Blöcken hergestellt werden, wodurch die "Blockstruktur" von Sätzen auf natürliche Weise erfasst wird. Seine Einfachheit macht den Formalismus, der für strenge mathematische Studien zugänglich ist. Wichtige Merkmale der natürlichen Sprachsyntax wie z. Zustimmung und Hinweis sind nicht Teil der kontextfreien Grammatik, sondern die grundlegende rekursive Struktur von Sätzen, die Art und Weise, wie Klauseln innerhalb anderer Klauseln nisten, und die Art und Weise, wie Listen von Adjektiven und Adverbien von Substantiven und Verben verschluckt werden, wird genau beschrieben.
Kontextfreie Grammatiken sind eine besondere Form von Semi-Thue-Systeme das in ihrer allgemeinen Form stammt aus der Arbeit von Axel Thue.
Der Formalismus kontextfreier Grammatiken wurde Mitte der 1950er Jahre von entwickelt Noam Chomsky,[3] und auch ihre Klassifizierung als besonderer Typ von formelle Grammatik (was er nannte Phrase-Struktur-Grammatiken).[4] Einige Autoren behalten sich jedoch den Begriff für eingeschränktere Grammatiken in der Chomsky-Hierarchie vor: kontextsensitive Grammatiken oder kontextfreie Grammatiken. In einem weiteren Sinne, Phrase Struktur -Grammatiken sind auch als Wahlkreis Grammatiken bekannt. Das definierende Merkmal der Phrase -Struktur -Grammatiken ist daher ihre Einhaltung der Wahlkreis -Beziehung im Gegensatz zur Abhängigkeitsbeziehung von Abhängigkeitsgrammatiken. In Chomsky Generative Grammatik Framework, die Syntax der natürlichen Sprache wurde durch kontextfreie Regeln beschrieben, die mit Transformationsregeln kombiniert wurden.[5]
Die Blockstruktur wurde in den Computer eingeführt Programmiersprachen bis zum Algol Projekt (1957–1960), das infolgedessen auch eine kontextfreie Grammatik zur Beschreibung der resultierenden Algol-Syntax enthielt. Dies wurde zu einem Standardmerkmal von Computersprachen, und die Notation für Grammatiken, die in konkreten Beschreibungen von Computersprachen verwendet wurden Backus -Naur -Form, nach zwei Mitgliedern des Algol Language Design Committee.[3] Der Aspekt der "Blockstruktur", den kontextfreie Grammatiken erfassen, ist für die Grammatik so grundlegend, dass die Begriffe Syntax und Grammatik häufig mit kontextfreien Grammatikregeln, insbesondere in der Informatik, identifiziert werden. Formale Einschränkungen, die nicht von der Grammatik erfasst werden, gelten dann als Teil der "Semantik" der Sprache.
Kontextfreie Grammatiken sind einfach genug, um die Konstruktion effizienter zu ermöglichen Parsing -Algorithmen Das Bestimmen Sie für eine bestimmte Zeichenfolge, ob und wie sie aus der Grammatik erzeugt werden kann. Ein Earley Parser ist ein Beispiel für einen solchen Algorithmus, während die weit verbreiteten Lr und LL Parser sind einfachere Algorithmen, die sich nur mit restriktiveren Untergruppen kontextfreier Grammatiken befassen.
Formale Definitionen
Eine kontextfreie Grammatik G wird durch das 4- definiertTupel , wo[6]
- V ist ein endliches Set; Jedes Element wird genannt ein nicht terminaler Charakter oder ein Variable. Jede Variable repräsentiert eine andere Art von Phrase oder Klausel im Satz. Variablen werden manchmal auch als syntaktische Kategorien bezeichnet. Jede Variable definiert eine Untersprachigkeit der von definierten Sprache durch G.
- Σ ist ein endlicher Satz von Terminals, disjunkt von V, die den tatsächlichen Inhalt des Satzes ausmachen. Der Satz von Terminals ist das Alphabet der von der Grammatik definierten Sprache G.
- R ist eine endliche Beziehung in , wo das Stern das Stern das darstellt Kleene Star Betrieb. Die Mitglieder von R werden als die genannt (umschreiben) Regels oder Produktions der Grammatik. (auch üblicherweise symbolisiert durch a P)
- S ist die Startvariable (oder Startsymbol), die zur Darstellung des gesamten Satzes (oder Programms) verwendet wird. Es muss ein Element von sein V.
Produktionsregel Notation
A Produktionsregel in R ist als Paar mathematisch formalisiert , wo ist ein nicht terminaler und ist ein Saite von Variablen und/oder Terminals; anstatt zu verwenden geordnetes Paar Notation, Produktionsregeln werden normalerweise mit einem Pfeilbetreiber mit geschrieben Wie seine linke Seite und β als rechte Seite:.
Es ist erlaubt für β zu sein leerer Stringund in diesem Fall ist es üblich, es durch ε zu bezeichnen. Die Form wird als ein genannt ε-Produktion.[7]
Es ist üblich, alle rechten Seiten für dieselbe linke Seite auf derselben Zeile unter Verwendung von | aufzulisten (das Rohrsymbol) um sie zu trennen. Regeln und kann daher als geschrieben werden als . In diesem Fall, und werden als erste bzw. zweite Alternative bezeichnet.
Regelantrag
Für alle Saiten , wir sagen u direkt ergibt v, geschrieben als , wenn mit und so dass und . Daher, v ist ein Ergebnis der Anwendung der Regel zu u.
Repetitive Regelanwendung
Für alle Saiten wir sagen u ergibt v oder v ist abgeleitet aus u Wenn es eine positive Ganzzahl gibt k und Saiten so dass . Diese Beziehung ist bezeichnet , oder In einigen Lehrbüchern. Wenn , die Beziehung hält. Mit anderen Worten, und sind die Reflexive transsitive Schließung (Erlauben einer Zeichenfolge, sich selbst zu ergeben) und die Transitive Schließung (mindestens einen Schritt erfordert) von , beziehungsweise.
Kontextfreie Sprache
Die Sprache einer Grammatik ist das Set
Von allen terminal-symbols abgeleitet vom startsymbol abgeleitet.
Eine Sprache L soll eine kontextfreie Sprache (CFL) geben, wenn es eine CFG gibt G, so dass .
Nichtdeterministische Pushdown-Automaten Erkennen Sie genau die kontextfreien Sprachen.
Beispiele
Wörter, die mit ihrem Rückwärtsgang verkettet wurden
Die Grammatik , mit Produktionen
- S → Als ein,
- S → BSB,
- S → ε,
ist kontextfrei. Es ist nicht richtig, da es eine ε-Produktion enthält. Eine typische Ableitung in dieser Grammatik ist
- S → Als ein → aasaa → Aabsbaa → Aabbaa.
Das macht deutlich, dass das klar ist. Die Sprache ist kontextfrei, kann jedoch bewiesen werden, dass dies nicht der Fall ist regulär.
Wenn die Produktionen
- S → a,
- S → b,
werden hinzugefügt, eine kontextfreie Grammatik für den Satz aller Palindrome über dem Alphabet { a, b } wird erhalten.[8]
Gut geformte Klammern
Das kanonische Beispiel für eine kontextfreie Grammatik ist die Klammernung, die für den allgemeinen Fall repräsentativ ist. Es gibt zwei terminale Symbole "(" und ")" und ein nicht terminales Symbol S. Die Produktionsregeln sind
- S → Ss,
- S → (S),
- S → ()
Die erste Regel erlaubt das S -Symbol, sich zu multiplizieren; Die zweite Regel ermöglicht es dem S -Symbol, durch passende Klammern einzuschließen. und die dritte Regel beendet die Rekursion.[9]
Gut geformte verschachtelte Klammern und quadratische Klammern
Ein zweites kanonisches Beispiel sind zwei verschiedene Arten von passenden verschachtelten Klammern, die von den Produktionen beschrieben wurden:
- S → Ss
- S → ()
- S → (S)
- S → []
- S → [S]
mit terminalen Symbolen [] () und nicht terminaler S.
Die folgende Sequenz kann in dieser Grammatik abgeleitet werden:
- ([[[() () [] [] []] ([])]))
Passende Paare
In einer kontextfreien Grammatik können wir Charaktere so kombinieren, wie wir es tun Klammern. Das einfachste Beispiel:
- S → ASB
- S → AB
Diese Grammatik erzeugt die Sprache , was nicht ist regulär (laut dem Lemma für reguläre Sprachen pumpen).
Das spezielle Zeichen ε steht für die leere Zeichenfolge. Durch Ändern der obigen Grammatik zu
- S → ASB
- S → ε
Wir erhalten eine Grammatik, die die Sprache erzeugt stattdessen. Dies unterscheidet sich nur insofern, als es die leere Zeichenfolge enthält, während die ursprüngliche Grammatik nicht der Fall ist.
Deutliche Anzahl von A und Bs
Eine kontextfreie Grammatik für die Sprache, die aus allen Zeichenfolgen über {a, b} besteht, die eine ungleiche Anzahl von A und B enthält:
- S → T | U
- T → Vat | Vav | Tav
- U → VBU | VBV | UBV
- V → AVBV | bvav | ε
Hier kann das nicht terminale T alle Saiten mit mehr A als B erzeugen, das nicht terminale U erzeugt alle Saiten mit mehr Bs als A und der nicht terminale V erzeugt alle Saiten mit einer gleichen Anzahl von A und B. Das Auslassen der dritten Alternative in den Regeln für T und u schränkt die Sprache der Grammatik nicht ein.
Zweiter Block von B von doppelter Größe
Ein weiteres Beispiel für eine nichtreguläre Sprache ist . Es ist kontextfrei, da es durch die folgende kontextfreie Grammatik generiert werden kann:
- S → BSBB | A
- A → aa | ε
Logikformeln erster Ordnung
Das Formationsregeln Für die Begriffe und Formeln der formalen Logik passen die Definition der kontextfreien Grammatik an, mit der Ausnahme, dass der Satz von Symbolen unendlich sein kann und es möglicherweise mehr als ein Startsymbol gibt.
Beispiele für Sprachen, die nicht kontextfrei sind
Im Gegensatz zu gut geformten verschachtelten Klammern und Quadratklammern im vorherigen Abschnitt gibt es keine kontextfreie Grammatik, um alle Sequenzen von zwei verschiedenen Arten von Klammern zu erzeugen, die jeweils getrennt ausgeglichen sind den anderen ignorieren, wo die beiden Typen beispielsweise nicht ineinander nisten müssen:
- [(])
oder
- [[[[[((((]]]))) (([)) (([)) ([) (]) (]) (]) (]) (])
Die Tatsache, dass diese Sprache nicht kontextfrei ist Lemma für kontextfreie Sprachen pumpen und ein Beweis durch Widerspruch, um zu beobachten, dass alle Wörter der Form sollte zur Sprache gehören. Diese Sprache gehört stattdessen zu einer allgemeineren Klasse und kann durch a beschrieben werden Konjunktive Grammatik, was wiederum auch andere nicht kontextfreie Sprachen enthält, wie die Sprache aller Wörter der Form.
Regelmäßige Grammatiken
Jeder Regelmäßige Grammatik ist kontextfrei, aber nicht alle kontextfreien Grammatiken sind regelmäßig.[10] Die folgende kontextfreie Grammatik ist beispielsweise ebenfalls regelmäßig.
- S → a
- S → wie
- S → BS
Die Terminals hier sind a und b, während der einzige Nichtterminal ist S. Die beschriebene Sprache ist alle nicht leere Zeichenfolgen von s und s, das endet in .
Diese Grammatik ist regulär: Keine Regel hat mehr als einen Nicht-terminalen Aufenthalt auf der rechten Seite, und jedes dieser Nicht-Terminals befindet sich am selben Ende der rechten Seite.
Jede reguläre Grammatik entspricht direkt zu a Nichtdeterministisches endliches Automaten, also wissen wir, dass dies ein ist Regelmäßige Sprache.
Mit Rohrsymbolen kann die obige Grammatik wie folgt stärker beschrieben werden:
- S → a | wie | BS
Ableitungen und Syntaxbäume
A Ableitung einer String für eine Grammatik ist eine Abfolge von Grammatikregelanwendungen, die das Startsymbol in die Zeichenfolge umwandeln. Eine Ableitung beweist, dass die Saite zur Sprache der Grammatik gehört.
Für jeden Schritt wird eine Ableitung vollständig durch Geben bestimmt:
- Die in diesem Schritt angewendete Regel
- Das Auftreten seiner linken Seite, auf die es angewendet wird
Aus Gründen der Klarheit wird die Zwischenzeichenfolge normalerweise ebenfalls angegeben.
Zum Beispiel mit der Grammatik:
- S → S + S
- S → 1
- S → a
die Saite
- 1 + 1 + a
kann vom Startsymbol abgeleitet werden S mit der folgenden Ableitung:
- S
- → S + S (nach Regel 1. auf S)
- → S + S + S (nach Regel 1. im zweiten S)
- → 1 + S + S (nach Regel 2. im ersten S)
- → 1 + 1 + S (nach Regel 2. im zweiten S)
- → 1 + 1 + a (nach Regel 3. auf dem dritten S)
Oft wird eine Strategie befolgt, die deterministisch den nächsten Nicht -terminalen Umschreiben wählt:
- in einem Ableitungen links, es ist immer die nicht terminalen links;
- in einem rechts abgeleitetEs ist immer das rechts nicht terminale.
Bei einer solchen Strategie wird eine Ableitung vollständig durch die Abfolge der angewandten Regeln bestimmt. Zum Beispiel ist eine Ableitung der linken Ableitung derselben Zeichenfolge
- S
- → S + S (nach Regel 1 am linken S)
- → 1 + S (nach Regel 2 am linken S)
- → 1 + S + S (nach Regel 1 am linken S)
- → 1 + 1 + S (nach Regel 2 am linken S)
- → 1 + 1 + a (nach Regel 3 am linken S),
was als zusammengefasst werden kann als
- Regel 1
- Regel 2
- Regel 1
- Regel 2
- Regel 3.
Eine Ableitung des Rechts ist:
- S
- → S + S (nach Regel 1 zum rechts am weitesten S)
- → S + S + S (nach Regel 1 zum rechts am weitesten S)
- → S + S + a (nach Regel 3 zum rechten am weitesten S)
- → S + 1 + a (nach Regel 2 zum rechten am weitesten S)
- → 1 + 1 + a (nach Regel 2 zum rechten am weitesten S),
was als zusammengefasst werden kann als
- Regel 1
- Regel 1
- Regel 3
- Regel 2
- Regel 2.
Die Unterscheidung zwischen der Ableitung des linken und rechts von rechts ist wichtig, weil in den meisten Parser Die Transformation der Eingabe wird definiert, indem für jede Grammatikregel, die ausgeführt wird, wenn die Regel angewendet wird, ein Stück Code angegeben. Daher ist es wichtig zu wissen, ob der Parser eine Ableitung des linken oder rechtlichen Abgangs links bestimmt, da dies die Reihenfolge bestimmt, in der die Codestücke ausgeführt werden. Ein Beispiel für ein Beispiel LL Parser und LR -Parser.
Eine Ableitung verhängt auch in gewissem Sinne eine hierarchische Struktur auf der abgeleiteten Zeichenfolge. Wenn beispielsweise die Zeichenfolge "1 + 1 + a" gemäß der oben beschriebenen linken Ableitung abgeleitet ist, wäre die Struktur der Zeichenfolge:
- {{1}S + {{1}S + {{a}S}S}S
wo {...}S zeigt ein Substring an, das als Zugehörigkeit anerkannt ist S. Diese Hierarchie kann auch als Baum angesehen werden:
Dieser Baum wird a genannt Baum analysieren oder "Betonsyntaxbaum" der Schnur dagegen mit dem Zusammenfassung Syntaxbaum. In diesem Fall definieren die vorgestellten linken und die Ableitungen des Rechts denselben Parse -Baum; Es gibt jedoch eine weitere Ableitung derselben Zeichenfolge
- S
- → S + S (nach Regel 1 zum rechts am weitesten S)
- → S + a (nach Regel 3 zum rechten am weitesten S)
- → S + S + a (nach Regel 1 zum rechts am weitesten S)
- → S + 1 + a (nach Regel 2 zum rechten am weitesten S)
- → 1 + 1 + a (nach Regel 2 zum rechten am weitesten S),
Dies definiert eine Zeichenfolge mit einer anderen Struktur
- {{{1}S + {1}S}S + {{a}S}S
und ein anderer Parse Tree:
Beachten Sie jedoch, dass beide Parse -Bäume sowohl durch links als auch durch die Ableitungen am linken und rechts erhalten werden können. Zum Beispiel kann der letzte Baum mit der linken Ableitung wie folgt erhalten werden:
- S
- → S + S (nach Regel 1 am linken S)
- → S + S + S (nach Regel 1 am linken S)
- → 1 + S + S (nach Regel 2 am linken S)
- → 1 + 1 + S (nach Regel 2 am linken S)
- → 1 + 1 + a (nach Regel 3 am linken S),
Wenn eine Saite in der Sprache der Grammatik mehr als einen Parsenbaum hat, dann soll die Grammatik eine sein mehrdeutige Grammatik. Solche Grammatiken sind in der Regel schwer zu analysieren, da der Parser nicht immer entscheiden kann, welche Grammatikregel er bewerben muss. Normalerweise ist Unklarheit ein Merkmal der Grammatik, nicht der Sprache, und es gibt eine eindeutige Grammatik, die dieselbe kontextfreie Sprache erzeugt. Es gibt jedoch bestimmte Sprachen, die nur durch mehrdeutige Grammatiken erzeugt werden können. Solche Sprachen werden genannt von Natur aus mehrdeutige Sprachen.
Beispiel: Algebraische Ausdrücke
Hier ist eine kontextfreie Grammatik für syntaktisch korrekt Infix Algebraische Ausdrücke in den Variablen x, y und z:
- S → x
- S → y
- S → z
- S → S + S
- S → S – S
- S → S * S
- S → S / S
- S → (S)
Diese Grammatik kann beispielsweise die Zeichenfolge erzeugen
- (x + y) * x – z * y / (x + x)
folgendermaßen:
- S
- → S – S (nach Regel 5)
- → S * S – S (nach Regel 6, angewendet zu den linken links S)
- → S * S – S / S (nach Regel 7, nach rechts angewendet S)
- → (S) * S – S / S (nach Regel 8, angewendet zu den linken links S)
- → (S) * S – S / (S) (nach Regel 8, nach rechts angewendet S)
- → (S + S) * S – S / (S) (nach Regel 4, angewendet zu den linken links S)
- → (S + S) * S – S * S / (S) (nach Regel 6, angewendet auf den vierten S)
- → (S + S) * S – S * S / (S + S) (nach Regel 4, nach rechts angewendet S)
- → (x + S) * S – S * S / (S + S) (etc.)
- → (x + y) * S – S * S / (S + S)
- → (x + y) * x – S * S / (S + S)
- → (x + y) * x – z * S / (S + S)
- → (x + y) * x – z * y / (S + S)
- → (x + y) * x – z * y / (x + S)
- → (x + y) * x – z * y / (x + x)
Beachten Sie, dass viele Auswahlmöglichkeiten getroffen wurden, welche Umschreibungen als nächstes durchgeführt werden sollten. Diese Entscheidungen sehen ziemlich willkürlich aus. Tatsächlich sind sie in dem Sinne, dass die schließlich erzeugte Zeichenfolge immer gleich ist. Zum Beispiel der zweite und dritte schreibt um
- → S * S – S (nach Regel 6, angewendet zu den linken links S)
- → S * S – S / S (nach Regel 7, nach rechts angewendet S)
könnte in der entgegengesetzten Reihenfolge erfolgen:
- → S – S / S (nach Regel 7, nach rechts angewendet S)
- → S * S – S / S (nach Regel 6, angewendet zu den linken links S)
Außerdem wurden viele Möglichkeiten getroffen S. Ändern der getroffenen Auswahlmöglichkeiten und nicht nur die Reihenfolge, in der sie getroffen wurden, betrifft normalerweise die terminale Zeichenfolge am Ende.
Schauen wir uns dies genauer an. Bedenke die Baum analysieren dieser Ableitung:
Beginnend oben, Schritt für Schritt wird ein S im Baum erweitert, bis nicht mehr nicht verblüfft ist SES (Nicht -Terminale) bleiben. Durch die Auswahl einer anderen Ausdehnungserweiterungsreihenfolge wird eine andere Ableitung erzeugt, aber der gleiche Parse Tree. Der Parse Tree ändert sich nur, wenn wir eine andere Regel auswählen, die sie an einer Position im Baum anwenden können.
Kann ein anderer Parse -Baum jedoch immer noch dieselbe terminale Saite produzieren, nämlich (x + y) * x – z * y / (x + x) in diesem Fall? Ja, für diese bestimmte Grammatik ist dies möglich. Grammatiken mit dieser Eigenschaft werden genannt zweideutig.
Zum Beispiel, x + y * z kann mit diesen beiden verschiedenen Parse -Bäumen hergestellt werden:
Allerdings die Sprache Von dieser Grammatik beschrieben ist nicht von Natur aus mehrdeutig: Eine alternative, eindeutige Grammatik kann beispielsweise für die Sprache angegeben werden:
- T → x
- T → y
- T → z
- S → S + T
- S → S – T
- S → S * T
- S → S / T
- T → (S)
- S → T,
Wieder einmal pflücken S als Startsymbol. Diese alternative Grammatik wird produzieren x + y * z mit einem analysierten Baum ähnlich der linken oben, d. H. Implizit die Assoziation annehmen (x + y) * z, was nicht dem Standard folgt Operationsreihenfolge. Aufwändige, eindeutige und kontextfreie Grammatiken können konstruiert werden, die analysende Bäume produzieren, die allen gewünscht werden Vorrang und Assoziativitätsregeln.
Normale Formen
Jede kontextfreie Grammatik ohne ε-Produktion hat eine äquivalente Grammatik in Chomsky Normale Formund eine Grammatik in Greibach Normale Form. "Äquivalent" bedeutet hier, dass die beiden Grammatiken dieselbe Sprache erzeugen.
Die besonders einfache Form der Produktionsregeln in Chomsky Normal Form -Grammatiken hat sowohl theoretische als auch praktische Auswirkungen. Zum Beispiel kann man bei einer kontextfreien Grammatik die Chomsky-Normalform verwenden, um a zu konstruieren Polynomzeit Algorithmus, der entscheidet, ob sich eine bestimmte Zeichenfolge in der Sprache befindet, die durch diese Grammatik dargestellt wird oder nicht (die CYK -Algorithmus).
Verschlusseigenschaften
Kontextfreie Sprachen sind abgeschlossen unter den verschiedenen Operationen, dh wenn die Sprachen K und L sind kontextfrei, ebenso das Ergebnis der folgenden Operationen:
- Union K ∪ L; Verkettung K ∘ L; Kleene Star L*[11]
- Auswechslung (im Speziellen Homomorphismus)[12]
- inverser Homomorphismus[13]
- Überschneidung mit einer Regelmäßige Sprache[14]
Sie sind nicht unter allgemeiner Kreuzung geschlossen (daher auch nicht unter Ergänzung) und Unterschied setzen.[15]
Lehnte Probleme
Das Folgende sind einige lehnte Probleme mit kontextfreien Grammatiken.
Parsing
Das Analyseproblem, das überprüft, ob ein bestimmtes Wort der Sprache einer kontextfreien Grammatik gehört, ist unter Verwendung eines der allgemeinen Parsing-Algorithmen enttäuscht:
- CYK -Algorithmus (für Grammatiken in Chomsky Normale Form)
- Earley Parser
- GLR -Parser
- LL Parser (Nur für die richtige Unterklasse von für LL (k) Grammatiken)
Kontextfreies Parsen für Chomsky Normale Form Grammatiken wurden durch gezeigt Leslie G. Valiant auf boolean reduzierbar sein Matrix-Multiplikationsomit die Obergrenze von der Komplexität von der Obergrenze von O(n2.3728639).[16][17][Anmerkung 1] Umgekehrt, Lillian Lee hat gezeigt O(n3 - ε) Boolesche Matrix -Multiplikation, um auf reduzierbar zu sein O(n3 - 3 & epsi;) CFG -Parsen und so eine Art untere Grenze für letztere.[18]
Erreichbarkeit, Produktivität, Nullabilität
Beispiel Grammatik: | |||
---|---|---|---|
S → BB | CC | EE | |||
B → BB | b | |||
C → C | |||
D → Bd | CD | d | |||
E → EE |
Ein nicht terminales Symbol wird genannt produktiv, oder Erstellen, wenn es eine Ableitung gibt für eine Zeichenfolge von terminalen Symbolen. wird genannt erreichbar Wenn es eine Ableitung gibt für einige Saiten von nicht terminalen und terminalen Symbolen aus dem Startsymbol. wird genannt nicht zu gebrauchen Wenn es nicht erreichbar oder unproduktiv ist. wird genannt Nullbar Wenn es eine Ableitung gibt . Eine Regel wird als ein genannt εproduktion. Eine Ableitung wird als a genannt Kreislauf.
Es ist bekannt, dass Algorithmen aus einer bestimmten Grammatik eliminieren, ohne ihre erzeugte Sprache zu ändern.
- unproduktive Symbole,[19][Anmerkung 2]
- unerreichbare Symbole,[21][22][23]
- εproduktionen, mit einer möglichen Ausnahme,[Notiz 3][24] und
- Fahrräder.[Anmerkung 4]
Insbesondere kann eine Alternative mit einem nutzlosen nicht terminalen Symbol von der rechten Seite einer Regel gelöscht werden. Solche Regeln und Alternativen werden genannt nicht zu gebrauchen.[25]
In der dargestellten Beispiel Grammatik der Nicht -terminalen D ist unerreichbar und E ist zwar unproduktiv, während C → C verursacht einen Zyklus. Daher ändert das Auslassen der letzten drei Regeln weder die von der Grammatik generierte Sprache noch das Auslassen der Alternativen "| CC | EE"Von der rechten Seite der Regel für S.
Eine kontextfreie Grammatik soll sein richtig Wenn es weder nutzlose Symbole noch ε-Produktionen oder Zyklen hat.[26] Kombinieren Sie die obigen Algorithmen und jede kontextfreie Grammatik kann nicht ε in a transformiert werden schwach äquivalent richtig.
Regelmäßigkeit und LL (k) Überprüfungen
Es ist lehnte, ob eine gegebene Grammatik ist ein Regelmäßige Grammatik,[27] und ob es ein ist LL(k) Grammatik für ein gegebenes k≥0.[28]: 233 Wenn k Es ist nicht gegeben, das letztere Problem ist unentscheidbar.[28]: 252
Bei einem kontextfreien SpracheEs ist weder entschlossen, ob es regelmäßig ist,[29] noch, ob es ein LL ist (k) Sprache für eine gegebene k.[28]: 254
Leere und Endlichkeit
Es gibt Algorithmen, um zu entscheiden, ob eine Sprache einer bestimmten kontextfreien Sprache leer ist und ob sie endlich ist.[30]
Unentscheidbare Probleme
Einige Fragen, die für breitere Grammatikklassen nicht negativ sind, werden für kontextfreie Grammatiken entzündbar. z.B. das Leeresproblem (Ob die Grammatik überhaupt keine terminalen Zeichenfolgen erzeugt), ist für unentscheidbar für Kontextsensitive Grammatiken, aber für kontextfreie Grammatiken entschlossen.
Viele Probleme sind jedoch unentscheidbar Auch für kontextfreie Grammatiken. Beispiele sind:
Universalität
Erzeugt es bei einem CFG die Sprache aller Saiten über dem Alphabet der in seinen Regeln verwendeten terminalen Symbole?[31][32]
Eine Reduzierung kann dieses Problems aus dem bekannten, unentschlossenen Problem der Bestimmung eines feststellen, ob a Turing Maschine akzeptiert eine bestimmte Eingabe (die Problem stoppen). Die Reduktion verwendet das Konzept von a Berechnungsgeschichte, eine Zeichenfolge, die eine ganze Berechnung von a beschreibt Turing Maschine. Ein CFG kann konstruiert werden, das alle Zeichenfolgen erzeugt, die keine Berechnungsgeschichten für eine bestimmte Turing -Maschine für eine bestimmte Eingabe akzeptieren, und akzeptiert daher nur alle Zeichenfolgen, wenn die Maschine diese Eingabe nicht akzeptiert.
Sprachgleichheit
Erzeugen sie bei zwei CFGs die gleiche Sprache?[32][33]
Die Unentschlossenheit dieses Problems ist eine direkte Folge des vorherigen: Es ist unmöglich zu entscheiden, ob ein CFG dem trivialen CFG entspricht, der die Sprache aller Strings definiert.
Spracheinschluss
Kann der erste bei zwei CFGs alle Saiten erzeugen, die der zweite erzeugen kann?[32][33]
Wenn dieses Problem entscheidbar wäre, könnte auch die Sprachgleichheit entschieden werden: Zwei CFGS G1 und G2 erzeugen dieselbe Sprache, wenn L (G1) eine Teilmenge von L (G2) und L (G2) eine Teilmenge von L (G1) ist.
In einer niedrigeren oder höheren Ebene der Chomsky -Hierarchie sein
Verwendung Greibachs TheoremEs kann gezeigt werden, dass die beiden folgenden Probleme unentscheidbar sind:
- Angenommen Kontextsensitive GrammatikBeschreibt es eine kontextfreie Sprache?
- Beschreibt es a bei einer kontextfreien Grammatik a Regelmäßige Sprache?[32][33]
Grammatikdeutigkeit
Bei einem CFG ist es zweideutig?
Die Unentschlossenheit dieses Problems ergibt sich aus der Tatsache, dass, wenn ein Algorithmus zur Bestimmung der Unklarheiten vorhanden ist, die Postkorrespondenzproblem könnte entschieden werden, was als unentscheidbar bekannt ist.
Sprachdisjunktiz
Gibt es bei zwei CFGs eine String -Ableitung von beiden Grammatiken?
Wenn dieses Problem lernbar war, ist das Unentscheidbare Postkorrespondenzproblem könnte auch entschieden werden: gegebene Saiten über etwas Alphabet , lass die Grammatik bestehen aus der Regel
- ;
wo bezeichnet die umgedreht Saite und tritt unter den nicht auf ; und lass Grammatik bestehen aus der Regel
- ;
Dann das Postproblem von hat eine Lösung, wenn und nur wenn und Teilen Sie eine abendbare Zeichenfolge.
Erweiterungen
Eine offensichtliche Möglichkeit, den kontextfreien Grammatikformalismus zu erweitern, besteht darin, dass Nicht-Terminale Argumente haben, deren Werte innerhalb der Regeln weitergegeben werden. Dies ermöglicht natürliche Sprachmerkmale wie z. Zustimmung und Hinweisund Programmiersprache Analoga wie die korrekte Verwendung und Definition von Kennungen, die auf natürliche Weise ausgedrückt werden sollen. Z.B. Wir können jetzt leicht ausdrücken, dass das Thema und das Verb in englischen Sätzen in der Anzahl zustimmen müssen. In der Informatik sind Beispiele für diesen Ansatz gehören Betix -Grammatiken, Grammatiken zuschreiben, indizierte Grammatikenund van wijngaarden zweistufige Grammatiken. Ähnliche Erweiterungen bestehen in der Linguistik.
Ein erweiterte kontextfreie Grammatik (oder Regelmäßige Grammatik der richtigen Teil) ist einer, in dem die rechte Seite der Produktionsregeln a sein darf regulären Ausdruck über die Terminals und Nonterminals der Grammatik. Erweiterte kontextfreie Grammatiken beschreiben genau die kontextfreien Sprachen.[34]
Eine andere Erweiterung besteht darin, dass zusätzliche Terminalsymbole auf der linken Seite der Regeln erscheinen und ihre Anwendung einschränken. Dies schafft den Formalismus von Kontextsensitive Grammatiken.
Unterklassen
Es gibt eine Reihe wichtiger Unterklassen der kontextfreien Grammatiken:
- LR (k) Grammatiken (auch bekannt als deterministische kontextfreie Grammatiken) ermöglichen Parsing (Stringerkennung) mit Deterministische Pushdown -Automaten (PDA), aber sie können nur beschreiben deterministische kontextfreie Sprachen.
- Einfacher LR, Look-Ahead LR Grammatiken sind Unterklassen, die eine weitere Vereinfachung des Parsens ermöglichen. SLR und LALR werden in den meisten Fällen mit derselben PDA wie LR, jedoch mit einfacheren Tabellen, erkannt.
- LL(k) und ll (*) Grammatiken ermöglichen das Parsen durch direkte Konstruktion einer Ableitung des linken Abgangs wie oben beschrieben und beschreiben noch weniger Sprachen.
- Einfache Grammatiken sind eine Unterklasse der LL (1) Grammatiken, die meist für die theoretische Eigenschaft interessant sind, dass die Sprachgleichheit einfacher Grammatiken entzündbar ist, während die Spracheinschluss nicht der Fall ist.
- Grammatiken mit Klammern haben die Eigenschaft, dass die Terminalsymbole in Paare für die linke und rechte Klammer unterteilt sind, die immer in Regeln übereinstimmen.
- Lineare Grammatiken Haben Sie keine Regeln mit mehr als einem nicht terminalen auf der rechten Seite.
- Regelmäßige Grammatiken sind eine Unterklasse der linearen Grammatiken und beschreiben die regulär Sprachen, d. H. Sie entsprechen Finite Automaten und Reguläre Ausdrücke.
Die LR -Parsen erweitert LL Parsing, um eine größere Grammatikspanne zu unterstützen. im Gegenzug, Verallgemeinerte LR -Parsen Erweitert die LR-Parsen, um willkürliche kontextfreie Grammatiken zu unterstützen. Bei LL -Grammatiken und LR -Grammatiken führt es im Wesentlichen die LL -Parsen bzw. LR -Parsen durch, während es bei nichtdeterministischen Grammatiken so effizient ist, wie es zu erwarten ist. Obwohl in den 1980er Jahren die GLR -Parsing entwickelt wurde, viele neue Sprachdefinitionen und Parser -Generatoren Basierend auf LL, LALR oder LR, die sich bis heute analysieren.
Sprachanwendungen
Chomsky Ich hoffte zunächst, die Einschränkungen kontextfreier Grammatiken durch Zugabe zu überwinden Transformationsregeln.[4]
Solche Regeln sind ein weiteres Standardgerät in der traditionellen Sprachwissenschaft. z.B. Passivierung auf Englisch. Viel von Generative Grammatik wurde gewidmet, Wege zu finden, um die beschreibenden Mechanismen der Phrase-Struktur-Grammatik- und Transformationsregeln zu verfeinern, so dass genau die Arten von Dingen zum Ausdruck gebracht werden können, dass die natürliche Sprache tatsächlich zulässt. Das Zulassen willkürlicher Transformationen entspricht diesem Ziel nicht: Sie sind viel zu mächtig, Sein sein Turing vollständig Es sei denn, es werden signifikante Einschränkungen hinzugefügt (z. B. keine Transformationen, die Symbole kontextfrei einführen und dann umschreiben).
Chomskys allgemeine Position in Bezug auf die Nicht-Kontext-Festigkeit der natürlichen Sprache hat sich seitdem aufgehalten,[35] Obwohl seine spezifischen Beispiele bezüglich der Unzulänglichkeit kontextfreier Grammatiken in Bezug auf ihre schwache generative Kapazität später widerlegt wurden.[36] Gerald Gazdar und Geoffrey Pullum haben argumentiert, dass trotz einiger nicht kontextfreier Konstruktionen in der natürlichen Sprache (wie z. Cross-seriale Abhängigkeiten in Schweizerdeutsch[35] und Reduplizierung in Bambara[37]) Die überwiegende Mehrheit der Formen in der natürlichen Sprache ist in der Tat kontextfrei.[36]
Siehe auch
- Ausdrucksgrammatik analysieren
- Stochastische kontextfreie Grammatik
- Algorithmen für die kontextfreie Grammatikgenerierung
- Lemma für kontextfreie Sprachen pumpen
Verweise
- ^ Brian W. Kernighan und Dennis M. Ritchie (April 1988). Die C -Programmiersprache. Prentice Hall Software -Serie (2. Aufl.). Englewood Cliffs/NJ: Prentice Hall. ISBN 0131103628. Hier: App.A
- ^ Einführung in die Automatentheorie, Sprachen und Berechnung, John E. Hopcroft, Rajeev Motwani, Jeffrey D. Ullman, Addison Wesley, 2001, S. 191
- ^ a b Hopcroft & Ullman (1979), p. 106.
- ^ a b Chomsky, Noam (September 1956), "Drei Modelle für die Beschreibung der Sprache", IEEE -Transaktionen zur Informationstheorie, 2 (3): 113–124, doi:10.1109/tit.1956.1056813
- ^ https://web.stanford.edu/~jurafsky/slp3/12.pdf[Bare URL PDF]
- ^ Die Notation hier ist die von SIPSER (1997), p. 94. Hopcroft & Ullman (1979) (S. 79) Definieren Sie kontextfreie Grammatiken als 4-Tupel auf die gleiche Weise, jedoch mit unterschiedlichen Variablennamen.
- ^ Hopcroft & Ullman (1979), S. 90–92.
- ^ Hopcroft & Ullman (1979), Übung 4.1a, p. 103.
- ^ Hopcroft & Ullman (1979), Übung 4.1b, p. 103.
- ^ Aho, Alfred Vaino; Lam, Monica S.; Sethi, Ravi; Ullman, Jeffrey David (2007). "4.2.7 Kontextfreie Grammatiken gegen reguläre Ausdrücke" (drucken). Compiler: Prinzipien, Techniken und Werkzeuge (2. Aufl.). Boston, MA USA: Pearson Addison-Wesley. pp.205–206. ISBN 9780321486813.
Jedes Konstrukt, das durch einen regelmäßigen Ausdruck beschrieben werden kann, kann durch eine [kontextfreie] Grammatik beschrieben werden, jedoch nicht um umgekehrt.
- ^ Hopcroft & Ullman (1979), S.131, Satz 6.1
- ^ Hopcroft & Ullman (1979), S. 131–132, Satz 6.2
- ^ Hopcroft & Ullman (1979), S. 132–134, Satz 6.3
- ^ Hopcroft & Ullman (1979), S. 135–136, Theorem 6.5
- ^ Hopcroft & Ullman (1979), S. 134–135, Theorem 6.4
- ^ Leslie Valiant (Januar 1974). Allgemeine kontextfreie Erkennung in weniger als Kubikzeit (Technischer Bericht). Carnegie Mellon Universität. p. 11.
- ^ Leslie G. Valiant (1975). "Allgemeine kontextfreie Erkennung in weniger als kubisch". Journal of Computer and System Sciences. 10 (2): 308–315. doi:10.1016/s0022-0000 (75) 80046-8.
- ^ Lillian Lee (2002). "Eine schnelle kontextfreie Grammatik-Parsen erfordert eine schnelle Boolesche Matrix-Multiplikation" (PDF). J ACM. 49 (1): 1–15. Arxiv:CS/0112018. doi:10.1145/505241.505242. S2CID 1243491.
- ^ Hopcroft & Ullman (1979), Lemma 4.1, p. 88.
- ^ Aiken, A.; Murphy, B. (1991). "Implementierung regulärer Baumausdrücke". ACM -Konferenz über funktionale Programmiersprachen und Computerarchitektur. S. 427–447. Citeseerx 10.1.1.39.3766.; Hier: Sekte.4
- ^ Hopcroft & Ullman (1979), Lemma 4.2, p. 89.
- ^ Hopcroft, Motwani & Ullman (2003) , Satz 7.2, Abschn. 7.1, S.255ff
- ^ (PDF) https://www.springer.com/cda/content/document/cda_downloaddocument/9780387202488-c1.pdf?sgwid=0-0-45-466216-P52091986.
{{}}
: Fehlen oder leer|title=
(Hilfe) - ^ Hopcroft & Ullman (1979), Satz 4.3, p. 90.
- ^ John E. Hopcroft; Rajeev Motwani; Jeffrey D. Ullman (2003). Einführung in die Automatentheorie, Sprachen und Berechnung. Addison Wesley.; Hier: Abschn. 7.1.1, S.256
- ^ Nijholt, Anton (1980), Kontextfreie Grammatiken: Abdeckungen, normale Formen und Parsen, Vorlesungsnotizen in Informatik, Vol. 93, Springer, p. 8,, ISBN 978-3-540-10245-8, HERR 0590047.
- ^ Dies ist aus den Grammatikdefinitionen leicht zu erkennen.
- ^ a b c D.J. Rosenkrantz und R.E. Stearns (1970). "Eigenschaften deterministischer Top -Down -Grammatiken". Informationen und Kontrolle. 17 (3): 226–256. doi:10.1016/s0019-9958 (70) 90446-8.
- ^ Hopcroft & Ullman (1979), Übung 8.10a, p. 214. Das Problem bleibt unentscheidbar, auch wenn die Sprache durch eine "lineare" kontextfreie Grammatik erzeugt wird (d. H. Die höchste eine nicht terminale in der rechten Seite jeder Regel, vgl. Übung 4.20, S. 105).
- ^ Hopcroft & Ullman (1979), S. 137–138, Theorem 6.6
- ^ SIPSER (1997), Satz 5.10, p. 181.
- ^ a b c d Hopcroft & Ullman (1979), p. 281.
- ^ a b c HaMewinkel, Michiel (1994), Enzyklopädie der Mathematik: Eine aktualisierte und kommentierte Übersetzung der sowjetischen "mathematischen Enzyklopädie", Springer, Vol. Iv, p. 56, ISBN 978-1-55608-003-6.
- ^ Norvell, Theodore. "Eine kurze Einführung in reguläre Ausdrücke und kontextfreie Grammatiken" (PDF). p. 4. Abgerufen 24. August, 2012.
- ^ a b Shieber, Stuart (1985), "Beweise gegen die Kontextfeinheit der natürlichen Sprache" (PDF), Linguistik und Philosophie, 8 (3): 333–343, doi:10.1007/bf00630917, S2CID 222277837.
- ^ a b Pullum, Geoffrey K.; Gerald Gazdar (1982), "Natural Sprachen und kontextfreie Sprachen", Linguistik und Philosophie, 4 (4): 471–504, doi:10.1007/bf00360802, S2CID 189881482.
- ^ Culy, Christopher (1985), "Die Komplexität des Wortschatzes von Bambara", Linguistik und Philosophie, 8 (3): 345–351, doi:10.1007/bf00630918, S2CID 189881984.
Anmerkungen
- ^ In Valiants Papieren, O(n2.81) wird gegeben, die damals am besten bekannte Obergrenze. Sehen Matrix -Multiplikation#Computational -Komplexität für gebundene Verbesserungen seitdem.
- ^ Zum normale BaumgrammatikenAiken und Murphy geben einen Fixpoint -Algorithmus, um unproduktive Nicht -Terminale zu erkennen.[20]
- ^ Wenn die Grammatik erzeugen kann , eine Regel kann nicht vermieden werden.
- ^ Dies ist eine Folge des Eliminierungssatzes der Einheitsproduktion in Hopcroft & Ullman (1979), S. 91, Satz 4.4
Weitere Lektüre
- Hopcroft, John E.; Ullman, Jeffrey D. (1979), Einführung in die Automatentheorie, Sprachen und Berechnung, Addison-Wesley. Kapitel 4: Kontextfreie Grammatiken, S. 77–106; Kapitel 6: Eigenschaften kontextfreier Sprachen, S. 125–137.
- Sipser, Michael (1997),, Introduction to the Theory of Computation, PWS Publishing, ISBN 978-0-534-94728-6. Kapitel 2: kontextfreie Grammatiken, S. 91–122; Abschnitt 4.1.2: Leinbare Probleme in Bezug auf kontextfreie Sprachen, S. 156–159; Abschnitt 5.1.1: Reduzierungen über Berechnungsverläufe: S. 176–183.
- J. Berstel, L. Boasson (1990). Jan van Leeuwen (Hrsg.). Kontextfreie Sprachen. Handbuch der theoretischen Informatik. Vol. B. Elsevier. S. 59–102.
Externe Links
- Computerprogrammierer finden die möglicherweise die Stack Exchange -Antwort um nützlich zu sein.
- CFG -Entwickler Erstellt von Christopher Wong an der Stanford University im Jahr 2014; Modifiziert von Kevin Gibbons im Jahr 2015.