27.02.2013 Aufrufe

Kontextfreie Sprachen Kontextfreie Grammatiken Definition 13.1 ...

Kontextfreie Sprachen Kontextfreie Grammatiken Definition 13.1 ...

Kontextfreie Sprachen Kontextfreie Grammatiken Definition 13.1 ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

<strong>Kontextfreie</strong> <strong>Sprachen</strong><br />

Die Klasse der kontextfreien <strong>Sprachen</strong> über dem Alphabet $ (bezeichnet durch kfS $ )<br />

• bildet eine weitere Teilklasse der formalen <strong>Sprachen</strong>, die die regulären<br />

<strong>Sprachen</strong> umfasst: REG $ % kfS $<br />

<strong>Kontextfreie</strong> <strong>Sprachen</strong><br />

• werden durch kontextfreie <strong>Grammatiken</strong> erzeugt<br />

o Die Wörter / Sätze, die von kontextfreien <strong>Grammatiken</strong> erzeugt werden,<br />

besitzen eine syntaktische Struktur, die für die Verwendung der Sprache<br />

wichtig ist. (! logische Formeln, arithmetische Ausdrücke)<br />

o Parsing bezeichnet den Vorgang der Zuweisung einer syntaktischen<br />

Struktur für eine Zeichenkette. (Parsing basiert auf <strong>Grammatiken</strong>)<br />

• werden durch einen spezifischen Typ von Automaten, die (nichtdeterministischen)<br />

Kellerautomaten, akzeptiert<br />

• besitzen andere Abschlusseigenschaften als die regulären <strong>Sprachen</strong><br />

• Nichtzugehörigkeit zu kfS $ kann durch ein Pumpinglemma (für kontextfreie<br />

<strong>Sprachen</strong>) getestet werden<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [1]<br />

<strong>Kontextfreie</strong> <strong>Grammatiken</strong><br />

<strong>Definition</strong> <strong>13.1</strong> (! Def. 1.6)<br />

Eine kontextfreie Grammatik G ist ein 4-Tupel (!, N, P, S), für das gilt:<br />

• ! ist ein Alphabet, genannt das Alphabet der Terminalsymbole<br />

• N ist ein Alphabet (von Nichtterminalsymbolen), das disjunkt zu ! ist<br />

• P ist eine endliche Menge von Produktionsregeln (auch als Regeln bezeichnet),<br />

wobei jede Regel ein Paar (A, w) ist, mit A ! N und w ! ( ! " N )*<br />

• S ! N heißt Startsymbol<br />

Anmerkungen<br />

• <strong>Kontextfreie</strong> Grammatik wird auch durch kfG oder CFG abgekürzt.<br />

• Nichtterminale werden auch als Variable bezeichnet.<br />

• Regeln werden im Weiteren in der Form A # w geschrieben.<br />

• A wird als linke und w als rechte Seite der Regel bezeichnet.<br />

• Regeln, die die gleiche linke Seite haben, d.h. die Ableitungen vom gleichen<br />

nichtterminalen Symbol betreffen, werden häufig „zusammengefasst“ (siehe<br />

nächste Folie)<br />

• Auch A # " ist eine zulässige Regel (für kontextfreie <strong>Grammatiken</strong>)<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [2]


Zwei <strong>Grammatiken</strong> für Arithmetische Ausdrücke<br />

G 4 = (!, N, P, &EXPR')<br />

! = { a, + , (, (, ) } N = {&EXPR'}<br />

P = { &EXPR' # &EXPR' + & EXPR ', &EXPR' # &EXPR' ( & EXPR ',<br />

&EXPR' # ( &EXPR' ), &EXPR' # a }<br />

Die Regeln in zusammengefasster Form:<br />

P = { &EXPR' # &EXPR' + & EXPR ' | &EXPR' ( & EXPR ' | ( &EXPR' ) | a }<br />

G 3 = (!, N, P, &EXPR')<br />

! = { a, + , (, (, ) }<br />

N = {&EXPR', &TERM', &FACTOR'}<br />

P = { &EXPR' # &EXPR' + &TERM' | &TERM',<br />

&TERM' # &TERM' ( &FACTOR' | &FACTOR',<br />

&FACTOR'# ( &EXPR' ) | a }<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [3]<br />

Regelanwendung, Ableitung<br />

<strong>Definition</strong> 13.2 (! Def. 1.7)<br />

Seien u, v, w Zeichenketten über ( ! " N ), und A # w eine Regel (einer Grammatik).<br />

Durch die Anwendung der Regel kann aus dem Wort uAv das Wort uwv (direkt)<br />

abgeleitet werden.<br />

Man sagt auch: Die Regel A # w führt vom Wort uAv zum Wort uwv, bzw. das<br />

Nichtterminal / die Variable A wird durch die Regel zu w expandiert.<br />

• Die Regelanwendung wird auch als Ableitung (in einem Schritt) bezeichnet,<br />

und als uAv ) uwv geschrieben.<br />

Wenn u = v oder wenn eine Folge u ) u 1 )u 2 )… ) u k ) v existiert (mit k ! 0),<br />

so ist v aus u (in gegebenenfalls mehreren Schritten) ableitbar. Dieses wird durch<br />

u ) * v notiert. Die Sequenz u ) u 1 )u 2 )… ) u k ) v wird als Ableitung<br />

(derivation) bezeichnet.<br />

• Derartige Ableitungen sind stets von endlicher Länge (endliche Anzahl von<br />

Schritten); die Ableitungssequenz kann aber beliebige Länge haben.<br />

• Zeichenketten w über ( ! " N ), für die eine Ableitung S ) * w, existiert, werden als<br />

Satzformen bezeichnet.<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [4]


Ableitungen für Arithmetische Ausdrücke in L(G4)<br />

G 4 = (!, N, P, &EXPR')<br />

! = { a, + , (, (, ) } N = {&EXPR'}<br />

P = { &EXPR' # &EXPR' + & EXPR ' | &EXPR' ( & EXPR ' | ( &EXPR' ) | # a }<br />

Ableitungen für a + a + a ! L(G4 )<br />

&EXPR' ) &EXPR' + & EXPR '<br />

) &EXPR' + &EXPR' + & EXPR '<br />

) a + &EXPR' + & EXPR '<br />

) a + a + & EXPR '<br />

) a + a + a<br />

&EXPR' ) &EXPR' + & EXPR '<br />

) &EXPR' + &EXPR' + & EXPR '<br />

) &EXPR' + &EXPR' + a<br />

) &EXPR' + a + a<br />

) a + a + a<br />

&EXPR' ) &EXPR' + & EXPR '<br />

) &EXPR' + &EXPR' + & EXPR '<br />

) a + &EXPR' + & EXPR '<br />

) a + &EXPR' + a<br />

) a + a + a<br />

" Es gibt – im Allgemeinen – keine<br />

Festlegung, welches Nichtterminal<br />

durch die Regelanwendung<br />

expandiert wird.<br />

Satzformen betreffen (Zwischen-)resultate des Ableitungsprozesses.<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [5]<br />

Linksableitung – Rechtsableitung<br />

<strong>Definition</strong> 13.3<br />

Wird in einer Ableitung (Ableitungssequenz) stets die am weitesten links (rechts)<br />

auftretende Variable expandiert wird, so wird die Ableitung als Linksableitung /<br />

Rechtsableitung (leftmost / rightmost derivation) bezeichnet.<br />

Wir verwenden die Symbole ) lm bzw. ) rm für Ableitungsschritte und ) * lm bzw.<br />

) * rm für Ableitungssequenzen, die bzgl. leftmost oder rightmost festgelegt sind.<br />

Linksableitung Rechtsableitung<br />

&EXPR' ) lm &EXPR' + & EXPR '<br />

) lm &EXPR' + &EXPR' + & EXPR '<br />

) lm a + &EXPR' + & EXPR '<br />

) lm a + a + & EXPR '<br />

) lm a + a + a<br />

&EXPR' ) rm &EXPR' + & EXPR '<br />

) rm &EXPR' + &EXPR' + & EXPR '<br />

) rm &EXPR' + &EXPR' + a<br />

) rm &EXPR' + a + a<br />

) rm a + a + a<br />

Satz (ohne Beweis): Zu jeder Ableitung existiert eine äquivalente Linksableitung und<br />

eine äquivalente Rechtsableitung. D.h.: Für eine Zeichenkette v gilt u ) * v genau<br />

dann, wenn u ) * lm v und genau dann, wenn u )* rm v.<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [6]


Von einer Grammatik erzeugte Sprache<br />

<strong>Definition</strong> 13.4 (! Def. 1.8)<br />

Sei G = (!, N, P, S) eine kontextfreie Grammatik, so ist<br />

L(G) = { w ! !* | S ) * w }<br />

die von G erzeugte Sprache.<br />

Ableitungsbäume / Strukturbäume (Parse trees)<br />

Sei A # w eine Regel, mit |w| = k,<br />

wobei w = w 1 w 2 …w k die Darstellung von w durch Symbole des Alphabets ist.<br />

Dann existiert ein zu A # w 1 w 2 …w k korrespondierender Baum<br />

des Verzweigungsgrades k mit Tiefe 2,<br />

der Wurzel A und den Blättern w 1 , w 2 , … ,w k .<br />

w1 w2 wk Sei S ) u1 )u2 )… ) uk ) w die Ableitung<br />

eines Wortes w ! L(G), so kann ein Ableitungsbaum (Strukturbaum) zu dieser<br />

Ableitung gebildet werden, indem die zu den verwendeten Regeln korrespondierenden<br />

Bäume „konkateniert“ werden.<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [7]<br />

Beispiel: Arithmetische Ausdrücke in L(G4)<br />

