Automaten, Formale Sprachen und Berechenbarkeit I
Automaten, Formale Sprachen und Berechenbarkeit I
Automaten, Formale Sprachen und Berechenbarkeit I
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
Kapitel 3<br />
Kontextfreie <strong>Sprachen</strong><br />
1 Kontextfreie Grammatiken<br />
Reguläre <strong>Sprachen</strong> stellen eine einfache Möglichkeit dar, <strong>Sprachen</strong> zu definieren <strong>und</strong> auch zu<br />
analysieren. Außerdem haben sie sehr schöne Eigenschaften: Sie sind unter vielen Operationen<br />
abgeschlossen, <strong>und</strong> die meisten Probleme sind für reguläre <strong>Sprachen</strong> entscheidbar.<br />
Allerdings sind viele praktisch relevante <strong>Sprachen</strong> nicht regulär. Beispielsweise ist die Sprache<br />
der korrekten Klammerausdrücke nicht regulär. Generell lassen sich verschachtelte Strukturen<br />
(beliebiger Tiefe) nicht als reguläre Sprache formulieren, da man mit regulären <strong>Sprachen</strong> nicht<br />
(beliebig weit) zählen kann. Verschachtelte Strukturen kommen aber in vielen Bereichen der<br />
Informatik vor (z.B. in Ausdrücken oder bei ineinander verschachtelten Schleifen oder Alternativen).<br />
In diesem Abschnitt betrachten wir nun eine Sprachklasse, die auf die Definition verschachtelter<br />
Strukturen zugeschnitten ist: die kontextfreien <strong>Sprachen</strong>.<br />
1.1 Motivation <strong>und</strong> Definition<br />
Ähnlich wie bei regulären <strong>Sprachen</strong>, gibt es verschiedene Charakterisierungen von kontextfreien<br />
<strong>Sprachen</strong>: eine über das <strong>Automaten</strong>modell <strong>und</strong> eine über die Grammatik. Für kontextfreie<br />
<strong>Sprachen</strong> ist die einfachste Charakterisierung wohl die über kontextfreie Grammatiken.<br />
Kontextfreie Grammatiken oder Varianten davon (z.B. die Backus-Naur-Form) sind DAS Mittel<br />
zur Beschreibung der Syntax von Programmiersprachen (oder eines wesentlichen Anteils<br />
davon).<br />
Historisch wurden kontextfreie Grammatiken zunächst von einem Linguisten definiert (N. Chomsky).<br />
Definition 3.1 (Kontextfreie Grammatik) Eine Grammatik G = (V, Σ, P, S) heißt kontextfrei,<br />
wenn gilt P ⊆ V × (V ∪ Σ) ∗ . Eine Sprache L heißt kontextfrei, wenn es eine kontextfreie<br />
Grammatik G gibt, die L erzeugt (d.h. L = L(G)).<br />
Jede Produktion einer kontextfreien Grammatik hat also die Form A → α mit A ∈ V <strong>und</strong> α ∈ (V ∪Σ) ∗ .<br />
Da α = ε nicht ausgeschlossen ist, können die Produktionen auch die Form A → ε haben.<br />
55