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, Namen, Schlüsselworte, Strings d.h. reguläre Ausdrücke Aufbau der Symboltabelle Zeichenstrom Tokenstrom und Weitergabe an den Parser Es gibt Scanner-Generatoren (Z.B. lex). Allerdings ist es oft einfacher, einen Scanner selbst zu schreiben. Z.B. unter Benutzung endlicher Automaten. P raktische Informatik 2, SS 2005, F olien Kap.4, 3, (29. Juni2005) Seite 1
Scanner: Etwas genauer Einlesen des Programmtexts als lineare Zeichenkette Beseitigung von Kommentaren, Leer- und Tabulatorzeichen. Zusammenfassen von Teilstrings (Schlüsselworte, Bezeichner, Zahlenwerte, u ä) Ergebnis: Strom von Token Ein Token kann bestehen aus: Markierung: Attribute: Art des Tokens wie String, Zahlwert, Position im Eingabefile. Üblich: Eigenes Endezeichen (statt System-EOF) für Eingabestrom; Tokenstrom, Stack P raktische Informatik 2, SS 2005, F olien Kap.4, 3, (29. Juni2005) Seite 2
Beispiel für Tokens Eingabe Tokenmarkierung Attribut Position in der Eingabe if Keyword if 113 123 Num 123 500 x1 Id x1 1001 Mult Code( ) 2000 <= Relop Code(<=) 5000 P raktische Informatik 2, SS 2005, F olien Kap.4, 3, (29. Juni2005) Seite 3
Grammatik-Zerlegung: Parser Tokenizer E ::= E + T T T ::= T F F F ::= (E) Zahl Bezeichner Zahl ::= Ziffer ZifferZahl Ziffer ::= 0 1 2 3 4 5 6 7 8 9 Bezeichner ::= Char Char Alphanum Alphanum ::= Ziffer Char Parseralphabet = {Tokenmarkierungen} Parser behandelt alle Bezeichner als ein Terminal Z.B. tatsächliches Parseralphabet im Beispiel: {+,*,Z, B,),( } P raktische Informatik 2, SS 2005, F olien Kap.4, 3, (29. Juni2005) Seite 4
Phasen: Struktur und Typen Typen, in Haskell-Notation: Scanner: det. Teil-Parser: Teil-Parser mit Backtracking Gesamt-Parser: String -> [Token] [Token] -> ([Token], Syntaxbaum) [Token] -> [([Token], Syntaxbaum)] [Token] -> Syntaxbaum P raktische Informatik 2, SS 2005, F olien Kap.4, 3, (29. Juni2005) Seite 5
Fehlererkennung des Scanners falsche Zahlen Z.B. 123.a falsche Escape-Folgen in Strings ein fehlendes Stringendezeichen, oder evtl. Längenüberschreitungen. Bezeichner, die nicht der Konvention entsprechen Ungültige Symbole in bestimmten Kontexten Nicht erkennbar für den Scanner: Klammerfehler, Klammerfehler bzgl. (tief) geschachtelter Kommentare falsche Schlüsselworte. P raktische Informatik 2, SS 2005, F olien Kap.4, 3, (29. Juni2005) Seite 6
Scannen von Kommentaren und Strings String im Eingabestrom: = Unterstring mit linkem und rechtem Begrenzungssymbol. Bekannte Problematik: String im String? Beachte: trennt, erzeugt aber keine Klammerstruktur sinnvolle Lösungsalternativen: Escape-symbol \ als Kommando: \ im String \\ im String \ Verdopplung: im String Nachteil: Exponentiell große Strings könnten in der Eingabe erforderlich sein abhängig von der Tiefe bzw. der Anzahl Scanner-Durchgänge. Scanner darf keine Leerzeichen in Strings entfernen P raktische Informatik 2, SS 2005, F olien Kap.4, 3, (29. Juni2005) Seite 7
Scannen von Kommentaren: Zeilenkommentare geklammerte Kommentare Anfangssymbol z.b. * oder ; oder % oder oder //. Kommentar-Begrenzer: Z.B. Anfang: /, Ende: /. Aktuelle Programmiersprachen: nur eine Klammerebene; Schachtelung wird vom Editor per Zeilenkommentar unterstützt; Echte Kommentar-Schachtelung muss vom Parser erkannt werden. Beachte Zeilenkommentar im String sind Stringzeichen. P raktische Informatik 2, SS 2005, F olien Kap.4, 3, (29. Juni2005) Seite 8
Reguläre formale Sprachen: Formalismen Äquivalente Beschreibungsmöglichkeiten für reguläre formale Sprachen: reguläre Ausdrücke (rechts- bzw. links-)reguläre Grammatik DEA (deterministischer endlicher Automat): akzeptierte Sprache NEA (nicht-deterministischer endlicher Automat): akzeptierte Sprache P raktische Informatik 2, SS 2005, F olien Kap.4, 3, (29. Juni2005) Seite 9
Reguläre Ausdrücke Σ sei das Alphabet. R ::= a für a Σ (R) ε Leeres Wort RR Konkatinierte Ausdrücke R + R Auswahl bzw. Vereinigung R beliebige Anzahl Konkatinierungen P raktische Informatik 2, SS 2005, F olien Kap.4, 3, (29. Juni2005) Seite 10
Reguläre Ausdrücke: Semantik Die Semantik ψ ergibt Mengen von Worten ψ(ε) := {ε}. Hier ist rechts der leere String gemeint. ψ(a) := {a} für a Σ ψ(rs) := ψ(r)ψ(s). D.h. = {xy x ψ(r), y ψ(s)}. ψ(r + s) := ψ(r) ψ(s). ψ((r)) := ψ(r) ψ(r ) := ψ(r). P raktische Informatik 2, SS 2005, F olien Kap.4, 3, (29. Juni2005) Seite 11
Reguläre formale Sprachen: Beispiele Bezeichner Zahlenkonstanten A (A + Z) Z.B. initalerwert10, x 0 PZ Z.B. 0, 2005, Strings ((A+Z+( )) + ) Z.B Abc1 2 3 45 (ohne äußere ) Binärzahlen mit gerader Parität: 0 (0 10 10 ). Strings, max. Länge 128 ((A+Z+( )) n ) n 128? P raktische Informatik 2, SS 2005, F olien Kap.4, 3, (29. Juni2005) Seite 12
Reguläre Grammatik Definition Eine (rechts-)reguläre Grammatik ist eine CFG mit Produktionen von der Form A ::= wb A ::= w A ::= B Hierbei sind A, B Nichtterminale, w T. P raktische Informatik 2, SS 2005, F olien Kap.4, 3, (29. Juni2005) Seite 13
Reguläre Grammatik, Beispiel Bezeichner, die mit einem Buchstaben beginnen, gefolgt von Buchstaben und Ziffern. I ::= ar... zr a... z R ::= ar... zr 0R... 9R a... z 0... 9 P raktische Informatik 2, SS 2005, F olien Kap.4, 3, (29. Juni2005) Seite 14
Endliche Automaten deterministische endlichen Automaten (DEA) sind ein abstraktes Maschinenmodell zur Erkennung regulärer formaler Sprachen. Ein DEA A ist ein 5-Tupel (Q, Σ, δ, q 0, F ), wobei Q Σ δ q 0 F Menge der Zustände Eingabealphabet (partielle) Übergangsfunktion: δ : Q Σ Q Startzustand akzeptierende Zustände F Q δ ist Erweiterung von δ auf Strings: δ (q, a) := δ(q, a) δ (q, aw) := δ (δ(q, a), w) Ein Wort w wird akzeptiert, wenn δ (q 0, w) F. P raktische Informatik 2, SS 2005, F olien Kap.4, 3, (29. Juni2005) Seite 15
DEA: Arbeitsweise Analog zu einer Turingmaschine: 1 4 6 A C endliche Kontrolle Zustand Leserichtung Der Unterschied zur Turingmaschine ist: Schreiben auf das Band ist nicht zulässig Das Band wird von links nach rechts gelesen P raktische Informatik 2, SS 2005, F olien Kap.4, 3, (29. Juni2005) Seite 16
DEA: Arbeitsweise Einziger Speicher des DEA sind die inneren Zustände Beim Lesen eines Zeichens: wechselt der innere Zustand abh. vom vorhergehenden Zustand und vom gelesenen Zeichen. der Lesekopf rückt um 1 nach rechts P raktische Informatik 2, SS 2005, F olien Kap.4, 3, (29. Juni2005) Seite 17
DEA: Darstellung und Implementierung Erkennung von Bezeichnern über dem Alphabet {a, b, 0, 1}: q0 a,b 0,1 q2 q1 a,b,0,1 a,b,0,1 a10ab wird akzeptiert, 1ab01 wird nicht akzeptiert. P raktische Informatik 2, SS 2005, F olien Kap.4, 3, (29. Juni2005) Seite 18
DEA: Darstellung und Implementierung Σ = {a, b, 0, 1} Q = {q0, q1, q2},start q 0, Akzeptierender Zustand F = {q1} Übergangsfunktion als Tabelle: δ a b 0 1 q0 q1 q1 q2 q2 q1 q1 q1 q1 q1 q2 q2 q2 q2 q2 Übergangsfunktion als Tabelle mit Fehlereinträgen δ a b 0 1 q0 q1 q1 q2 q2 q1 q1 q1 q1 q1 q2 Fail Fail Fail Fail P raktische Informatik 2, SS 2005, F olien Kap.4, 3, (29. Juni2005) Seite 19
DEA Beispiel Erkennung von Gleitkommazahlen: 0..9 0..9 0..9, 0..9 Dieser DEA erkennt Gleitkommazahlen wie z.b. 123,987 mit beliebig vielen Stellen vor und nach dem Komma. Bei Längenbeschränkung (siehe auch die 128-Strings) DEA kann nur mittels seiner Zustände zählen Praktikabler: DEA + Zähler Nicht erlaubt : Vergleich der Inhalte zweier Zähler. P raktische Informatik 2, SS 2005, F olien Kap.4, 3, (29. Juni2005) Seite 20
Nichtdeterministische endliche Automaten Unterschied zum DEA: (NEA) Kann beim Übergang den nächsten Zustand aus einer gegebenen Menge nicht-deterministisch auswählen. Akzeptanz gilt, wenn es eine Abarbeitung gibt, die einen akzeptierenden Zustand erreicht. Umkodierung: ist DEA über Mengen von Zuständen. P raktische Informatik 2, SS 2005, F olien Kap.4, 3, (29. Juni2005) Seite 21
NEA: Beispiel Ein NEA, der (a + b) abb erkennt: a q0 a q1 b q2 b q3 b von q 0 gehen für a zwei Pfeile aus. Ein Wort wird akzeptiert, wenn es einen Weg zu einem akzeptierenden Zustand gibt. P raktische Informatik 2, SS 2005, F olien Kap.4, 3, (29. Juni2005) Seite 22
NEA: Verwendung Konstruktion eines DEA aus einem regulären Ausdruck: 1. regulären Ausdruck NEA 2. NEA DEA (Mengen von Zuständen) exponentielles Anwachsen der #Zustände ist möglich 3. Minimierung des DEA Satz (Myhill-Nerode) Für jede reguläre Sprache L gibt es (bis auf Umbenennung der Zustände) genau einen minimalen DEA. P raktische Informatik 2, SS 2005, F olien Kap.4, 3, (29. Juni2005) Seite 23
Implementierung: Bemerkungen Übergangsfunktion des DEA mit Tabelle (Q,T) Q DEA können nur erkennen, nichts ausgeben DEAs als Basis; Erweiterung um Zähler und Ausgabe: z.b. Ausgabe der erkannten Zahl P raktische Informatik 2, SS 2005, F olien Kap.4, 3, (29. Juni2005) Seite 24