Für a + a ( a ! L(G 4 ) gibt Ableitungen mit unterschiedlichen Ableitungsbäumen.<br />

Die unterschiedlichen Strukturbäume entsprechen unterschiedlichen Bedeutungen.<br />

&EXPR' ) &EXPR' + & EXPR '<br />

) &EXPR' + &EXPR' ( & EXPR '<br />

) a + &EXPR' ( & EXPR '<br />

) a + a ( & EXPR '<br />

) a + a ( a<br />

ist keine Linksableitung<br />

&EXPR' ) &EXPR' ( & EXPR '<br />

) &EXPR' + &EXPR' ( & EXPR '<br />

) a + &EXPR' ( & EXPR '<br />

) a + a ( & EXPR '<br />

) a + a ( a<br />

ist eine Linksableitung<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [8]<br />

A


Mehrdeutigkeit (Ambiguität)<br />

<strong>Definition</strong> 13.5<br />

Eine Zeichenkette w ist mehrdeutig, bzw. wird durch eine kfG G mehrdeutig<br />

abgeleitet, falls w zwei (oder mehr) verschiedene Linksableitungen besitzt.<br />

Eine Grammatik G ist mehrdeutig, falls es Wörter w ! L(G) gibt, die mehrdeutig sind.<br />

a + a ( a ! L(G 4 )<br />

&EXPR' ) lm &EXPR' + & EXPR '<br />

) lm a + &EXPR'<br />

) lm a + &EXPR' ( & EXPR '<br />

) lm a + a ( & EXPR '<br />

) lm a + a ( a<br />

ist eine Linksableitung<br />

# Die Grammatik G 4 ist mehrdeutig.<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [9]<br />

Zum Selbststudium: Arithmetische Ausdrücke in L(G3)<br />

G 3 = (!, N, P, &EXPR') ! = { a, + , (, (, ) } N = {&EXPR', &TERM', &FACTOR'}<br />

P = { &EXPR' # &EXPR' + &TERM' | &TERM',<br />

&TERM' # &TERM' ( &FACTOR' | &FACTOR',<br />

&FACTOR'# ( &EXPR' ) | a }<br />

&EXPR' ) lm &EXPR' + &TERM'<br />

) lm &TERM' + &TERM'<br />

) lm &FACTOR' + &TERM'<br />

) lm a + &TERM'<br />

) lm a + &TERM' ( &FACTOR'<br />

) lm a + &FACTOR' ( &FACTOR'<br />

) lm a + a ( &FACTOR'<br />

) lm a + a ( a<br />

ist eine Linksableitung<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [10]


Zum Selbststudium: Arithmetische Ausdrücke in L(G3) Forts.<br />

• Führen Sie eine Linksableitung der Zeichenkette (a + a) ( a durch und<br />

konstruieren Sie den korrespondierenden Strukturbaum.<br />

• Machen Sie sich klar, inwiefern die beiden Strukturbäume<br />

zu a + a ( a bzw. zu (a + a) ( a<br />

zu unterschiedlichen Auswertungen, d.h. Berechnungen der Werte der<br />

arithmetischen Ausdrücke führen.<br />

Die Grammatik G 3 ist so entworfen, dass Zeichenketten eindeutig sind und somit eine<br />

eindeutige Bedeutung haben.<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [11]<br />

Parsing<br />

Das Parsingproblem:<br />

Gegeben eine kontextfreie Grammatik G und eine Zeichenkette w.<br />

• Jede Ableitung S ) * w bestimmt einen Strukturbaum, d.h. eine syntaktische<br />

Struktur, zu w.<br />

Die Parsingaufgabe: Bestimme die syntaktische(n) Struktur(en) von w bzgl. G.<br />

Anmerkungen<br />

• Wenn G nicht mehrdeutig ist, dann hat jedes Wort w ! L(G) genau einen<br />

korrespondierenden Strukturbaum.<br />

• Der Prozess des Parsings weist nur Wörtern aus L(G) syntaktische Strukturen zu,<br />

d.h. für Zeichenketten w * L(G) sollte der Parser die Nichtzugehörigkeit zu<br />

L(G) ausweisen.<br />

• Parsing ist – in gewisser Weise – eine Umkehrung der Generierung von<br />

Zeichenketten bei gleichzeitiger Zuweisung der syntaktischen Struktur.<br />

Wir werden in einem späteren Abschnitt detaillierter aufs Parsing eingehen.<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [12]


Parsing Beispiel: Arithmetische Ausdrücke in L(G3)<br />

G 3 = (!, N, P, &EXPR') ! = { a, + , (, (, ) } N = {&EXPR', &TERM', &FACTOR'}<br />

P = { &EXPR' # &EXPR' + &TERM' | &TERM',<br />

&TERM' # &TERM' ( &FACTOR' | &FACTOR',<br />

&FACTOR'# ( &EXPR' ) | a }<br />

a + a ( a<br />

+ &FACTOR' + a ( a<br />

+ &TERM' + a ( a<br />

+ & EXPR ' + a ( a<br />

+ & EXPR ' + &FACTOR' ( a<br />

+ & EXPR ' + & TERM ' ( a<br />

+ & EXPR ' + & TERM ' ( &FACTOR'<br />

+ & EXPR ' + & TERM '<br />

+ & EXPR '<br />

[erfolgreicher Parse,<br />

aber erst nach Backtracking]<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [13]<br />

Parsing Beispiel: Arithmetische Ausdrücke in L(G3) – Forts.<br />

G 3 = (!, N, P, &EXPR') ! = { a, + , (, (, ) } N = {&EXPR', &TERM', &FACTOR'}<br />

P = { &EXPR' # &EXPR' + &TERM' | &TERM',<br />

&TERM' # &TERM' ( &FACTOR' | &FACTOR',<br />

&FACTOR'# ( &EXPR' ) | a }<br />

a + a ( a<br />

+ &FACTOR' + a ( a<br />

+ &TERM' + a ( a<br />

+ & EXPR ' + a ( a<br />

+ & EXPR ' + &FACTOR' ( a<br />

+ & EXPR ' + & TERM ' ( a<br />

+ & EXPR ' ( a<br />

+ & EXPR ' ( &FACTOR'<br />

+ & EXPR ' ( & TERM '<br />

+ & EXPR ' ( & EXPR '<br />

+ # [Backtracking notwendig!]<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [14]


<strong>Kontextfreie</strong> <strong>Grammatiken</strong> – Regelformen<br />

Die Regeln A # w einer <strong>Kontextfreie</strong>n Grammatik haben die Form<br />

• A ! N und w ! ( ! " N )*, d.h.<br />

• linke Seite ein Nichtterminal, rechte Seite eine beliebige Kette über ( ! " N )*<br />

In der Theorie der formalen <strong>Sprachen</strong> wird u.a. untersucht<br />

• inwieweit unterschiedliche Bedingungen an die Regelform, unterschiedliche<br />

Sprachklassen definierten<br />

# reguläre <strong>Sprachen</strong> können über kfG mit spezifischer Regelform spezifiziert<br />

werden<br />

• inwieweit <strong>Grammatiken</strong> „vereinfacht“ werden können. Dies betrifft insbesondere<br />

die Konstruktion von Beweisen über kfG und Kellerautomaten, aber auch das<br />

Entwerfen und Realisieren von effizienten Parsern<br />

# " –Regeln, d.h. Regeln der Form A # ", werden nur benötigt, um das leere<br />

Wort abzuleiten. D.h. für die Erzeugung kontextfreier <strong>Sprachen</strong>, die das<br />

leere Wort nicht enthalten, sind " –freie <strong>Grammatiken</strong> ausreichend.<br />

# Normalformen, insbesondere Chomsky-Normalform: Aller Regeln haben<br />

die Form A # B C oder A # a mit A, B, C ! N und a ! !.<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [15]<br />

<strong>Grammatiken</strong> für reguläre <strong>Sprachen</strong><br />

Reguläre <strong>Sprachen</strong><br />

• werden von endlichen Automaten verarbeitet / akzeptiert / erzeugt<br />

• können mit regulären Ausdrücken beschrieben werden<br />

• (s. Kapitel 12)<br />

• sind auch durch kontextfreie <strong>Grammatiken</strong> erzeugbar (noch zu zeigen)<br />

• bilden eine echte Teilklasse der kontextfreien <strong>Sprachen</strong> (noch zu zeigen)<br />

Typ-3-<strong>Grammatiken</strong><br />

• sind kontextfreie <strong>Grammatiken</strong>,<br />

• erfüllen strukturelle Zusatzbedingungen<br />

• erzeugen die reguläre <strong>Sprachen</strong><br />

Welche Zusatzbedingungen erfüllen Typ-3-<strong>Grammatiken</strong> ?<br />

• einseitige Linearität<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [16]


Einseitig lineare <strong>Grammatiken</strong><br />

<strong>Definition</strong> 13.6<br />

Sei ! ein Alphabet und G = (!, N, P, S) eine kontextfreie Grammatik über !.<br />

• G heißt genau dann rechtslinear, wenn P , N ( ($*N " $*).<br />

• G heißt genau dann linkslinear, wenn P , N ( (N$* " $*).<br />

• G heißt genau dann einseitig linear, wenn G rechtslinear oder linkslinear ist.<br />

Anmerkung<br />

• ‚Linearität’ bezieht sich jeweils darauf, dass in jeder zwischenzeitlich erzeugten<br />

Satzform maximal ein Nichtterminalsymbol auftritt.<br />

• ‚Einseitig’ besagt zudem, dass das Nichtterminalsymbol randständig sein und<br />

bleiben muss.<br />

• Alle Regeln der einseitig linearen Grammatik haben das Nichtterminalsymbol auf<br />

derselben Seite.<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [17]<br />

Beispiel: Lineare <strong>Grammatiken</strong><br />

Rechtslinear<br />

G rl = ({0, 1}, {S}, P rl , S) mit P rl = { S # 0S, S # 1S, S # 100 }<br />

L(G rl) = L([0|1]*100)<br />

Linkslinear<br />

G ll = ({0, 1}, {S, R}, P rl , S) mit P rl = { S # R100, R # R1, R # R0, R # " }<br />

L(G ll) = L([0|1]*100)<br />

Linear aber nicht einseitig linear<br />

G 1 = ({a, b}, {S}, P 1 , S) mit P 1 = { S # aSb, S # ab }<br />

L(G 1) = { a n b n | n ! 1 }<br />

(s. Kapitel 1)<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [18]


Einseitig linear erzeugbare <strong>Sprachen</strong><br />

<strong>Definition</strong> 13.7<br />

• ReL $ ist die Menge der durch rechtslineare <strong>Grammatiken</strong> erzeugbaren <strong>Sprachen</strong><br />

über $.<br />

• LiL $ ist die Menge der durch linkslineare <strong>Grammatiken</strong> erzeugbaren <strong>Sprachen</strong> über<br />

$.<br />

• TYP3 $ ist die Menge der durch einseitig lineare <strong>Grammatiken</strong> erzeugbaren <strong>Sprachen</strong><br />

über $ (also TYP3 $ = ReL $ " LiL $)<br />

Beispiele<br />

L(G rl) = L([0|1]*100) ! ReL {0, 1} , TYP3 {0, 1}<br />

L(G ll) = L([0|1]*100) ! LiL {0, 1} , TYP3 {0, 1}<br />

L(G 1) = { a n b n | n ! 1 } * TYP3 {0, 1}<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [19]<br />

Rechtslineare <strong>Grammatiken</strong> für reguläre <strong>Sprachen</strong><br />

Satz 13.8<br />

Zu jedem endlichen Automaten A über ! existiert eine rechtslineare Grammatik G A<br />

über ! mit L(G A) = L(A). (Also REG $ , ReL $)<br />

Grundidee<br />

• Gleichsetzung von Nichtterminalsymbolen mit Zuständen.<br />

• Zustandsübergänge -(s, a) = s' werden zu Ableitungsregeln s # as'.<br />

• In Endzuständen kann die Ableitung beendet werden (s # ").<br />

• Konfigurationen in der Verarbeitung durch den Automaten (s, w) korrespondieren<br />

mit in der Ableitung erzeugten Satzformen (ws)<br />

Konstruktion<br />

Sei A = (!, S, -, s 0, F) ein endlicher Automat.<br />

Die rechtslineare Grammatik G A = (!, S, P, s 0) mit<br />

• P = { s # as' | -(s, a) = s' } " { s # " | s ! F}<br />

erfüllt: L(G A) = L(A)<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [20]


Spiegelwörter und Spiegelsprachen<br />

<strong>Definition</strong> 13.9<br />

Es sei ! ein Alphabet. Für die Abbildung SP: !* # !*, die jedes Wort auf sein<br />

Spiegelbild abbildet, gilt:<br />

• SP(") = "; SP(a) = a , für a ! !; SP(u!v) = SP(v)!SP(u) , für u, v ! !*<br />

• Ist L , !* eine Sprache, dann sei SP(L) = {SP(w) | w ! L} die ‚Spiegelsprache’ zu L.<br />

• Ist M , .(!*) eine Sprachfamilie, dann sei SP(M) = {SP(L) | L ! M} die Familie<br />

der ‚Spiegelsprachen’ zu M.<br />

• Eine Sprachfamilie M , .(!*) heißt genau dann abgeschlossen unter Spiegelung,<br />

wenn SP(M) , M.<br />

Beobachtungen <strong>13.1</strong>0<br />

1. LiL $ = SP(ReL $) und ReL $ = SP(LiL $) .<br />

2. M , .(!*) ist genau dann abgeschlossen unter Spiegelung, wenn SP(M) = M.<br />

3. TYP3 $ ist abgeschlossen unter Spiegelung.<br />

4. LREXP $ ist abgeschlossen unter Spiegelung.<br />

5. REG $ ist abgeschlossen unter Spiegelung.<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [21]<br />

Zum Selbststudium<br />

Beweisen Sie obige Beobachtungen zur Übung<br />

Dazu ist jeweils eine Konstruktion anzugeben (z.B. bei 1) Bildung einer linkslinearen<br />

Grammatik für SP(L(G)) auf Basis einer rechtslinearen Grammatik G) und zu erläutern<br />

/ beweisen, dass die Konstruktion tatsächlich genau das leistet, was sie soll.<br />

2. ist natürlich darauf zurückzuführen, dass für alle Wörter w gilt SP(SP(w)) = w und<br />

damit Entsprechendes für die <strong>Sprachen</strong> und die Sprachfamilien.<br />

Was in der Liste von Beobachtungen noch fehlt, ist, dass auch LiL $ und ReL $<br />

abgeschlossen unter Spiegelung (und damit identisch) sind. Das zeigen wir später über<br />

die Abschlusseigenschaften der beteiligten <strong>Sprachen</strong> (Satz 13.§§)<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [22]


Normalformen für einseitig lineare <strong>Grammatiken</strong><br />

Die <strong>Definition</strong> für einseitig lineare <strong>Grammatiken</strong> lässt zu:<br />

• beliebig lange Folgen von Terminalsymbolen in den Regeln<br />

• beliebig viele Regeln der Art A # "<br />

• Regeln der Art A # w , mit w ! !*<br />

• Regeln der Art A # B , mit B ! N<br />

Satz <strong>13.1</strong>1<br />

Zu jeder einseitig linearen Grammatik G gibt es eine einseitig linearen Grammatik G’,<br />

die dieselbe Sprache erzeugt aber folgende Zusatzbedingungen erfüllt:<br />

• alle rechten Seiten der Regeln, in denen Terminalsymbole vorkommen, haben die<br />

Länge 2 (A # aB bzw. A # Ba mit A, B ! N und a ! !)<br />

• es gibt keine Regeln der Art A # B , mit B ! N<br />

• es gibt maximal 2 Regeln der Art A # ", wobei höchstens eine dieser Regeln ein<br />

anderes Nichtterminalsymbol als das Startsymbol ableitet.<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [23]<br />

Zum Selbststudium<br />

Konstruktion zu Satz <strong>13.1</strong>1<br />

‚Vernichtung’ der Regeln der Art A # B , mit B ! N<br />

1. Regeln der Form A # A können gelöscht werden, da Ihre Anwesenheit keinen<br />

Einfluss auf die generierte Sprache haben.<br />

2. Kommt A # B , mit B ! N, in P vor, dann kann diese Regel durch die Menge der<br />

Regeln { A # r | B # r ! P} ersetzt werden.<br />

3. Durch systematische Anwendung von 1) und 2) können alle Regeln der Art A # B<br />

eliminiert werden.<br />

Reduktion der Regeln der Art A # w , mit w ! !* auf maximal 2 Regeln der Art A #<br />

", wobei höchstens eine dieser Regeln ein anderes Nichtterminalsymbol als das<br />

Startsymbol ableitet:<br />

• Führe ein neues Nichterminalsymbol T und die Regel T # " ein.<br />

• Ersetze jede Regel der Art A # w , mit w ! ! + , durch A # wT.<br />

• Ersetze jede Regel der Art A # wB , mit w ! ! + und B # " ! P, durch A # wT.<br />

• Lösche dann alle Regeln der Art B # " außer { T # " , S # " }.<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [24]


Zum Selbststudium: Zu Satz <strong>13.1</strong>1<br />

Beschränkung der rechten Seiten der Regeln, in denen Terminalsymbole vorkommen,<br />

auf Länge 2 (A # aB bzw, A # Ba mit A, B ! N und a ! !)<br />

• Für jedes Paar a ! N, B ! !, für das mindestens eine Regel der Art A # waB ! P,<br />

mit w ! ! + , führe ein neues Nichtterminal C und die Regel C # aB ein und ersetze<br />

alle Regeln der Art A # waB durch A # wC.<br />

• Für jedes Paar a ! N, B ! !, für das mindestens eine Regel der Art A # Baw ! P,<br />

mit w ! ! + , führe ein neues Nichtterminal C und die Regel C # Ba ein und ersetze<br />

alle Regeln der Art A # Baw durch A # Cw.<br />

Es wäre noch zu zeigen, dass die so erzeugte Grammatik tatsächlich genau dieselbe<br />

Sprache erzeugt, wie die ursprüngliche. Dazu zeigt man, wie die Ableitungen der alten<br />

Grammatik durch die neue Grammatik ‚simuliert’ und umgekehrt.<br />

Bemerkung<br />

Die Normalformen der <strong>Grammatiken</strong> sind oft bei der Beweisführung über die<br />

Sprachfamilien nützlich. Für den praktischen Einsatz sind aber die allgemeinen<br />

Formen oft besser geeignet.<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [25]<br />

Rechtslinear erzeugbare <strong>Sprachen</strong> sind regulär<br />

Satz <strong>13.1</strong>2<br />

Zu jeder rechtslinearen Grammatik G über ! existiert ein endlicher Automat A G über !<br />

mit L(G) = L(A G). (Also ReL $ , REG $)<br />

Konstruktion<br />

Sei G = (!, N, P, S) eine rechtslineare Grammatik, bei der auf den rechten Seiten der<br />

Produktionen maximal ein Terminalsymbol steht. (Notfalls müssen wir erst einen<br />

Umformungsschritt gemäß <strong>13.1</strong>1 machen.)<br />

Für den Automaten A G = (!, N " {ƒ}, -, S, F) mit<br />

• ƒ * N<br />

• F = {ƒ} " { B ! N | B # " ! P}<br />

• - = {(B, a, C) | B # aC ! P} " {(B, a, ƒ) | B # a ! P}<br />

gilt: L(A G) = L(G)<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [26]


Satz <strong>13.1</strong>3<br />

ReL $ = REG $ = LiL $ = TYP3 $<br />

ReL $ = REG $ = LiL $ = TYP3 $<br />

Beweis<br />

1. REG $ , ReL $ : Satz 13: 8<br />

2. ReL $ , REG $ : Satz 13: 12<br />

3. ReL $ = REG $ : Konsequenz von 1 und 2<br />

4. LiL $ = SP(ReL $) : Beobachtung <strong>13.1</strong>0.1<br />

5. LiL $ = SP(REG $) : Konsequenz von 4 und 3<br />

6. SP(REG $) = REG $ : Beobachtung <strong>13.1</strong>0.2 und 5<br />

7. LiL $ = REG $ : Konsequenz von 5 und 6<br />

8. ReL $ " LiL $ = TYP3 $ : <strong>Definition</strong> <strong>13.1</strong>3<br />

9. TYP3 $ = REG $: Konsequenz von 3, 7, 8<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [27]<br />

Reguläre <strong>Sprachen</strong> – <strong>Kontextfreie</strong> <strong>Sprachen</strong><br />

Typ-2-<strong>Sprachen</strong><br />

• <strong>Kontextfreie</strong> <strong>Sprachen</strong> werden auch als Typ-2-<strong>Sprachen</strong> bezeichnet.<br />

• Dementsprechend wird TYP2 $ für die Menge der <strong>Kontextfreie</strong>n <strong>Sprachen</strong><br />

verwendet.<br />

Reguläre <strong>Sprachen</strong> – <strong>Kontextfreie</strong> <strong>Sprachen</strong><br />

• reguläre <strong>Sprachen</strong> sind eine echte Teilklasse der kontextfreien <strong>Sprachen</strong><br />

• welche Charakteristika von Regeln, Baumstrukturen, Ableitungen sind für die<br />

Nicht-Regularität gewisser kontextfreier <strong>Sprachen</strong> verantwortlich?<br />

• wie unterscheiden sich die Abschlusseigenschaften von regulären und<br />

kontextfreien <strong>Sprachen</strong>?<br />

<strong>Kontextfreie</strong> <strong>Sprachen</strong><br />

• welche Modifikationen des Konzeptes endlicher Automaten werden benötigt, um<br />

Automaten, die kontextfreie <strong>Sprachen</strong> akzeptieren, zu konstruieren?<br />

• welche Eigenschaften charakterisieren <strong>Sprachen</strong> als nicht-kontextfrei?<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [28]


Reguläre <strong>Sprachen</strong> – <strong>Kontextfreie</strong> <strong>Sprachen</strong> (2)<br />

Einseitig lineare Grammatik G 1<br />

S # aS, S # aB, B # bB, B # b<br />

L(G 1) = { a n b m | n, m ! 1 } = {a} + {b} +<br />

.<br />

Nicht einseitig lineare Grammatik G 2<br />

S # aSb, S # ab<br />

L(G 2) = { a n b n | n ! 1 }<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [29]<br />

Normalformen für kontextfreie <strong>Grammatiken</strong><br />

Ziel: Vereinfachung von kontextfreien <strong>Grammatiken</strong><br />

Die wichtigsten Vereinfachungen<br />

1. Elimination von „nicht benötigten“ (nutzlosen) Symbolen<br />

2. Elimination von "-Regeln<br />

3. Elimination von Kettenregeln (Einheitsproduktionen), d.h. von Regeln der<br />

Form A # B mit A,B ! N.<br />

Theoreme zu vereinfachten <strong>Grammatiken</strong> (Beweise im Laufe dieser Vorlesung)<br />

1. Für jede kontextfreie Sprache L, d.h. L ! TYP2 $, gilt, dass L – { " } durch eine<br />

kfG ohne "-Regeln erzeugt werden kann.<br />

2. Zu jeder kfG G gibt es eine äquivalente kfG G' in Chomsky-Normalform, d.h.<br />

• L(G) = L(G')<br />

• Alle Regeln von G' haben die Form A # B C oder A # a mit A, B, C ! N<br />

und a ! !. Falls " ! L = L(G), ist zusätzlich die Regel S # " zugelassen.<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [30]


Elimination von nutzlosen Symbolen<br />

Sei G = (!, N, P, S) eine kontextfreie Grammatik.<br />

X ! ! " N ist nützlich in G, wenn es eine Ableitung<br />

S ) * uXv ) * w mit w ! !* gibt,<br />

d.h. X tritt in einer Satzform einer Ableitung von S zu einer terminalen Zeichenkette<br />

auf. Wenn X nicht nützlich ist, dann bezeichnen X wir als nutzlos.<br />

1. Die Sprache L(G) ist durch die Ableitungen von S zu terminalen Zeichenketten<br />

gegeben (Def. 13.4). Wenn X nutzlos ist, kommt X in keiner Ableitung von S zu<br />

einer terminalen Zeichenkette vor.<br />

Also kann X aus der Grammatik entfernt werden, d.h. X wird aus ! " N entfernt,<br />

und alle Regeln, in denen X auftritt, werden ebenfalls entfernt.<br />

2. Es gibt zwei Eigenschaften, die die Nützlichkeit eines Symbols ausmachen:<br />

a. X ist erzeugend, wenn X ) * w für ein w ! !*.<br />

[Da a ) * a für alle a ! !, sind alle terminalen Symbole erzeugend.]<br />

b. X ist erreichbar, wenn es eine Ableitung S ) * uXv gibt,<br />

mit u,v ! (! " N)*.<br />

# Wir werden zuerst alle nicht-erzeugenden und dann alle nicht-erreichbaren<br />

Symbole eliminieren.<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [31]<br />

Elimination von nutzlosen Symbolen: Beispiel<br />

Grammatik G ist gegeben durch die Regeln:<br />

S # AB | a A# b<br />

Eliminationsreihenfolge<br />

nicht-erzeugende " nicht-erreichbare<br />

Bestimmung der erzeugenden Symbole<br />

• S, A wegen S ) * a bzw. A ) * b<br />

a, b da Terminalsymbole<br />

Elimination der nicht-erzeugenden<br />

Symbole: B<br />

• S # a A# b<br />

Bestimmung der erreichbaren Symbole<br />

• S, a wegen S ) * a<br />

Elimination der nicht-erreichbaren<br />

Symbole: A, b<br />

• S # a<br />

nicht-erreichbare " nicht-erzeugende "<br />

Bestimmung der erreichbaren Symbole<br />

• S, a wegen S ) * a<br />

A, B, b wegen S ) * AB ) * bB<br />

Keine Elimination nicht-erreichbarer<br />

Symbole notwendig<br />

Bestimmung der erzeugenden Symbole<br />

• S, A wegen S ) * a bzw. A ) * b<br />

a, b da Terminalsymbole<br />

Elimination der nicht-erzeugenden<br />

Symbole: B<br />

• S # a A# b<br />

Enthält zwei nutzlose Symbole<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [32]


Elimination von nutzlosen Symbolen<br />

Satz 3.14<br />

Sei G = (!, N, P, S) eine kontextfreie Grammatik mit L(G) " /. Sei G 1 = (!1, N 1, P 1, S)<br />

die Grammatik, die sich aus dem folgenden Verfahren ergibt:<br />

1. Es werden alle Symbole, die nichts erzeugen, und alle Regeln, die eines oder<br />

mehrere dieser Symbole enthalten, eliminiert. Die hieraus entstehende<br />

Grammatik bezeichnen wird durch G 2 = (!2, N 2, P 2, S).<br />

2. Es werden aus G 2 alle Symbole, die nicht in G 2 erreichbar sind, eliminiert,<br />

sowie alle Regeln, die eines oder mehrere dieser Symbole enthalten.<br />

Dann enthält G 1 keine nutzlosen Symbole und es gilt: L(G) = L(G 1)<br />

Anmerkung:<br />

• Da L(G) " /, ist S erzeugend, und kann somit nicht eliminiert werden.<br />

Beweis zur selbständigen Nacharbeit (vgl. Vossen & Witt, Kap. 5.1.2). Zu zeigen ist:<br />

1. G1 enthält keine nutzlosen Symbole; hier spielt die Reihenfolge der zwei<br />

Eliminationsstufen eine Rolle: G ! G 2! G 1<br />

2. L(G) = L(G 1), hier ist L(G) , L(G 1) die nicht-triviale Richtung des Beweises.<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [33]<br />

Berechnung der erzeugenden Symbole<br />

<strong>Definition</strong> 3.15 (Algorithmus zur Berechnung der erzeugenden Symbole)<br />

Sei G = (!, N, P, S) eine kontextfreie Grammatik.<br />

Induktive <strong>Definition</strong> eines Algorithmus zur Berechnung der erzeugenden Symbole:<br />

1. Alle a ! !, d.h. alle terminalen Symbole, sind erzeugend.<br />

2. Wenn für eine Regel A # w gilt, dass jedes Symbol in w erzeugend ist, dann ist<br />

A erzeugend.<br />

Regeln: S # AB | a A# b Ableitungsbäume<br />

1. a, b sind erzeugend, da Terminalsymbole<br />

2. S ist erzeugend wg. S # a<br />

A ist erzeugend wg. A # b<br />

S # AB erfüllt nicht die Bedingungen<br />

von (2).<br />

3. Alle Regeln sind berücksichtigt; das<br />

Verfahren ist abgeschlossen.<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [34]


Berechnung der erzeugenden Symbole (Forts.)<br />

Satz 3.16 (Algorithmus zur Berechnung der erzeugenden Symbole)<br />

Der in Def. 3.15 induktive definierte Algorithms bestimmt die Menge der erzeugenden<br />

Symbole (MeS) von G = (!, N, P, S).<br />

Zu beweisen sind zwei Richtungen: (1), dass jedes Symbol, das durch den Algorithmus<br />

in MeS aufgenommen wird, wirklich ein erzeugendes Symbol ist, und (2), dass jedes<br />

erzeugende Symbol durch den Algorithmus in MeS aufgenommen wird.<br />

1. Richtung: Induktion über die Reihenfolge, in denen der Algorithmus Symbole in<br />

MeS aufnimmt. [zum Selbststudium!!!]<br />

2. Richtung: X ist erzeugendes Symbol, mit der terminalen Ableitung X ) * w für<br />

ein w ! !*. Induktion über die Ableitungslänge.<br />

• Falls die Ableitung die Länge null hat, dann ist X ist terminales Symbol.<br />

Daher wird im Schritt 1 des Algorithmus X als erzeugend klassifiziert und in<br />

MeS aufgenommen.<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [35]<br />

Berechnung der erzeugenden Symbole (Forts.)<br />

• Wenn die Ableitung die Länge n hat (n > 0), dann ist X eine Variable. Die<br />

Ableitung X ) * w kann zerlegt werden in X ) v ) * w, d.h. es wird zuerst<br />

die Regel X # v angewendet.<br />

• Jedes Symbol von v leitet eine terminale Zeichenkette ab, die Teil von w<br />

ist, und diese Ableitung (# Zusammenfassung der Ableitungen, die von v<br />

zu w führen) hat eine Länge kleiner n.<br />

• Nach Induktionshypothese ist daher jedes Symbol aus v erzeugend.<br />

Daher ist die Voraussetzung für den Schritt (2) des Algorithmus erfüllt:<br />

der Algorithmus X als erzeugend klassifiziert und in MeS aufgenommen.<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [36]


Berechnung der erreichbaren Symbole<br />

<strong>Definition</strong> 3.17 (Algorithmus zur Berechnung der erreichbaren Symbole)<br />

Sei G = (!, N, P, S) eine kontextfreie Grammatik.<br />

Induktive <strong>Definition</strong> eines Algorithmus zur Berechnung der erreichbaren Symbole:<br />

1. Das Startsymbol S ist erreichbar.<br />

2. Wenn für eine Regel A # w gilt, dass A erreichbar ist, dann ist jedes Symbol in<br />

w erreichbar.<br />

Regeln: S # AB | a A# b Ableitungsbäume<br />

1. S ist erreichbar<br />

2. wg. S # AB | a<br />

sind ausserdem A, B und a erreichbar<br />

wg. A# b<br />

ist ausserdem b erreichbar<br />

3. Alle Regeln sind berücksichtigt; das<br />

Verfahren ist abgeschlossen.<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [37]<br />

Berechnung der erreichbaren Symbole (Forts.)<br />

Satz 3.18 (Algorithmus zur Berechnung der erreichbaren Symbole)<br />

Der in Def. 3.16 induktive definierte Algorithms bestimmt die Menge der erreichbaren<br />

Symbole von G = (!, N, P, S).<br />

Beweis: Zum Selbststudium!!!<br />

Zu beweisen sind – wie beim Beweis von Satz 3.16 – zwei Richtungen.<br />

Verwendet wird Induktion über Ableitungen bzw. den Ablauf des Algorithmus.<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [38]


Elimination von !-Regeln<br />

Satz 3.19 (Elimination von !-Regeln)<br />

Für jede kontextfreie Sprache L gilt, dass L – { " } durch eine kfG ohne "-Regeln<br />

erzeugt werden kann.<br />

[Derartige <strong>Grammatiken</strong> werden als "-freie <strong>Grammatiken</strong> bezeichnet.]<br />

Anmerkungen:<br />

Dieser Satz deckt zwei Fälle ab:<br />

1. " * L. Dann ist L – { " } = L, und deswegen gibt es eine "-Regel-freie<br />

Grammatik G, die L erzeugt, d.h. L = L(G).<br />

2. " ! L. Dann gibt es eine "-freie Grammatik G, die L – { " }erzeugt. Für die<br />

Erzeugung des leeren Wortes kann G um eine einzige "-Regel angereichert<br />

werden, die nur an der Erzeugung des leeren Wortes beteiligt ist.<br />

Im Beweis wird daher der Fall "-freier <strong>Sprachen</strong> behandelt (Fall 1). Fall 2 erfordert<br />

dann nur den oben angesprochenen Schritt der Ergänzung um eine "-Regel zur<br />

Erzeugung des leeren Wortes.<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [39]<br />

Elimination von !-Regeln – Beweis von Satz 3.19<br />

Sei " * L und G = (!, N, P, S) eine kontextfreie Grammatik mit L = L(G).<br />

• Wir gehen davon aus, dass alle nutzlosen Symbole aus G eliminiert wurden (vgl.<br />

die Sätze 3.14, 3.16 und 3.18).<br />

• Wir erweitern die Grammatik um ein neues Nichtterminalsymbol, S 0 , das als<br />

Startsymbol fungiert. Ausserdem führen wir die Regel S 0 # S ein.<br />

• Die neue Grammatik G' erzeugt genau die gleiche Sprache wie die Grammatik<br />

G, denn zu jeder G-Ableitung S ! * G w mit w ! L(G) gibt es eine<br />

korrespondierende G'-Ableitung S 0 ! * G' w, und zwar S 0 ! * G' S ! * G' w.<br />

• Diese Erweiterung der Grammatik führt dazu, dass das Startsymbol von G' nicht<br />

aus der rechten Seite einer Regel auftritt.<br />

Beispiel<br />

S # ASA | aB A# B | S B# b | "<br />

Einführung des neuen Startsymbols S 0<br />

S 0 # S S # ASA | aB A# B | S B# b | "<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [40]


Elimination von !-Regeln – von G'' erzeugte Sprache<br />

Regeln in G' Beispiel eines Strukturbaums<br />

S 0 # S<br />

S # ASA | aB<br />

A# B | S<br />

B# b | "<br />

Ableitung:<br />

S 0 ) S<br />

) ASA<br />

) SSA ) SaBA ) SaBB<br />

) aBaBB ) aBabB ) aBab"<br />

) a"ab" = aab<br />

Abschluss erfolgt nur über B-Regeln.<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [41]<br />

Elimination von !-Regeln – Beweis von Satz 3.19 (Forts.)<br />

• "-Regeln, d.h. Regeln der Form A # " werden eliminiert; dafür werden aber<br />

eventuell neue Regeln eingeführt.<br />

• Für jedes Vorkommen von A auf der rechten Seite einer Regel bilden wir<br />

zusätzlich eine neue Regel ohne dieses Vorkommen von A.<br />

Beispiel: Sei R# uAvAw eine derartige Regel in G', so führt dies zu den Regeln<br />

R# uvAw, R# uAvw, R# uvw<br />

Falls die zu bearbeitende Regel die Form R# A hat , so fügen wir R # " in<br />

die Regelmenge, ausser in den Fällen, in denen R # " schon eliminiert wurde.<br />

• Dieses Verfahren wird durchgeführt, bis alle "-Regeln beseitigt sind.<br />

• In der Regelmenge P gibt es nur eine endliche Menge von Regeln und<br />

insbesondere nur eine endliche Menge von "-Regeln; für jedes Nichtterminal<br />

maximal eine "-Regel.<br />

• Bei der Elimination von "-Regeln können zwar neue "-Regeln entstehen, aber<br />

nur für solche nichtterminale Symbole, zu denen noch keine "-Regeln<br />

eliminiert wurden. Daher terminiert der Prozess der Elimination von "-Regeln.<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [42]


Elimination von !-Regeln – Beweis von Satz 3.19 (Forts.)<br />

Beispiel<br />

S 0 # S S # ASA | aB A# B | S B# b | "<br />

Elimination der "-Regel B# "<br />

Einführung neuer Regeln in Bezug auf S # aB S # a<br />

Einführung neuer Regeln in Bezug auf A# B A# "<br />

Elimination der "-Regel A# "<br />

Einführung neuer Regeln in Bezug auf S # ASA S # SA | AS | S<br />

Da keine "-Regel vorkommt, ist das Verfahren abgeschlossen.<br />

Die resultierende Regelmenge:<br />

S 0 # S<br />

S # ASA | aB | a | SA | AS | S<br />

A# B | S<br />

B# b<br />

Die Ausgangs-Regelmenge<br />

S 0 # S<br />

S # ASA | aB<br />

A# B | S<br />

B# b | "<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [43]<br />

Elimination von !-Regeln – von G'' erzeugte Sprache<br />

Regeln in G' Beispiel eines Strukturbaums<br />

S 0 # S<br />

S # ASA | aB | a | SA | AS | S<br />

A# B | S<br />

B# b<br />

Ableitung:<br />

S 0 ) S<br />

) AS<br />

) SS ) SaB<br />

) aaB ) aab<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [44]


