2. Kapitel LEXIKALISCHE ANALYSE. Compilerbau Prof. Dr. Wolfgang Schramm

Save this PDF as:
 WORD  PNG  TXT  JPG

Größe: px
Ab Seite anzeigen:

Download "2. Kapitel LEXIKALISCHE ANALYSE. Compilerbau Prof. Dr. Wolfgang Schramm"

Transkript

1 2. Kapitel LEXIKALISCHE ANALYSE Compilerbau Prof. Dr. Wolfgang Schramm

2 Lexikalische Analyse (Scanner) 1/2 1 Aufgabe Erkennen von lexikalischen Elementen. Erstellung einer internen Darstellung für lexikalische Elemente. Einordnung Der Scanner ist i.allg. Unterprogramm des Parsers. Erweiterungen: Kopie des Quellprogramms (evtl.) mit Meldungen erzeugen. ImplemenNerung von Makrotechniken. Fehlerbehandlung (Einfügen, Löschen, Vertauschen von Zeichen). Bsp: - 7.6F+8 è - 7.6E+8

3 Lexikalische Analyse (Scanner) 2/2 2 liefere nächstes lex. Element Quell- Scanner Parser pro- gramm Strukturbaum Eintragen Nächstes lexikalisches Element Symboltabelle Eintragen/ Nachschlagen

4 TheoreNscher Hintergrund der lexikalischen Analyse 1/ Die Struktur lexikalischer Symbole kann durch reguläre Ausdrücke beschrieben werden. Das heißt, die Menge der Zeichenke^en, die auf ein Token abgebildet werden, ist die zum Ausdruck gehörige reguläre Sprache. 2. Reguläre Sprachen werden durch rechtslineare oder durch linkslineare GrammaNken erzeugt. 3. Reguläre Sprachen werden von nichtdeterminisnschen endlichen Automaten (NEA) erkannt. NFA 4. Zu jedem nichtdeterminisnschen endlichen Automaten kann man auch einen determinisnschen endlichen Automaten (DEA) konstruieren, der die gleiche Sprache erkennt. DFA

5 TheoreNscher Hintergrund der lexikalischen Analyse 2/2 4 Kurz gesagt: Man braucht einen Formalismus zur Spezifikation der Token. Reguläre Ausdrücke Man braucht einen Mechanismus zur Erkennung der Token. DFA, Zustandsdiagramme

6 DefiniNonen für Beschreibung formaler Sprachen 1/3 5 Terminalsymbole Die Terminalsymbole (Lexeme, Token) sind Elemente einer Menge T von GrammaNksymbolen. Terminalsymbole sind die kleinsten syntaknschen Grundeinheiten einer formalen Sprache mit selbstständiger Bedeutung. Ein Satz ist die Aneinanderreihung von Terminalsymbolen. Nonterminalsymbole Die Nonterminalsymbole sind Elemente einer Menge N von GrammaNk- symbolen, die zur Darstellung von Zwischenzuständen des Spracher- zeugungsprozesses dienen. ProdukKonen Die ProdukNonen sind Vorschrifen für das Ersetzen einer Symbolke^e α durch eine andere Symbolke^e β (α β ).

7 DefiniNonen für Beschreibung formaler Sprachen 2/3 6 Eine (Chomsky-) Grammatik zur Beschreibung von Syntax ist durch ein 4-Tupel: G = (T, N, P, S) definiert. T: Menge der Terminalsymbole. N: Menge der Nonterminalsymbole. Lies: Element von Epsilon (leeres Wort) P: Menge von Produktionen α β mit α, β (N T) * und N T =, α ε S: Ein ausgezeichnetes Nonterminalsymbol - das Startsymbol mit S N. Kleene Stern

8 DefiniNonen für Beschreibung formaler Sprachen 3/3 7 Die Sprache L(G) einer GrammaKk ist die Menge der Terminalsymbolke^en, die über das Startsymbol S nach den Regeln von P hergeleitet werden kann. * L (G) = { s S s mit s T * }

9 Die Chomsky GrammaNk- Typen 8 Eine GrammaNk G = (T, N, P, S) heißt vom Typ 0 oder unbeschränkt (rekursiv aufzählbar), wenn sie nach den Regeln von P hergeleitet werden kann. vom Typ 1 oder kontextsensikv, wenn in jeder Regel α β die linke Seite nicht länger als die rechte ist: α β ; die Regel A ε mit A N ist zulässig, wenn A auf keiner rechten Seite vorkommt. vom Typ 2 oder kontexwrei, wenn jede Regel die Form A α hat, mit A N und α (N T) *. vom Typ 3 oder regulär, wenn jede Regel eine der Formen A α, A αb oder A Bα hat, mit A, B N und α T *.

10 Die Chomsky Sprachhierarchie 9 o Wenn L i die Menge aller Sprachen ist, die von den GrammaNken des Chomsky- Typs i erzeugt werden kann, dann ist Rekursiv aufzählbare Sprachen Kontextsensitive Sprachen Kontextfreie Sprachen Reguläre Sprachen L 0 L 1 L 2 L 3

11 Alphabet und Sprache in der InformaNk 1/3 10 o Im Sinne der MathemaNk und InformaNk ist eine Sprache eine Menge von Zeichenreihen. Die Sprache wird dabei auf Lexik und Syntax reduziert. Für Lexik wird der Begriff Alphabet verwendet. o Ein Alphabet ist eine nicht leere, endliche Menge A von Zeichen a A. A1 = {A,..., Z} A2= {a} A3 = {A,..., Z, a,..., z, 0,..., 9} A4= {#, 0}

12 Alphabet und Sprache in der InformaNk 2/3 11 o Die Menge aller Zeichenreihen A* über einem Alphabet ist definiert durch: ε A* die leere Zeichenreihe ist eine Zeichenreihe. x A*, a A* x a A* ( ist der Verke^ungsoperator). Andere Zeichenreihen gibt es nicht. Konkatenation ATA, ATTTNBNM A1* a, aa, aaa... A2* Paul, Omega, x12 A3* #, #0#000 A4* o Eine Sprache L (L, wie engl. language) ist eine Teilmenge aller Zeichenreihen über einem Alphabet A: L A* Deutsche Sprache {A,..., Z, a,..., z, ß, 0,..., 9,?,!,...}*

13 Alphabet und Sprache in der InformaNk 3/3 12 Wie werden die Zeichenreihen einer besnmmten Sprache beschrieben? a) Aufzählung aller Zeichenreihen oder Wörter, die zur Sprache gehören (das ist nur bei endlichen Sprachen möglich!). L 1 = {a, aaa, aaaaa} b) MathemaKsche Charakterisierung der zur Sprache gehörenden Wörter als Menge (sog. formale Sprachen). L 2 = {a n n 3} oder L 3 = {a n b n c n n 1} c) GrammaKken: sind eine endliche konstruknve Beschreibung einer im allgemeinen unendlichen Menge. Damit werden Programmiersprachen beschrieben.

14 Kontexzreie GrammaNk 1/2 13 Eine GrammaKk zur Beschreibung von Syntax ist ein 4- Tupel: G = (T, N, P, S) T: Menge von Token, sog. Terminalsymbole (TS). N: Menge von Nonterminalsymbolen (NTS). P: Menge von ProdukKonen (oder ProdukNonsregeln), wobei jede ProdukNon aus einem Nonterminalsymbol (linke Seite der ProdukNon) einem Pfeil ( ) und einer Folge von Terminalsymbolen und/oder Nonterminalsymbolen (rechte Seite der ProdukNon) besteht. S: Ein ausgezeichnetes Nonterminalsymbol - das Startsymbol.

