Kontextfreie Grammatik
In der Theorie der formalen Sprachen ist eine kontextfreie Grammatik eine Grammatik, die nur solche Ersetzungsregeln enthält, bei denen immer genau ein Nichtterminal auf eine beliebig lange Folge von Nichtterminalen und Terminalen abgeleitet wird. Dabei steht das zu ersetzende Nichtterminal allein (daher „kontextfrei“) auf der linken Seite der Ersetzungsregel. Die kontextfreien Grammatiken sind identisch mit den Typ-2-Grammatiken der Chomsky-Hierarchie.
Inhaltsverzeichnis |
[Bearbeiten] Definition
Eine kontextfreie Grammatik
ist ein 4-Tupel
mit folgenden Eigenschaften:
Hierbei bezeichnet
die Kleenesche Hülle.
[Bearbeiten] Erläuterung
Man nennt
Menge der Nichtterminale,
Menge der Terminale,
Menge der Produktionen oder Regeln und
Startsymbol. Eine Regel
wird meist in der Form
notiert.
Gemäß der Definition gilt für eine Regel
, dass
ist, also dass auf der linken Seite der Ersetzungsregel genau ein Nichtterminal steht. Es ist in einer Regel nicht von anderen Symbolen umgeben, und es stehen daher immer die gleichen Regeln zur Auswahl, egal welche Symbole das Nichtterminal
in einer Zeichenfolge umgeben. Kurz gesagt ist die Auswahl der Regeln unabhängig vom Kontext von
.
[Bearbeiten] Von
erzeugte Sprache
Die kontextfreien Grammatiken erzeugen genau die kontextfreien Sprachen, d. h., jede Typ-2-Grammatik erzeugt eine kontextfreie Sprache und zu jeder kontextfreien Sprache existiert eine Typ-2-Grammatik, die diese erzeugt.
Die kontextfreie Sprache
, die durch die kontextfreie Grammatik
generiert wird, ist definiert als
.
Die Relation
(Ableitung) steht für eine Folge von Regelanwendungen bezüglich der Grammatik
. Es müssen vom Startsymbol
aus solange Nichtterminal mit Hilfe der Regeln ersetzt werden, bis nur noch Nichtterminale übrig sind. Offenbar gilt
.
Die kontextfreien Sprachen sind genau die Sprachen, die von einem nichtdeterministischen Kellerautomaten akzeptiert werden. Existiert auch ein deterministischer Kellerautomat, nennt man die Sprache auch deterministisch kontextfrei. Diese echte Teilmenge der kontextfreien Sprachen bildet die theoretische Basis für die Syntax der meisten Programmiersprachen.
Kontextfreie Sprachen können das leere Wort enthalten, z. B. durch eine Produktionsregel
. Einige Sätze über kontextfreie Grammatiken fordern allerdings zusätzlich, dass das leere Wort von ihr nicht erzeugt werden darf. So gibt es z. B. nur zu den kontextfreien Grammatiken eine äquivalente Grammatik in Greibach-Normalform, wenn das leere Wort durch sie nicht erzeugt werden kann, da in jedem Ableitungsschritt genau ein Terminal erzeugt wird.
[Bearbeiten] Normalformen
Für kontextfreie Grammatiken sind verschiedene Normalformen definiert. Unter der Chomsky-Normalform (CNF) sind die rechten Seiten der Nichtterminal-Produktionen eingeschränkt, d. h. auf der rechten Seite darf entweder ein einziges Terminal-Symbol oder genau zwei Nichtterminal-Symbole stehen. Wenn das Startsymbol auf der linken Seite steht, darf die rechte Seite der Produktion allerdings auch das leere Wort sein. Durch einen Algorithmus kann jede kontextfreie Grammatik in die CNF überführt werden.
Eine kontextfreie Grammatik ist in der Greibach-Normalform (GNF), wenn sie nicht das leere Wort erzeugt und die rechten Seiten der Produktionen mit maximal einem Terminal-Symbol beginnen und sonst nur Nichtterminal-Symbole enthalten. Jede kontextfreie Grammatik, die nicht das leere Wort erzeugt, kann mit einem Algorithmus in die GNF überführt werden.
[Bearbeiten] Eigenschaften
[Bearbeiten] Wortproblem
Das Wortproblem für kontextfreie Sprachen, also das Problem, ob ein Wort
von einer kontextfreien Grammatik erzeugt werden kann, ist entscheidbar.[1] Auf dem Weg der Lösung des Wortproblems kann zusätzlich ein Ableitungsbaum erzeugt werden. Dieser Ableitungsbaum wird auch Parse-Tree genannt, und ein Programm, welches einen Parse-Tree erzeugt, ist ein Parser. Für jede kontextfreie Grammatik kann automatisch ein Parser generiert werden (siehe auch CYK-Algorithmus). Die Worst-Case-Laufzeitkomplexität eines Parsers für eine beliebige kontextfreie Grammatik liegt in O
. Für Teilklassen von kontextfreien Grammatiken können Parser erzeugt werden, deren Laufzeit in
liegt. Ein typischer Anwendungsfall eines effizienten kontextfreien Parsers mit linearer Laufzeit ist das Parsen eines Programmiersprachen-Quelltexts durch einen Compiler.
Wenn ein Wort
der Sprache L (
) durch die Grammatik
auf mehrere verschiedene Arten erzeugt werden kann, dann ist diese Grammatik mehrdeutig. Ein Parser kann bei einer mehrdeutigen Grammatik für ein gegebenes Wort nicht nur einen, sondern mehrere Ableitungsbäume erzeugen. Mehrdeutigkeit ist nicht problematisch, wenn nur das Wortproblem gelöst werden soll. Wird aber den unterschiedlichen Ableitungsbäumen eine unterschiedliche Bedeutung zugeordnet, dann kann ein Wort bei einer mehrdeutigen Grammatik mehrere unterschiedliche Bedeutungen haben. Ein Beispiel für die Notwendigkeit einer eindeutigen kontextfreien Grammatik ist ein Compiler, der für jede gültige Eingabe deterministisch und eindeutig ausführbaren Zielcode erzeugen muss.
[Bearbeiten] Mehrdeutigkeit
Das Problem, ob eine (beliebige) kontextfreie Grammatik mehrdeutig oder nicht-mehrdeutig ist, ist nicht entscheidbar.[2] Es existieren aber Testverfahren, die für bestimmte Teilklassen der kontextfreien Grammatiken Mehrdeutigkeit bzw. Nicht-Mehrdeutigkeit feststellen können.[3] Je nach Testverfahren terminiert der Mehrdeutigkeits-Test nicht oder der Test liefert zurück, dass die Mehrdeutigkeit nicht festgestellt werden kann, falls die kontextfreie Eingabe-Grammatik nicht Element einer bestimmten Teilklasse von kontextfreien Grammatiken ist.
[Bearbeiten] Äquivalenz
Das Problem, ob zwei kontextfreie Grammatiken
und
die gleiche Sprache generieren (also ob
), ist nicht entscheidbar.[4]
[Bearbeiten] Teilmenge
Das Problem, ob die durch eine kontextfreie Grammatik
erzeugte Sprache auch von einer kontextfreien Grammatik
erzeugt wird (also ob
), ist nicht entscheidbar.[5]
[Bearbeiten] Vereinigung
Die Vereinigung
der Sprachen zweier kontextfreier Grammatiken
und
kann ebenfalls von einer kontextfreien Grammatik erzeugt werden, nämlich
. (Dabei wird vorausgesetzt, dass
und
gelten, was aber für alle
erreicht werden kann.)
[Bearbeiten] Schnitt
Das Problem, ob der Schnitt der Sprachen zweier kontextfreier Grammatiken
ebenfalls von einer kontextfreien Grammatik erzeugt wird, ist nicht entscheidbar.[6]
[Bearbeiten] Komplement
Das Komplement einer kontextfreien Grammatik ist im Allgemeinen nicht kontextfrei.
[Bearbeiten] Beispiele
Sei
eine kontextfreie Grammatik mit