Elimination von !-Regeln – G'-Stukturbaum vs. G''-Stukturbaum<br />

G'-Stukturbaum G''-Strukturbaums<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [45]<br />

Elimination von !-Regeln – Beweis von Satz 3.19 (2. Forts.)<br />

Die durch Elimination der "-Regeln entstandene Grammatik G'' erzeugt genau die<br />

gleiche Sprache wie die Grammatik G'.<br />

• Da die Grammatik G eine "-freie Sprache erzeugt [" * L = L(G)], werden "-Regeln<br />

nur für den Abschluss von Ableitungen verwendet, die zu echten Zeichenketten<br />

führen.<br />

• Wenn in einer G'-Ableitung eine "-Regel angewendet wird, dann gibt es eine<br />

korrespondierende G''-Ableitung die auf einer der in der "-Regel-Elimination<br />

ergänzten Regeln basiert. Daher ist jedes durch G' erzeugbare Wort auch durch G''<br />

erzeugbar. Entsprechend kann / muss gezeigt werden, dass G'' nicht zusätzliche<br />

Wörter erzeugen kann.<br />

Damit ist der Beweis für den Fall 1 (" * L) abgeschlossen.<br />

Fall 2. ! ! L = L(G)<br />

Dann existiert eine G'-Ableitung zu ". Da nur nichtterminale Symbole getilgt werden<br />

können, und zwar durch "-Regeln, kann das in Fall 1 verwendete Verfahren<br />

angewendet werden: Wir eliminieren "-Regeln für alle Nichtterminale (ausser dem<br />

Startsymbol S 0 ).<br />

