Formale Sprachen und Automaten

Größe: px
Ab Seite anzeigen:

Download "Formale Sprachen und Automaten"

Transkript

1 Formale Sprachen und Automaten Kapitel 6: Syntaxanalyse Vorlesung an der DHBW Karlsruhe Thomas Worsch Karlsruher Institut für Technologie, Fakultät für Informatik Wintersemester 2012

2 Kapitel 6 Syntaxanalyse Einleitung Lexikalische Analyse Lexer-Generatoren Syntaktische Analyse Der Algorithmus von Cocke, Younger und Kasami Der Algorithmus von Earley LR Parsing Nach der Syntaxanalyse Inhalt 2/112

3 Einleitung Lexikalische Analyse Lexer-Generatoren Syntaktische Analyse Der Algorithmus von Cocke, Younger und Kasami Der Algorithmus von Earley LR Parsing Nach der Syntaxanalyse Einleitung 3/112

4 6.3 Phasen eines Übersetzers Analyseteil Vorverarbeitung (Makroersetzung) lexikalische Analyse syntaktische Analyse semantische Analyse Syntheseteil Erzeugung des Zwischencodes Optimierung des Zwischencodes Erzeugung des Maschinencodes Optimierung des Maschinencodes quer dazu Verwaltung der Symboltabelle Fehlerbehandlung Einleitung 4/112

5 T-Diagramme Übersetzer C von Quellsprache S nach Zielsprache T implementiert in Programmiersprache I : S C T I Beispielaufgabe: P C 1 Gegeben: zwei Übersetzer P M 2 und P C 2 M 1 M 1 Gesucht: ein Übersetzer P M 2 M 2 Einleitung 5/112

6 T-Diagramme (2) Gesucht: ein Übersetzer P M 2 M 2 : 1. Schritt: P C 1 P M 2 P P C 2 M 1 M 1 C 3 M 1 M 2 2. Schritt: P C 1 P Falls M 1 = M 2 = M: P C 1 M 2 P C 4 M 2 M 2 P P C 3 M 2 M 2 P C 2 M 1 M 1 M 1 P C 1 P P M P C 1 P C 2 M M P C 4 P C 3 M M M M M Einleitung 6/112

7 Einleitung Lexikalische Analyse Lexer-Generatoren Syntaktische Analyse Der Algorithmus von Cocke, Younger und Kasami Der Algorithmus von Earley LR Parsing Nach der Syntaxanalyse Lexikalische Analyse 7/112

8 6.5 Ein Programm(teil), das die lexikalische Analyse durchführt, heißt auch Lexer oder Scanner. Im Deutschen manchmal: Symbolentschlüssler. Lexikalische Analyse 8/112

9 6.6 Aufgaben des Lexers Eingabetext an passenden Stellen in eine Folge von Lexemen aufteilen. Jedes Lexem passt zu einem Muster, oft durch reguläre Ausdrücke beschrieben. Daraus kann automatisch eine effizient arbeitende Implementierung des Lexers erzeugt werden. Lexikalische Analyse 9/112

10 6.6 Aufgaben des Lexers (2) Schnittstelle des Lexers: Prozeduren zur Initialisierung und Beendigung nexttoken: Aufruf führt dazu, dass der Lexer im Eingabestrom nach dem nächsten Lexem sucht, für das er ein Token zurückliefert. Token besteht aus Typ und unter Umständen noch weiteren Attributen. Beispiel: Token für Variablennamen Typ: id Attribute: Name der Variable oder Verweis auf den Eintrag des Namens in der Symboltabelle Die Token sind die Terminalsymbole der Grammatik, die den kontextfreien Anteil der Programmiersprachensyntax beschreibt. Lexikalische Analyse 10/112

11 6.7 Kommentare Einen Kommentar kann man als Lexem auffassen, für das kein Token erzeugt wird. Leerzeichen kann der Lexer auch überlesen, sofern sie für das Programm bedeutungslos sind. Es gibt allerdings Programmiersprachen (Fortran, Occam, Python,... ), bei denen die Position eines Lexems im Quellprogramm von Bedeutung sein kann. In einem solchen Fall ist der Lexer entsprechend aufwendiger zu implementieren. Lexikalische Analyse 11/112

12 6.8 Beispiel Eingabe: erna = hugo + 1; aufeinanderfolgende Aufrufe von nexttoken liefern: (id,erna) (assignop,) (id,hugo) (plusop,) (num,1) (semi,) Die syntaktische Analyse muss überprüfen, ob die Zeichenfolge id assignop id plusop num semi in der Grammatik ableitbar ist. Lexikalische Analyse 12/112

13 Einleitung Lexikalische Analyse Lexer-Generatoren Syntaktische Analyse Der Algorithmus von Cocke, Younger und Kasami Der Algorithmus von Earley LR Parsing Nach der Syntaxanalyse Lexer-Generatoren 13/112

14 6.10 Lexer-Generatoren Lexer-Generator: Programm zur automatischen Erzeugung von Lexern Eingabe: Datei, in der insbesondere mit Hilfe regulärer Ausdrücke beschrieben ist, Lexeme welcher Struktur zu suchen sind, und welche Token daraus zu erzeugen sind. Ausgabe: Quelle eines Programmes, das als Lexer auf die gewünschte Art arbeitet. Beispiele: lex, flex und JLex, Werkzeuge in Übersetzergenerator-Suiten wie cocktail und Eli Lexer-Generatoren 14/112

15 6.11 Reguläre Definitionen zur besseren Lesbarkeit regulärer Ausdrücke Teilausdrücke können mit Namen bezeichnet werden Beispiel: digit [0-9] letter [a-za-z] id letter (letter digit)* num digit+ (.digit+)? (O/*[-+]?digit+)? Wichtig: Auf der rechten Seite dürfen nur Namen regulärer Ausdrücke benutzen darf, die vorher definiert wurden. Direkte oder indirekte Rekursionen sind verboten. / Lexer-Generatoren 15/112

16 6.12 Eingabedatei für Lexergenerator reguläre Definitionen Regeln, die einigen regulären Ausdrücken Aktionen zuordnen. Programmstücke, die in den erzeugten Lexer mit eingebaut werden. Aktion gibt an, was der Lexer tun soll, wenn nexttoken aufgerufen wird und das zum nächsten Token gehörende Lexem zum jeweiligen regulären Ausdruck gehört. Zum Beispiel könnte für den regulären Ausdruck id als Aktion spezifiziert sein, dass der gefundene Name in der Symboltabelle zu suchen und gegebenenfalls einzutragen ist und der Rückgabewert das Token id und als Attribut der Verweis auf den Symboltabelleneintrag zu liefern ist. Lexer-Generatoren 16/112

17 6.13 Wichtig: Lexer versucht, zu einem regulären Ausdruck eine möglichst lange passende Folge von Eingabezeichen zu finden. Beispiel: aus Eingabe E67 wird vom Lexer ein Token num mit Attribut E67 gemacht und nicht z. B. zwei num-token mit Attributen und 5E67. Wenn das gleiche maximal lange Präfix der Eingabe auf die regulären Ausdrücke mehrerer Lexerregeln passt, wird bei vielen Lexergeneratoren ein Lexer erzeugt, der immer die erste passende Regel benutzt. Beispiel: reguläre Definition keyword for do if then mit Aktion für keyword vor der Aktion für id (wie oben) Dann wird der Lexer für die Zeichenfolge if in der Eingabe ein Token keyword zurückliefern und nicht ein Token id. Lexer-Generatoren 17/112

18 6.15 Beispiel: Lexerspezifikation für JLex Grobstruktur: Benutzer-Code %% reguläre Definitionen %% Regeln mit Aktionen Lexer-Generatoren 18/112

19 6.15 Beispiel: Lexerspezifikation für JLex (2) Beispiel: Benutzer-Code : import java.lang.system; class Simple { public static void main(string argv[])... { Yylex yy = new Yylex(System.in); Yytoken t; while ((t = yy.yylex())!= null) System.out.println(t); } } class Yytoken { Yytoken(int index, String text) {... } private static final String tokname[] = { "UNKNOWN", "FLOAT", "INT", "ID" }; public int m_index; public String m_text; public String tostring() {return... } } %% Lexer-Generatoren 19/112

20 6.15 Beispiel: Lexerspezifikation für JLex (3) reguläre Definitionen : ALPHA = [A-Za-z] DIGIT = [0-9] ID = {ALPHA}({ALPHA} {DIGIT} _)* INT = {DIGIT}+ FLOAT = {INT}\.{INT} %% WHITE_SPACE_CHAR = [\n\ \t\b\012] Lexer-Generatoren 20/112

21 6.15 Beispiel: Lexerspezifikation für JLex (4) Regeln mit Aktionen : {WHITE_SPACE_CHAR}+ { } {FLOAT} { return (new Yytoken(1,yytext())); } {INT} { } {ID} { }. { } return (new Yytoken(2,yytext())); return (new Yytoken(3,yytext())); return (new Yytoken(0,yytext())); Lexer-Generatoren 21/112

22 6.16 Arbeiten mit JLex Voraussetzungen: obige JLex-Spezifikation in Datei simple.lex JLex irgendwo im CLASSPATH verfügbar Dann: java JLex.Main simple.lex erzeugt Datei simple.lex.java: Java-Quelle eines Lexers Ausgaben von JLex: Processing first section -- user code. Processing second section -- JLex declarations. Processing third section -- lexical rules. Creating NFA... Creating DFA... Minimizing DFA... javac simple.lex.java erzeugt den lauffähigen Lexer java Simple startet den Lexer. Lexer-Generatoren 22/112

23 6.19 Viele (aber nicht alle) Lexergeneratoren erzeugen tabellengesteuerte Lexer. Sie bestehen im wesentlichen immer aus dem gleichen Code, der die endlichen Automaten simuliert, die in Form einer Tabelle gespeichert sind. Lexer-Generatoren 23/112

24 6.20 Kommentare in Programmiersprachen Angenommen, die lexikalische Analyse soll: alle Kommentare aus dem Programm entfernen durch endlichen Automaten erledigt werden Programmiersprachen, bei denen Kommentare durch ausgezeichnete Zeichenketten am Anfang und am Ende gekennzeichnet sind (z. B. /* und */ in C) geschachtelte Kommentare verboten Man müsste die Eingabe auf korrekte Klammerstruktur überprüfen, und das kann ein endlicher Automat nicht. andererseits: ein einfacher Zähler für die Schachtelungstiefe würde genügen Manche Lexergeneratoren unterstützen den Anwender bei solchen Problemen. Lexer-Generatoren 24/112

25 Einleitung Lexikalische Analyse Lexer-Generatoren Syntaktische Analyse Der Algorithmus von Cocke, Younger und Kasami Der Algorithmus von Earley LR Parsing Nach der Syntaxanalyse Syntaktische Analyse 25/112

26 6.21 Wie kommt man von den nichtdeterministischen Kellerautomaten weg? Benutze nicht Kellerautomaten, sondern andere Algorithmen. Einschränkung auf eine echte Teilklasse aller kontextfreien Grammatiken, damit deterministischen Kellerautomaten oder wenigstens eine einfache Erweiterung davon reichen. Syntaktische Analyse 26/112

27 Einleitung Lexikalische Analyse Lexer-Generatoren Syntaktische Analyse Der Algorithmus von Cocke, Younger und Kasami Der Algorithmus von Earley LR Parsing Nach der Syntaxanalyse Der Algorithmus von Cocke, Younger und Kasami 27/112

