31.01.2014 Aufrufe

Kontextfreie Sprachen & Kellerautomaten

Kontextfreie Sprachen & Kellerautomaten

Kontextfreie Sprachen & Kellerautomaten

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

<strong>Kontextfreie</strong> <strong>Sprachen</strong> & <strong>Kellerautomaten</strong><br />

! Stand 26.6.2007<br />

Im Verlauf der Vorlesungen zu diesem Kapitel werden Änderungen und Ergänzungen<br />

erfolgen.<br />

Sie sollten daher sorgfältig auf Unterschiede zwischen den Vorversionen und der<br />

Endversion achten.<br />

FGI-1, SoSe 2007, Habel / Eschenbach


<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 Grammatiken erzeugt<br />

o Die Wörter / Sätze, die von kontextfreien Grammatiken 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 Grammatiken)<br />

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

<strong>Kellerautomaten</strong>, 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> & Grammatiken [1]<br />

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

Definition 13.1 (! 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 Grammatiken)<br />

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


Zwei Grammatiken 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> & Grammatiken [3]<br />

Regelanwendung, Ableitung<br />

Definition 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> & Grammatiken [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(G 4 )<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'<br />

) &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> & Grammatiken [5]<br />

Linksableitung – Rechtsableitung<br />

Definition 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<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 />

Rechtsableitung<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> & Grammatiken [6]


Von einer Grammatik erzeugte Sprache<br />

Definition 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 />

Sei S ) u 1 )u 2 )… ) u w 1 w 2 w k<br />

k ) 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> & Grammatiken [7]<br />

A<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> & Grammatiken [8]


Mehrdeutigkeit (Ambiguität)<br />

