Automaten und Formale Sprachen“ ” alias Theoretische Informatik“ ” Sommersemester 2011 Dr. Sander Bruggink ¨ Ubungsleitung: Jan St¨ uckrath
Sander Bruggink
Automaten und Formale Sprachen
1
Kontextfreie Sprachen
Wir besch¨aftigen uns ab jetzt einige Wochen mit kontextfreien Sprachen: Kontextfreie Grammatiken und eindeutigkeit Wortproblem f¨ ur kontextfeien Sprachen: der CYK-Algorithmus Pumping-Lemma f¨ ur kontextfreien Sprachen Automatenmodell f¨ ur kontextfreien Sprachen: Kellerautomaten Abschlusseigenschaften und Entscheidungsverfahren Deterministische kontextfreie Sprachen
Kontextfreie Sprachen
Entscheidbare Eigenschaften
Entscheidbarkeit
Sind die folgende Probleme entscheidbar? Wortproblem: Gegeben eine kontextfreie Sprache L und w ∈ Σ∗ . Gilt w ∈ L? Leerheitsproblem: Gegeben eine kontextfreie Sprache L. Gilt L = ∅? Endlichkeitsproblem: Gegeben eine kontextfreie Sprache L. Ist L endlich? ¨ Aquivalenzproblem: Gegeben zwei kontextfreie Sprachen L1 , L2 . Gilt L1 = L2 ? Schnittproblem: Gegeben zwei kontextfreie Sprachen L1 , L2 . Gilt L1 ∩ L2 = ∅?
Sander Bruggink
Automaten und Formale Sprachen
275
Kontextfreie Sprachen
Entscheidbare Eigenschaften
Entscheidbarkeit
Entscheidbarkeit des Wortproblems Das Wortproblem f¨ ur kontextfreie Sprachen ist entscheidbar. Kann mit dem CYK-Algorithmus gel¨ ost werden.
Sander Bruggink
Automaten und Formale Sprachen
276
Kontextfreie Sprachen
Entscheidbare Eigenschaften
Entscheidbarkeit
Entscheidbarkeit des Leerheitsproblem Das Leerheitsproblem f¨ ur kontextfreie Sprachen ist entscheidbar. ¨ Beweisidee: Bestimme alle produktiven Variablen (siehe Ubung), d.h., alle ∗ ∗ Variablen A, f¨ ur die es ein x ∈ Σ gibt mit A ⇒ x. Die Sprache L ist leer, genau dann wenn das Startsymbol S nicht produktiv ist.
Sander Bruggink
Automaten und Formale Sprachen
277
Kontextfreie Sprachen
Entscheidbare Eigenschaften
Entscheidbarkeit
Entscheidbarkeit des Endlichkeitproblems Das Endlichkeitsproblem f¨ ur kontextfreie Sprachen ist entscheidbar. Beweisidee: Gegeben eine kontextfreie Grammatik. Sei n = 2|V | die Anzahl von Variablen, d.h. die der Sprache zugeordnete Pumping-Lemma-Zahl. Alle W¨orter x ∈ L mit |x| ≥ n k¨ onnen gepumpt“ werden und alle W¨orter ” x ∈ L mit |x| ≥ 2n k¨onnen geschrumpft“ werden. ” Das heißt, dass L unendlich ist, gdw. es ein Wort x ∈ L gibt mit n ≤ |x| ≤ 2n. Es gibt nur endlich viele von diesen W¨ orter und diese k¨onnen also in endlicher Zeit auf Mitgliedschaft in der Sprache getestet werden.
Sander Bruggink
Automaten und Formale Sprachen
278
Kontextfreie Sprachen
Entscheidbare Eigenschaften
Entscheidbarkeit
Unentscheidbarkeit bei kontextfreien Sprachen Folgende Probleme sind f¨ ur kontextfreie Sprachen nicht entscheidbar, d.h., man kann zeigen, dass es kein entsprechendes Verfahren gibt: ¨ Aquivalenzproblem: Gegeben zwei kontextfreie Sprachen L1 , L2 . Gilt L1 = L2 ? Schnittproblem: Gegeben zwei kontextfreie Sprachen L1 , L2 . Gilt L1 ∩ L2 = ∅? Bemerkung: In der Vorlesung Berechenbarkeit und Komplexit¨at“ wird es ” u.a. darum gehen, wie man solche Unentscheidbarkeitsresultate zeigen kann.
Sander Bruggink
Automaten und Formale Sprachen
279
Kontextfreie Sprachen
Entscheidbare Eigenschaften
Entscheidbarkeit
Das Schnittproblem ist jedoch entscheidbar, wenn von einer der beiden Sprachen L1 , L2 bekannt ist, dass sie regul¨ar ist und sie als endlicher Automat gegeben ist. Entscheidungsverfahren: 1
Konstruiere einen Kellerautomat M, der L1 ∩ L2 akzeptiert.
2
Der Kellerautomat M kann dann in eine kontextfreie Grammatik G umgewandelt werden.
3
Von dieser Grammatik kann das Leerheitsproblem gel¨ost werden.
Sander Bruggink
Automaten und Formale Sprachen
280
Kontextfreie Sprachen
Deterministische Kellerautomaten
Deterministisch kontextfreie Sprachen Wir betrachten nun eine Unterklasse von Kellerautomaten, die dazu verwendet werden k¨onnen, Sprachen deterministisch und damit effizient zu erkennen. Deterministischer Kellerautomat (Definition) En deterministischer Kellerautomat M ist ein 7-Tupel M = (Z , Σ, Γ, δ, z0 , #, E ), wobei (Z , Σ, Γ, δ, z0 , #) ein Kellerautomat ist, E ⊆ Z die Menge von Endzust¨anden ist und ¨ die Uberf¨ uhrungsfunktion δ deterministisch ist, das heißt: f¨ ur alle z ∈ Z , a ∈ Σ und A ∈ Γ gilt: |δ(z, a, A)| + |δ(z, ε, A)| ≤ 1.
Sander Bruggink
Automaten und Formale Sprachen
281
Kontextfreie Sprachen
Deterministische Kellerautomaten
Deterministisch kontextfreie Sprachen
Unterschiede zwischen Kellerautomaten und deterministischen Kellerautomaten: Deterministische Kellerautomaten haben eine Menge von Endzust¨anden und akzeptieren mit Endzustand – und nicht mit leerem Keller. F¨ ur jeden Zustand z und jedes Kellersymbol A gilt: ¨ entweder gibt es h¨ ochstens einen ε-Ubergang ¨ oder es gibt f¨ ur jedes Alphabetsymbol h¨ ochstens einen Ubergang.
¨ Konfigurationen und Uberg¨ ange zwischen Konfigurationen bleiben jedoch gleich definiert.
Sander Bruggink
Automaten und Formale Sprachen
282
Kontextfreie Sprachen
Deterministische Kellerautomaten
Deterministisch kontextfreie Sprachen
Akzeptierte Sprache bei deterministischen Kellerautomaten (Definition) Sei M = (Z , Σ, Γ, δ, z0 , #, E ) ein deterministischer Kellerautomat. Dann ist die von M akzeptierte Sprache: D(M) = {x ∈ Σ∗ | (z0 , x, #) `∗ (z, ε, γ) f¨ ur ein z ∈ E , γ ∈ Γ∗ }.
Sander Bruggink
Automaten und Formale Sprachen
283
Kontextfreie Sprachen
Deterministische Kellerautomaten
Deterministisch kontextfreie Sprachen
Deterministisch kontextfreie Sprachen Eine Sprache heißt deterministisch kontextfrei genau dann, wenn sie von einem deterministischen Kellerautomaten akzeptiert wird.
Sander Bruggink
Automaten und Formale Sprachen
284
Kontextfreie Sprachen
Deterministische Kellerautomaten
Deterministisch kontextfreie Sprachen Beispiel: Die Sprache L = {w $w R | w ∈ {a, b}∗ } ist deterministisch kontextfrei. M = ({z1 , z2 , z3 }, {a, b, $}, {#, A, B}, δ, z1 , #, {z3 }), wobei δ folgendermaßen definiert ist (wir schreiben (z, a, A) → (z 0 , x), falls (z 0 , x) ∈ δ(z, a, A)). (z1 , a, #) (z1 , b, #) (z1 , $, #) (z2 , a, A)
→ → → →
(z1 , A#) (z1 , B#) (z2 , #) (z2 , ε)
(z1 , a, A) (z1 , b, A) (z1 , $, A) (z2 , b, B)
Sander Bruggink
→ → → →
(z1 , AA) (z1 , BA) (z2 , A) (z2 , ε)
(z1 , a, B) (z1 , b, B) (z1 , $, B) (z2 , ε, #)
Automaten und Formale Sprachen
→ → → →
(z1 , AB) (z1 , BB) (z2 , B) (z3 , #)
285
Kontextfreie Sprachen
Deterministische Kellerautomaten
Deterministisch kontextfreie Sprachen
Beispiel 2: Die Sprache L = {ww R | w ∈ {a, b}∗ } ist jedoch nicht deterministisch kontextfrei. (Ohne Beweis.) Wir haben letzte Woche schon gesehen, dass diese Sprache kontextfrei ist. Das heißt, die Klasse der kontextfreien Sprachen und die Klasse der deterministisch kontextfreien Sprachen sind nicht identisch! Die Klasse der deterministisch kontextfreien Sprachen ist eine echte Teilmenge der Klasse der kontextfreien Sprachen.
Sander Bruggink
Automaten und Formale Sprachen
286
Kontextfreie Sprachen
Deterministische Kellerautomaten
Deterministisch kontextfreie Sprachen Weitere Bemerkungen: Effizienz: Mit Hilfe von deterministischen Kellerautomaten hat man jetzt ein Verfahren zur L¨ osung des Wortproblems, das eine lineare Anzahl von Schritten braucht (als Funktion der L¨ange des Eingabewortes). Dazu l¨asst man einfach den Automaten auf dem Wort arbeiten und u uft, ob man in einen Endzustand gelangt. ¨berpr¨ Deterministisch kontextfreie Grammatiken: Es gibt auch Grammatikklassen, die zu den deterministisch kontextfreien Sprachen passen. Dies ist aber nicht ganz trivial; daher gibt es hierzu mehrere Ans¨atze. Der bekannteste davon sind die sogenannten LR(k)-Grammatiken.
Sander Bruggink
Automaten und Formale Sprachen
287
Kontextfreie Sprachen
Deterministische Kellerautomaten
Deterministisch kontextfreie Sprachen Die Abschlusseigenschaften bei deterministisch kontextfreien Sprachen sehen etwas anders aus als bei kontextfreien Sprachen. Abgeschlossenheit Sind die kontextfreien Sprachen abgeschlossen unter den folgenden Operationen? Vereinigung (L1 , L2 kontextfrei ⇒ L1 ∪ L2 kontextfrei) ? Schnitt (L1 , L2 kontextfrei ⇒ L1 ∩ L2 kontextfrei) ? Schnitt mit regul¨arer Sprache (L1 kontextfrei, L2 regul¨ar ⇒ L1 ∩ L2 kontextfrei) ? Komplement (L kontextfrei ⇒ L = Σ∗ \L kontextfrei) ?
Sander Bruggink
Automaten und Formale Sprachen
288
Kontextfreie Sprachen
Deterministische Kellerautomaten
Deterministisch kontextfreie Sprachen
Abschluss unter Komplement Wenn L eine deterministisch kontextfreie Sprache ist, dann ist auch L = Σ∗ \L deterministisch kontextfrei. Informeller Beweisansatz: Wie bei DFAs, k¨onnen wir einen deterministischen Kellerautomaten f¨ ur das Komplement bauen, indem wir (mit ein bisschen rumbasteln) die Endzust¨ande und Nicht-Endzust¨ande vertauschen.
Sander Bruggink
Automaten und Formale Sprachen
289
Kontextfreie Sprachen
Deterministische Kellerautomaten
Deterministisch kontextfreie Sprachen Kein Abschluss unter Schnitt Wenn L1 und L2 deterministisch kontextfreie Sprachen sind, dann ist L1 ∩ L2 nicht notwendigerweise deterministisch kontextfrei. Begr¨ undung: Die Beispiel-Sprachen aus dem Argument, dass die kontextfreien Sprachen unter Schnitt nicht abgeschlossen sind, sind sogar deterministisch kontextfrei, ihr Schnitt jedoch noch nicht einmal kontextfrei: L1 = {aj b k c k | j ≥ 0, k ≥ 0} L2 = {ak b k c j | j ≥ 0, k ≥ 0} L1 ∩ L2 = {an b n c n | n ≥ 0}
Sander Bruggink
Automaten und Formale Sprachen
290
Kontextfreie Sprachen
Deterministische Kellerautomaten
Deterministisch kontextfreie Sprachen
Abschluss unter Vereinigung Wenn L1 und L2 deterministisch kontextfreie Sprachen sind, dann ist auch L1 ∪ L2 eine deterministisch kontextfreie Sprache. (??) Kein Abschluss unter Vereinigung Wenn L1 und L2 deterministisch kontextfreie Sprachen sind, dann ist L1 ∪ L2 nicht notwendigerweise deterministisch kontextfrei. Begr¨ undung: Aus dem Abschluss unter Vereinigung und Komplement w¨ urde auch der Abschluss unter Schnitt folgen (wegen L1 ∩ L2 = L1 ∪ L2 ).
Sander Bruggink
Automaten und Formale Sprachen
291
Kontextfreie Sprachen
Deterministische Kellerautomaten
Deterministisch kontextfreie Sprachen
Deterministisch kontextfreie Sprachen sind unter Schnitt mit regul¨aren Sprachen abgeschlossen. Abschluss unter Schnitt mit regul¨aren Sprachen Sei L eine deterministisch kontextfreie Sprache und R eine regul¨are Sprache. Dann gilt, dass L ∩ R eine deterministisch kontextfreie Sprache ist. Beweisidee: Analog zu kontextfreien Sprachen.
Sander Bruggink
Automaten und Formale Sprachen
292
Kontextfreie Sprachen
Deterministische Kellerautomaten
Deterministisch kontextfreie Sprachen
Sander Bruggink
Det. KF Spr.
KF Sprachen
Abgeschlossen unter Vereinigung Konkatenation Kleene-Stern Schnitt Schnitt mit RS Komplement
Regul¨are Spr.
Zusammenfassung Abschlusseigenschaften
3 3 3 3 3 3
7 7 7 7 3 3
3 3 3 7 3 7
Automaten und Formale Sprachen
293
Kontextfreie Sprachen
Deterministische Kellerautomaten
Deterministisch kontextfreie Sprachen Entscheidbarkeit bei deterministisch kontextfreien Sprachen Folgende Probleme sind f¨ ur deterministisch kontextfreie Sprachen (repr¨asentiert durch einen deterministischen Kellerautomaten) entscheidbar: Wortproblem: Gegeben eine deterministisch kontextfreie Sprache L und w ∈ Σ∗ . Gilt w ∈ L? Mit einem deterministischen Kellerautomaten in O(|w |) Zeit. Leerheitsproblem: Gegeben eine deterministisch kontextfreie Sprache L. Gilt L = ∅? Siehe das entsprechende Entscheidungsverfahren f¨ ur kontextfreie Sprachen.
Sander Bruggink
Automaten und Formale Sprachen
294
Kontextfreie Sprachen
Deterministische Kellerautomaten
Entscheidbarkeit
Entscheidbarkeit bei deterministisch kontextfreien Sprachen Endlichkeitsproblem: Gegeben eine kontextfreie Sprache L. Ist L endlich? Siehe das entsprechende Entscheidungsverfahren f¨ ur kontextfreie Sprachen. ¨ Aquivalenzproblem: Gegeben zwei deterministisch kontextfreie Sprachen L1 , L2 . Gilt L1 = L2 ? War lange offen und die Entscheidbarkeit wurde erst 1997 von G´eraud S´enizergues gezeigt.
Sander Bruggink
Automaten und Formale Sprachen
295
Kontextfreie Sprachen
Deterministische Kellerautomaten
Entscheidbarkeit
Unentscheidbarkeit bei deterministisch kontextfreien Sprachen Folgende Probleme sind f¨ ur deterministisch kontextfreie Sprachen nicht entscheidbar, d.h., man kann zeigen, dass es kein entsprechendes Verfahren gibt: Schnittproblem: Gegeben zwei deterministisch kontextfreie Sprachen L1 , L2 . Gilt L1 ∩ L2 = ∅? Wie bei kontextfreien Sprachen ist dieses Problem jedoch entscheidbar, wenn eine der beiden Sprachen regul¨ar ist.
Sander Bruggink
Automaten und Formale Sprachen
296
Kontextfreie Sprachen
Kontextfreie Sprachen in der Praxis
Parsing mit JavaCC
Kontextfreie Grammatiken werden h¨aufig benutzt, um den Syntax von Computersprachen (Programmiersprachen, Markup-Sprachen, usw.) anzugeben. Ein Parser ist ein Programmmodul, das den Quellcode eines Programms als Eingabe nimmt und irgendwelche Repr¨asentation (z.B. einen Syntaxbaum) davon ausgibt. In dieser Vorlesung werden wir JavaCC kennenlernen, einen parser generator, mit dem man einfach einen Parser (in Java) erzeugen kann.
Sander Bruggink
Automaten und Formale Sprachen
297
Kontextfreie Sprachen
Kontextfreie Sprachen in der Praxis
Parsing mit JavaCC
Der Parser eines Compilers bzw. eines Interpreters besteht im Allgemeinen aus zwei Komponenten: Der Scanner (auch lexical analyser) teilt die einzelnen Zeichen in Ketten auf, den sogenannten Tokens. Der Parser selbst analysiert die Folge von Tokens und konstruiert einen Syntaxbaum (bzw. eine andere Repr¨asentation). JavaCC ist in der Lage beide Komponenten zu erzeugen.
Sander Bruggink
Automaten und Formale Sprachen
298
Kontextfreie Sprachen
Kontextfreie Sprachen in der Praxis
Einschub: Extended Backus-Naur-Form
In der Praxis wird oft die Extended Backus-Naur-Form (EBNF) benutzt, eine Abk¨ urzung f¨ ur kontextfreie Grammatiken. In EBNF sind die rechten Seiten der Regeln keine Zeichenketten, sondern regul¨are Ausdr¨ ucke.
Sander Bruggink
Automaten und Formale Sprachen
299
Kontextfreie Sprachen
Kontextfreie Sprachen in der Praxis
Einschub: Extended Backus-Naur-Form EBNF-Grammatiken k¨onnen einfach in richtige kontextfreie Grammatiken umgewandelt werden: ( A → αBγ A → α(β1 | · · · | βn )γ ⇒ B → β1 | · · · | βn ( A → αγ | αBγ ∗ A → αβ γ ⇒ B → β | βB Abk¨ urzungen: α+ ≡ αα∗ , α? ≡ (ε | α), usw. Regeln anwenden bis die Grammatik keine ∗“- und (geschachtelten) ” |“-Operationen mehr enth¨alt. ” Sander Bruggink
Automaten und Formale Sprachen
300
Kontextfreie Sprachen
Kontextfreie Sprachen in der Praxis
Parsing mit JavaCC
Wir werden einen Parser erzeugen, der die folgende Grammatik (in EBNF) f¨ ur arithmetische Ausdr¨ ucke parst: E → T (“+”T | “-”T )∗ T → F (“*”F | “/”F )∗ F → “(”E “)” | number Terminalsymbole stehen in Anf¨ uhrungszeigen. Das Token number wird vom Scanner erkannt.
Sander Bruggink
Automaten und Formale Sprachen
301
Kontextfreie Sprachen
Kontextfreie Sprachen in der Praxis
Parsing mit JavaCC
Aufbau einer JavaCC Quelldatei: PARSER_BEGIN(Name) public class Name { ... } PARSER_END(Name) Regeln f¨ ur lexical analyser Regeln der Grammatik
Sander Bruggink
Automaten und Formale Sprachen
302
Kontextfreie Sprachen
Kontextfreie Sprachen in der Praxis
Parsing mit JavaCC Der lexical analyser: // lexical analyser SKIP: {" " | "\t"} // skip spaces and tabs SKIP: {"\n" | "\r"} // skip newlines and carriage returns TOKEN: { | | | | | | }
Sander Bruggink
Automaten und Formale Sprachen
303
Kontextfreie Sprachen
Kontextfreie Sprachen in der Praxis
Parsing mit JavaCC
¨ Ubersetzung der Regel E → T (“+”T | “-”T )∗ public void E() :→ {} { T() ( T() | T() )* }
Sander Bruggink
Automaten und Formale Sprachen
304
Kontextfreie Sprachen
Kontextfreie Sprachen in der Praxis
Parsing mit JavaCC
Ganze Datei parsen: Das Token “ wird am Ende der Datei ausgegeben. Um eine ” vollst¨andige Datei zu parsen, brauchen wir also noch die folgende Regel: public void expression() : {} { E() }
Sander Bruggink
Automaten und Formale Sprachen
305
Kontextfreie Sprachen
Kontextfreie Sprachen in der Praxis
Parsing mit JavaCC
Der Parser erkennt zwar die syntaktisch korrekten arithmetischen Ausdr¨ ucke, gibt aber noch keine Repr¨asentation des eingelesenen Ausdrucks zur¨ uck. Daf¨ ur sollen die Zwischenergebnisse der Nichtterminale gespeichert werden und es muss w¨ahrend des Parsings manchmal Java-code ausgef¨ uhrt werden, um die Repr¨asentationen zu konstruieren. In der Praxis gibt ein Parser den Syntaxbaum des eingelesenen Programms zur¨ uck. Wir sind heute aber zufrieden mit dem Wert des arithmetischen Ausdrucks.
Sander Bruggink
Automaten und Formale Sprachen
306
Kontextfreie Sprachen
Kontextfreie Sprachen in der Praxis
Parsing mit JavaCC Eine Produktion des endg¨ ultigen Parsers public double E() : { double value; double value2; }{ value = T() ( value2 = T() { value += value2; } | value2 = T() { value -= value2; } )* { return value; } }
Sander Bruggink
Automaten und Formale Sprachen
307
Kontextfreie Sprachen
Kontextfreie Sprachen in der Praxis
Parsing mit JavaCC
Im Grunde werden mit JavaCC LL(1)-Grammatiken erzeugt, das heißt, dass nur deterministisch kontextfreie Sprachen erkannt werden k¨onnen. Es gibt aber verschiedene Tricks, um Parser f¨ ur gr¨oßere Klassen von Grammatiken zu erzeugen. Zum Selbststudium: https://javacc.dev.java.net/.
Sander Bruggink
Automaten und Formale Sprachen
308