28 6.22 Definition Grammatik in Chomsky-Normalform: Jede Produktion X w mit X S hat als rechte Seite entweder ein Wort w N 2 (genau zwei Nichtterminalsymbole) oder ein Wort w T (genau ein Terminalsymbol). Wenn es die Produktion S ε gibt, dann kommt S bei keiner Produktion auf der rechten Seite vor. Der Algorithmus von Cocke, Younger und Kasami 28/112

29 6.23 Satz Zu jeder kontextfreien Grammatik G gibt es eine kontextfreie Grammatik G in Chomsky-Normalform, die zu G äquivalent ist (also L(G) = L(G )). Der Algorithmus von Cocke, Younger und Kasami 29/112

30 6.24 Lemma Für jede kontextfreie Grammatik G kann man die Menge EPS(G) = {X N X ε} aller Nichtterminalsymbole berechnen, aus denen das leere Wort ableitbar ist. Der Algorithmus von Cocke, Younger und Kasami 30/112

31 6.25 Beweisskizze Algorithmus: i 0 M 0 {X X ε P} do i i + 1 M i M i 1 {X w M i 1 : X w P} until M i = M i 1 return M i Der Algorithmus von Cocke, Younger und Kasami 31/112

32 6.26 Beispiel Grammatik G = ({X, Y, Z}, {a}, X, P) mit Produktionenmenge P = {X YZ, Y ZZ, Z a ε} Der obige Algorithmus berechnet nacheinander: M 0 = {Z} M 1 = {Z, Y } wegen Y ZZ P M 2 = {Z, Y, X } wegen X YZ P M 3 = {Z, Y, X } (keine Änderung mehr) Also ist EPS(G) = {X, Y, Z}. Der Algorithmus von Cocke, Younger und Kasami 32/112

33 6.27 Lemma Zu jeder kontextfreien Grammatik G = (N, T, S, P) kann man eine kontextfreie Grammatik G = (N, T, S, P ) berechnen, für die gilt: L(G ) = L(G) {ε} und keine Produktion von G hat ε als rechte Seite. Der Algorithmus von Cocke, Younger und Kasami 33/112

34 6.28 Beweisskizze In P nimmt man alle Produktionen X w auf, für die gilt: w ε und es gibt eine Produktion X w P, so dass w aus w entsteht, indem man einige Vorkommen von Symbolen aus EPS(G) entfernt. Der Algorithmus von Cocke, Younger und Kasami 34/112

35 6.29 Lemma Zu jeder kontextfreien Grammatik G = (N, T, S, P) kann man eine äquivalente kontextfreie Grammatik Ḡ = (N, T, S, P) berechnen, für die gilt: Wenn ε / L(G) ist, dann hat Ḡ keine Produktion ε als rechte Seite. Wenn ε L(G) ist, dann ist S ε die einzige Produktion von Ḡ mit ε als rechter Seite und S kommt bei keiner Produktion auf der rechten Seite vor. Der Algorithmus von Cocke, Younger und Kasami 35/112

36 6.30 Beweisskizze Konstruiere wie in Lemma 6.27 eine Grammatik G mit L(G ) = L(G) {ε}. Wenn ε / L(G) ist, kann man Ḡ = G setzen und ist fertig. Ist ε L(G), denn erweitert man G um ein neues Nichtterminalsymbol S, das Startsymbol von Ḡ wird und setzt P = P { S ε, S S }. Der Algorithmus von Cocke, Younger und Kasami 36/112

37 6.23 Satz Zu jeder kontextfreien Grammatik G gibt es eine kontextfreie Grammatik G in Chomsky-Normalform, die zu G äquivalent ist (also L(G) = L(G )). Der Algorithmus von Cocke, Younger und Kasami 37/112

38 6.31 Beweis (von Satz 6.23) Es sei G 0 = (N 0, T, S, P 0 ) eine beliebige kontextfreie Grammatik. Konstruiere äquivalente kontextfreie Grammatik G 4 in Chomsky-Normalform in vier Schritten: 1. Konstruiere aus G eine äquivalente Grammatik G 1, bei der Terminalsymbole a T nur in Produktionen der Form X a vorkommen. 2. Konstruiere aus G 1 eine äquivalente Grammatik G 2 wie in Lemma 6.29 beschrieben. 3. Konstruiere aus G 2 eine äquivalente Grammatik G 3, die keine Produktionen der Form X Y enthält. 4. Konstruiere aus G 3 eine äquivalente Grammatik G 4, die keine Produktionen der Form X Y 1 Y 2 Y k mit k 3 enthält. Der Algorithmus von Cocke, Younger und Kasami 38/112

39 6.31 Beweis (2) 1. Konstruiere aus G eine äquivalente Grammatik G 1, bei der Terminalsymbole a T nur in Produktionen der Form X a vorkommen: Der Algorithmus von Cocke, Younger und Kasami 39/112

40 6.31 Beweis (2) 1. Konstruiere aus G eine äquivalente Grammatik G 1, bei der Terminalsymbole a T nur in Produktionen der Form X a vorkommen: Führe für jedes Terminalsymbol a T ein neues Nichtterminalsymbol Z a ein: N 1 = N 0 {Z a a T }. Produktionenmenge P 1 enthält alle Produktionen der Form Z a a und alle Produktionen, die man erhält, indem man in jeder Produktion aus P 0 jedes Vorkommen eines Terminalsymboles a durch Z a ersetzt. Der Algorithmus von Cocke, Younger und Kasami 39/112

41 6.31 Beweis (3) 2. Konstruiere aus G 1 eine äquivalente Grammatik G 2 wie in Lemma 6.29 beschrieben: Der Algorithmus von Cocke, Younger und Kasami 40/112

42 6.31 Beweis (3) 2. Konstruiere aus G 1 eine äquivalente Grammatik G 2 wie in Lemma 6.29 beschrieben: Nun sind alle Produktionen von der Form X a oder von der Form X Y1 Y k mit k 1 (evtl. Ausnahme S ε) Der Algorithmus von Cocke, Younger und Kasami 40/112

43 6.31 Beweis (4) 3. Konstruiere aus G 2 eine äquivalente Grammatik G 3, die keine Produktionen der Form X Y enthält: Der Algorithmus von Cocke, Younger und Kasami 41/112

44 6.31 Beweis (4) 3. Konstruiere aus G 2 eine äquivalente Grammatik G 3, die keine Produktionen der Form X Y enthält: Für jedes X N2 berechnet man die Menge M(X ) = {X X X } der aus X ableitbaren Nichtterminalsymbole. i 0 M 0 (X ) {X } do i i + 1 M i (X ) M i 1 (X ) {X Y M i 1 (X ) : Y X P} until M i (X ) = M i 1 (X ) return M i (X ) Aus P2 streicht man zunächst alle Produktionen der Form X X. Für verbliebene Produktion X Y 1 Y k nimmt man alle X Y 1 Y k hinzu, sofern X M(X ) und für alle i, 1 i k, auch Y i M(Y i ) ist. Das ergibt P 3. Der Algorithmus von Cocke, Younger und Kasami 41/112

45 6.31 Beweis (5) 4. Konstruiere aus G 3 eine äquivalente Grammatik G 4, die keine Produktionen der Form X Y 1 Y 2 Y k mit k 3 enthält. Der Algorithmus von Cocke, Younger und Kasami 42/112

46 6.31 Beweis (5) 4. Konstruiere aus G 3 eine äquivalente Grammatik G 4, die keine Produktionen der Form X Y 1 Y 2 Y k mit k 3 enthält. P 4 erhält man aus P 3, indem man jede Produktion der Form X Y1 Y k mit k 3 entfernt und ersetzt durch die k 1 Produktionen X Y1 V 1, V 1 Y 2 V 2,..., V k 1 Y k 1 Y k. Dabei seien die V i jeweils neue Nichtterminalsymbole (die natürlich alle zu N 4 hinzugenommen werden). Der Algorithmus von Cocke, Younger und Kasami 42/112

47 6.32 Beispiel Grammatik mit Startsymbol E und den Produktionen: E E + F F F ( E ) a 1. Schritt: Behandlung der Terminalsymbole ergibt: E E Z + F F Z + + Z a a F Z ( E Z ) Z a Z ( ( Z ) ) Für das Terminalsymbol a ist das Vorgehen natürlich überflüssig. 2. Schritt: keine ε-produktionen vorhanden, also ändert sich nichts. Der Algorithmus von Cocke, Younger und Kasami 43/112

48 6.32 Beispiel (2) 3. Schritt: Berechne zunächst die Mengen M i (X ): X M 0 (X ) M 1 (X ) M 2 (X ) M 3 (X ) E {E} {E, F } {E, F, Z a } {E, F, Z a } F {F } {F, Z a } {F, Z a } {F, Z a } Die Produktionen E F und F Za werden entfernt und dafür neue aufgenommen. Aus E E Z + F entstehen: E E Z + F F Z + F Z a Z + F E Z + Z a F Z + Z a Z a Z + Z a Aus F Z( E Z ) ergeben sich F Z ( E Z ) Z ( F Z ) Z ( Z a Z ) E Z ( E Z ) Z ( F Z ) Z ( Z a Z ) Der Algorithmus von Cocke, Younger und Kasami 44/112