Definition 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> & Grammatiken [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> & Grammatiken [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> & Grammatiken [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> & Grammatiken [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> & Grammatiken [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> & Grammatiken [14]


<strong>Kontextfreie</strong> Grammatiken – 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 Grammatiken „vereinfacht“ werden können. Dies betrifft insbesondere<br />

die Konstruktion von Beweisen über kfG und <strong>Kellerautomaten</strong>, 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 Grammatiken 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> & Grammatiken [15]<br />

Grammatiken 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 Grammatiken erzeugbar (noch zu zeigen)<br />

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

Typ-3-Grammatiken<br />

• sind kontextfreie Grammatiken,<br />

• erfüllen strukturelle Zusatzbedingungen<br />

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

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

• einseitige Linearität<br />

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


Einseitig lineare Grammatiken<br />

Definition 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> & Grammatiken [17]<br />

Beispiel: Lineare Grammatiken<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> & Grammatiken [18]


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

Definition 13.7<br />

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

über $.<br />

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

$.<br />

• TYP3 $ ist die Menge der durch einseitig lineare Grammatiken 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> & Grammatiken [19]<br />

Rechtslineare Grammatiken 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> & Grammatiken [20]


Spiegelwörter und Spiegelsprachen<br />

Definition 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 13.10<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> & Grammatiken [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> & Grammatiken [22]


Normalformen für einseitig lineare Grammatiken<br />

Die Definition für einseitig lineare Grammatiken 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 13.11<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> & Grammatiken [23]<br />

Zum Selbststudium<br />

Konstruktion zu Satz 13.11<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> & Grammatiken [24]


Zum Selbststudium: Zu Satz 13.11<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 Grammatiken 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> & Grammatiken [25]<br />

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

Satz 13.12<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äß 13.11 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> & Grammatiken [26]


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

Satz 13.13<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 13.10.1<br />

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

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

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

8. ReL $ " LiL $ = TYP3 $ : Definition 13.13<br />

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

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & Grammatiken [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> & Grammatiken [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 />

Nicht einseitig lineare Grammatik G 2<br />

S # aSb, S # ab<br />

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

.<br />

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

Normalformen für kontextfreie Grammatiken<br />

Ziel: Vereinfachung von kontextfreien Grammatiken<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 Grammatiken (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> & Grammatiken [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> & Grammatiken [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 nicht-erreichbare " nicht-erzeugende "<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 />

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> & Grammatiken [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. G 1 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> & Grammatiken [33]<br />

Berechnung der erzeugenden Symbole<br />

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

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

Induktive Definition 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> & Grammatiken [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> & Grammatiken [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> & Grammatiken [36]


Berechnung der erreichbaren Symbole<br />

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

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

Induktive Definition 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> & Grammatiken [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> & Grammatiken [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 Grammatiken werden als "-freie Grammatiken 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> & Grammatiken [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> & Grammatiken [40]


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

Regeln in G'<br />

S 0 # S<br />

S # ASA | aB<br />

A# B | S<br />

B# b | "<br />

Beispiel eines Strukturbaums<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> & Grammatiken [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> & Grammatiken [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> & Grammatiken [43]<br />

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

Regeln in G'<br />

S 0 # S<br />

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

A# B | S<br />

B# b<br />

Beispiel eines Strukturbaums<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> & Grammatiken [44]


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

G'-Stukturbaum<br />

G''-Strukturbaums<br />

FGI-1 Habel / Eschenbach Kap 13 <strong>Kontextfreie</strong> <strong>Sprachen</strong> & Grammatiken [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> & Grammatiken [46]


Chomsky Normalform<br />

Definition 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> & Grammatiken [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> & Grammatiken [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> & Grammatiken [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<br />

Elimination von S 0 # S<br />

Elimination von A# B<br />

Elimination der A# S<br />

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

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

A# b<br />

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> & Grammatiken [50]


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

G-Stukturbaum<br />

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> & Grammatiken [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 , … A k-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 , A 1 # u 2 A 3 , … A k-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> & Grammatiken [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<br />

Umformung von S # ASA<br />

Umformung der Regeln mit rechter Seite aB<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 />

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

S # AA 1 , A 1 # SA<br />

X # UB , U# a<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> & Grammatiken [53]<br />

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

G'-Stukturbaum<br />

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> & Grammatiken [54]


Normalformen Zusammenfassung<br />

Aufgabe: Vereinfachung von kontextfreien Grammatiken<br />

Theoreme zu vereinfachten Grammatiken<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> & Grammatiken [55]<br />

<strong>Kellerautomaten</strong>: 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> & Grammatiken [56]


Kellerautomat<br />

$<br />

0<br />

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

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

Definition (nichtdeterministischer) Kellerautomat<br />

Definition 13.22<br />

Ein (nichtdeterministischer) Kellerautomat K = (!, Q, 0, -, q 0 , 1, F), besteht aus:<br />

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

• 0 : ein Alphabet (Kelleralphabet) $<br />

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

der Zustände<br />

• - : Q ( (! " {2}) ( 0 # .(Q ( 0*)<br />

ist die Zustandsüberführungsfunktion<br />

von K.<br />

• q 0 ! Q : der Startzustand<br />

• 1 ! 0 : das Kellerboden-Symbol<br />

(initialer Kellereintrag)<br />

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

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

0<br />

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

Abb: © Vossen & Witt (2006)


Zustandsüberführungsfunktion des <strong>Kellerautomaten</strong><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', 2) ! -(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, 2, 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', 2) ! -(q, 2, 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> & Grammatiken [59]<br />

Beispiel Kellerautomat<br />

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

- 1 (q 0 , 2, 1) = - 1 (q 1 , 2, 1) = {(q f , 2)}<br />

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

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

- 1 (q 0 , b, 1) = - 1 (q 1 , b, 1) = {(q 1 , 2)}<br />

- 1 (q 0 , 2, 1) = - 1 (q 0 , b, 1) = - 1 (q 1 , 2, 1) =<br />

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

- 1 (q f , 2, 1) = - 1 (q f , 2, 1) = - 1 (q f , a, 1) =<br />

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

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!