15 Kontexzreie GrammaNk 2/2 14 Die Sprache L(G) einer GrammaKk besteht aus allen aus dem Startsymbol S abgeleiteten Zeichenke^en (Wörtern), die nur Terminalsymbole enthalten. Ein Wort ist eine Folge von Terminalsymbolen, die durch wiederholtes Anwenden von Regeln erzeugt werden kann, wobei das Startsymbol S der Ausgangspunkt der Erzeugung ist. GrammaNken werden in zweierlei Hinsicht genutzt: Um Worte einer Sprache zu erzeugen. Ableiten Um festzustellen, ob ein gegebenes Wort zur Sprache gehört. Analysieren Es gibt verschiedene Formalismen zur Beschreibung von GrammaNken: Reguläre Ausdrücke (einfacher Mechanismus, nicht für alles geeignet) Backus Naur Form (BNF). Erweiterte Bauckus Naur Form (EBNF). Syntaxdiagramme.

16 Reguläre Sprachen - DefiniNon 15 Die regulären Sprachen über dem Alphabet A werden durch folgende Regeln induknv definiert: i. und {ε} sind reguläre Sprachen. ii. Für jedes a A ist {a} eine reguläre Sprache. iii. Seien B und C reguläre Sprachen, dann sind auch B C, BC und B * reguläre Sprachen. iv. Nichts sonst ist eine reguläre Sprache über A. Ein regulärer Ausdruck r beschreibt eine reguläre Sprache L(r).

17 Reguläre Ausdrücke - DefiniNon 16 Reguläre Ausdrücke über dem Alphabet A werden durch folgende Regeln induknv definiert: ι. ist ein regulärer Ausdruck, der die reguläre Sprache beschreibt. ε ist ein regulärer Ausdruck, der die reguläre Sprache { ε } beschreibt ii. iii. iv. Für jedes a A ist a ein regulärer Ausdruck; er beschreibt die Sprache {a}. Wenn a und b reguläre Ausdrücke sind, die die Sprachen A und B beschreiben, so ist auch (a b ) ein regulärer Ausdruck, der A B beschreibt, ab ein regulärer Ausdruck, der AB beschreibt, a * ein regulärer Ausdruck, der A * beschreibt. Nichts sonst ist eine regulärer Ausdruck

18 Reguläre Ausdrücke vereinfachende NotaNonen 1/2 17 Benennung von regulären Ausdrücken Eine reguläre DefiniNon hat die Form Name d 1 r 1 Regulärer Ausdruck über einem Alphabet A Name d 2 r 2 Regulärer Ausdruck über A und d 1 Name d 3 r 3 Regulärer Ausdruck über A und d 1, d 2 etc In r i dürfen nur die Namen d 1, d 2,..., d i- 1 vorkommen.

19 Reguläre Ausdrücke vereinfachende NotaNonen 2/2 18 o Zur Unterscheidung von Namen und Symbolen, werden Namen fe^ geschrieben. Priorität o Die Auswahl ermöglicht die Wahl zwischen 2 AlternaNven: a b oder auch a + b (eher ungewöhnlich). o Die Sequenz (KonkatenaNon) beschreibt das hintereinander Schreiben: ab. o Die IteraKon ermöglicht das Wiederholen von Satzbausteinen: a* (0, 1 oder n- mal) oder a + (1 oder n- mal) aa*. o OpNonale Satzbausteine: a? Abkürzung für a ε (eher ungewöhnlich). o Zusätzlich besteht die Möglichkeit der Klammerung zur Strukturierung. Ansonsten gilt Punkt- vor Strichrechnung. o Zeichenklassen: Sta^ char a b c etc. schreibt man als Abkürzung auch char [a z].

20 Reguläre Ausdrücke - Beispiele 19 o Binärzahlen beginnen mit 1, danach kann eine beliebig lange Folge von 1 und 0 kommen: 1 (1 + 0)* 1, 10, 1010, o Will man auch noch die 0, als einzige mit diesem Symbol startende Zahl: (1 + 0)* 0, 1, 10, 1010, o Bezeichner einer Programmiersprache müssen mit einem Buchstaben beginnen, dürfen nach dem ersten Buchstaben aber auch Ziffern enthalten: (A Z + a z) (A Z +a z )* a, COM, ma07, u2 o Verwendung von Regulären Ausdrücken in der InformaNk: Festlegung von Datenformaten für Programmeingaben. Festlegen von Mustern zum Suchen in Texten.

21 Zustandsdiagramme 20 Zustandsdiagramme (transinon diagrams) sind eine graphische NotaNon für determinisnsche endliche Automaten. beschreiben die AkNon, die der Scanner bei der Anforderung des nächsten Token durch den Parser ausführt. Die Elemente von Zustandsdiagrammen sind Kreise, welche die Zustände bezeichnen. Gerichtete Kanten, welche die Zustände miteinander verbinden. Die von einem Zustand herausführenden Kanten haben eine Markierung (label). Das sind die Zeichen, mit denen man in den nächsten Zustand gelangt. Es gibt einen ausgezeichneten Startzustand und mindestens einen ausgezeichneten Endzustand. Gerichteter, markierter Graph

22 Zustandsdiagramme Beispiel 1 21 a start a 0 1 b b 2

23 Zustandsdiagramme Beispiel 2: relanonale Operatoren 22 start < = return (relop, LE) > 3 return (relop, NE) = other 4 * return (relop, LT) > 5 = other 6 return (relop, EQ) return (assop,...) 7 = 8 other 9 * return (relop, GE) return (relop, GT)

24 Endlicher Automat 23 Eingabe aktueller Zustand Steuerung

25 Erkennung von Token 1/3 24 Der Scanner liest das Quellprogramm zeichenweise ein, um aus den einzelnen Zeichen die Token aufzubauen. Dazu wird das Quellprogramm blockweise (gepufferte E/A) von Datei in den Arbeitsspeicher geladen. Quellprogramm Puffer Scanner arbeitet hier