# Damit ist der Beweis für den Fall 1 (" * L) abgeschlossen.von Satz 3.19<br />

abgeschlossen.<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [46]


Chomsky Normalform<br />

<strong>Definition</strong> 3.20<br />

Eine kontextfreie Grammatik G = (!, N, P, S) liegt in Chomsky Normalform vor, falls<br />

alle Regeln von G eine der folgenden Formen haben<br />

• A # B C<br />

• A # a<br />

• S # "<br />

mit A, B, C ! N und a ! !.<br />

Anmerkung:<br />

• Es gibt (echt) expandierende Regeln mit zwei nichtterminalen Symbole auf der<br />

rechten Seite (und somit binär verzweigende Strukturbäume) und<br />

• abschliessende Regeln mit genau einem terminalen Symbol auf der rechten Seite,<br />

sowie gegebenenfalls als Sonderfall (für die Ableitung des leeren Wortes) für<br />

das Startsymbol eine "-Regel (S # ").<br />

Satz 3.21<br />

Für jede kontextfreie Sprache L gibt es eine kfG G in Chomsky-Normalform, die L<br />

erzeugt, d.h. mit L = L(G).<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [47]<br />

Chomsky Normalform – Beweis Satz 3.21<br />

Aufbauend auf den Sätzen 3.14 und 3.19 können wir davon ausgehen, dass es zur<br />