enthält 4 Produktionen bzw. Produktionsregeln:

kann durch die Grammatik
mit folgender Ableitung erzeugt werden:

ist der Ableitungsbaum in Term-Schreibweise. Die Wurzel und die inneren Knoten sind mit Nichtterminal-Symbolen und die Blätter mit Terminal-Symbolen beschriftet.
Also ist
.
Das Beispiel Wort
mit
ist nicht Teil der Sprache
, da das Nichtterminal
nicht das Startsymbol ist und über das Startsymbol jedes Wort der Sprache von den Terminal-Symbolen
und
eingeschlossen sein muss. In Formelschreibweise:

Grammatik
ist nicht mehrdeutig.
[Bearbeiten] Sprache der Palindrome
Die Grammatik
mit
gegeben als
erzeugt die Sprache aller Palindrome über dem Alphabet
.
[Bearbeiten] Mehrdeutiges Beispiel
Ein Beispiel für eine mehrdeutige Grammatik ist
.


enthält folgende Produktionen:

Für
existieren unter anderem die Ableitungen
,
und
. Also ist
mehrdeutig.
[Bearbeiten] Erweiterung
Eine Erweiterung der kontextfreien Grammatiken bilden stochastische kontextfreie Grammatiken (SCFG), auch bekannt als probabilistische kontextfreie Grammatiken (PCFG). Hier wird jeder Produktionsregel eine Auftrittswahrscheinlichkeit zugeordnet:
, so dass für jedes
gerade
ist.
Diese Auftrittswahrscheinlichkeiten der einzelnen Regeln induzieren eine Wahrscheinlichkeitsverteilung auf der Menge der von der Grammatik erzeugten Wörter.
Eine stochastisch kontextfreie Grammatik kann beispielsweise dazu verwendet werden, für ein Eingabewort den wahrscheinlichsten Parse in einer syntaktisch mehrdeutigen Grammatik zu berechnen. Ein anderer Anwendungsfall ist das stochastische Samplen von Ableitungsbäumen unter den gegebenen Regelwahrscheinlichkeiten einer mehrdeutigen Grammatik. Die von einer SCFG erzeugte Sprache ist genau so definiert wie die Sprache einer CFG. SCFGs werden z.B. in der Bioinformatik und der Computerlinguistik eingesetzt.
[Bearbeiten] Siehe auch
[Bearbeiten] Einzelnachweise
- ↑ Uwe Schöning: Theoretische Informatik- kurz gefasst. 5. Auflage. Spektrum Akademischer Verlag, Heidelberg 2008, ISBN 978-3-8274-1824-1, S. 13, DNB 986529222.
- ↑ Alfred V. Aho and Jeffrey D. Ullman: The Theory of Parsing, Translation, and Compiling. Volume 1: Parsing. Prentice-Hall, 1972, ISBN 0-13-914556-7, S. 202.
- ↑ H. J. S. Basten: Ambiguity Detection Methods for Context-Free Grammars. 17.8 (Master Thesis, http://homepages.cwi.nl/~paulk/thesesMasterSoftwareEngineering/2007/BasBasten.pdf).
- ↑ Schöning, 2001, S.137
- ↑ Schöning, 2001, S.137
- ↑ Schöning, 2001, S.137
[Bearbeiten] Literatur
- Taylor L. Booth und Richard A. Thomson: Applying probability measures to abstract languages. In: IEEE Transactions on Computers. C-22, Nr. 5, 1973, S. 442–450, doi:10.1109/T-C.1973.223746.
- J. Baker: Trainable grammars for speech recognition. In: J. J. Wolf and D. H. Klatt (Hrsg.): Speech communication papers presented at the 97th meeting of the Acoustical Society of America. MIT, Cambridge, MA Juni 1979, S. 547–550 (JASA Vol. 65, issue S1, p. S132 ist nur der Abstract in einem Abstract-Band).
- Uwe Schöning: Theoretische Informatik - kurzgefasst. 4. Auflage. Spektrum Akademischer Verlag, Berlin 2001, ISBN 3-8274-1099-1, S. 13, 51.