26 Erkennung von Token 2/3 25 Eingrenzen der Lexeme im Puffer mit Hilfe zweier Zeiger: vorher: i f ( a < b anfang ende nachher: i f ( a < b anfang ende Rück-setzen: i f ( a < b anfang ende Nächstes Token

27 Erkennung von Token 3/3 26 Fortsetzung: i f ( a < b anfang ende Problem: Wenn das Pufferende erreicht ist, ohne dass bis dahin ein Token erkannt wurde. Lösung: 2 Puffer, die abwechselnd gefüllt werden. Die beiden Zeiger laufen über beide Puffer im Kreis.

28 Token, Lexeme und Pa^ern 27 Token interne Darstellung (für Parser) Aufbau ist durch Regeln beschrieben. Pattern Menge von Strings, die durch eine Regel beschrieben werden und mit einem Token verknüpft sind. Lexem konkrete Ausprägung eines Pattern für einen Token. Merke: Verschiedene Strings (Pattern) können auf dasselbe Token abgebildet werden. Bsp.: const pi = ; Token = id Lexem = pi

29 Token, Lexeme und Pa^ern - Beispiele 28 Token Ausprägung (Lexem) Pattern-Beschreibung const final final if if if rel_op <, <=, =,!=, >, >= < oder <= oder = oder!= oder > oder >= id pi, count Buchstabe gefolgt von Buchstaben-Ziffern- Kombination num , 0, 6.0E23 numerische Konstante literal any string Zeichen zwischen und außer

30 Interne Darstellung lexikalischer Elemente 1/3 29 Für jedes Lexem wird ein Paar ( Kategorie, Index) erzeugt. Typische Kategorien: Bezeichner id Zahlen num Zeichenketten string Schlüsselworte key Beispiel: if (max == 4711) name = Madonna ; Operatoren mulop addop relop Trennzeichen delimiter

31 Interne Darstellung lexikalischer Elemente 2/3 30 Der Index kennzeichnet ein lexikalisches Element entweder innerhalb seiner Kategorie oder er ist eine Referenz in die Symboltabelle. Beispiel: (relop, 1) à < (relop, 2) à <= (relop, 3) à == (relop, 4) à!= (relop, 5) à >= (relop, 6) à > Kategorie: Vergleichsoperator à EQUAL - Operation (mulop, 1) à * (mulop, 2) à /

32 31 Interne Darstellung lexikalischer Elemente - Symboltabelle 3/3 Symbol Attribute Index 3 if max name Madonna Beispiel: if (max == 4711) name = Madonna ; Beispiel: (key, 3) (id, 14) (rel_op, 3) (num, 40) (id, 51) (assign_op, 0) (string, 63)

33 ImplemenNerung eines Übergangsdiagramms 1/3 32 Direkte Umsetzung mittels einer Variablen state. Die Zustände werden ab 0 beginnend über alle Zustandsdiagramme durchnummeriert. letter digit start letter 0 1 other 2 < = Idee: Scanner versucht Diagramme in der Reihenfolge andere ihrer Auflistung Diagramme zu durchlaufen. Falls ein Fehler auftritt, erfolgt der Übergang zum Start des nächsten Diagramms. Dabei ist der Zeiger end im Puffer auf start zurückzusetzen.

34 ImplemenNerung eines Übergangsdiagramms 2/3 33 ininalisiere start, state while kein markierter Endzustand erreicht do case state of 0: lies_zeichen (zeichen) if zeichen ist Buchstabe then state := 1 else fehler 1: lies_zeichen (zeichen) if zeichen ist Buchstabe oder Ziffer then state := 1 else state := 2 2: setze ende eine PosiNon zurück // Endzustand erreicht teste in Symboltabelle, ob Schlüsselwort / Bezeichner gefunden, falls noch nicht vorhanden, trage es ein, gib entsprechendes Element zurück; markiere Endzustand.

35 34 end end ImplemenNerung eines Übergangsdiagramms 3/3 3: lies_zeichen (zeichen) if zeichen = < then state := 4 else if zeichen = = then state := 10 // Zustand für =-Operator else... // alle weiteren relationalen Operatoren 4: lies_zeichen (zeichen) if zeichen = = then state := 5 else setze ende eine Position zurück // Endzustand erreicht gib relop als lexikalisches Zeichen mit Ausprägung LT zurück 5: // Endzustand für LE-Operator... etc. Weitere Verbesserung: Zusammenfassung aller Zustandsdiagramme in ein Diagramm mit voneinander verschiedenen Eingängen.

36 NichtdeterminisNsche endliche Automaten 35 o Ein nichtdeterminisnscher endlicher Automat (NEA oder NFA) ist ein o Tupel M = (A, MOVE, S, s 0, F), wobei A ein endliches Alphabet von Eingabezeichen ist, S eine endliche Menge von Zuständen (state) ist, s 0 S der Anfangszustand ist, F S die Menge der Endzustände (final states) ist, und MOVE die ÜbergangsrelaKon, die (Zustands, Symbol)- Paare mit einer Menge von Zuständen verbindet, ist. MOVE : (state, symbol) à {state} bzw. MOVE : S x (A {ε} )à {S}

37 NFA - Beispiel 36 Hinweise: Dasselbe Eingabesymbol kann mehrere Übergänge eines Zustands markieren. Die Übergänge können sowohl mit e als auch mit Eingabesymbolen markiert sein. NFA der die Sprache: (a b)*abb erkennt. a start 0 a b b b

38 NFA - Anmerkungen 37 o o Ein NFA akzepnert einen Eingabestring x, genau dann wenn es einen Pfad vom Startzustand zu einem Endzustand im Zustandsdiagramm gibt, dessen Kantenmarkierungen zusammen gefasst x ergeben. Da die Zustandsübergänge nicht eindeung sind, gibt es immer mehrere mögliche AlternaNven bei der Auswahl eines Übergangs. Wenn man den falschen Übergang auswählt, kann es passieren, dass ein eingeschlagener Pfad in die Irre führt (à MehrdeuNgkeit, d.h. Nichtdeterminismus). Der NFA muss raten, welchen Pfad er einschlagen soll. Hat der NFA falsch geraten, würde ein korrekter Eingabestring nicht akzepnert. Man muss dann sehr viele AlternaNven (à Backtracking) ausprobieren, um zu einer Entscheidung zu kommen.

39 DeterminisNsche endliche Automaten 38 o Ein determinisnscher endlicher Automat (DEA oder DFA) ist ein spezieller Fall eines nichtdeterminisnschen endlichen Automaten, für den gilt: Es gibt keinen Zustand mit einem ε-übergang, d.h. keinen Übergang ohne ein Eingabesymbol zu verarbeiten. Für jeden Zustand s und jedes Eingabesymbol a gibt es höchstens eine Kante von s ausgehend, die mit a markiert ist. Die ÜbergangsfunkKon MOVE verbindet die (Zustands, Symbol)- Paare mit einem Zustand. MOVE : (state, symbol) à state bzw. MOVE : S x A à S.

40 DFA - Beispiel 39 Hinweise: Dasselbe Eingabesymbol kann nur einen Übergang eines Zustands markieren. Die Übergänge können nicht mit e markiert sein. DFA, der die Sprache: (a b)*abb erkennt. b b start 0 a b b a a a

41 RA, NFA und DFA 40 o Warum betrachtet man überhaupt die NFA? o Für die (direkte) ImplemenNerung eines Scanners benöngt man einen DFA und den kann man immer angeben. o o Für Erzeugung (Generierung) man eines Scanners benöngt man reguläre Ausdrücke (RA) als Metasprache. Dann kommen folgende Sätze zur Anwendung: 1. Zu jedem regulären Ausdruck r gibt es einen NFA, der die von r beschriebene reguläre Menge akzepnert. 2. Wird eine Sprache von einem NFA akzepnert, so gibt es einen DFA, der L akzepnert.

42 Generierung eines Scanners mit LEX 41 lex.l Lex- Spezifikation Reguläre Ausdrücke für Sprache L Lex lex.yy.c Scanner in C- Code Scanner C-Compiler yyin Quellprogramm in L yylex Scanner Tokenfolge

43 Lex DeklaraNonsdatei - Struktur 42 Deklarationen - in der Wirtssprache (globale Vereinbarungen) - Ersetzungsdeklarationen - Startzustände (Anfangsbedingungen) - Zeichensatzdeklarationen - Festlegungen für Lex-Tabellen %% Tokendefinitionen - Lex-Regeln und Aktionen (in der Wirtssprache) %% Hilfsprozeduren (zusätzlicher Programmcode in der Wirtssprache)

44 Lex - DeklaraNonsteil 43 Deklarationen sind z.b. Konstanten als Tokendarstellungen %{ #define IDENTIFIER 1000 #define REL_OP 1100 #define LT_OP %} und reguläre Definitionen sign [+-] digit [0-9] letter [A-Za-z] globale Deklarationen C-Makroprozessoranweisungen Lex Deklarationen Basiselemente

45 Lex Regeln und AkNonen 44 Paare (Reguläre Ausdrücke; auszuführende Aktion) <= return (LT_OP); {letter} ({letter} {digit})* return (IDENTIFIER); Regel Aktion Die Zeichenfolge (das Lexem), die zu einem erkannten Token gehört, wird von Lex über 2 Variablen zur Verfügung gestellt: char *yytext; // Zeiger auf des erste Zeichen int yyleng; // Länge des Lexems

46 Lex - Regelbearbeitung 45 o Lex versucht mit seinem Regelsystem im (sequennellen) Eingabestrom (Datei yyin) das nächste Lexem zu finden. o Bei einem Regeldurchlauf können auch mehrere oder gar kein Lexem gefunden werden. o Das Ergebnis kann sein: o Die Regel, die das längst mögliche Lexem beschreibt, wird als erste Wahl ermi^elt und der rechte Teil der Regel (AkNonen in C) wird ausgeführt. o Mehrere Regeln können gleich lange Lexeme erkennen. In diesem Fall wird die zuerst platzierte Regel erste Wahl und ausgeführt. o Mit dem nächsten Eingabezeichen kann das Regelsystem kein Lexem erkennen. Der Text wird dann solange zeichenweise in die Standardausgabe (Datei yyout) kopiert, bis das Regelsystem ein neues Lexem findet.

47 Lex - NotaNon der RA 1/4 46 Zeichen vs. Metazeichen Die Zeichen zur Beschreibung der regulären Ausdrücke nennt man Metazeichen bzw. Metasymbole. Metasymbole:. $ ^ [ ] -? * + ( ) / { } < > \ Alle anderen Zeichen stehen für sich selbst. Will man ein Metasymbol als normales Zeichen benutzen à einschließen in

48 Lex - NotaNon der RA 2/4 47 Metasymbol Bedeutung Beispiel [ ] Zeichenklassen [aby&] - Bereich [A-Z] ^ Komplement [^0-9]? optional [-+]? Alternative a bc + ein- oder mehrmals {digit}+ * 0 oder mehrmals {letter}* () normale Klammerung (a bc)*

49 Lex - NotaNon der RA 3/4 48 Metasymbol Bedeutung Beispiel. alle Zeichen außer newline (\n) ^ $ Ausdruck am Zeilenan- ^hallo \t$ fang oder ende / Vorausschau -/{digit}+ { } Kennzeichen eines {digit} regulären Symbols \ Escape-Zeichen... \ Whitespaces müssen in Anführungszeichen gesetzt werden. Konkatenation: Hintereinanderschreiben Es gibt weitere Bedeutungen der Metasymbole!

50 Lex - NotaNon der RA 4/4 49 Metasymbol Bedeutung Beispiel { } Anzahl der Wieder- [A-Z] {3} holungen eines regulären Ausdrucks A {2, 5} <...> Pattern wird nur im Zustand <...> betrachtet. A {1, } A {0, } <<EOF>> erkennt end of file nur in flex

51 Prioritäten der Metasymbole 50 { } Konkatenation * +? Priorität ( ) / \ Die anderen Metasymbole werden nur alleine verwendet.

52 Einige FunkNonen der Lex- Bibliothek 51 yylex(): Aufruf von Lex. input(): Liefert das nächste Zeichen des Eingabestroms. unput(c): yymore(): Schreibt das Zeichen c in den Eingabestrom zurück (d.h. in den sog. Rückstell-Stack) Dieses Zeichen wird beim nächsten Regeldurchlauf oder input()-aufruf zurück geliefert. Funktion verhindert das Löschen der Variablen yytext bei Regelabschluss. Die Zeichenkette, die durch die nächste Regel erkannt wird, wird an das Ende der aktuellen yytext- Zeichenkette angehängt. yyless(anz): Rückstellen von Zeichen des Eingabestroms. Von den erkannten Zeichen sollen nur die Zeichen 1..anz erhalten bleiben, der Rest wird in den Rückstellstack zurück geschoben.

53 Beispiele für Lex- Regeln 52 identifier integer Pascal-Kommentar Whitespace float [A-Za-z][A-Za-z0-9_]* [-+]?[0-9]+ \{[^\}]*\} [ \t\n] [-+]?[0-9]+(\.[0-9]+)? (E[-+]?[0-9]+)?

54 Lex- Beispielprogramm 1/2 53 %{ /* Zählen: Lexeme, Zeichen und Zeilen */ int anz_zeichen = 0, anz_lexeme = 0, anz_zeilen = 0; %} %% [^ \t\n]+ {/* kein Blank, Tab, nl */ ++anz_lexeme; anz_zeichen += yyleng; }. { /* bel. Zeichen außer nl */ ++anz_zeichen; } \n { /* nl */ ++anz_zeichen; ++anz_zeilen;} %%

55 Lex- Beispielprogramm 2/2 54 main () { yylex(); /* Aufruf von Lex */ /* Lex erkennt o. spezifizierte Token bis eof der Eingabe */ printf ( Anz. Zeichen =\t%d\n Anz. Zeilen =\t%d\n Anz. Lexeme =\t%d\n, anz_zeichen, anz_zeilen, anz_lexeme); }

56 55 Lex - Auswertung der Kontextbeziehungen des Eingabestrings Linker Kontext Eingabestring Rechter Kontext Zugriff auf linken Kontext: Merkvariablen auf der Aktionsseite (im C-Code). Anfangsbedingungen (Startzustände- start states) Zugriff auf rechten Kontext: Lookahead-Metasymbol / (in Lex-Regeln) yyless(anz) Funktionsausfruf (Aktionsseite C-Code) REJECT Makroaufruf (Aktionsseite C-Code)

57 Lex REJECT- Mechanismus 56 REJECT Makroaufruf Weist die Regel und die erkannten Inputzeichen zurück. Danach wird die nächste passende Regel gesucht. Gibt es in mehreren Regeln REJECT- Aufrufe, werden diese jeweils zurückgewiesen und die nächsten passenden Regeln der Reihe nach gesucht. Terminierung: entweder eine Regel ohne REJECT- Aufruf oder konsumieren des ersten Zeichens des Inputs per default- Regel.

58 Lex REJECT Beispiel 57 %% [a-z]* { /* Regel 1 */ printf("regel 1 mit %s\n", yytext); REJECT; } [a-z][a-z] { /* Regel 2 */ printf("regel 2 mit %s\n", yytext); REJECT; } [a-z] { /* Regel 3 */ printf("regel 3 mit %s\n", yytext); REJECT; } %%

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

Grundlagen der Informatik II. Teil I: Formale Modelle der Informatik

Grundlagen der Informatik II. Teil I: Formale Modelle der Informatik Grundlagen der Informatik II Teil I: Formale Modelle der Informatik 1 Einführung GdInfoII 1-2 Ziele/Fragestellungen der Theoretischen Informatik 1. Einführung abstrakter Modelle für informationsverarbeitende

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

7. Formale Sprachen und Grammatiken

7. Formale Sprachen und Grammatiken 7. Formale Sprachen und Grammatiken Computer verwenden zur Verarbeitung von Daten und Informationen künstliche, formale Sprachen (Maschinenspr., Assemblerspachen, Programmierspr., Datenbankspr., Wissensrepräsentationsspr.,...)

Mehr

Vorlesung Theoretische Informatik

Vorlesung Theoretische Informatik Vorlesung Theoretische Informatik Automaten und Formale Sprachen Hochschule Reutlingen Fakultät für Informatik Masterstudiengang Wirtschaftsinformatik überarbeitet von F. Laux (Stand: 09.06.2010) Sommersemester

Mehr

4 Lexikalische Analyse und Parsing

4 Lexikalische Analyse und Parsing 4 Lexikalische Analyse und Parsing Lexikalische Analyse und Parsing sind die wichtigsten Bereiche des Compilerbaus. Prinzipien und Techniken des Compilerbaus beschränken sich nicht auf die Erstellung von

Mehr

4. Die lexikalische Analyse

4. Die lexikalische Analyse zerlegt Folge von Zeichen in Eingabedatei in Folge von Symbolen (Token) Scanner-Sieber-Modul Token: Typ und Inhalt übliche Token-Typen: reservierte Wörter (if, while, for, ) Bezeichner (x, dauer, name,..)

Mehr

Formale Sprachen und Grammatiken

Formale Sprachen und Grammatiken Formale Sprachen und Grammatiken Jede Sprache besitzt die Aspekte Semantik (Bedeutung) und Syntax (formaler Aufbau). Die zulässige und korrekte Form der Wörter und Sätze einer Sprache wird durch die Syntax

Mehr

Formale Sprachen, reguläre und kontextfreie Grammatiken

Formale Sprachen, reguläre und kontextfreie Grammatiken Formale Sprachen, reguläre und kontextfreie Grammatiken Alphabet A: endliche Menge von Zeichen Wort über A: endliche Folge von Zeichen aus A A : volle Sprache über A: Menge der A-Worte formale Sprache

Mehr

Programmiersprachen und Übersetzer

Programmiersprachen und Übersetzer Programmiersprachen und Übersetzer Sommersemester 2010 19. April 2010 Theoretische Grundlagen Problem Wie kann man eine unendliche Menge von (syntaktisch) korrekten Programmen definieren? Lösung Wie auch

Mehr

Objektorientierte Programmierung. Kapitel 3: Syntaxdiagramme und Grammatikregeln

Objektorientierte Programmierung. Kapitel 3: Syntaxdiagramme und Grammatikregeln Stefan Brass: OOP (Java), 3. Syntaxdiagramme und Grammatikregeln 1/32 Objektorientierte Programmierung Kapitel 3: Syntaxdiagramme und Grammatikregeln Stefan Brass Martin-Luther-Universität Halle-Wittenberg

Mehr

ARBEITSBLATT ZU FORMALEN SPRACHEN

ARBEITSBLATT ZU FORMALEN SPRACHEN ARBEITSBLATT ZU FORMALEN SPRACHEN Aufgabe 1: Gegeben ist die folgende Formale Sprache L(G) mit G = (T, N, P, S). Die Produktionen lauten ZUWEISUNG ::= name zuweisungsoperator AUSDRUCK semikolon AUSDRUCK

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

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

Einführung in die Informatik Grammars & Parsers

Einführung in die Informatik Grammars & Parsers Einführung in die Informatik Grammars & Parsers Grammatiken, Parsen von Texten Wolfram Burgard Cyrill Stachniss 12.1 Einleitung Wir haben in den vorangehenden Kapiteln meistens vollständige Java- Programme

Mehr

Sprachen sind durch folgenden Aufbau gekennzeichnet:

Sprachen sind durch folgenden Aufbau gekennzeichnet: BNF UND SYNTAXDIAGRAMME 1. Allgemeines 1.1 Aufbau von Sprachen BNF und Syntaxdiagramme werden verwendet, um die Syntax einer Sprache darzustellen und graphisch zu veranschaulichen. Mit ihnen können entweder

Mehr

Sprachen/Grammatiken eine Wiederholung

Sprachen/Grammatiken eine Wiederholung Sprachen/Grammatiken eine Wiederholung Was sind reguläre Sprachen? Eigenschaften regulärer Sprachen Sprachen Begriffe Symbol: unzerlegbare Grundzeichen Alphabet: endliche Menge von Symbolen Zeichenreihe:

Mehr

Anwenundg regulärer Sprachen und endlicher Automaten

Anwenundg regulärer Sprachen und endlicher Automaten Proseminar Theoretische Informatik Dozent: Prof. Helmut Alt Anwenundg regulärer Sprachen und endlicher Automaten Madlen Thaleiser 30. Oktober 2012 Reguläre Sprachen Regulärer Ausdruck definiert über einem

Mehr

1 Syntax von Programmiersprachen

1 Syntax von Programmiersprachen 1 Syntax von Programmiersprachen Syntax ( Lehre vom Satzbau ): formale Beschreibung des Aufbaus der Worte und Sätze, die zu einer Sprache gehören; im Falle einer Programmier-Sprache Festlegung, wie Programme

Mehr

Theorie der Informatik

Theorie der Informatik Theorie der Informatik 6. Formale Sprachen und Grammatiken Malte Helmert Gabriele Röger Universität Basel 17. März 2014 Einführung Beispiel: Aussagenlogische Formeln Aus dem Logikteil: Definition (Syntax

Mehr

Syntax von Programmiersprachen

Syntax von Programmiersprachen "Grammatik, die sogar Könige zu kontrollieren weiß... aus Molière, Les Femmes Savantes (1672), 2. Akt Syntax von Programmiersprachen Prof. Dr. Christian Böhm in Zusammenarbeit mit Gefei Zhang WS 07/08

Mehr

Inhalte der Vorlesung. 4. Der Scanner-Generator lex. 4. Der Scanner-Generator lex. 4.1 lex: Grundlagen

Inhalte der Vorlesung. 4. Der Scanner-Generator lex. 4. Der Scanner-Generator lex. 4.1 lex: Grundlagen Inhalte der Vorlesung 4. Der Scanner-Generator lex 1.Einführung 2.Lexikalische Analyse 3.Der Textstrom-Editor sed 4.Der Scanner-Generator lex (2 Termine) 5.Syntaxanalyse und der Parser-Generator yacc (3

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

Informatik I WS 07/08 Tutorium 24

Informatik I WS 07/08 Tutorium 24 Info I Tutorium 24 Informatik I WS 07/08 Tutorium 24 20.12.07 Bastian Molkenthin E-Mail: infotut@sunshine2k.de Web: http://infotut.sunshine2k.de Rückblick Semi-Thue-Systeme Ein Semi-Thue-System besteht

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

Grammatiken. Einführung

Grammatiken. Einführung Einführung Beispiel: Die arithmetischen Ausdrücke über der Variablen a und den Operationen + und können wie folgt definiert werden: a, a + a und a a sind arithmetische Ausdrücke Wenn A und B arithmetische

Mehr

9 Compilerbau-Werkzeuge

9 Compilerbau-Werkzeuge 9.1 Überblick In der Praxis des Compilerbaus werden heute vielfach Werkzeuge eingesetzt, die Routineaufgaben erleichtern sollen. In erster Linie ist dabei an die Punkte Generierung eines Scanners Generierung

Mehr

Theoretische Informatik I

Theoretische Informatik I Theoretische Informatik I Einheit 2.4 Grammatiken 1. Arbeitsweise 2. Klassifizierung 3. Beziehung zu Automaten Beschreibungsformen für Sprachen Mathematische Mengennotation Prädikate beschreiben Eigenschaften

Mehr

Motivation. Formale Grundlagen der Informatik 1 Kapitel 5 Kontextfreie Sprachen. Informales Beispiel. Informales Beispiel.

Motivation. Formale Grundlagen der Informatik 1 Kapitel 5 Kontextfreie Sprachen. Informales Beispiel. Informales Beispiel. Kontextfreie Kontextfreie Motivation Formale rundlagen der Informatik 1 Kapitel 5 Kontextfreie Sprachen Bisher hatten wir Automaten, die Wörter akzeptieren Frank Heitmann heitmann@informatik.uni-hamburg.de

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

Prof. Dr. Wolfgang Schramm. Vorname:... Matrikel-Nr.:... Unterschrift:...

Prof. Dr. Wolfgang Schramm. Vorname:... Matrikel-Nr.:... Unterschrift:... Compilerbau Prof. Dr. Wolfgang Schramm Sommersemester 2006 Name:... Vorname:... Matrikel-Nr.:... Unterschrift:... Hinweise: 1.) Schreiben Sie Ihren Namen und Ihre Matrikelnummer zu Beginn auf das Deckblatt

Mehr

Reguläre Sprachen und endliche Automaten

Reguläre Sprachen und endliche Automaten Reguläre Sprachen und endliche Automaten 1 Motivation: Syntaxüberprüfung Definition: Fließkommazahlen in Java A floating-point literal has the following parts: a whole-number part, a decimal point (represented

Mehr

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny Grundlagen der Informatik Prof. Dr. Stefan Enderle NTA Isny 1. Automaten und Sprachen 1.1 Endlicher Automat Einen endlichen Automaten stellen wir uns als Black Box vor, die sich aufgrund einer Folge von

Mehr

Definition 4 (Operationen auf Sprachen) Beispiel 5. Seien A, B Σ zwei (formale) Sprachen. Konkatenation: AB = {uv ; u A, v B} A + = n 1 An

Definition 4 (Operationen auf Sprachen) Beispiel 5. Seien A, B Σ zwei (formale) Sprachen. Konkatenation: AB = {uv ; u A, v B} A + = n 1 An Definition 4 (Operationen auf Sprachen) Seien A, B Σ zwei (formale) Sprachen. Konkatenation: AB = {uv ; u A, v B} A 0 = {ɛ}, A n+1 = AA n A = n 0 An A + = n 1 An Beispiel 5 {ab, b}{a, bb} = {aba, abbb,

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

Lex und Yacc Lt. Worf, scannen Sie das Schiff! 300dpi, Sir?

Lex und Yacc Lt. Worf, scannen Sie das Schiff! 300dpi, Sir? Lex und Yacc Lt. Worf, scannen Sie das Schiff! 300dpi, Sir? Hagen Paul Pfeifer hagen@jauu.net 29. April 2004 Lex und Yacc Überblick Einführung Lex und Yacc 1 Überblick Einführung Beispiele Lex und Yacc

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

syntax.tex Eine Übersicht

syntax.tex Eine Übersicht syntax.tex Eine Übersicht Bernd Worsch 7. Juli 1997 Inhaltsverzeichnis 1 Einleitung 1 2 Bevor es funktioniert... 1 3 Grundelemente von syntax.tex 1 4 Strukturelemente von syntax.tex 3 5 Setzen von Syntaxdiagrammen

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

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

2.11 Kontextfreie Grammatiken und Parsebäume

2.11 Kontextfreie Grammatiken und Parsebäume 2.11 Kontextfreie Grammatiken und Parsebäume Beispiel: Beispiel (Teil 3): Beweis für L(G) L: Alle Strings aus L der Länge 0 und 2 sind auch in L(G). Als Induktionsannahme gehen wir davon aus, dass alle

Mehr

Java für Anfänger Teil 2: Java-Syntax. Programmierkurs Manfred Jackel

Java für Anfänger Teil 2: Java-Syntax. Programmierkurs Manfred Jackel Java für Anfänger Teil 2: Java-Syntax Programmierkurs 11.-15.10.2010 Manfred Jackel 1 Syntax für die Sprache Java public class Welcome { } Schlüsselworte Reservierte Worte Keywords Wortsymbol Syntax: griech.

Mehr

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden.

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden. Grundwissen Informatik Objekt Attribut Methoden Als Objekte bezeichnet man alle Gegenstände, Dinge, Lebewesen, Begriffe oder Strukturen unserer Welt ( Autos, Räume, Bakterien, Lehrer, Schüler, Kunden,

Mehr

Einführung in den Compilerbau

Einführung in den Compilerbau Einführung in den Compilerbau Lexikalische Analyse I Dr. Armin Wolf 2. Vorlesung SoSe 2010, Universität Potsdam 1 Organisatorisches Schriftliche Prüfung (Klausur) wie wäre es mit Mo. 26. Juli 2010? - Andere

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

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

Grundbegriffe der Informatik

Grundbegriffe der Informatik Grundbegriffe der Informatik Tutorium 27 29..24 FAKULTÄT FÜR INFORMATIK KIT Universität des Landes Baden-Württemberg und nationales Forschungszentrum in der Helmholtz-Gemeinschaft www.kit.edu Definition

Mehr

9 Theoretische Informatik und Compilerbau

9 Theoretische Informatik und Compilerbau 9 Theoretische Informatik und Compilerbau Theoretische Informatik und Mathematik schaffen die Basis für viele der technischen Entwicklungen, die wir in diesem Buch besprechen. Die boolesche Algebra (S.

Mehr

lex - Eine Einführung

lex - Eine Einführung lex - Eine Einführung Axel Kohnert 9th May 2005 Abstract lex ist ein Unixprogramm, welches die Erstellung eines C-programms für die lexikalische Analyse unterstützt. Dazu kann man Aktionen definieren,

Mehr

Thomas Behr. 17. November 2011

Thomas Behr. 17. November 2011 in in Fakultät für Mathematik und Informatik Datenbanksysteme für neue Anwendungen FernUniversität in Hagen 17. November 2011 c 2011 FernUniversität in Hagen Outline in 1 2 3 4 5 6 - Was ist das? in über

Mehr

Grundbegriffe der Informatik

Grundbegriffe der Informatik Grundbegriffe der Informatik Einheit 15: Reguläre Ausdrücke und rechtslineare Grammatiken Thomas Worsch Universität Karlsruhe, Fakultät für Informatik Wintersemester 2008/2009 1/25 Was kann man mit endlichen

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

Sprachbeschreibung und Erweiterung

Sprachbeschreibung und Erweiterung Sprachbeschreibung und Erweiterung Worte, Sprachen, reguläre Ausdrücke, Automaten, BNF, Grammatik, Syntax- Diagramme, Spracherweiterungen do, for, break, switch Formale Beschreibung von Programmiersprachen

Mehr

FORMALE SYSTEME. 3. Vorlesung: Endliche Automaten. TU Dresden, 17. Oktober Markus Krötzsch

FORMALE SYSTEME. 3. Vorlesung: Endliche Automaten. TU Dresden, 17. Oktober Markus Krötzsch FORMALE SYSTEME 3. Vorlesung: Endliche Automaten Markus Krötzsch TU Dresden, 17. Oktober 2016 Rückblick Markus Krötzsch, 17. Oktober 2016 Formale Systeme Folie 2 von 31 Wiederholung Mit Grammatiken können

Mehr

Mathematische Grundlagen der Informatik 2

Mathematische Grundlagen der Informatik 2 Zusammenfassung Math2I Mathematische Grundlagen der Informatik 2 Emanuel Duss emanuel.duss@gmail.com 12. April 2013 1 Zusammenfassung Math2I Mathematische Grundlagen der Informatik 2 Dieses Dokument basiert

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

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

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

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

Formale Sprachen. Inhaltsverzeichnis. M. Jakob. 10. Dezember Allgemeine Einführung. Aufbau formaler Sprachen

Formale Sprachen. Inhaltsverzeichnis. M. Jakob. 10. Dezember Allgemeine Einführung. Aufbau formaler Sprachen M. Jakob Gymnasium Pegnitz 10. Dezember 2014 Inhaltsverzeichnis Allgemeine Einführung Aufbau formaler Sprachen Notationsformen formaler Sprachen Backus-Naur-Formen Erkennen formaler Sprachen Implementierung

Mehr

Kapitel 4: Syntaxdiagramme und Grammatikregeln

Kapitel 4: Syntaxdiagramme und Grammatikregeln 4. Syntaxdiagramme und Grammatikregeln 4-1 Objektorientierte Programmierung (Winter 2006/2007) Kapitel 4: Syntaxdiagramme und Grammatikregeln Syntaxdiagramme Grammatikregeln (kontextfrei) Beispiele: Lexikalische

Mehr

Programmieren I. Formale Sprachen. www.kit.edu. Institut für Angewandte Informatik

Programmieren I. Formale Sprachen. www.kit.edu. Institut für Angewandte Informatik Programmieren I Formale Sprachen KIT Universität des Landes Baden-Württemberg und nationales Großforschungszentrum in der Helmholtz-Gemeinschaft www.kit.edu Formale Sprachen: Allgemeines Sprachen werden

Mehr

Deklarationen in C. Prof. Dr. Margarita Esponda

Deklarationen in C. Prof. Dr. Margarita Esponda Deklarationen in C 1 Deklarationen Deklarationen spielen eine zentrale Rolle in der C-Programmiersprache. Deklarationen Variablen Funktionen Die Deklarationen von Variablen und Funktionen haben viele Gemeinsamkeiten.

Mehr

WS06/07 Referentin: Katharina Blinova. Formale Sprachen. Hauptseminar Intelligente Systeme Dozent: Prof. Dr. J. Rolshoven

WS06/07 Referentin: Katharina Blinova. Formale Sprachen. Hauptseminar Intelligente Systeme Dozent: Prof. Dr. J. Rolshoven WS06/07 Referentin: Katharina Blinova Formale Sprachen Hauptseminar Intelligente Systeme Dozent: Prof. Dr. J. Rolshoven 1. Allgemeines 2. Formale Sprachen 3. Formale Grammatiken 4. Chomsky-Hierarchie 5.

Mehr

Theoretische Informatik. Reguläre Sprachen und Automaten

Theoretische Informatik. Reguläre Sprachen und Automaten Theoretische Informatik Reguläre Sprachen und Automaten Reguläre Sprachen Reguläre Ausdrücke und Sprachen Gleichungen Syntaxdiagramme Erweiterungen Anwendungen Reguläre Ausdrücke über Σ Syntax: Konstante

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

Einführung in die C-Programmierung

Einführung in die C-Programmierung Einführung in die C-Programmierung Warum C? Sehr stark verbreitet (Praxisnähe) Höhere Programmiersprache Objektorientierte Erweiterung: C++ Aber auch hardwarenahe Programmierung möglich (z.b. Mikrokontroller).

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

Satz (Abschluß unter der Stern-Operation)

Satz (Abschluß unter der Stern-Operation) Satz (Abschluß unter der Stern-Operation) Wenn L eine reguläre Sprache ist, dann ist auch L regulär. Beweis: Es gibt einen NFA M = (Z, Σ, S, δ, S, E) mit L(M) = L. Wir bauen aus diesem NFA nun wie folgt

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

Compiler, Übersetzer. Allgemeine Erklärung / Definition

Compiler, Übersetzer. Allgemeine Erklärung / Definition Compiler, Übersetzer Allgemeine Erklärung / Definition Ein Übersetzer ist ein Programm, das ein S 1 -Wort den Quelltext in ein S 2 -Wort umwandelt den Zieltext wobei die Semantik erhalten bleibt. Frage:

Mehr

Einführung in die Programmierung für NF. Rückgabewerte, EBNF, Fallunterscheidung, Schleifen

Einführung in die Programmierung für NF. Rückgabewerte, EBNF, Fallunterscheidung, Schleifen Einführung in die Programmierung für NF Rückgabewerte, EBNF, Fallunterscheidung, Schleifen FUNKTIONEN UND PROZEDUREN 3 Rückgabewerte, EBNF, Fallunterscheidung, Schleifen 2 Funk@on und Prozedur Methoden

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

3 Syntax von Programmiersprachen

3 Syntax von Programmiersprachen 3 Syntax von Programmiersprachen Syntax ( Lehre vom Satzbau ) formale Beschreibung des Aufbaus der Worte und Sätze, die zu einer Sprache gehören; im Falle einer Programmiersprache Festlegung, wie Programme

Mehr

Formale Methoden 1. Gerhard Jäger 9. Januar Uni Bielefeld, WS 2007/2008 1/23

Formale Methoden 1. Gerhard Jäger 9. Januar Uni Bielefeld, WS 2007/2008 1/23 1/23 Formale Methoden 1 Gerhard Jäger Gerhard.Jaeger@uni-bielefeld.de Uni Bielefeld, WS 2007/2008 9. Januar 2008 2/23 Automaten (informell) gedachte Maschine/abstraktes Modell einer Maschine verhält sich

Mehr

Grundlagen Theoretischer Informatik I SoSe 2011 in Trier. Henning Fernau Universität Trier fernau@uni-trier.de

Grundlagen Theoretischer Informatik I SoSe 2011 in Trier. Henning Fernau Universität Trier fernau@uni-trier.de Grundlagen Theoretischer Informatik I SoSe 2011 in Trier Henning Fernau Universität Trier fernau@uni-trier.de 1 Grundlagen Theoretischer Informatik I Gesamtübersicht Organisatorisches; Einführung Logik

Mehr

Formale Sprachen. Anwendungen formaler Sprachen Adressen, Kaffeeautomaten, Programmiersprachen. Rudolf Freund, Marian Kogler

Formale Sprachen. Anwendungen formaler Sprachen Adressen, Kaffeeautomaten, Programmiersprachen. Rudolf Freund, Marian Kogler Formale Sprachen Anwendungen formaler Sprachen Adressen, Kaffeeautomaten, Programmiersprachen Rudolf Freund, Marian Kogler (http://xkcd.com/208) Gültige Adressen: Favoritenstraße 9, 1040 Wien Reumannplatz

Mehr

Java für Anfänger Teil 2: Java-Syntax. Programmierkurs Manfred Jackel

Java für Anfänger Teil 2: Java-Syntax. Programmierkurs Manfred Jackel Java für Anfänger Teil 2: Java-Syntax Programmierkurs 06.-10.10.2008 Manfred Jackel 1 Syntax für die Sprache Java public class Welcome { } Schlüsselworte Reservierte Worte Keywords Wortsymbol Syntax: griech.

Mehr

Brainfuck. 1 Brainfuck. 1.1 Brainfuck Geschichte und Umfeld. 1.2 Esoterische Programmiersprachen

Brainfuck. 1 Brainfuck. 1.1 Brainfuck Geschichte und Umfeld. 1.2 Esoterische Programmiersprachen Brainfuck 1 Brainfuck 1.1 Brainfuck Geschichte und Umfeld Brainfuck ist eine sogenannte esoterische Programmiersprache. Sie wurde 1993 vom Schweizer Urban Müller entworfen mit dem Ziel, eine Sprache mit

Mehr

Deterministische endliche Automaten - Wiederholung

Deterministische endliche Automaten - Wiederholung Deterministische endliche Automaten - Wiederholung Die folgende Klasse Zahl stellt einen endlichen Automaten dar. Ermittle die Größen des Automaten und zeichne den Zustandsgraphen. Gib Zeichenfolgen an,

Mehr

Einführung in die Programmiertechnik

Einführung in die Programmiertechnik Einführung in die Programmiertechnik Formale Beschreibung von Programmiersprachen Lexikalische Regeln Definition von Wörtern (Lexem, Token) Gruppierung von Zeichen Lexikalische Kategorien: Klassen ähnlicher

Mehr

Einführung in die Programmiertechnik

Einführung in die Programmiertechnik Einführung in die Programmiertechnik Formale Beschreibung von Programmiersprachen Lexikalische Regeln Definition von Wörtern (Lexem, Token) Gruppierung von Zeichen Lexikalische Kategorien: Klassen ähnlicher

Mehr

DSLs mit Xtext entwerfen. 17.08.2012, A. Arnold

DSLs mit Xtext entwerfen. 17.08.2012, A. Arnold DSLs mit Xtext entwerfen 17.08.2012, A. Arnold Copyright 2012 anderscore GmbH Inhalt 1. Was sind DSLs? 2. Xtext Konzepte 3. Einführung ins Sprachdesign 4. Hands On! 3 4 8 20 2 Was sind DSLs? Domain Specific

Mehr

7. Syntax: Grammatiken, EBNF

7. Syntax: Grammatiken, EBNF 7. Syntax: Grammatiken, EBNF Teil 1 Sehr schönes Beispiel für Notwendigkeit der Theoretischen Informatik für Belange der Praktischen Informatik Vertiefung in: Einführung in die Theoretische Informatik

Mehr

(Prüfungs-)Aufgaben zu formale Sprachen

(Prüfungs-)Aufgaben zu formale Sprachen (Prüfungs-)Aufgaben zu formale Sprachen (siehe auch bei den Aufgaben zu endlichen Automaten) 1) Eine Grammatik G sei gegeben durch: N = {S, A}, T = {a, b, c, d}, P = { (S, Sa), (S, ba), (A, ba), (A, c),

Mehr

Funktionale Programmierung mit Haskell

Funktionale Programmierung mit Haskell Funktionale Programmierung mit Haskell Prof. Dr. Hans J. Schneider Lehrstuhl für Programmiersprachen und Programmiermethodik Friedrich-Alexander-Universität Erlangen-Nürnberg Sommersemester 2011 I. Die

Mehr

7 Endliche Automaten. 7.1 Deterministische endliche Automaten

7 Endliche Automaten. 7.1 Deterministische endliche Automaten 7 Endliche Automaten 7.1 Deterministische endliche Automaten 7.2 Nichtdeterministische endliche Automaten 7.3 Endliche Automaten mit g-übergängen Endliche Automaten 1 7.1 Deterministische endliche Automaten

Mehr

Grammatiken. Eine Grammatik G mit Alphabet Σ besteht aus: Variablen V. Startsymbol S V. Kurzschreibweise G = (V, Σ, P, S)

Grammatiken. Eine Grammatik G mit Alphabet Σ besteht aus: Variablen V. Startsymbol S V. Kurzschreibweise G = (V, Σ, P, S) Grammatiken Eine Grammatik G mit Alphabet Σ besteht aus: Variablen V Startsymbol S V Produktionen P ( (V Σ) \ Σ ) (V Σ) Kurzschreibweise G = (V, Σ, P, S) Schreibweise für Produktion (α, β) P: α β 67 /

Mehr

Grundbegriffe der Informatik

Grundbegriffe der Informatik Grundbegriffe der Informatik Tutorium 4 26..25 INSTITUT FÜR THEORETISCHE INFORMATIK KIT Universität des Landes Baden-Württemberg und nationales Forschungszentrum in der Helmholtz-Gemeinschaft www.kit.edu

Mehr

Theorie der Informatik. Theorie der Informatik. 6.1 Einführung. 6.2 Alphabete und formale Sprachen. 6.3 Grammatiken. 6.4 Chomsky-Hierarchie

Theorie der Informatik. Theorie der Informatik. 6.1 Einführung. 6.2 Alphabete und formale Sprachen. 6.3 Grammatiken. 6.4 Chomsky-Hierarchie Theorie der Informatik 17. März 2014 6. Formale Sprachen und Grammatiken Theorie der Informatik 6. Formale Sprachen und Grammatiken Malte Helmert Gabriele Röger Universität Basel 17. März 2014 6.1 Einführung

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

Grundlagen und Basisalgorithmus

Grundlagen und Basisalgorithmus Grundlagen und Basisalgorithmus Proseminar -Genetische Programmierung- Dezember 2001 David König Quelle: Kinnebrock W.: Optimierung mit genetischen und selektiven Algorithmen. München, Wien: Oldenbourg

Mehr

Grammatiken in Prolog

Grammatiken in Prolog 12. Grammatiken in Prolog 12-1 Grammatiken in Prolog Allgemeines: Gedacht zur Verarbeitung natürlicher Sprache. Dort braucht man kompliziertere Grammatiken als etwa im Compilerbau, andererseits sind die

Mehr

Definition von domänenspezifischen Sprachen mit Xtext: Einführung. 19. November 2014

Definition von domänenspezifischen Sprachen mit Xtext: Einführung. 19. November 2014 Definition von domänenspezifischen Sprachen mit Xtext: Einführung 19. November 2014 Überblick Was ist zu tun, wenn wir selbst einen Ansatz für modellgetriebenen Entwicklung definieren wollen? Anforderungserfassung

Mehr

Programmiersprachen Einführung in C. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm

Programmiersprachen Einführung in C. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm Programmiersprachen Einführung in C Teil 2: Prof. Dr. int main (int argc, char *argv[]) int sum = 0; for (i = 0; i

Mehr

Kapitel IV Formale Sprachen und Grammatiken

Kapitel IV Formale Sprachen und Grammatiken Kapitel IV Formale Sprachen und Grammatiken 1. Begriffe und Notationen Sei Σ ein (endliches) Alphabet. Dann Definition 42 1 ist Σ das Monoid über Σ, d.h. die Menge aller endlichen Wörter über Σ; 2 ist

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

M. Graefenhan 2000-12-07. Übungen zu C. Blatt 3. Musterlösung

M. Graefenhan 2000-12-07. Übungen zu C. Blatt 3. Musterlösung M. Graefenhan 2000-12-07 Aufgabe Lösungsweg Übungen zu C Blatt 3 Musterlösung Schreiben Sie ein Programm, das die Häufigkeit von Zeichen in einem eingelesenen String feststellt. Benutzen Sie dazu ein zweidimensionales

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