Sprache L eine erzeugende kfG G gibt, in der alle nutzlosen Symbole und alle "-<br />

Regeln (ausser im Fall " ! L, die Regel S # ") eliminiert sind.<br />

Wir haben zwei Typen von Regelumformungen durch zu führen:<br />

• Einer-Regeln, d.h. Regeln der Form A# B, mit A, B ! N, werden umgewandelt<br />

in Regeln mit zwei oder mehr Symbolen auf der rechten Seite.<br />

• Alle verbleibenden Regeln werden in die Normalform gebracht, d.h. in Regeln<br />

mit der zulässigen Länge der rechten Seite<br />

• Länge 2 für Regeln mit Nichtterminalen auf der rechten Seite<br />

• Länge 1 für Regeln mit Terminalen auf der rechten Seite<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [48]


Chomsky Normalform – Umwandlung von Einer-Regeln<br />

• Einer-Regeln, d.h. Regeln der Form A # B, mit A, B ! N, werden eliminiert; dafür<br />

werden aber neue Regeln eingeführt.<br />

• Für jede Regel B# u, mit u ! (! " N)*, bilden wir eine neue Regel A # u,<br />

ausser in den Fällen, in denen die Einer-Regel A # u schon eliminiert wurde.<br />

• Dieses Verfahren wird durchgeführt, bis alle Einer-Regeln beseitigt sind.<br />

• In der Regelmenge P gibt es nur eine endliche Menge von Regeln und<br />

insbesondere nur eine endliche Menge von Einer-Regeln.<br />

• Bei der Elimination von Einer-Regeln können zwar neue Einer-Regeln entstehen,<br />

aber nur für solche nichtterminale Symbole, zu denen noch keine Einer-Regeln<br />

eliminiert wurden. Daher terminiert der Prozess der Elimination von Einer-Regeln.<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [49]<br />

Elimination von Einer-Regeln – Beweis von Satz 3.21 (Forts.)<br />

Beispiel<br />

Die Ausgangs-Regelmenge<br />

S 0 # S<br />

S # ASA | aB | a | SA | AS | S<br />

A# B | S<br />

B# b<br />

Elimination von S # S S # ASA | aB | a | SA | AS<br />

Elimination von S 0 # S S 0 # ASA | aB | a | SA | AS<br />

Elimination von A# B A# b<br />

Elimination der A# S A# ASA | aB | a | SA | AS<br />

Die resultierende Regelmenge:<br />

S 0 # ASA | aB | a | SA | AS<br />

S # ASA | aB | a | SA | AS<br />

A# b | ASA | aB | a | SA | AS<br />

B# b<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [50]


Elimination von Einer-Regeln – G-Stukturbaum vs. G'-Stukturbaum<br />

G-Stukturbaum G'-Strukturbaums<br />

Ableitungen, die auf Einer-Regeln basieren, können „abgekürzt“ werden.<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [51]<br />

Abschliessende Konvertierung in Chomsky Normalform<br />

• Sei A # u 1 u 2 …u k , wobei k ! 3 und u i ! (! " N).<br />

Wir ersetzen diese Regel durch die Regeln<br />

A # u 1 A 1 , A 1 # u 2 A 3 , … Ak-2 # u k-1 u k Die A i seine neue Variablen.<br />

• Jeder Anwendung der Regel A # u 1 u 2 …u k entspricht die sequentielle<br />

Anwendung der Regeln A # u 1 A 1 , A1 # u 2 A 3 , … Ak-2 # u k-1 u k .<br />

• Anschliessend ersetzen wir in allen Regeln der Form<br />

A # u i A j , in denen u i ! !, u i durch die neue Variable U i , d.h. modifizieren die<br />

Regel zu A # u i A j und führen die neue Regel A # U j ein (gleiche Terminale u i<br />

können durch gleiche neue Variable U i ersetzt werden).<br />

• Jeder Anwendung der Regel A # u i A j in G' entspricht die sequentielle<br />

Anwendung der Regeln A # U 1 A j und anschliessend A # U j in G''.<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [52]


Erstellung von Regeln in Ch-Normalform – Beweis von Satz 3.21 (Forts.)<br />

Beispiel<br />

Die Ausgangs-Regelmenge<br />

S 0 # ASA | aB | a | SA | AS<br />

S # ASA | aB | a | SA | AS<br />

A# b | ASA | aB | a | SA | AS<br />

B# b<br />

Umformung von S 0 # ASA S 0 # AA 1 , A 1 # SA<br />

Umformung von S # ASA S # AA 1 , A 1 # SA<br />

Umformung der Regeln mit rechter Seite aB X # UB , U# a<br />

Die resultierende Regelmenge<br />

nach 1. Teilschritt:<br />

S 0 # AA 1 | aB | a | SA | AS<br />

S # AA 1 | aB | a | SA | AS<br />

A# b | ASA | aB | a | SA | AS<br />

A 1 # SA<br />

B# b<br />

Die resultierende Regelmenge<br />

nach 2. Teilschritt:<br />

S 0 # AA 1 | UB | a | SA | AS<br />

S # AA 1 | UB | a | SA | AS<br />

A# b | ASA | UB | a | SA | AS<br />

A 1 # SA<br />

U # a<br />

B# b<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [53]<br />

Chomsky Normalform – G-Stukturbaum vs. G'-Stukturbaum<br />

G'-Stukturbaum G''-Strukturbaums<br />

Ableitungen, die auf Nicht-Normalform-Regeln basieren, werden durch Sequenzen<br />

von Normalformableitungen durchgeführt.<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [54]


Normalformen Zusammenfassung<br />

Aufgabe: Vereinfachung von kontextfreien <strong>Grammatiken</strong><br />

Theoreme zu vereinfachten <strong>Grammatiken</strong><br />