49 6.32 Beispiel (3) 4. Schritt: Jede Produktion mit drei Nichtterminalzeichen auf der rechten Seite wird ersetzt durch zwei Produktionen mit nur zwei Nichtterminalzeichen auf der rechten Seite. Zum Beispiel: E E Z + F ersetzt durch E E V 1 und V 1 Z + F. Analog in allen anderen Fällen vor, wobei jedes Mal neue zusätzliche Nichtterminalsymbole V 2, V 3,... eingeführt werden. Jedenfalls verlangt das der Algorithmus so. Scharfes Hinsehen ergibt hier, dass man sparsamer sein kann: E E V 1 F V 1 Z a V 1 V 1 Z + F E E V 2 F V 2 Z a V 2 V 2 Z + Z a E Z ( V 3 Z ( V 4 Z ( V 5 V 3 E Z ) F Z ( V 3 Z ( V 4 Z ( V 5 V 4 F Z ) V 5 Z a Z ) Der Algorithmus von Cocke, Younger und Kasami 45/112

50 6.33 Der Algorithmus von Cocke, Younger und Kasami (kurz CYK) kann für jede Grammatik G = (N, T, S, P) in Chomsky-Normalform und jedes Wort w T auf deterministische Weise feststellen, ob w L(G) ist oder nicht. Eingabe w = x 1 x n T n ist mit n + 1 Trennstellen versehen, die neben den einzelnen Symbolen liegen. 0 a 1 b 2 b 3 a b 4 5 Es sei w(i, j] das Teilwort zwischen den Trennstellen i also w(i, j] = x i+1 x j (für 0 i < j n). Beispiele: w(0, n] = w w(i, i] = ε und, j Der Algorithmus von Cocke, Younger und Kasami 46/112

51 6.34 Algorithmus (Cocke, Younger, Kasami) CYK berechnet eine Pyramiden-Datenstruktur. D[0, 5] D[0, 4] D[1, 5] D[0, 3] D[1, 4] D[2, 5] D[0, 2] D[1, 3] D[2, 4] D[3, 5] D[0, 1] D[1, 2] D[2, 3] D[3, 4] D[4, 5] 0 x 1 1 x 2 2 x 3 3 x 4 4 x 5 5 Die einzelnen Komponenten D[i, j] sind (möglicherweise leere) Teilmengen von Nichtterminalsymbolen. Ziel: D[i, j] = {X X w(i, j] } Der Algorithmus von Cocke, Younger und Kasami 47/112

52 6.34 Algorithmus CYK (2) for i 0 to n 1 do D[i, i + 1] = {X X x i+1 P} od for k 2 to n do for i 0 to n k do D[i, i + k] for m i + 1 to i + k 1 do if X YZ P Y D[i, m] Z D[m, i + k] then D[i, i + k] D[i, i + k] {X } fi od od od Der Algorithmus von Cocke, Younger und Kasami 48/112

53 6.34 Algorithmus CYK (3) Drei ineinander geschachelte Schleifen, für die ersten n/4 Durchläufe der äußersten und die letzten n/4 Durchläufe der mittleren Schleife wird die innerste jeweils mindestens n/4 mal durchlaufen. Der Test für die if-anweisung benötigt konstante Zeit. Also ist die Laufzeit des Algorithmus in Θ(n 3 ). Es ist auch nicht schwer, einzusehen, dass am Ende in der Tat D[i, j] = {X X x i+1 x j } ist. Also ist x 1 x n genau dann aus L(G), wenn S D[0, n] ist. Der Algorithmus von Cocke, Younger und Kasami 49/112

54 6.35 Beispiel für Grammatik aus Beispiel 6.32: {E, F } {V 3 } {E} {V 2 } {V 5 } {Z ( } {Z a } {Z + } {Z a } {Z ) } 0 ( 1 a a 4 ) 5 leere Kästchen: D[i, j] =. Der Algorithmus von Cocke, Younger und Kasami 50/112

55 Zur Vorbereitung auf den Algorithmus von Earley: einfache Umformung von CYK Der Algorithmus von Earley ist nicht relevant für die Klausur. Deswegen springen wir jetzt zum Abschnitt über LR Parsing Der Algorithmus von Cocke, Younger und Kasami 51/112

56 6.36 Algorithmus Andere Darstellung der Pyramide: D[0, 5] D[0, 4] D[1, 5] D[0, 3] D[1, 4] D[2, 5] D[0, 2] D[1, 3] D[2, 4] D[3, 5] D[0, 1] D[1, 2] D[2, 3] D[3, 4] D[4, 5] 0 x 1 1 x 2 2 x 3 3 x 4 4 x 5 5 neue Berechnungsreihenfolge: spaltenweise von links nach rechts und innerhalb jeder Spalte von unten nach oben. Der Algorithmus von Cocke, Younger und Kasami 52/112

57 6.36 Algorithmus (2) for j 1 to n do D[j 1, j] {X X x j P} for i j 1 downto 0 do D[i, j] for m i + 1 to j do if X YZ P Y D[i, m] Z D[m, j] then D[i, j] D[i, j] {X } fi od od od Der Algorithmus von Cocke, Younger und Kasami 53/112

58 6.37 Weitere Transformation von CYK S 0 S 1 S 2 S 3 S 4 S 5 D[4, 5] D[3, 4] D[3, 5] D[2, 3] D[2, 4] D[2, 5] D[1, 2] D[1, 3] D[1, 4] D[1, 5] D[0, 1] D[0, 2] D[0, 3] D[0, 4] D[0, 5] 0 x 1 1 x 2 2 x 3 3 x 4 4 x 5 5 Der Algorithmus von Cocke, Younger und Kasami 54/112

59 6.38 Beispiel Für obige Grammatik ergibt sich mit zusätzlicher Angabe der Produktionen und relevanten Trennstellen: S 0 S 1 S 2 S 3 S 4 S 5 E Z ( V V 3 EZ ) 1 5 E Z a V V 2 Z + Z a 2 4 V 5 Z a Z ) 3 5 Z ( ( 0 1 Z a a 1 2 Z Z a a 3 4 Z ) ) ( 1 a a 4 ) 5 Der Algorithmus von Cocke, Younger und Kasami 55/112

60 6.38 Beispiel (2) Angabe der rechten Trennstelle redundant stattdessen dicker Punkt: S 0 S 1 S 2 S 3 S 4 S 5 E Z ( V 3 0 V 3 EZ ) 1 E Z a V 2 1 V 2 Z + Z a 2 V 5 Z a Z ) 3 Z ( ( 0 Z a a 1 Z Z a a 3 Z ) ) 4 0 ( 1 a a 4 ) 5 Der Algorithmus von Cocke, Younger und Kasami 56/112

61 Einleitung Lexikalische Analyse Lexer-Generatoren Syntaktische Analyse Der Algorithmus von Cocke, Younger und Kasami Der Algorithmus von Earley LR Parsing Nach der Syntaxanalyse Der Algorithmus von Earley 57/112

62 Achtung Dieser Abschnitt ist nicht relevant für die Klausur. Der Algorithmus von Earley 58/112

63 6.39 In der vorangegangenen Abbildung gibt es für eine Eingabe der Länge n Mengen S 0, S 1,..., S n, die sogenannte Items enthalten: Produktionen mit einem Markierungspunkt, bei denen an der gleiche Stelle oder links davon noch eine Trennstelle angegeben ist. Der Algorithmus von Earley 59/112

64 6.40 Bei CYK gilt für die Items: Hat die Trennstelle Nummer i und ist das Item in S j, so ist sicher, dass man aus dem, was auf der rechten Seite der Produktion zwischen Trennstelle und steht, das Teilwort w(i, j] der Eingabe ableiten kann. Eine Produktion X YZ wird in S j aufgenommen, wenn i es ein m gibt, so dass ein Item Y v in S m ist und ein Item Z v in S j. m Beim Algorithmus von Earley ändern sich die Form der Items und die Regeln zur Berechung der S j. i Der Algorithmus von Earley 60/112

65 6.41 Definition Ein Item hat die Form X v 1 v 2. i Dabei ist X v 1 v 2 eine ursprünglichen Produktion. Präfix v 1 und Suffix v 2 sind ansonsten nicht eingeschränkt. Z. B. erlaubt: Items der Form X w i Ein Item X v 1 v 2 wird immer nur zu Mengen S j mit i j gehören. i Der Algorithmus von Earley 61/112

66 6.42 Bedeutung der Items Für ein Item X v 1 v 2, das in S j ist, gilt: i markiert die Stelle j, bis zu der man schon gekommen ist, und aus dem, was zwischen Trennstelle und steht, kann man das Teilwort w(i, j] ableiten. Für das Suffix hinter dem, wird noch offen sein, ob aus ihm ein weiteres Stück der Eingabe ableitbar ist. i Der Algorithmus von Earley 62/112

67 6.43 Algorithmus von Earley Wie kommt ein Item X v 1 v 2 in eine Menge S j? i 1. Lexer-Regel 2. Completer-Regel 3. Predictor-Regel Der Algorithmus von Earley 63/112

68 6.43 Algorithmus von Earley (2) Wann kann man an einem Terminalsymbol vorbeischieben? Prüfe, ob das nächste Eingabesymbol gerade a ist. Falls ja, dann füge X v 1 a v 2 zu S j+1 hinzu. 1. Lexer-Regel: nein, dann lässt man das. i Wenn X v 1 av 2 in S j und a = w(j, j + 1], dann kommt X i i v 1 a v 2 zu S j+1 hinzu. Der Algorithmus von Earley 64/112

69 6.43 Algorithmus von Earley (3) Wann an Y in X v 1 Yv 2 aus S m vorbeischieben? i Sinnvoll, wenn man aus Y ein Teilwort der Eingabe ableiten kann, das an Trennstelle m beginnt. Das soll man aber gerade daran ablesen können, dass ein Item Y v in einem S j ist für ein j > m. m 2. Completer-Regel: Wenn X v 1 Yv 2 in S m ist und Y v in S j, dann i m kommt X v 1 Y v 2 zu S j hinzu. i Der Algorithmus von Earley 65/112

70 6.43 Algorithmus von Earley (4) Woher kommen Items der Form Y v 2 mit dem am Anfang? i Plausibel: Item Y v 2 dann zu einem S j hinzuzunehmen, wenn man das Y brauchen kann. 3. Predictor-Regel: i Wenn X v 1 Yv 2 in S j ist, dann kommt Y v zu S j i j hinzu für jede ProduktionY v. Der Algorithmus von Earley 66/112

71 6.43 Algorithmus von Earley (5) Der Algorithmus von Earley (genauer gesagt die Variante, die ohne sogenannten Look-Ahead in der Eingabe arbeitet) für eine Grammatik G = (N, T, S, P) ergibt sich nun einfach wie folgt: Man beginnt mit der Menge S 0, die genau alle Items der Form S w für jede Produktion der Form S w P (S ist 0 das Startsymbol der Grammatik). Auf eine Menge S j werden solange die Lexer-, Completer- und Predictor-Regeln angewendet, bis sich nichts mehr ändert. Dann fährt man mit S j+1 fort. Der Algorithmus von Earley 67/112

72 6.43 Algorithmus von Earley (6) Ende des Algorithmus: Ist einmal ein S j =, dann ist die Eingabe nicht ableitbar. Andernfalls muss man am Ende überprüfen, ob S n ein Item der Form S w enthält. 0 Wenn das der Fall ist (und nur dann), ist die Eingabe in der Grammatik ableitbar. Der Nachweis, dass dieser Algorithmus wirklich das Richtige tut, wurde von Jay Earley geführt. Der Algorithmus von Earley 68/112

73 6.44 Beispiel Betrachte sehr einfache Grammatik G = (N, T, S, P) mit N = {S, X, A, B, C}, T = {a, b, c}, Startsymbol S P = {S AX, X BC, A a, B b, C c}. Eingabe abc: S 0 S 1 S 2 S 3 S AX 0 S A X 0 S AX 0 X BC 1 X B C 1 X BC 1 A a 0 B b 1 C c 2 A a 0 B b 1 C c 2 0 a 1 b 2 c 3 Der Algorithmus von Earley 69/112

74 6.44 Beispiel (2) Lexer-Regel: durchgezogene Linien Predictor-Regel: gestrichelte Linien Completer-Regel: gepunktete Linien. S 0 S 1 S 2 S 3 S AX 0 S A X 0 S AX 0 X BC 1 X B C 1 X BC 1 A a 0 B b 1 C c 2 A a 0 B b 1 C c 2 0 a 1 b 2 c 3 Der Algorithmus von Earley 70/112

75 Einleitung Lexikalische Analyse Lexer-Generatoren Syntaktische Analyse Der Algorithmus von Cocke, Younger und Kasami Der Algorithmus von Earley LR Parsing Nach der Syntaxanalyse LR Parsing 71/112

76 Achtung Dieser Abschnitt und die folgenden sind wieder relevant für die Klausur. LR Parsing 72/112

77 6.45 Beispielgrammatik E E+T T T T *F F F (E) a LR Parsing 73/112

78 6.46 Vereinbarung Stets Eingabebegrenzungen vorhanden: E E E E+T T T T *F F F (E) a LR Parsing 74/112

79 6.47 Definition Eine Grammatik hat die Eigenschaft LR(k) für ein k N 0, wenn für zwei beliebige Rechtsableitungen S r ξ 1 A 1 ωη 1 r ξ1 γ 1 ωη 1 r αωη 1 T S r ξ 2 A 2 τ 2 r ξ1 γ 1 ωη 2 r αωη 2 T mit ω = k oder η 1 = η 2 = ε immer gilt: ξ 2 A 2 τ 2 = ξ 1 A 1 ωη 2. M.a.W.: Wenn τ 2 T ist, wenn also A 2 das zuletzt durch eine Reduktion entstandene Zeichen ist, dann ist A 1 = A 2, ξ 1 = ξ 2 und τ 2 = ωη 2. D. h. durch den Kellerinhalt (ξ 1 γ 1 ) und die nächsten k Eingabezeichen (ω) ist der nächste Reduktionsschritt bei der Bottom-Up-Syntaxanalyse eindeutig bestimmt. LR Parsing 75/112

80 6.49 Prinzip der Syntaxanalyse für LR(k)-Grammatiken Erweiterung der Kellerautomaten um Zustandskeller Zustand z(κ): Äquivalenzklasse von Kellerinhalten Aktionen: shift- und reduce-schritte außerdem accept und error shift reduce A γ act(z(κ), ω) = accept error Funktion goto zur einfachen Berechnung neuer Zustände: goto(z(κ), X ) = z(κx ) zunächst Annahme: Funktionen act und goto liegen schon vor LR Parsing 76/112

81 6.49 Prinzip der Syntaxanalyse für LR(k)-Grammatiken (2) Automatenmodell: Zustandskeller z z = z(κ) Symbolkeller κ Eingabe α ω η LR Parsing 77/112

82 6.49 Prinzip der Syntaxanalyse für LR(k)-Grammatiken (3) Shift-Aktion: vorher Zustandskeller z z = z(κ) Symbolkeller κ Eingabe α ω η LR Parsing 78/112

83 6.49 Prinzip der Syntaxanalyse für LR(k)-Grammatiken (3) Shift-Aktion: nachher Zustandskeller z z z = goto(z, a) Symbolkeller κ a Eingabe α a ω η LR Parsing 79/112

84 6.49 Prinzip der Syntaxanalyse für LR(k)-Grammatiken (4) Reduce-Aktion: vorher Zustandskeller z z Symbolkeller ξ γ Eingabe α ω η LR Parsing 80/112

85 6.49 Prinzip der Syntaxanalyse für LR(k)-Grammatiken (4) Reduce-Aktion: nachher Zustandskeller z z z = goto(z, A) Symbolkeller ξ A Eingabe α ω η LR Parsing 81/112

86 6.49 Prinzip der Syntaxanalyse für LR(k)-Grammatiken (5) Beginn der Analyse: in den Symbolkeller wird unten ein gelegt und in den Zustandskeller entsprechend z( ) Ende der Analyse: im Symbolkeller ist nur noch S das kann zu S reduziert werden Der Kellerautomat kann schon akzeptieren, wenn im Symbolkeller S steht und als letztes Eingabesymbol ansteht. LR Parsing 82/112

87 6.50 Beispiel E E E E+T T 1 2 T T *F F 3 4 F (E) a 5 6 LR Parsing 83/112

88 6.50 Beispiel (2) Die folgenden Tabellen kann man algorithmisch finden wie, verraten wir gleich Es ist hier ω = 1. act(z, ω) goto(z, X ) z κ a + * ( ) a + * ( ) E T F 0 S S E S A (E S S 3 3 E+ S S E+T R 1 S R 1 R (T R 2 S R 2 R T * S S T *F R 3 R 3 R 3 R 3 8 (F R 4 R 4 R 4 R 4 9 ( S S (E) R 5 R 5 R 5 R 5 11 a R 6 R 6 R 6 R 6 LR Parsing 84/112

89 6.50 Beispiel (3) κ ω η 0 ( a + a ) * a 0 9 ( a + a ) * a ( a + a ) * a ( F + a ) * a ( T + a ) * a ( E + a ) * a ( E + a ) * a LR Parsing 85/112

90 6.50 Beispiel (4) ( E + a ) * a ( E + a ) * a ( E + F ) * a ( E + T ) * a ( E ) * a ( E ) * a 0 8 F * a LR Parsing 86/112

91 6.50 Beispiel (5) 0 8 F * a 0 5 T * a T * a T * a T * F 0 5 T 0 1 E LR Parsing 87/112

92 6.51 Definition Zu jeder Produktion A X 1 X 2 X k (mit X i N T ) gehören die k + 1 markierten Produktionen (Items) A X1 X 2 X k A X1 X 2 X k. A X 1 X 2 X k A X 1 X 2 X k Zu A ε gehört A LR Parsing 88/112

93 6.52 Konstruktion der Zustände: Jeder Zustand ist eine Menge markierter Produktionen. Beginne mit Zustandskern M 0 = {S S }. Vervollständigungsregel: M i wird erweitert zu z i = kompl(m i ) M i gemäß folgender Predictor-Regel : Wenn A µ Bν kompl(mi ) und B γ P, dann auch B γ kompl(m i ) Fortschreibungsregel: erzeuge Kerne für neue M-Mengen gemäß: wenn A µ X ν z(κ), dann A µx ν z(κx ) anschließend Vervollständigung LR Parsing 89/112

94 6.52 (2) Wenn man das so macht, dann gilt: z(κ) enthält genau diejenigen A µ ν, für die gilt: A µν P, ξ V : κ = ξµ und η T : S r ξaη LR Parsing 90/112

95 6.53 großes Beispiel an der Tafel LR Parsing 91/112

96 6.54 Also: z(κx ) = kompl({a µx ν A µ X ν z(κ)}). Damit hat man auch schon goto(z(κ), X ) = z(κx ). LR Parsing 92/112

97 6.55 Beispiel E T F a ( ) + * z 0 z 1 z 2 z 3 z 4 z 5 z 6 z 6 z 6 z 6 z 1 z 6 z 6 z 6 z 6 z 6 z 6 z 7 z 6 z 8 z 2 z 6 z 6 z 6 z 6 z 6 z 6 z 6 z 9 z 6 z 3 z 6 z 6 z 6 z 6 z 6 z 6 z 6 z 6 z 6 z 4 z 6 z 6 z 6 z 6 z 6 z 6 z 6 z 6 z 6 z 5 z 10 z 2 z 3 z 4 z 5 z 6 z 6 z 6 z 6 z 6 z 6 z 6 z 6 z 6 z 6 z 6 z 6 z 6 z 6 z 7 z 6 z 11 z 3 z 4 z 5 z 6 z 6 z 6 z 6 z 8 z 9 z 6 z 6 z 12 z 4 z 5 z 6 z 6 z 6 z 6 z 10 z 6 z 6 z 6 z 6 z 6 z 13 z 7 z 6 z 6 z 11 z 6 z 6 z 6 z 6 z 6 z 6 z 6 z 9 z 6 z 12 z 6 z 6 z 6 z 6 z 6 z 6 z 6 z 6 z 6 z 13 z 6 z 6 z 6 z 6 z 6 z 6 z 6 z 6 z 6 LR Parsing 93/112

98 6.56 Wie findet man die Funktion act? Idee: Look-ahead-Mengen la(z, A µ ν) T und la(z, shift) T, so dass für jedes z alle diese Mengen disjunkt sind. Dann definieren die folgenden Festlegungen act konsistent und sinnvoll: reduce A γ falls a la(z, A µ ) shift falls a la(z, shift) f (z, a) = accept falls z = z( S ) (oder falls S z und a = ) error sonst LR Parsing 94/112

99 6.57 Mitteilung Für verschieden nette Grammatiken kann man auf mehr oder weniger einfache Weise geeignete Look-ahead-Mengen konstruieren. Zum Beispiel ist eine Grammatik LALR(1), wenn die wie folgt definierten la-mengen paarweise disjunkt sind: la(z, S S ) = a la(z, A µ Bν) b anf (νa) = b la(z, B γ) a la(z, A µ X ν) = a la(goto(z, X ), A µx ν) LR Parsing 95/112

100 Einleitung Lexikalische Analyse Lexer-Generatoren Syntaktische Analyse Der Algorithmus von Cocke, Younger und Kasami Der Algorithmus von Earley LR Parsing Nach der Syntaxanalyse Nach der Syntaxanalyse 96/112

101 6.59 Grammatiken mit semantischen Aktionen Produktionen der Form A {code 0 } X 1 {code 1 } X 2 X m {code m } Codefragment am Ende wird nach der Reduktion auf dem Keller gemäß der kontextfreien Produktion ausgeführt. Für andere Codestücke stelle man sich vor: A M 0 X 1 M 1 X 2 X m {code m } M 0 ε {code 0 } M 1 ε {code 1 }. M m 1 ε {code m 1 } Nach der Syntaxanalyse 97/112

102 6.60 Beispiel E E+T { printf("reduktion mit E -> E+T \n"); } E T { printf("reduktion mit E -> T \n"); } T T *F { printf("reduktion mit T -> T*F \n"); } T F { printf("reduktion mit T -> F \n"); } F (E) { printf("reduktion mit F -> (E) \n"); } F a { printf("reduktion mit F -> a \n"); } Nach der Syntaxanalyse 98/112

103 6.61 Anwendung semantischer Aktionen: Berechnung von Werten für Attribute von Kellersymbolen Nach der Syntaxanalyse 99/112

104 6.62 Beispiel (Auswertung arithmetischer Ausdrücke) Attribut val für Terminal- und Nichtterminalsymbole Indizes zur Unterscheidung mehrerer Vorkommen des gleichen Symbols in einer Produktion E 0 E 1 +T 1 { E 0.val = E 1.val + T 1.val } E 0 T 1 { E 0.val = T 1.val } T 0 T 1 *F 1 { T 0.val = T 1.val F 1.val } T 0 F 1 { T 0.val = F 1.val } F 0 (E 1 ) { F 0.val = E 1.val } F 0 num { F 0.val = num.val } Nach der Syntaxanalyse 100/112

105 6.62 Beispiel (2) Sinnvoll: Auswertung von unten nach oben E.val =? E.val =? + T.val =? T.val =? F.val =? * F.val =? F.val =? num.val = 3 num.val = 4 num.val = 2 Nach der Syntaxanalyse 101/112

106 6.62 Beispiel (2) Sinnvoll: Auswertung von unten nach oben E.val =? E.val =? + T.val =? T.val =? F.val = 3 * F.val = 4 F.val = 2 num.val = 3 num.val = 4 num.val = 2 Nach der Syntaxanalyse 101/112

107 6.62 Beispiel (2) Sinnvoll: Auswertung von unten nach oben E.val =? E.val =? + T.val = 12 T.val = 2 F.val = 3 * F.val = 4 F.val = 2 num.val = 3 num.val = 4 num.val = 2 Nach der Syntaxanalyse 101/112

108 6.62 Beispiel (2) Sinnvoll: Auswertung von unten nach oben E.val =? E.val = 2 + T.val = 12 T.val = 2 F.val = 3 * F.val = 4 F.val = 2 num.val = 3 num.val = 4 num.val = 2 Nach der Syntaxanalyse 101/112

109 6.62 Beispiel (2) Sinnvoll: Auswertung von unten nach oben E.val = 14 E.val = 2 + T.val = 12 T.val = 2 F.val = 3 * F.val = 4 F.val = 2 num.val = 3 num.val = 4 num.val = 2 Nach der Syntaxanalyse 101/112

110 6.63 Attributierte Grammatik Kontextfreie Grammatik G(N, T, S, P) mit endlicher Menge A von Attributen a A (mit je einem Wertebereich V a ). Zu jedem Symbol X N T disjunkte Attributmengen DX A sogenannter synthetisierter Attribute (engl. synthesized oder derived) IX A sogenannter vererbter (engl. inherited) Attribute Nach der Syntaxanalyse 102/112

111 6.63 Attributierte Grammatik (2) Zu jedem p : X 0 X 1 X m für jedes a D X0 eine Funktion, die in Abhängigkeit von allen Attributen aller auf der rechten Seite vorkommenden Symbole einen Wert für das Attribut a festlegt. Zu p : X 0 X 1 X m für jedes i = 1,..., n und a I Xi eine Funktion, die in Abhängigkeit von allen Attributen aller vorkommenden Symbole einen Wert für das Attribut a festlegt. Nach der Syntaxanalyse 103/112

112 6.64 S-attributierte Grammatik nur synthetisierte Attribute Solche Grammtiken sind sehr nützlich und für Bottom-up-Syntaxanalyse gut geeignet. Kellerautomat: Bei Reduktion gemäß Produktion A w berechnet er aus den Attributwerten der Symbole in w die Attributwerte für A. Nach der Syntaxanalyse 104/112

113 6.65 Beispiel Kellersymbole noch nicht gelesene Eingabe Attributwerte ( ) * 4 ( ) * 4 ( ) * 4 2 ( F + 3 ) * 4 2 ( T + 3 ) * 4 2 ( E + 3 ) * 4 2 Nach der Syntaxanalyse 105/112

114 6.65 Beispiel (2) ( E + 3 ) * 4 2 ( E + 3 ) * ( E + F ) * ( E + T ) * ( E ) * 4 5 ( E ) * 4 5 F * 4 5 Nach der Syntaxanalyse 106/112

115 6.65 Beispiel (3) T * 4 5 T * 4 5 T * T * F 5 4 T 20 E 20 Nach der Syntaxanalyse 107/112

116 6.66 L-attributierte Grammatik nur synthetisierte Attribute und solche vererbte Attribute, für die gilt: In jeder Produktion A X 1 X m hängen die vererbten Attribute jedes X j nur von den vererbten Attributen von A und von den links von Xj stehenden Symbolen X 1,..., X j 1 ab. auch noch für Bottom-up-Syntaxanalyse gut geeignet Nach der Syntaxanalyse 108/112

117 6.67 Beispiel Ableitungsbäume enthalten manchmal überflüssige Knoten. Z. B. kompaktere Darstellung arithmetischer Ausdrücke: So genannter abstrakter Syntaxbaum (AST); analog etwa bei Produktionen für Kontrollstrukturen Nach der Syntaxanalyse 109/112

118 6.67 Beispiel (2) Die Kontruktion eines Syntaxbaumes aus Ableitungsbaum kann man mit Hilfe eines synthetisiserten Attributes ast (die englische Abkürzung für abstract syntax tree ) durchführen. Attributwert für ein Nichtterminalsymbol A ist dabei ein Zeiger auf die Wurzel des Syntax(teil)baumes, der A entspricht. Nach der Syntaxanalyse 110/112

119 6.68 Beispiel Einfache (!) Codeerzeugung (nur die, aber immerhin) kann man auch mit attributierten Grammatiken machen. synthetisierte Attribute code für den erzeugten Code temp für den Namen einer Hilfsvariable, z. B. der Form H4711 Beispiel-Produktion E 0 E 1 +T 1 neuer Name für Hilfsvariable: E 0.temp = H gefolgt von 1 + Maximum der Nummern von E 1.temp und T 1.temp alten Code übernehmen und zusätzlichen Code anhängen: E 0.code = E 1.code; T 1.code; E 0.temp E 1.temp + T 1.temp primitive Methode, sie demonstriert aber das Prinzip Nach der Syntaxanalyse 111/112

120 Parser-Generatoren lesen eine Eingabedatei, in der im wesentlichen eine kontextfreie Grammatik G beschrieben ist, und erzeugen als Ausgabedatei ein Programm, dass die Syntaxanalyse fur G macht, (implizit) den Ableitungsbaum erzeugt und evtl. Berechnung von Attributwerten durchführt Beispiele: in der Shell Nach der Syntaxanalyse 112/112

Formale Sprachen und Automaten

Formale Sprachen und Automaten Formale Sprachen und Automaten Kapitel 4: Typ 2 kontextfreie Sprachen Vorlesung an der DHBW Karlsruhe Thomas Worsch Karlsruher Institut für Technologie, Fakultät für Informatik Wintersemester 2012 Kapitel

Mehr

Compilerbau Syntaxanalyse 68. LR(1)-Syntaxanalyse

Compilerbau Syntaxanalyse 68. LR(1)-Syntaxanalyse Compilerbau Syntaxanalyse 68 LR(1)-Syntaxanalyse Bei der LL(1)-Syntaxanalyse wird allein aufgrund des nächsten Tokens die zu verwendende Produktion ermittelt. Bei der LR(1)-Syntaxanalyse braucht diese

Mehr

Theoretische Grundlagen der Informatik

Theoretische Grundlagen der Informatik Theoretische Grundlagen der Informatik Vorlesung am 15.01.2015 INSTITUT FÜR THEORETISCHE 0 KIT 15.01.2015 Universität des Dorothea Landes Baden-Württemberg Wagner - Theoretische und Grundlagen der Informatik

Mehr

Sei Σ ein endliches Alphabet. Eine Sprache L Σ ist genau dann regulär, wenn sie von einem regulären Ausdruck beschrieben werden kann.

Sei Σ ein endliches Alphabet. Eine Sprache L Σ ist genau dann regulär, wenn sie von einem regulären Ausdruck beschrieben werden kann. Der Satz von Kleene Wir haben somit Folgendes bewiesen: Der Satz von Kleene Sei Σ ein endliches Alphabet. Eine Sprache L Σ ist genau dann regulär, wenn sie von einem regulären Ausdruck beschrieben werden

Mehr

Deterministischer Kellerautomat (DPDA)

Deterministischer Kellerautomat (DPDA) Deterministische Kellerautomaten Deterministischer Kellerautomat (DPDA) Definition Ein Septupel M = (Σ,Γ, Z,δ, z 0,#, F) heißt deterministischer Kellerautomat (kurz DPDA), falls gilt: 1 M = (Σ,Γ, Z,δ,

Mehr

Klammersprache Definiere

Klammersprache Definiere Klammersprache w=w 1...w n {(,)}* heißt korrekt geklammert, falls die Anzahl ( ist gleich der Anzahl ). in jedem Anfangsstück w 1,...,w i (i n) ist die Anzahl ( nicht kleiner als die Anzahl ). Definiere

Mehr

kontextfreie Grammatiken Theoretische Informatik kontextfreie Grammatiken kontextfreie Grammatiken Rainer Schrader 14. Juli 2009 Gliederung

kontextfreie Grammatiken Theoretische Informatik kontextfreie Grammatiken kontextfreie Grammatiken Rainer Schrader 14. Juli 2009 Gliederung Theoretische Informatik Rainer Schrader Zentrum für Angewandte Informatik Köln 14. Juli 2009 1 / 40 2 / 40 Beispiele: Aus den bisher gemachten Überlegungen ergibt sich: aus der Chomsky-Hierarchie bleiben

Mehr

Definition von LR(k)-Grammatiken

Definition von LR(k)-Grammatiken Definition von LR(k)-Grammatiken Ziel: Ein Lookahead von k soll ausreichen um entscheiden zu können, welche Regel angewendet werden muss. Definition: FIRST k (w 1 w n ):= w 1 w k, falls n k, w 1 w n, sonst.

Mehr

Formale Sprachen und Automaten

Formale Sprachen und Automaten Formale Sprachen und Automaten Kapitel 1: Grundlagen Vorlesung an der DHBW Karlsruhe Thomas Worsch Karlsruher Institut für Technologie, Fakultät für Informatik Wintersemester 2012 Ziel Einführung der wichtigsten

Mehr

Was bisher geschah Chomsky-Hierarchie für Sprachen: L 0 Menge aller durch (beliebige) Grammatiken beschriebenen Sprachen L 1 Menge aller monotonen

Was bisher geschah Chomsky-Hierarchie für Sprachen: L 0 Menge aller durch (beliebige) Grammatiken beschriebenen Sprachen L 1 Menge aller monotonen Was bisher geschah Chomsky-Hierarchie für Sprachen: L 0 Menge aller durch (beliebige) Grammatiken beschriebenen Sprachen L 1 Menge aller monotonen (Kontextsensitive) Sprachen L 2 Menge aller kontextfreien

Mehr

Kapitel 5: Syntax-Analyse

Kapitel 5: Syntax-Analyse Kapitel 5: Syntax-Analyse Aufgabe Die Token-Folge wird strukturiert in Anweisungen, Ausdrücke etc., um die Semantische Analyse und Code-Erzeugung zu ermöglichen Themen Kontextfreie Grammatik Äquivalente

Mehr

Inhalt Kapitel 11: Formale Syntax und Semantik

Inhalt Kapitel 11: Formale Syntax und Semantik Inhalt Kapitel 11: Formale Syntax und Semantik 1 Abstrakte und konkrete Syntax 2 Lexikalische Analyse 3 Formale Sprachen, Grammatiken, BNF 4 Syntaxanalyse konkret 266 Abstrakte und konkrete Syntax Abstrakte

Mehr

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen - 1 -

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen - 1 - 1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen I.2. I.2. Grundlagen von von Programmiersprachen. - 1 - 1. Der Begriff Informatik "Informatik" = Kunstwort aus Information und Mathematik

Mehr

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen - 1 -

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen - 1 - 1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen I.2. I.2. Grundlagen von von Programmiersprachen. - 1 - 1. Der Begriff Informatik "Informatik" = Kunstwort aus Information und Mathematik

Mehr

Deterministische PDAs

Deterministische PDAs Deterministische PDAs Erinnerung: Ein PDA ist deterministisch, wenn q Q, a Σ, Z Γ: δ(q,a,z) + δ(q,ε,z) 1. Definition: Eine Sprache heißt deterministisch kontextfrei, wenn es für sie einen DPDA gibt. Ziel:

Mehr

Einführung - Parser. Was ist ein Parser?

Einführung - Parser. Was ist ein Parser? Gliederung 1. Einleitung 1.1 Was ist ein Parser? 1.2 Was ist ein tabellengesteuerter TD-Parser? 1. Tabellengesteuerter TD-Parser 2.1 Funktionsweise 2.2 Darstellung als Pseudocode 2.3 Konstruktion von prädiktiven

Mehr

Theoretische Grundlagen der Informatik

Theoretische Grundlagen der Informatik Theoretische Grundlagen der Informatik Vorlesung am 18. Januar 2018 INSTITUT FÜR THEORETISCHE 0 18.01.2018 Dorothea Wagner - Theoretische Grundlagen der Informatik INSTITUT FÜR THEORETISCHE KIT Die Forschungsuniversität

Mehr

Implementierung eines LR-Parser-Generators mit syntaktischen Prädikaten

Implementierung eines LR-Parser-Generators mit syntaktischen Prädikaten Implementierung eines LR-Parser-Generators mit syntaktischen Prädikaten Aufgabenbeschreibung 29. Juli 2011 1 Einleitung und Motivation Der Parser-Generator Antlr [Par07] bietet die Möglichkeit, die Auswahl

Mehr

Fachseminar Compilerbau

Fachseminar Compilerbau Fachseminar Compilerbau WS 08/09 Matthias Schiller Syntaktische Analyse 1. Prinzip der Top-Down-Analyse 2. LL(1)-Grammatiken Modell-Vorstellung Der Scanner liefert als Ergebnis der lexikalischen Analyse,

Mehr

Lexikalische Programmanalyse der Scanner

Lexikalische Programmanalyse der Scanner Der Scanner führt die lexikalische Analyse des Programms durch Er sammelt (scanned) Zeichen für Zeichen und baut logisch zusammengehörige Zeichenketten (Tokens) aus diesen Zeichen Zur formalen Beschreibung

Mehr

Kontextfreie Sprachen

Kontextfreie Sprachen Kontextfreie Sprachen Bedeutung: Programmiersprachen (Compilerbau) Syntaxbäume Chomsky-Normalform effiziente Lösung des Wortproblems (CYK-Algorithmus) Grenzen kontextfreier Sprachen (Pumping Lemma) Charakterisierung

Mehr

Automaten und formale Sprachen Klausurvorbereitung

Automaten und formale Sprachen Klausurvorbereitung Automaten und formale Sprachen Klausurvorbereitung Rami Swailem Mathematik Naturwissenschaften und Informatik FH-Gießen-Friedberg Inhaltsverzeichnis 1 Definitionen 2 2 Altklausur Jäger 2006 8 1 1 Definitionen

Mehr

Grundlagen der Theoretischen Informatik

Grundlagen der Theoretischen Informatik Grundlagen der Theoretischen Informatik 4. Kellerautomaten und kontextfreie Sprachen (II) 11.06.2015 Viorica Sofronie-Stokkermans e-mail: sofronie@uni-koblenz.de 1 Übersicht 1. Motivation 2. Terminologie

Mehr

Informatik III. Christian Schindelhauer Wintersemester 2006/07 5. Vorlesung

Informatik III. Christian Schindelhauer Wintersemester 2006/07 5. Vorlesung Informatik III Christian Schindelhauer Wintersemester 2006/07 5. Vorlesung 09.11.2006 schindel@informatik.uni-freiburg.de 1 Äquivalenzklassen Definition und Beispiel Definition Für eine Sprache L Σ* bezeichnen

Mehr

Kontextfreie Sprachen

Kontextfreie Sprachen Kontextfreie Sprachen besitzen große Bedeutung im Compilerbau Chomsky-Normalform effiziente Lösung des Wortproblems (CYK-Algorithmus) Grenzen kontextfreier Sprachen (Pumping Lemma) Charakterisierung durch

Mehr

Übungsblatt 6. Vorlesung Theoretische Grundlagen der Informatik im WS 17/18

Übungsblatt 6. Vorlesung Theoretische Grundlagen der Informatik im WS 17/18 Institut für Theoretische Informatik Lehrstuhl Prof. Dr. D. Wagner Übungsblatt 6 Vorlesung Theoretische Grundlagen der Informatik im WS 17/18 Ausgabe 10. Januar 2018 Abgabe 23. Januar 2018, 11:00 Uhr (im

Mehr

Automaten und Formale Sprachen alias Theoretische Informatik. Sommersemester 2011

Automaten und Formale Sprachen alias Theoretische Informatik. Sommersemester 2011 Automaten und Formale Sprachen alias Theoretische Informatik Sommersemester 2011 Dr. Sander Bruggink Übungsleitung: Jan Stückrath Sander Bruggink Automaten und Formale Sprachen 1 Wir beschäftigen uns ab

Mehr

Shift Reduce Parser (Bottom up Parser) Historie Grundbegriffe Tabellengesteuerter LR(1) Parser Konstruktion der Elementmengen Tabellenkonstruktion

Shift Reduce Parser (Bottom up Parser) Historie Grundbegriffe Tabellengesteuerter LR(1) Parser Konstruktion der Elementmengen Tabellenkonstruktion Shift Reduce Parser (Bottom up Parser) Historie Grundbegriffe Tabellengesteuerter LR(1) Parser Konstruktion der Elementmengen Tabellenkonstruktion Historie Die ersten Compiler entstanden in den 50ern.

Mehr

Grundlagen der Theoretischen Informatik Musterlösungen zu ausgewählten Übungsaufgaben

Grundlagen der Theoretischen Informatik Musterlösungen zu ausgewählten Übungsaufgaben Dieses Dokument soll mehr dazu dienen, Beispiele für die formal korrekt mathematische Bearbeitung von Aufgaben zu liefern, als konkrete Hinweise auf typische Klausuraufgaben zu liefern. Die hier gezeigten

Mehr

Lösung zur Klausur. Grundlagen der Theoretischen Informatik im WiSe 2003/2004

Lösung zur Klausur. Grundlagen der Theoretischen Informatik im WiSe 2003/2004 Lösung zur Klausur Grundlagen der Theoretischen Informatik im WiSe 2003/2004 1. Geben Sie einen deterministischen endlichen Automaten an, der die Sprache aller Wörter über dem Alphabet {0, 1} akzeptiert,

Mehr

Grammatiken. Grammatiken sind regelbasierte Kalküle zur Konstruktion von Systemen und Sprachen Überprüfung von Systemen und Sprachen

Grammatiken. Grammatiken sind regelbasierte Kalküle zur Konstruktion von Systemen und Sprachen Überprüfung von Systemen und Sprachen Grammatiken Grammatiken sind regelbasierte Kalküle zur Konstruktion von Systemen und Sprachen Überprüfung von Systemen und Sprachen Grammatiken eignen sich besonders zur Modellierung beliebig tief geschachtelter,

Mehr

Theoretische Grundlagen der Informatik

Theoretische Grundlagen der Informatik Theoretische Grundlagen der Informatik Vorlesung am 17. Januar 2012 INSTITUT FÜR THEORETISCHE 0 KIT 18.01.2012 Universität des Dorothea Landes Baden-Württemberg Wagner - Theoretische und Grundlagen der

Mehr

Grundlagen der Theoretischen Informatik

Grundlagen der Theoretischen Informatik Grundlagen der Theoretischen Informatik 4. Kellerautomaten und kontextfreie Sprachen (III) 17.06.2015 Viorica Sofronie-Stokkermans e-mail: sofronie@uni-koblenz.de 1 Übersicht 1. Motivation 2. Terminologie

Mehr

Compiler; Übersetzungsprogramme. Grundlagen der Programmierung 3 A. Compiler für Programmiersprachen. Phasen eines Compilers

Compiler; Übersetzungsprogramme. Grundlagen der Programmierung 3 A. Compiler für Programmiersprachen. Phasen eines Compilers ompiler; Übersetzungsprogramme Grundlagen der Programmierung 3 A ompiler A: Phasen; Scanner Prof. Dr. Manfred Schmidt-Schauß Sommersemester 2017 Ein Übersetzer (ompiler) ist ein Programm, das ein Wort

Mehr

Grammatiken und ANTLR

Grammatiken und ANTLR Grammatiken und ANTLR Zusatzfolien zu Algo Blatt 6 Author: Henry Schaefer http://www.majeeks.de/folien_blatt6.pdf Grammatik Definition: syntaktische Beschreibung einer Sprache (H.S.) Definiton Grammatik

Mehr

Konstruieren der SLR Parsing Tabelle

Konstruieren der SLR Parsing Tabelle Konstruieren der SLR Parsing Tabelle Kontextfreie Grammatik (CFG) Notation 1. Diese Symbole sind Terminals: (a) Kleinbuchstaben vom Anfang des Alphabets wie a, b, c. (b) Operator Symbole wie +,, usw. (c)

Mehr

Nachklausur zur Vorlesung Informatik 3 mit einigen Anmerkungen zu Lösungen

Nachklausur zur Vorlesung Informatik 3 mit einigen Anmerkungen zu Lösungen Nachklausur zur Vorlesung Informatik 3 mit einigen Anmerkungen zu Lösungen Aufgabe 1 2 3 4 5 6 7 max. Punkte 6 6 7 7 8 8 12 err. Punkte Gesamtpunktzahl: Note: 1 Aufgabe 1 (3+1+1+1 = 6 Punkte) Es seien

Mehr

Von der Grammatik zum AST

Von der Grammatik zum AST Von der Grammatik zum AST Welche Eigenschaften soll ein Parser haben? Wann ist eine Grammatik eindeutig? Wie sollte eine Grammatik aussehen? Theoretischer Hin tergrund: FIRST, FOLLOW Einschränkungen von

Mehr

Die mathematische Seite

Die mathematische Seite Kellerautomaten In der ersten Vorlesung haben wir den endlichen Automaten kennengelernt. Mit diesem werden wir uns in der zweiten Vorlesung noch etwas eingängiger beschäftigen und bspw. Ansätze zur Konstruktion

Mehr

9.4 Grundlagen des Compilerbaus

9.4 Grundlagen des Compilerbaus Kap09.fm Seite 717 Dienstag, 7. September 2010 2:06 14 9.4 Grundlagen des Compilerbaus 717 so dass die Benutzung dieser Regeln zum Aufbau eines + -Knotens bzw. eines Negations- Knotens im abstrakten Syntaxbaum

Mehr

1 Attributierte Grammatiken. 2 Zyklische AG. 3 Codeerzeugung mit AGs. Zusatzfolien Semantische Analyse Wintersemester 2008/09 1 / 28

1 Attributierte Grammatiken. 2 Zyklische AG. 3 Codeerzeugung mit AGs. Zusatzfolien Semantische Analyse Wintersemester 2008/09 1 / 28 1 Attributierte Grammatiken 2 Zyklische AG 3 Codeerzeugung mit AGs Zusatzfolien Semantische Analyse Wintersemester 2008/09 1 / 28 Beispiel: Taschenrechner mit Attributierter Grammatik Produktion Semantische

Mehr

Einführung in Berechenbarkeit, Formale Sprachen und Komplexitätstheorie

Einführung in Berechenbarkeit, Formale Sprachen und Komplexitätstheorie Einführung in Berechenbarkeit, Formale Sprachen und Komplexitätstheorie Wintersemester 2005/2006 07.11.2005 5. Vorlesung 1 Überblick: Kontextfreie Sprachen Formale Grammatik Einführung, Beispiele Formale

Mehr

Das Postsche Korrespondenzproblem

Das Postsche Korrespondenzproblem Das Postsche Korrespondenzproblem Eine Instanz des PKP ist eine Liste von Paaren aus Σ Σ : (v 1, w 1 ),..., (v n, w n ) Eine Lösung ist eine Folge i 1,..., i k von Indizes 1 i j n mit v i1... v ik = w

Mehr

Kapitel 5: Semantische Analyse

Kapitel 5: Semantische Analyse Kapitel 5: Semantische Analyse Prinzip Operationen der Übersetzung werden an die Grammatik gebunden -> Compiler-Generatoren Themen Attributierte Grammatik Mehrpass - Compiler - Generatoren Symboltabelle

Mehr

Spezifikation lexikalischer Einheiten (Token) als reguläre Ausdrücke in einer Lexer-Spezifikationsdatei (z.b. tiger.lex) Übersetzen nach lex.yy.

Spezifikation lexikalischer Einheiten (Token) als reguläre Ausdrücke in einer Lexer-Spezifikationsdatei (z.b. tiger.lex) Übersetzen nach lex.yy. BISON - Einleitung bison ist ein Programmgenerator, welches ein C oder C++ Programm erzeugt, dass die syntaktische Analyse eines Tokenstroms durchführt Vorgehensweise bie der Erstellung eines Parsers mit

Mehr

Alphabet, formale Sprache

Alphabet, formale Sprache n Alphabet Alphabet, formale Sprache l nichtleere endliche Menge von Zeichen ( Buchstaben, Symbole) n Wort über einem Alphabet l endliche Folge von Buchstaben, die auch leer sein kann ( ε leere Wort) l

Mehr

5.2 Endliche Automaten

5.2 Endliche Automaten 114 5.2 Endliche Automaten Endliche Automaten sind Turingmaschinen, die nur endlichen Speicher besitzen. Wie wir bereits im Zusammenhang mit Turingmaschinen gesehen haben, kann endlicher Speicher durch

Mehr

Kontextfreie Grammatiken. Kontextfreie Grammatiken 1 / 45

Kontextfreie Grammatiken. Kontextfreie Grammatiken 1 / 45 Kontextfreie Grammatiken Kontextfreie Grammatiken 1 / 45 Was kann man mit kontextfreien Grammatiken anfangen? Kontextfreie Grammatiken, kurz: werden zur Modellierung von KFGs beliebig tief geschachtelten

Mehr

Syntax von Programmiersprachen

Syntax von Programmiersprachen Syntax von Programmiersprachen SEP 209 Programmiersprachen Sprache = Menge von Wörtern, typischerweise unendlich Programmiersprache: Wörter repräsentieren Programme Programm kann auf einem Computer evtl.

Mehr

Kapitel 5: Syntaxdiagramme und Grammatikregeln

Kapitel 5: Syntaxdiagramme und Grammatikregeln 5. Syntaxdiagramme und Grammatikregeln 5-1 Objektorientierte Programmierung (Winter 2010/2011) Kapitel 5: Syntaxdiagramme und Grammatikregeln Syntaxdiagramme Grammatikregeln (kontextfrei) Beispiele: Lexikalische

Mehr

Übungsaufgaben zu Formalen Sprachen und Automaten

Übungsaufgaben zu Formalen Sprachen und Automaten Universität Freiburg PD Dr. A. Jakoby Sommer 27 Übungen zum Repetitorium Informatik III Übungsaufgaben zu Formalen Sprachen und Automaten. Untersuchen Sie das folgende Spiel: A B x x 2 x 3 C D Eine Murmel

Mehr

Kapitel 2. Methoden zur Beschreibung von Syntax

Kapitel 2. Methoden zur Beschreibung von Syntax 1 Kapitel 2 Methoden zur Beschreibung von Syntax Grammatik, die sogar Könige zu kontrollieren weiß... aus Molière, Les Femmes Savantes (1672), 2. Akt 2 Ziele Zwei Standards zur Definition der Syntax von

Mehr

Umformung NTM DTM. Charakterisierung rek. aufz. Spr. Chomsky-3-Grammatiken (T5.3) Chomsky-0-Grammatik Rek. Aufz.

Umformung NTM DTM. Charakterisierung rek. aufz. Spr. Chomsky-3-Grammatiken (T5.3) Chomsky-0-Grammatik Rek. Aufz. Chomsky-0-Grammatik Rek. Aufz. Satz T5.2.2: Wenn L durch eine Chomsky-0- Grammatik G beschrieben wird, gibt es eine NTM M, die L akzeptiert. Beweis: Algo von M: Schreibe S auf freie Spur. Iteriere: Führe

Mehr

Kapitel 3: Grundlegende Ergebnisse aus der Komplexitätstheorie Gliederung

Kapitel 3: Grundlegende Ergebnisse aus der Komplexitätstheorie Gliederung Gliederung 1. Berechenbarkeitstheorie 2. Grundlagen 3. Grundlegende Ergebnisse aus der Komplexitätstheorie 4. Die Komplexitätsklassen P und NP 5. Die Komplexitätsklassen RP und BPP 3.1. Ressourcenkompression

Mehr

Kapitel: Die Chomsky Hierarchie. Die Chomsky Hierarchie 1 / 14

Kapitel: Die Chomsky Hierarchie. Die Chomsky Hierarchie 1 / 14 Kapitel: Die Chomsky Hierarchie Die Chomsky Hierarchie 1 / 14 Allgemeine Grammatiken Definition Eine Grammatik G = (Σ, V, S, P) besteht aus: einem endlichen Alphabet Σ, einer endlichen Menge V von Variablen

Mehr

Übungs- und Praktikumsaufgaben zur Systemprogrammierung Dipl.-Ing. H. Büchter (Lehrbeauftragter) FH-Dortmund WS 2001/2002 / SS 2002

Übungs- und Praktikumsaufgaben zur Systemprogrammierung Dipl.-Ing. H. Büchter (Lehrbeauftragter) FH-Dortmund WS 2001/2002 / SS 2002 1. Stellen Sie die schrittweise Verbesserung eines Compilers durch das Bootstrap- Verfahren mit Hilfe von T-Diagrammen dar. Gegeben ist ein auf der Maschine M lauffähiger Compiler C 1, der in S geschrieben

Mehr

Lexikalische Analyse, Tokenizer, Scanner

Lexikalische Analyse, Tokenizer, Scanner Lexikalische Analyse, Tokenizer, Scanner Frühe Phase des Übersetzers Aufgabenteilung: Scanner (lokale) Zeichen (Symbol-)Analyse Parser Syntax-Analyse Aufgabe des Scanners: Erkennung von: Zahlen, Bezeichner,

Mehr

Formale Sprachen und Automaten

Formale Sprachen und Automaten Formale Sprachen und Automaten Kapitel 3: Regular Expressions Vorlesung an der DHBW Karlsruhe Thomas Worsch Karlsruher Institut für Technologie, Fakultät für Informatik Wintersemester 2012 Kapitel 3 Regular

Mehr

Pumping-Lemma 2 Pumping-Lemma Sei L eine von einem endlichen Automaten erkannte Sprache. Dann existiert eine natürliche Zahl p N derart, dass jedes Wo

Pumping-Lemma 2 Pumping-Lemma Sei L eine von einem endlichen Automaten erkannte Sprache. Dann existiert eine natürliche Zahl p N derart, dass jedes Wo 1 Endliche Automaten Modellierungskonzept mit vielen brauchbaren Eigenschaften schnelle Spracherkennung graphisch-visuelle Beschreibung automatische Korrektheitsbeweise gute Kompositionalitätseigenschaften

Mehr

q 0 q gdw. nicht (q A) (q A) q i+1 q gdw. q i q oder ( a Σ) δ(q, a) i δ(q, a) L = {a n b n : n N} für a, b Σ, a b

q 0 q gdw. nicht (q A) (q A) q i+1 q gdw. q i q oder ( a Σ) δ(q, a) i δ(q, a) L = {a n b n : n N} für a, b Σ, a b Kap. 2: Endliche Automaten Myhill Nerode 2.4 Minimalautomat für reguläre Sprache Abschnitt 2.4.3 L Σ regulär der Äuivalenzklassen-Automat zu L ist ein DFA mit minimaler Zustandszahl (= index( L )) unter

Mehr

Kapitel 2: Formale Sprachen Kontextfreie Sprachen. reguläre Grammatiken/Sprachen. kontextfreie Grammatiken/Sprachen

Kapitel 2: Formale Sprachen Kontextfreie Sprachen. reguläre Grammatiken/Sprachen. kontextfreie Grammatiken/Sprachen reguläre Grammatiken/prachen Beschreibung für Bezeichner in Programmiersprachen Beschreibung für wild cards in kriptsprachen (/* reguläre Ausdrücke */)?; [a-z]; * kontextfreie Grammatiken/prachen Beschreibung

Mehr

Algorithmen mit konstantem Platzbedarf: Die Klasse REG

Algorithmen mit konstantem Platzbedarf: Die Klasse REG Algorithmen mit konstantem Platzbedarf: Die Klasse REG Sommerakademie Rot an der Rot AG 1 Wieviel Platz brauchen Algorithmen wirklich? Daniel Alm Institut für Numerische Simulation Universität Bonn August

Mehr

Fachseminar WS 2008/09

Fachseminar WS 2008/09 Fachseminar WS 2008/09 Fachgebiet: Compilerbau Thema: Lexikalische Analyse (Scanner) Referent: Ali Sediq Betreuer: Prof. Dr. Helmut Weber 1 Inhaltsverzeichnis Lexikalische Analyse 1.0 Grundprobleme der

Mehr

Lemma Für jede monotone Grammatik G gibt es eine kontextsensitive

Lemma Für jede monotone Grammatik G gibt es eine kontextsensitive Lemma Für jede monotone Grammatik G gibt es eine kontextsensitive Grammatik G mit L(G) = L(G ). Beweis im Beispiel (2.): G = (V,Σ, P, S) : P = {S asbc, S abc, CB BC, ab ab, bb bb, bc bc, cc cc}. (i) G

Mehr

LR-Parser, Shift-Reduce-Verfahren

LR-Parser, Shift-Reduce-Verfahren LR-Parser, Shift-Reduce-Verfahren Bottom-Up-Syntaxanalyse LR-Parser L: Eingabe von links nach rechts; R: Rechtsherleitung Shift-Reduce-Verfahren Beachte: Kein Backtracking nicht auf jede Grammatik anwendbar

Mehr

Programmiersprachen und Übersetzer

Programmiersprachen und Übersetzer Programmiersprachen und Übersetzer Sommersemester 2009 5. April 2009 Vorteile bei der Verwendung höherer Programmiersprachen Vorteile bei der Verwendung höherer Programmiersprachen 1. Einfache Notation

Mehr

Operationen auf Grammatiken

Operationen auf Grammatiken Operationen auf Grammatiken Ziel: Normalisierungen, Vereinfachungen, Elimination bestimmter Konstrukte Erzeugen eines Parsers Transformation G 1 G 2 mit L(G 1 ) = L(G 2 ) I.a. Parsebaum 1 (w) Parsebaum

Mehr

Algorithmen auf Sequenzen

Algorithmen auf Sequenzen Algorithmen auf Sequenzen Vorlesung von Prof. Dr. Sven Rahmann im Sommersemester 2008 Kapitel 4 Reguläre Ausdrücke Webseite zur Vorlesung http://ls11-www.cs.tu-dortmund.de/people/rahmann/teaching/ss2008/algorithmenaufsequenzen

Mehr

Einführung in die Informatik. Programming Languages

Einführung in die Informatik. Programming Languages Einführung in die Informatik Programming Languages Beschreibung von Programmiersprachen Wolfram Burgard Cyrill Stachniss 1/15 Motivation und Einleitung Wir haben in den vorangehenden Kapiteln meistens

Mehr

Informatik III. Christian Schindelhauer Wintersemester 2006/07 6. Vorlesung

Informatik III. Christian Schindelhauer Wintersemester 2006/07 6. Vorlesung Informatik III Christian Schindelhauer Wintersemester 2006/07 6. Vorlesung 10.11.2006 schindel@informatik.uni-freiburg.de 1 Kapitel IV Kontextfreie Sprachen Kontextfreie Grammatik Informatik III 6. Vorlesung

Mehr

Kontextfreie Grammatiken

Kontextfreie Grammatiken Kontextfreie Grammatiken Bisher haben wir verschiedene Automatenmodelle kennengelernt. Diesen Automaten können Wörter vorgelegt werden, die von den Automaten gelesen und dann akzeptiert oder abgelehnt

Mehr

1 Einführung. 2 Typ-0- und Typ-1-Sprachen. 3 Berechnungsmodelle. 4 Unentscheidbarkeit. 5 Unentscheidbare Probleme. 6 Komplexitätstheorie

1 Einführung. 2 Typ-0- und Typ-1-Sprachen. 3 Berechnungsmodelle. 4 Unentscheidbarkeit. 5 Unentscheidbare Probleme. 6 Komplexitätstheorie 1 Einführung 2 Typ-0- und Typ-1-Sprachen 3 Berechnungsmodelle 4 Unentscheidbarkeit 5 Unentscheidbare Probleme 6 Komplexitätstheorie WS 11/12 155 Überblick Zunächst einmal definieren wir formal den Begriff

Mehr

2.2 Der Algorithmus von Knuth, Morris und Pratt

2.2 Der Algorithmus von Knuth, Morris und Pratt Suchen in Texten 2.1 Grundlagen Ein Alphabet ist eine endliche Menge von Symbolen. Bsp.: Σ a, b, c,..., z, Σ 0, 1, Σ A, C, G, T. Wörter über Σ sind endliche Folgen von Symbolen aus Σ. Wörter werden manchmal

Mehr

Automatentheorie und formale Sprachen

Automatentheorie und formale Sprachen Automatentheorie und formale Sprachen VL 8 Chomsky-Grammatiken Kathrin Hoffmann 23. Mai 2012 Hoffmann (HAW Hamburg) Automatentheorie und formale Sprachen 23.5. 2012 250 Wortproblem Wortproblem ist das

Mehr

6 Kontextfreie Grammatiken

6 Kontextfreie Grammatiken 6 Kontextfreie Grammatiken Reguläre Grammatiken und damit auch reguläre Ausdrücke bzw. endliche Automaten haben bezüglich ihres Sprachumfangs Grenzen. Diese Grenzen resultieren aus den inschränkungen,

Mehr

Objektorientierte Programmierung. Kapitel 3: Syntaxdiagramme

Objektorientierte Programmierung. Kapitel 3: Syntaxdiagramme Stefan Brass: OOP (Java), 3. 1/31 Objektorientierte Programmierung Kapitel 3: Stefan Brass Martin-Luther-Universität Halle-Wittenberg Wintersemester 2014/15 http://www.informatik.uni-halle.de/ brass/oop14/

Mehr

1 Einführung. 2 Typ-0- und Typ-1-Sprachen. 3 Berechnungsmodelle. 4 Unentscheidbarkeit. 5 Unentscheidbare Probleme. 6 Komplexitätstheorie

1 Einführung. 2 Typ-0- und Typ-1-Sprachen. 3 Berechnungsmodelle. 4 Unentscheidbarkeit. 5 Unentscheidbare Probleme. 6 Komplexitätstheorie 1 Einführung 2 Typ-0- und Typ-1-Sprachen 3 Berechnungsmodelle 4 Unentscheidbarkeit 5 Unentscheidbare Probleme 6 Komplexitätstheorie 139 Unentscheidbarkeit Überblick Zunächst einmal definieren wir formal

Mehr

Theoretische Grundlagen der Informatik

Theoretische Grundlagen der Informatik Theoretische Grundlagen der Informatik Vorlesung am 12.01.2012 INSTITUT FÜR THEORETISCHE 0 KIT 12.01.2012 Universität des Dorothea Landes Baden-Württemberg Wagner - Theoretische und Grundlagen der Informatik

Mehr

2. Klausur zur Vorlesung Theoretische Grundlagen der Informatik Wintersemester 2016/2017

2. Klausur zur Vorlesung Theoretische Grundlagen der Informatik Wintersemester 2016/2017 2. Klausur zur Vorlesung Theoretische Grundlagen der Informatik Wintersemester 2016/2017 Hier Aufkleber mit Name und Matrikelnummer anbringen Vorname: Nachname: Matrikelnummer: Beachten Sie: Bringen Sie

Mehr

Grundlagen der Theoretischen Informatik

Grundlagen der Theoretischen Informatik 1 Grundlagen der Theoretischen Informatik Till Mossakowski Fakultät für Informatik Otto-von-Guericke Universität Magdeburg Wintersemester 2014/15 2 Kontextfreie Grammatiken Definition: Eine Grammatik G

Mehr

Nachklausur zur Vorlesung

Nachklausur zur Vorlesung Lehrstuhl für Theoretische Informatik Prof. Dr. Markus Lohrey Grundlagen der Theoretischen Informatik Nachklausur Nachklausur zur Vorlesung Grundlagen der Theoretischen Informatik WS 2016/17 / 27. Februar

Mehr

Algorithmische Bioinformatik 1

Algorithmische Bioinformatik 1 Algorithmische Bioinformatik 1 Dr. Hanjo Täubig Lehrstuhl für Effiziente Algorithmen (Prof. Dr. Ernst W. Mayr) Institut für Informatik Technische Universität München Sommersemester 2009 Übersicht Algorithmen

Mehr

Einführung in die Informatik. Programming Languages

Einführung in die Informatik. Programming Languages Einführung in die Informatik Programming Languages Beschreibung von Programmiersprachen Wolfram Burgard Motivation und Einleitung Wir haben in den vorangehenden Kapiteln meistens vollständige Java- Programme

Mehr

2. Klausur zur Vorlesung Theoretische Grundlagen der Informatik Wintersemester 2014/2015

2. Klausur zur Vorlesung Theoretische Grundlagen der Informatik Wintersemester 2014/2015 2. Klausur zur Vorlesung Theoretische Grundlagen der Informatik Wintersemester 2014/2015 Hier Aufkleber mit Name und Matrikelnummer anbringen Vorname: Nachname: Matrikelnummer: Beachten Sie: Bringen Sie

Mehr

Effiziente Algorithmen 2

Effiziente Algorithmen 2 Effiziente Algorithmen 2 Dr. Hanjo Täubig Lehrstuhl für Effiziente Algorithmen (Prof. Dr. Ernst W. Mayr) Institut für Informatik Technische Universität München Sommersemester 2009 Übersicht Algorithmen

Mehr

2.1 Grundlagen: Kontextfreie Grammatiken

2.1 Grundlagen: Kontextfreie Grammatiken 2.1 Grundlagen: Kontextfreie Grammatiken Programme einer Programmiersprache können unbeschränkt viele Tokens enthalten, aber nur endlich viele Token-Klassen :-) Als endliches Terminal-Alphabet T wählen

Mehr

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen. I.2. I.2. Grundlagen von von Programmiersprachen.

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen. I.2. I.2. Grundlagen von von Programmiersprachen. 1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen I.2. I.2. Grundlagen von von Programmiersprachen. - 1 - 1. Der Begriff Informatik "Informatik" = Kunstwort aus Information und Mathematik

Mehr

1. Klausur zur Vorlesung Informatik III Wintersemester 2003/2004. Mit Lösung!

1. Klausur zur Vorlesung Informatik III Wintersemester 2003/2004. Mit Lösung! Universität Karlsruhe Theoretische Informatik Fakultät für Informatik WS 23/4 ILKD Prof. Dr. D. Wagner 2. Februar 24. Klausur zur Vorlesung Informatik III Wintersemester 23/24 Mit Lösung! Beachten Sie:

Mehr

Algorithmische Bioinformatik 1

Algorithmische Bioinformatik 1 Algorithmische Bioinformatik 1 Dr. Hanjo Täubig Lehrstuhl für Effiziente Algorithmen (Prof. Dr. Ernst W. Mayr) Institut für Informatik Technische Universität München Sommersemester 2009 Übersicht Algorithmen

Mehr

Algorithmen und Komplexität Lösungsvorschlag zu Übungsblatt 8

Algorithmen und Komplexität Lösungsvorschlag zu Übungsblatt 8 ETH Zürich Institut für Theoretische Informatik Prof. Dr. Angelika Steger Florian Meier, Ralph Keusch HS 2017 Algorithmen und Komplexität Lösungsvorschlag zu Übungsblatt 8 Lösungsvorschlag zu Aufgabe 1

Mehr

Klausur über den Stoff der Vorlesung Grundlagen der Informatik II (90 Minuten)

Klausur über den Stoff der Vorlesung Grundlagen der Informatik II (90 Minuten) Institut für Angewandte Informatik und Formale Beschreibungsverfahren 15.02.2010 Klausur über den Stoff der Vorlesung Grundlagen der Informatik II (90 Minuten) Name: Vorname: Matr.-Nr.: Semester: (WS 2009/10)

Mehr

Definition Compiler. Bekannte Compiler

Definition Compiler. Bekannte Compiler Compiler Inhalt: Definition Compiler / bekannte Compiler Klassifikationen von Compilern Analyse-Synthese-Modell der Kompilierung Analyse des Quellprogramms Synthesephase Die Phasen eines Compilers Symboltabellenverwaltung

Mehr

Aufgabe Mögliche Punkte Erreichte Punkte a b c d Σ a b c d Σ x1 13

Aufgabe Mögliche Punkte Erreichte Punkte a b c d Σ a b c d Σ x1 13 Universität Karlsruhe Theoretische Informatik Fakultät für Informatik WS 2003/04 ILKD Prof. Dr. D. Wagner 14. April 2004 2. Klausur zur Vorlesung Informatik III Wintersemester 2003/2004 Hier Aufkleber

Mehr

8. Turingmaschinen und kontextsensitive Sprachen

8. Turingmaschinen und kontextsensitive Sprachen 8. Turingmaschinen und kontextsensitive Sprachen Turingmaschinen (TM) von A. Turing vorgeschlagen, um den Begriff der Berechenbarkeit formal zu präzisieren. Intuitiv: statt des Stacks bei Kellerautomaten

Mehr

Falls H die Eingabe verwirft, so wissen wir, dass M bei Eingabe w nicht hält. M hält im verwerfenden Haltezustand. Beweis:

Falls H die Eingabe verwirft, so wissen wir, dass M bei Eingabe w nicht hält. M hält im verwerfenden Haltezustand. Beweis: 1 Unentscheidbarkeit 2 Grundlagen der Theoretischen Informatik Till Mossakowski Fakultät für Informatik Otto-von-Guericke Universität Magdeburg Wintersemester 2014/15 #include char *s="include

Mehr

Was ist ein Compiler?

Was ist ein Compiler? Was ist ein Compiler? Was ist ein Compiler und worum geht es? Wie ist ein Compiler aufgebaut? Warum beschäftigen wir uns mit Compilerbau? Wie ist die Veranstaltung organisiert? Was interessiert Sie besonders?

Mehr

Definition 98 Eine Turingmaschine heißt linear beschränkt (kurz: LBA), falls für alle q Q gilt:

Definition 98 Eine Turingmaschine heißt linear beschränkt (kurz: LBA), falls für alle q Q gilt: 5.2 Linear beschränkte Automaten Definition 98 Eine Turingmaschine heißt linear beschränkt (kurz: LBA), falls für alle q Q gilt: (q, c, d) δ(q, ) = c =. Ein Leerzeichen wird also nie durch ein anderes

Mehr

2 Eine einfache Programmiersprache

2 Eine einfache Programmiersprache 2 Eine einfache Programmiersprache Eine Programmiersprache soll Datenstrukturen anbieten Operationen auf Daten erlauben Kontrollstrukturen zur Ablaufsteuerung bereitstellen Als Beispiel betrachten wir

Mehr