• Für jede kontextfreie Sprache L, d.h. L ! TYP2 $, gilt, dass L – { " } durch eine kfG<br />

ohne "-Regeln erzeugt werden kann.<br />

• Zu jeder kfG G gibt es eine äquivalente kfG G' in Chomsky-Normalform, d.h.<br />

L(G) = L(G')<br />

Alle Regeln von G' haben die Form A # B C oder A # a mit A, B, C ! N und a<br />

! !. Falls " ! L = L(G), ist zusätzlich die Regel S # " zugelassen.<br />

Chomsky Normalform ist wichtig für Beweise, z.B. Pumpinglemma für kontextfreie<br />

<strong>Sprachen</strong>.<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [55]<br />

Kellerautomaten: Grundidee<br />

Ergänzung des endlichen Automaten mit einem einfachen Speicher<br />

Zur Erinnerung: Der Speicher des endlichen Automaten<br />

• besteht allein aus dem Zustandsspeicher<br />

• entspricht einer Zelle mit endlicher Kapazität (einer von endlich viele Zuständen)<br />

Kellerspeicher: LIFO-Prinzip (last in – first out)<br />

• Im Prinzip unbeschränkte Kapazität (keine Beschränkung der Anzahl der<br />

Speicherzellen)<br />

• die einzelnen Speicherzellen des Kellers haben aber nur endliche Kapazität<br />

( = 1 Symbol aus dem (endlichen) Keller-Alphabet)<br />

• Es ist immer nur das 'oberste' Symbol des Speichers zugreifbar.<br />

• In der Beschränkung der Zugriffsmöglichkeit besteht der entscheidende Unterschied<br />

zu den Turingmaschinen.<br />

• Das Kelleralphabet und das Eingabealphabet können übereinstimmen, müssen es<br />

aber nicht.<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [56]


!<br />

Kellerautomat<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [57]<br />

<strong>Definition</strong> (nichtdeterministischer) Kellerautomat<br />

<strong>Definition</strong> 13.22<br />

Ein (nichtdeterministischer) Kellerautomat K = (!, Q, ", #, q0, $, F), besteht aus:<br />

• ! : ein Alphabet (Eingabealphabet)<br />

• " : ein Alphabet (Kelleralphabet) !<br />

• Q : eine endliche Menge, die Menge<br />

der Zustände<br />

• # : Q % (! & {'}) % " ( )(Q % "*)<br />

ist die Zustandsüberführungsfunktion<br />

von K.<br />

• q0 * Q : der Startzustand<br />

• $ * " : das Kellerboden-Symbol<br />

(initialer Kellereintrag)<br />

• F + Q : die Menge der Endzustände<br />

Die <strong>Definition</strong> des Kellerautomaten spezifiziert die 'endliche Kontrolle'.<br />

Kellerautomat wird im Englischen als Pushdown Automaton (PDA) bezeichnet.<br />

"<br />

Abb: © Vossen & Witt (2006)<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [58]<br />

"<br />

Abb: © Vossen & Witt (2006)


Zustandsüberführungsfunktion des Kellerautomaten<br />

(q', k 1…k n) * #(q, x, k) • Ist K im Zustand q,<br />

• liest auf dem Eingabeband das Symbol x<br />

• und auf dem Keller das Symbol k,<br />

• dann kann K in den Zustand q' wechseln<br />

• und k auf dem Keller durch k 1…k n ersetzten,<br />

• wobei k 1 zum obersten Symbol wird.<br />

(q', ') * #(q, x, k) • Ist K im Zustand q,<br />

• liest auf dem Eingabeband das Symbol x<br />

• und auf dem Keller das Symbol k,<br />

• dann kann K in den Zustand q' wechseln<br />

• und k vom Keller löschen.<br />

(q', k 1…k n) * #(q, ', k) • Ist K im Zustand q,<br />

• und liest auf dem Keller das Symbol k,<br />

• dann kann K in den Zustand q' wechseln<br />

• und k auf dem Keller durch k 1…k n ersetzten,<br />

• wobei k 1 zum obersten Symbol wird.<br />

(q', ') * #(q, ', k) • Ist K im Zustand q,<br />

• und liest auf dem Keller das Symbol k,<br />

• dann kann K in den Zustand q' wechseln<br />

• und k vom Keller löschen.<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [59]<br />

Beispiel Kellerautomat<br />

K 1 = ({a, b}, {q 0, q 1, q f}, {1, $}, # 1, q 0, $, {q f}) mit<br />

# 1(q 0, ', $) = # 1(q 1, ', $) = {(q f, ')}<br />

# 1(q 0, a, $) = {(q 0, 1$)}<br />

# 1(q 0, a, 1) = {(q 0, 11)}<br />

# 1(q 0, b, 1) = # 1(q 1, b, 1) = {(q 1, ')}<br />

# 1(q 0, ', 1) = # 1(q 0, b, $) = # 1(q 1, ', 1) =<br />

# 1(q 1, a, $) = # 1(q 1, a, 1) = # 1(q 1, b, $) =<br />

# 1(q f, ', $) = # 1(q f, ', 1) = # 1(q f, a, $) =<br />

# 1(q f, a, 1) = # 1(q f, b, $) = # 1(q f, b, 1) = ,<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [60]


Animation Kellerautomat<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [61]<br />

Konfigurationen und Konfigurationsübergänge<br />

<strong>Definition</strong> 13.23<br />

Sei K = (!, Q, ", #, q 0, $, F) ein (nichtdeterministischer) Kellerautomat.<br />

• Die Menge Konf K = Q % !* % "* enthält alle möglichen Konfigurationen von K.<br />

Dabei steht (q, w, -) * Konf K für eine Situation, in der sich K im Zustand q<br />

befindet, das Eingabewort w noch zu verarbeiten hat, und der aktuelle Kellerinhalt -<br />

ist.<br />

• Konfigurationsübergänge für K sind festgelegt durch die Relation<br />

! K + Konf K % Konf K, die definiert ist durch<br />

(q, xv, k!) ! K (q', v, .-) gdw., (q', .) * #(q, x, k)<br />

wobei q, q' * Q, x * ! & {'}, v * !*, ., - * "*, k * "<br />

• ! * K ist die reflexive, transitive Hülle von ! K .<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [62]


Zum Selbststudium<br />

Notationsvarianten<br />

Falls #(q, x, k) = {(q 1, .1), … , (q m, .m)}, dann schreiben wir dies auch in der Form<br />

(q, x, k, {(q 1, .1), … , (q m, .m)})<br />

oder<br />

{(q, x, k, q 1, .1), …, (q, x, k, q m, .m)}<br />

Wenn klar ist, über welchen Kellerautomaten K wir reden, schreiben wir auch !<br />

anstelle von ! K und ! * anstelle von ! * K .<br />

Bemerkung<br />

Über die Eigenschaften der Relation ! * K kann man viel sagen und beweisen. Jeder<br />

sollte sich aber klar machen, dass folgendes gilt:<br />

Wenn (q, w, .) ! * K (q', v, -) dann gilt auch für alle u * !*, / * "*:<br />

(q, wu, ./) ! * K (q', vu, -/)<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [63]<br />

Beispiel Konfigurationsfolgen Kellerautomat<br />

(q 0, aabb, $) ! K1 (q 0, abb, 1$) ! K1 (q 0, bb, 11$) ! K1 (q 1, b, 1$) ! K1 (q 1, ', $) ! K1 (q f, ',')<br />

(q 0, aabb, $) ! K1 (q f, aabb, ')<br />

(q 0, aab, $) ! K1 (q 0, ab, 1$) ! K1 (q 0, b, 11$) ! K1 (q 1, ', 1$)<br />

(q 0, abb, $) ! K1 (q 0, bb, 1$) ! K1 (q 1, b, $) ! K1 (q 1, b, $)<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [64]


Akzeptanz durch Kellerautomaten<br />

• Für Kellerautomaten haben sich zwei Arten der <strong>Definition</strong> von Akzeptanz als<br />

fruchtbar erwiesen.<br />

• In beiden Fällen muss das Eingabewort vollständig verarbeitet sein.<br />

• Die initiale Situation ist grundsätzlich (q 0, w, $).<br />

<strong>Definition</strong> 13.24<br />

Sei K = (!, Q, ", #, q 0, $, F) ein (nichtdeterministischer) Kellerautomat.<br />

• Die von K mit Endzustand akzeptierte Sprache ist<br />

L F(K) = {w * !* | (q 0, w, $) ! * K (q f, ', /), q f * F, / * "*}<br />

• PDA F,! ist die Menge aller von einem Kellerautomaten mit Endzustand akzeptierten<br />

<strong>Sprachen</strong> über !.<br />

• Bei der Akzeptanz mit Endzustand darf im Keller beliebiges stehen.<br />

• Die von K mit leerem Keller akzeptierte Sprache ist<br />

L '(K) = {w * !* | (q 0, w, $) ! * K (q, ', ')}<br />

• PDA ',! ist die Menge aller von einem Kellerautomaten mit leerem Keller<br />

akzeptierten <strong>Sprachen</strong> über !.<br />

• Bei der Akzeptanz mit leerem Keller ist der finale Zustand unerheblich.<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [65]<br />

L F(K 1) = L '(K 1)<br />

= {a n b n | n * ! 0}<br />

Beispiel akzeptierte <strong>Sprachen</strong> Kellerautomat<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [66]


Zum Selbststudium<br />

Begründung für L F(K 1) = L '(K 1) = {a n b n | n * ! 0}<br />

• Es ist sichergestellt, dass $ nur als unterstes Symbol im Keller auftritt.<br />

• Um in q f zu gelangen, muss $ das oberste Symbol auf dem Keller sein. Bei diesem<br />

Übergang wird $ gelöscht. Da damit das unterste Symbol gelöscht wird, ist der<br />

Keller leer.<br />

• K 1 startet in q 0 und solange K 1 in q 0 ist, hat K 1 nur a verarbeitet und sich die Anzahl<br />

der a auf dem Keller gemerkt.<br />

• Sobald ein a verarbeitet wurde, kann K 1 nicht mehr direkt von q 0 in q f wechseln<br />

sondern muss über die Kante von q 0 zu q 1 gehen und dabei ein b verarbeiten.<br />

Anschließend können nur noch b verarbeitet werden.<br />

• Jede Verarbeitung eines b löscht eine 1 vom Keller und versetzt K 1 in Zustand q 1.<br />

• Es können höchstens so viele b verarbeitet werden, wie 1en bei Verlassen von q 0 im<br />

Keller standen.<br />

• Um eine 1 vom Keller zu löschen, muss ein b von der Eingabe gelesen werden.<br />

• Der Übergang von q 1 nach q f erfordert, dass alle 1en gelöscht wurden.<br />

• Es müssen also mindestens so viele b verarbeitet werden, wie 1en bei Verlassen von<br />

q 0 im Keller standen.<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [67]<br />

Akzeptanzarten unterscheiden sich nicht grundsätzlich<br />

Für das bisherige Beispiel galt<br />

• L F(K) = L '(K)<br />

das ist natürlich nicht immer der Fall. Dennoch gilt allgemein<br />

Satz 13.25<br />

Für jedes Alphabet ! gilt: PDA F,! = PDA ',!<br />

Beweis<br />

1. Teil: PDA F,! + PDA ',!<br />

Dazu konstruieren wir zu einem beliebigen Kellerautomaten K einen Automaten K ', so<br />

dass L F(K) = L '(K ').<br />

2. Teil: PDA ',! + PDA F,!<br />

Dazu konstruieren wir zu einem beliebigen Kellerautomaten K einen Automaten K F, so<br />

dass L '(K) = L F(K F).<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [68]


Beweis Satz 13.25 Teil 1<br />

Sei K = (!, Q, ", #, q i, $, F) ein (nichtdeterministischer) Kellerautomat.<br />

K ' = (!, Q&{q 0, q '}, "&{0}, # ', q 0, 0, ,)<br />

# '(q 0, ', 0) = {(q i, $0)}<br />

# '(q, x, k) = #(q, x, k), falls q * Q,<br />

x * ! & {'}, k * "<br />

# '(q f, ', k) = {(q ', ')}, für q f * F&{q '},<br />

k * " & {0}<br />

L F(K) = L '(K ')<br />

• K ' schreibt das Kellerbodensymbol $ von K auf den Keller und lässt dann K laufen.<br />

• K kann das Kellerbodensymbol 0 von K ' nicht löschen.<br />

• Solange K arbeitet wird also der Keller nie leer.<br />

• Wenn K in einen Endzustandgerät, kann K ' in den Zustand q ' gehen und den Keller<br />

leeren.<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [69]<br />

Beweis Satz 13.25 Teil 2<br />

Sei K = (!, Q, ", #, q i, $, ,) ein (nichtdeterministischer) Kellerautomat.<br />

K F = (!, Q&{q 0, q f}, "&{0}, # F, q 0, 0, {q f})<br />

# F(q 0, ', 0) = {(q i, $0)}<br />

# F(q, x, k) = #(q, x, k), falls q * Q,<br />

x * ! & {'}, k * "<br />

# F(q, ', 0) = {(q f, ')}, für q * Q<br />

L '(K) = L F(K F)<br />

• K F schreibt das Kellerbodensymbol von K auf den Keller und lässt dann K laufen.<br />

• Sobald K seinen Teil des Kellers geleert hat, ist 0 das oberste Zeichen.<br />

• Von jedem Zustand von K aus kann K F, wenn 0 oben auf dem Keller liegt, in den<br />

Endzustand q f wechseln.<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [70]


Kellerautomaten können kontextfreie <strong>Sprachen</strong> akzeptieren<br />

• Der Keller ermöglicht die Verarbeitung von Strukturen, die komplizierter sind als<br />

reguläre <strong>Sprachen</strong>.<br />

• (Nichtdeterministische) Kellerautomaten entsprechen in ihrer<br />

Verarbeitungsmächtigkeit den kontextfreien <strong>Grammatiken</strong>.<br />

Satz 13.26<br />

Für jedes Alphabet ! gilt: kfS ! + PDA ',!<br />

Beweis<br />

Wir konstruieren für eine beliebige kontextfreie Grammatik G einen Kellerautomaten<br />

K G, so dass L(G) = L '(K G).<br />

K G bezeichnen wir dann auch als (nichtdeterministischen) Parser für G.<br />

Die Konstruktionsvorschrift entspricht einem Parsergenerator für kontextfreie<br />

<strong>Grammatiken</strong>.<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [71]<br />

Konstruktion für den Beweis zu Satz 13.26<br />

Sei G = (!, N, P, S) eine kontextfreie Grammatik.<br />

K G = (!, {q}, ! & N, #, q, S, ,)<br />

#(q, x, x) = {(q, ')}, für x * !<br />

#(q, ', A) = {(q, w) | A ( w * P}<br />

L(G) = L '(K G)<br />

Arbeitsweise des Parsers<br />

• Das Startsymbol von G ist das Kellerbodensymbol (initialer Kellerinhalt) von K G.<br />

• K G simuliert eine Linksableitung durch G.<br />

• Nonterminalsymbole an oberster Stelle auf dem Keller entsprechen dem am<br />

weitesten links stehenden Nichtterminalsymbol einer Ableitung.<br />

• Sie werden durch die rechte Seite einer Produktion ersetzt.<br />

• Terminalsymbole auf dem Keller werden mit den Eingabesymbolen verglichen und<br />

bei Übereinstimmung gelöscht.<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [72]


Zum Selbststudium<br />

Die Konstruktion ist natürlich noch kein Beweis.<br />

Es fehlt noch der Nachweis, dass nun folgendes gilt.<br />

Behauptung<br />

Ist A * N, w * !* und v * (! & N)*, dann gilt:<br />

A 1 * G,lm wv genau dann, wenn (q, w, A) ! * KG (q, ', v)<br />

Der Rest ergibt sich dann aus dem Spezialfall A 1 * G,lm w genau dann, wenn<br />

(q, w, S) ! * KG (q, ', '), der Setzung von S als Kellerbodensymbol in K G und den<br />

<strong>Definition</strong>en von L(G) bzw. L '(K G)<br />

Für diesen Nachweis sind zwei Induktionsbeweise über die Anzahl der Ableitungs-<br />

bzw. Verarbeitungsschritte zu führen.<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [73]<br />

Beispiel: zur Konstruktion zu Satz 13.26<br />

Sei G = ({a, b}, {S}, {S ( aSb, S ( '}, S).<br />

Die Konstruktion liefert folgenden Kellerautomaten:<br />

K G = ({a, b}, {q}, {a, b, S}, #, q, S, ,)<br />

#(q, a, a) = #(q, b, b) = {(q, ')}<br />

#(q, ', S) = {(q, aSb), (q, ')}<br />

L(G) = L '(K G)<br />

Konfigurationsfolge bei Akzeptanz (mit leerem Keller) von aaabbb<br />

(q, aaabbb, S) ! KG (q, aaabbb, aSb) ! KG (q, aabbb, Sb) ! KG (q, aabbb, aSbb)<br />

! KG (q, abbb, Sbb) ! KG (q, abbb, aSbbb) ! KG (q, bbb, Sbbb) ! KG (q, bbb, bbb)<br />

! KG (q, bb, bb) ! KG (q, b, b) ! KG (q, ', ')<br />

Die entsprechende Ableitung der Grammatik sieht so aus<br />

S 1 G aSb 1 G aaSbb 1 G aaaSbbb 1 G aaabbb<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [74]


Kellerautomaten können nur kontextfreie <strong>Sprachen</strong> akzeptieren<br />

Satz 13.27<br />

Für jedes Alphabet ! gilt: PDA ',! + kfS !<br />

Beweis<br />

Wir konstruieren für einen beliebige Kellerautomaten K eine kontextfreie Grammatik<br />

G K, so dass L '(K) = L(G K).<br />

Diese Konstruktion ist komplizierter als die vorhergehenden Konstruktionen.<br />

• In den Nichtterminalsymbole der Grammatik werden folgende Aspekte einer<br />

Konfiguration des Kellerautomaten kodiert:<br />

• der aktuelle Zustand<br />

• ein Zeichen des Kelleralphabets<br />

• der Nachfolgezustand<br />

• Die Nichtterminalsymbole notieren wir in der Form [pkq], wobei k Kellersymbol<br />

und p, q Zustände von K sind.<br />

• Aus Sicht der Grammatik ist [pkq] aber ein atomares Nichtterminalsymbol.<br />

• [pkq] steht für: K kann unter Verarbeitung (Löschung) von k aus dem Zustand p<br />

(direkt oder über mehrere Schritte) in den Zustand q gelangen.<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [75]<br />

Konstruktion für den Beweis zu Satz 13.27<br />

Sei K = (!, Q, ", #, q 0, $, ,) ein (nichtdeterministischer) Kellerautomat.<br />

Die kontextfreie Grammatik G K = (!, N, P, S) ist wie folgt spezifiziert:<br />

• N = {S} & (ein spezielles Startsymbol)<br />

{[pkq] | k * ", p, q * Q} (Symbole zur Kodierung von Übergängen in K)<br />

(insgesamt |"| * |Q| 2 + 1 verschiedene Zeichen)<br />

• P = {S ( [q0$q] | q * Q} & (Symbole für den Übergang vom q 0 zu anderen<br />

Zuständen bei Verarbeitung von $)<br />

{[pkp 0] ( x[p 0k 1p 1]…[p r-1k rp r] |<br />

(p 0, k 1…k r) * #(p, x, k),<br />

p, p 0, …, p r * Q, x * ! & {'}, k 1, …k r * !}<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [76]


Zum Selbststudium<br />

Die Konstruktion ist natürlich noch kein Beweis.<br />

Es fehlt noch der Nachweis, dass nun folgendes gilt.<br />

Behauptung<br />

Sind p, q * Q, k * ", w * !* und v * (! & N)*, dann gilt:<br />

(p, w, k) ! * K (q, ', v) genau dann, wenn [pkq] 1 * GK,lm wv<br />

Der Rest ergibt sich dann aus dem Spezialfall (q 0, w, $) ! * K (q, ', ') genau dann, wenn<br />

[q0$q] 1 * GK,lm w, den Produktionen der Form S ( [q0$q] und den <strong>Definition</strong>en von<br />

L '(K) bzw. L(G K)<br />

Für diesen Nachweis sind zwei Induktionsbeweise über die Anzahl der Ableitungs-<br />

bzw. Verarbeitungsschritte zu führen.<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [77]<br />

Beispiel zu Satz 13.27<br />

K 2 = ({a, b}, {q 0, q 1}, {1, $}, # 2, q 0, $, ,) mit<br />

# 2(q 0, a, $) = {(q 0, 1)}<br />

# 2(q 0, a, 1) = {(q 0, 11)}<br />

# 2(q 0, b, 1) = # 2(q 1, b, 1) = {(q 1, ')}<br />

G K2 = (!, N, P, S) mit<br />

N = {S, [q 0$q 0], [q 0$q 1], [q 1$q 0], [q 1$q 1], [q 01q 0], [q 01q 1],<br />

[q 11q 0], [q 11q 1]}<br />

P = {S ( [q0$q0], S ( [q0$q1]<br />

[q 0$q 0] ( a[q 01q 0], [q 0$q 1] ( a[q 01q 1],<br />

[q 01q 0] ( a[q 01q 0][q 01q 0], [q 01q 0] ( a[q 01q 1][q 11q 0],<br />

[q 01q 1] ( a[q 01q 0][q 01q 1], [q 01q 1] ( a[q 01q 1][q 11q 1],<br />

[q 01q 1] ( b, [q 11q 1] ( b}<br />

L '(K 2) = L(K K2) = {a n b n | n * !}<br />

Korrespondierende Verarbeitungsfolgen<br />

(q 0, aabb, $) ! K2 (q 0, abb, 1) ! K2 (q 0, bb, 11) ! K2 (q 1, b, 1) ! K2 (q 1, ', ')<br />

S 1 GK2 [q0$q1] 1 GK2 a[q 01q 1] 1 GK2 aa[q 01q 1][q 11q 1] 1 GK2 aab[q 11q 1] 1 GK2 aabb<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [78]


Beispiel zum Beweis von 13.27<br />

K 2 = ({a, b}, {q 0, q 1}, {1, $}, # 2, q 0, $, ,) mit<br />

# 2(q 0, a, $) = {(q 0, 1)}<br />

# 2(q 0, a, 1) = {(q 0, 11)}<br />

# 2(q 0, b, 1) = # 2(q 1, b, 1) = {(q 1, ')}<br />

G K2 = (!, N, P, S) mit<br />

N = {S, [q 0$q 0], [q 0$q 1], [q 1$q 0], [q 1$q 1], [q 01q 0], [q 01q 1],<br />

[q 11q 0], [q 11q 1]}<br />

P = {S ( [q0$q0], S ( [q0$q1]<br />

[q 0$q 0] ( a[q 01q 0], [q 0$q 1] ( a[q 01q 1],<br />

[q 01q 0] ( a[q 01q 0][q 01q 0], [q 01q 0] ( a[q 01q 1][q 11q 0],<br />

[q 01q 1] ( a[q 01q 0][q 01q 1], [q 01q 1] ( a[q 01q 1][q 11q 1],<br />

[q 01q 1] ( b, [q 11q 1] ( b}<br />

L '(K 2) = L(K K2) = {a n b n | n * !}<br />

Die durch die Konstruktion erzeugte Grammatik enthält einige überflüssige (nutzlose)<br />

Nichtterminalzeichen und Produktionen<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [79]<br />

Beispiel: L 3 = {w c SP(w) | w * {a, b}*}<br />

K 3 = ({a, b, c}, {q 0, q c, q f}, {a, b, $}, # 3, q 0, $, {q f}) mit<br />

# 3(q 0, a, $) = {(q 0, a$)}<br />

# 3(q 0, b, $) = {(q 0, b$)}<br />

# 3(q 0, a, a) = {(q 0, aa)}<br />

# 3(q 0, b, a) = {(q 0, ba)}<br />

# 3(q 0, a, b) = {(q 0, ab)}<br />

# 3(q 0, b, b) = {(q 0, bb)}<br />

# 3(q 0, c, $) = {(q f, ')}<br />

# 3(q 0, c, a) = {(q c, a)}<br />

# 3(q 0, c, b) = {(q c, b)}<br />

# 3(q c, a, a) = {(q c, ')}<br />

# 3(q c, b, b) = {(q c, ')}<br />

# 3(q c, ', $) = {(q f, ')}<br />

Alle restlichen = ,<br />

• Deterministische Verarbeitung der Eingabe<br />

• LF(K3) = L'(K3) = {w c SP(w) | w * {a, b}*}<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [80]


Deterministische Kellerautomaten<br />

<strong>Definition</strong> 13.28<br />

• Ein Kellerautomat K = (!, Q, ", #, q 0, $, F) heißt genau dann deterministisch, wenn<br />

für alle x * !, q * Q, k * " gilt |#(q, x, k)| + |#( q, ", k)| ! 1.<br />

• Eine Sprache L heißt deterministisch kontextfrei, falls es einen deterministischen<br />

Kellerautomaten K gibt, der L akzeptiert, d.h. für den L = L F(K) gilt.<br />

• Mit DPDA! bezeichnen wir die Klasse der <strong>Sprachen</strong> über ! die von<br />

deterministischen Kellerautomaten akzeptiert werden.<br />

Bemerkung<br />

• Ein Kellerautomat K ist genau dann deterministisch, wenn für alle Konfigurationen<br />

von K gilt:<br />

Wenn (q, w, !) ! K (q1, w1, -1) und (q, w, !) ! K (q2, w2, -2),<br />

dann q1 = q2, w1 = w2 und -1 = -2<br />

• Es gibt für jede Konfiguration maximal eine direkte Nachfolgekonfiguration.<br />

• Rückschau: K 3 ist ein deterministischer Kellerautomat.<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [81]<br />

Beispiel: L 4 = {w SP(w) | w * {a, b}*}<br />

K 4 = ({a, b}, {q 0, q c, q f}, {a, b, $}, # 4, q 0, $, {q f}) mit<br />

# 4(q 0, a, $) = {(q 0, a$)}<br />

# 4(q 0, b, $) = {(q 0, b$)}<br />

# 4(q 0, a, a) = {(q 0, aa), (q c, ')}<br />

# 4(q 0, b, a) = {(q 0, ba)}<br />

# 4(q 0, a, b) = {(q 0, ab)}<br />

# 4(q 0, b, b) = {(q 0, bb), (q c, ')}<br />

# 4(q 0, ', $) = {(q f, ')}<br />

# 4(q c, a, a) = {(q c, ')}<br />

# 4(q c, b, b) = {(q c, ')}<br />

# 4(q c, ', $) = {(q f, ')}<br />

Alle restlichen = ,<br />

• Nicht-deterministische Verarbeitung: die Wortmitte muss 'geraten' werden<br />

• oder alle Möglichkeiten müssen durchprobiert werden.<br />

• L F(K 4) = L '(K 4) = {w SP(w) | w * {a, b}*}<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [82]


DPDA! 2 PDA!<br />

Satz 13.29<br />

Für jedes Alphabet ! gilt: DPDA! + PDA!<br />

Für jedes Alphabet ! mit | ! | > 1 gilt: DPDA! 2 PDA!<br />

Kommentar zu Satz 13.29<br />

• DPDA! + PDA! ergibt sich daraus, das jeder deterministisch kontextfreie<br />

Kellerautomat auch ein (nichtdeterministischer) Kellerautomat ist.<br />

• Ansonsten gilt für jedes Alphabet ! mit | ! | > 1, dass es für {w SP(w) | w * !*}<br />

keinen deterministischen Kellerautomaten gibt. Dies zu beweisen liegt jedoch<br />

außerhalb der Möglichkeiten dieser Vorlesung.<br />

Satz 13.30<br />

Für jedes Alphabet ! gilt: REG! + DPDA!<br />

Konstruktion und Beweis zu Satz 13.30 als Hausaufgabe !<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [83]<br />

Deterministische Kellerautomaten und eindeutige <strong>Grammatiken</strong><br />

<strong>Definition</strong> 13.31<br />

• Eine kontextfreie Grammatik heißt genau dann eindeutig, wenn sie nicht<br />

mehrdeutig ist. (Also: wenn es für jedes Wort ihrer Sprache genau eine<br />

Linksableitung gibt.)<br />

• Eine kontextfreie Sprache L heißt genau dann eindeutig, wenn es eine eindeutige<br />

kontextfreie Grammatik G gibt, so dass L = L(G).<br />

Satz 13.32<br />

Für jeden deterministischen Kellerautomaten K gilt, dass L F(K) eindeutig kontextfrei<br />

ist.<br />

Bemerkung<br />

• Auch diesen Beweis führen wir hier nicht.<br />

• Wichtig ist aber, dass die <strong>Sprachen</strong> der deterministischen Kellerautomaten so viele<br />

positive Eigenschaften haben, dass bei der <strong>Definition</strong> formaler <strong>Sprachen</strong> in der<br />

Regel eine Sprache aus DPDA! gewählt wird.<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [84]


Akzeptanzarten bei deterministische Kellerautomaten<br />

Für deterministische Kellerautomaten liefern die beiden Akzeptanzarten<br />

unterschiedliche Beschränkungen.<br />

<strong>Definition</strong> 13.33<br />

Eine Sprache L über ! heißt genau dann präfixfrei, wenn es keine zwei Wörter<br />

w, v * L gibt, so dass w ein echtes Präfix von v ist.<br />

Beobachtung 13.34<br />

Ist K ein deterministischer Kellerautomat, dann ist L "(K) eine präfixfreie Sprache.<br />

Begründung<br />

• Der Kellerautomat kann nicht weiterarbeiten, sobald der Keller geleert ist.<br />

• Der deterministische Kellerautomat hat keine alternativen Verarbeitungswege.<br />

• Er kann nach Verarbeitung von w nicht weiterarbeiten, um auch v zu akzeptieren.<br />

Satz 13.35<br />

Eine Sprache ist genau dann durch einen deterministischen Kellerautomaten mit<br />

leerem Keller akzeptierbar, wenn sie präfixfrei und durch einen deterministischen<br />

Kellerautomaten mit Endzustand akzeptierbar ist.<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [85]<br />

Zum Selbststudium<br />

Satz 13.36<br />

Jede Sprache, die durch einen deterministischen Kellerautomaten mit leerem Keller<br />

akzeptierbar ist, ist auch durch einen deterministischen Kellerautomaten mit<br />

Endzustand akzeptierbar.<br />

Überlegen Sie<br />

• warum die Konstruktion zu Satz 13.36 einen deterministischen Kellerautomaten<br />

wieder auf einen deterministischen Kellerautomaten abbildet.<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [86]


Pumpinglemma für kontextfreie <strong>Sprachen</strong> – Einleitung<br />

• Die Grundidee ist analog zum Pumpinglemma für reguläre <strong>Sprachen</strong>:<br />

• Alle kontextfreien <strong>Sprachen</strong> haben eine spezielle Eigenschaft. Wenn eine<br />

Sprache diese Eigenschaft nicht besitzt, dann ist sie nicht kontextfrei.<br />

• Der Unterschied zwischen den beiden Pumpinglemmata spiegelt die<br />

Unterschiede zwischen regulären und (nicht-regulären) kontextfreien<br />

<strong>Sprachen</strong> wider.<br />

• Die Pumping-Eigenschaft (informell):<br />

• Alle Wörter, die hinreichend lang sind, d.h. deren Länge einen gewissen<br />

Wert, genannt Pumping length (Pumpinglänge), überschreitet, können an<br />

gewissen Stellen „aufgepumpt“ werden.<br />

• Dies bedeutet im Fall der kontextfreien <strong>Sprachen</strong>: In den entsprechenden<br />

Wörtern existieren gewisse Paare von Teilwörtern, die beliebig oft – und<br />

zwar gleich oft – wiederholt werden können, wobei die resultierenden Wörter<br />

ebenfalls zur Sprache gehören.<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [87]<br />

Pumpinglemma für kontextfreie <strong>Sprachen</strong><br />

Satz 13.37 (Pumpinglemma für kontextfreie <strong>Sprachen</strong>)<br />

Sei L eine kontextfreie Sprache. Dann existiert eine natürliche Zahl p (genannt<br />

Pumping length), so dass für alle Wörter w * L mit | w | " p eine Zerlegung von<br />

w = u v x y z existiert, die die folgenden Bedingungen erfüllt<br />

(1) für alle i " 0 gilt u v i x y i z * L<br />

(2) | v y | > 0<br />

(3) | v x y | ! p<br />

Anmerkungen<br />

• Bedingung (2) besagt, dass v oder y nicht gleich dem leeren Wort ist.<br />

• Bedingung (3) besagt, die Gesamtlänge von v, x und y maximal p ist.<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [88]


Pumpinglemma für kontextfreie <strong>Sprachen</strong> – Beispiel 1<br />

L pl1 = { a n b n | n " 0 }<br />

Pumping length = 4<br />

Dann w = a n b n mit | w | " p = 4, d.h. mit n ! 2<br />

• Wir wählen die Zerlegung mit<br />

u = a n-1 , v = a, x = ', y = b, z = b n-1<br />

• dann sind für i " 0 die Wörter<br />

u v i x y i z = a n-1 a i b i b n-1 = a n-1+i b n-1+i<br />

auf ihre Zugehörigkeit zu L pl1 zu prüfen (Pumpingeigenschaft 1)<br />

• Da a n-1+i b n-1+i * L pl1 = { a n b n | n " 0 }, erfüllt L pl1 die<br />

Pumpingeigenschaft (1).<br />

• | v y | = | a b | = 2 > 0 ! Pumpingeigenschaft (2)<br />

• | v x y | = | a b | = 2 ! 4 ! Pumpingeigenschaft (3)<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [89]<br />

Pumpinglemma für kontextfreie <strong>Sprachen</strong> – Beispiel 2<br />

L pl2 = { a n b n c n | n " 0 }<br />

Annahme: L pl2 ist kontextfrei. Sei p die Pumpinglänge für L pl2 .<br />

• Wir betrachten das Wort w = a p b p c p .<br />

• Da w * L pl2 und | w | = 3p " p, ist das Pumpinglemma anwendbar.<br />

• Wir untersuchen nun verschiedene Fälle von Zerlegungen w = u v x y z<br />

(1) v und y enthalten jeweils nur einen Typ von terminalen Symbolen.<br />

• Dann enthält v nicht sowohl a-Symbole als auch b-Symbole oder sowohl b-<br />

Symbole als auch c-Symbole. Entsprechendes gilt für y.<br />

• Dann enthält u v 2 x y 2 z nicht die gleiche Anzahl von a-, b- und c-Symbolen.<br />

! verletzt Pumpingeigenschaft (1)<br />

(2) v oder y enthalten mehr als einen Typ von terminalen Symbolen<br />

• Dann enthält u v 2 x y 2 z zwar eventuell die gleiche Anzahl von a-, b- und c-<br />

Symbolen, aber nicht in der korrekten Anordnung, ! verletzt<br />

Pumpingeigenschaft (1)<br />

Einer der beiden Fälle muss eintreten. Da beide Fälle zum Widerspruch der Annahme<br />

(L pl2 ist kontextfrei) führen, gilt, L pl2 nicht kontextfrei.<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [90]


Pumpinglemma für kontextfreie <strong>Sprachen</strong> – Beweis<br />

Sei L eine kontextfreie Sprache.<br />

• Zuerst betrachten wir zwei Sonderfälle:<br />

• L = ,: Da es keine Zeichenkette w * L = , gibt, erfüllen alle Wörter aus L<br />

die Pumpingeigenschaft.<br />

• L = {'}: Dann gibt es in L kein Wort w * L mit | w | " 1 (dies ist die kleinste<br />

Pumpinglänge, die überhaupt möglich wäre). Somit erfüllen alle Wörter aus<br />

L mit | w | " 1 die Pumpingeigenschaft.<br />

• Nach Satz 3.21 gibt es eine Grammatik G = (!, N, P, S) in Chomsky-Normalform<br />

mit L(G) = L – {'}.<br />

• Sei |N| = m, d.h. G hat m Variablen. Wir wählen p = 2 m .<br />

• Sei w * L mit | w | = p<br />

• Nach Satz 13.38 hat Parsebaum mit maximaler Pfadlänge m ein<br />

terminales Wort mit der maximalen Länge 2 m-1 = p/2<br />

• Ein solcher Parsebaum kann nicht w erzeugen, da | w | = p<br />

• Also haben Parsebäume, die zu w führen, einen Pfad mit der Länge m + 1<br />

(oder länger).<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [91]<br />

Grösse von Parsebäumen<br />

Satz 13.38<br />

Sei G = (!, N, P, S) eine Grammatik in Chomsky-Normalform. Wenn der längste Pfad<br />

im Parsebaum zu w * L(G) die Länge n besitzt, so gilt | w | ! 2 n-1 .<br />

Beweis durch Induktion<br />

Beweisidee<br />

• <strong>Grammatiken</strong> in Chomsky-<br />

Normalform erzeugen Parsebäume mit<br />

einem Verzweigungsgrad ! 2<br />

• Ein nichtterminaler Parse-Baum mit<br />

Verzweigungsgrad 2 und der Tiefe k<br />

hat maximal eine Breite von 2 k .<br />

• Die abschliessenden Regeln (Tiefe<br />

k+1) verändern die Breite nicht.<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [92]


• längster Pfad zu w hat die Länge k +1.<br />

Parsebäume für w<br />

• Da k " m, kommen mindestens m +1<br />

Vorkommen von Variablen auf dem Pfad<br />

vor.<br />

• Da es nur m Variablen in der Grammatik<br />

gibt, kommt es mindestens zu eine<br />

Wiederholung von Variablen, etwa<br />

A h = A i mit k–m ! h < i " k<br />

• Hieraus ergibt sich eine Zerlegung für w in<br />

u v x y z<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [93]<br />

u x z<br />

• u v 2 x y 2 z<br />

Parsebäume für u vi x yi z<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [94]


<strong>Kontextfreie</strong> <strong>Sprachen</strong><br />

<strong>Kontextfreie</strong> <strong>Sprachen</strong> & Kellerautomaten – Fazit<br />

• bilden die für die Praxis wichtigste Klasse der formalen <strong>Sprachen</strong>, mit<br />

wichtigen Unterklassen reguläre <strong>Sprachen</strong>, deterministische kfS und eindeutige<br />

kfS<br />

• werden akzeptiert / erkannt / entschieden durch Kellerautomaten. Die Familie<br />

der Kellerautomaten weist ein grosses Spektrum von „Designvarianten“ auf,<br />

die z.T. unterschiedliche <strong>Sprachen</strong> spezifizieren.<br />

o nicht-deterministisch vs. deterministisch<br />

o Akzeptanz durch Endzustand – Akzeptanz durch leeren Keller<br />

• Nicht-Kontextfreiheit kann durch ein Pumpinglemma getestet werden.<br />

Was es weitergeht:<br />

• Abschlusseigenschaften von kontextfreien und regulären <strong>Sprachen</strong><br />

• <strong>Sprachen</strong> & Automaten jenseits der Kontextfreiheit<br />

• Turingmaschinen als generelles Modell für Berechnungsprozesse:<br />

Berechenbarkeit, Entscheidbarkeit und Komplexität<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Grammatiken</strong> [95]

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!