4. Die lexikalische Analyse

Ähnliche Dokumente
Lexikalische Programmanalyse der Scanner

Reguläre Sprachen und endliche Automaten

Formale Sprachen und endliche Automaten

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

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

Lexikalische Analyse, Tokenizer, Scanner

2. Gegeben sei folgender nichtdeterministischer endlicher Automat mit ɛ-übergängen:

Induktive Definition

Reguläre Sprachen. R. Stiebe: Theoretische Informatik für ING-IF und Lehrer,

2. Gegeben sei folgender nichtdeterministischer endlicher Automat mit ɛ-übergängen:

Grundlagen der theoretischen Informatik

Theoretische Informatik. Reguläre Sprachen und Automaten

Deterministische endliche Automaten - Wiederholung

Software Engineering Ergänzung zur Vorlesung

Reguläre Ausdrücke. Michael Jäger. 4. April 2017

ARBEITSBLATT ZU FORMALEN SPRACHEN

4 Lexikalische Analyse und Parsing

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

Übung Praktische Informatik I

Kapitel 3: Reguläre Grammatiken und Endliche. Automaten

Thomas Behr. 17. November 2011

Satz (Abschluß unter der Stern-Operation)

Automatentheorie und formale Sprachen

9 Theoretische Informatik und Compilerbau

Grundlagen der Informatik II

Anwenundg regulärer Sprachen und endlicher Automaten

Algorithmen auf Sequenzen

Kurz-Skript zur Theoretischen Informatik I

3. Nur die mit diesen Regeln erzeugten Ausdrücke sind reguläre Ausdrücke über Σ.

Definition (Reguläre Ausdrücke) Sei Σ ein Alphabet, dann gilt: (ii) ε ist ein regulärer Ausdruck über Σ.

c) {abcde, abcfg, bcade, bcafg} d) {ade, afg, bcde, bcfg} c) {abcabc} d) {abcbc, abc, a} c) {aa, ab, ba, bb} d) {{aa}, {ab}, {ba}, {bb}}

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

Einführung in die Informatik Grammars & Parsers

Wo sind wir? Übersicht lexikale Struktur von Java

6 Kontextfreie Grammatiken

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

lex - Eine Einführung

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

Grundlagen der Theoretischen Informatik

Wiederholung. Ein deterministischer endlicher Automat (DEA) über einem Alphabet A besteht aus: einer endlichen Menge von Zuständen Q,

1 Σ endliches Terminalalphabet, 2 V endliche Menge von Variablen (mit V Σ = ), 3 P (V (Σ ΣV )) {(S, ε)} endliche Menge von Regeln,

Automaten und formale Sprachen. Lösungen zu den Übungsblättern

1 Syntax von Programmiersprachen

Algorithmen mit konstantem Platzbedarf: Die Klasse REG

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

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

Proseminar String Matching

Mathematische Grundlagen der Informatik 2

Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik Operatoren, Kommentare, Ein-/Ausgabe

Elementare Konzepte von

Hoffmann (HAW Hamburg) Automatentheorie und formale Sprachen

1 Σ endliches Terminalalphabet, 2 V endliche Menge von Variablen (mit V Σ = ), 3 P (V (Σ ΣV )) {(S, ε)} endliche Menge von Regeln,

Einführung in die Informatik. Programming Languages

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

Institut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke

Klausur Grundlagen der Programmierung

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 29

Maike Buchin 18. Februar 2016 Stef Sijben. Probeklausur. Theoretische Informatik. Bearbeitungszeit: 3 Stunden

Einführung in die Informatik. Programming Languages

Einführung in die Informatik

Einführung in C. EDV1-04C-Einführung 1

I.2. Endliche Automaten (ohne Ausgabe)

Grundlagen der Theoretischen Informatik

Grundlagen der Theoretischen Informatik / Einführung in die Theoretische Informatik I

THIA - Übungsblatt 2.

Universität des Saarlandes

Programmiertechnik Operatoren, Kommentare, Ein-/Ausgabe

8. Turingmaschinen und kontextsensitive Sprachen

ALP I Turing-Maschine

Algorithmische Bioinformatik 1

Theoretische Grundlagen der Informatik

Theoretische Informatik. Alphabete, Worte, Sprachen

Informatik I WS 07/08 Tutorium 24

2.2 Der Algorithmus von Knuth, Morris und Pratt

Theoretische Informatik Mitschrift

Vorlesung Theoretische Informatik

Einführung in die Programmiertechnik

Aufgabentypen die in der Klausur vorkommen

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

Die mathematische Seite

Grundbegriffe der Informatik Tutorium 33

Institut für Programmierung und Reaktive Systeme 20. November Programmieren I. 4. Übungsblatt

DKA und dkfs (mit Übungen)

Methodische Grundlagen des Software Engineering - Übung 9

FACHHOCHSCHULE AUGSBURG Hochschule für Technik, Wirtschaft und Gestaltung

Compilerbau Syntaxanalyse 68. LR(1)-Syntaxanalyse

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

Ist eine algorithmische Problemstellung lösbar und wenn ja, mit welchen Mitteln? was ist eine algorithmische Problemstellung?

Grundlagen der Informatik 2. Typen

7 Endliche Automaten. 7.1 Deterministische endliche Automaten

Programmiersprachen und Übersetzer

Prinzipien der Softwareentwicklung S. Strahringer

Grundlagen der Theoretischen Informatik

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

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

Grenzen der Regularität

Effiziente Algorithmen 2

Theoretische Grundlagen der Informatik. Vorlesung am 07. November INSTITUT FÜR THEORETISCHE INFORMATIK

Transkript:

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,..) Literale für ganze Zahlen, Gleitkommazahlen, Strings, Zeichen Trennzeichen (Komma, Semikolon) Klammern Operatoren (=, +, -, &&, )

va r a, b : r ea l ; NLa : =2. 1 ; NL b: = a * a+7 ; NL Scanner Id(var) sep Id(a) com Id(b) col Id(real) sem sep Id(a) bec real(2.1) sem sep Id(b) bec Id(a) mul Id(a) add int(7) sem sep Sieber varsy id(1) com id(2) col realsy sem id(1) bec real(2.1) sem id(2) bec id(1) mul id(1) add int(7) sem

Tokenklassen: Menge aller möglichen Werte : reguläre Sprache beschrieben durch regulären Ausdruck Wiederholung/Definition: reguläre Sprachen über Alphabet : leere Menge Ø, leere Sprache {ε} für alle a Є ist {a} reguläre Sprache R, S reguläre Sprachen über, dann auch R*, RS, R U S

Wiederholung/Definition: reguläre Ausdrücke (RA) über Alphabet : Ø ist RA, beschreibt Sprache Ø ε ist RA, beschreibt Sprache {ε} a Є ist RA, beschreibt {a} r, s RA, die R bzw. S beschreiben, dann ( r s ) RA, der R U S beschreibt ( r s ) RA, der RS beschreibt ( r )* RA, der R* beschreibt Beispiel: ab*a beschreibt {a}{b}*{a} aa, aba, abba, (ab)* beschreibt {ab}* ε, ab, abab,

Aufgaben: Erstellen eines regulären Ausdrucks für folgende Sprachen Alphabet sei ={a, b} 1. Sprache aller Wörter, die mit a anfangen und mit b enden? 2. Sprache aller Wörter, die wenigstens 3 a enthalten? 3. Sprache aller Wörter, die mind. ein aa oder ein bb enthalten? Welche Sprache wird durch folgenden RA beschrieben? 1. a b 2. a(aa)*b* 3. (ab)* (ba)* Gegeben sei das Alphabet ={0,..,9,+,-,.} Welcher RA beschreibt die Sprache aller Dezimalpunktzahlen?

Endliche Automaten: math. Maschinen zum Erkennen reg. Sprachen bestehen aus (,Q,S,F,T) Eingabealphabet endliche Zustandmenge Q Startzustand S Є Q Menge an Endzuständen F aus Q Übergangsrelation T aus (Q x x Q) Beispiel ={a,b}, Q={z0,z1,z2,z3}, S={z0},F={z3}, T= Welche Sprache erkennt der Automat? Aufgabe: Implementierung in Java, C Q-alt Zeichen Q-neu z0 a z0 z0 b z1 z1 a z0 z1 b z2 z2 a z0 z2 b Z3 z3 a z3 z3 b z3

Endliche Automaten als Scanner (1): reguläre Ausdrücke für alle Token(klassen) erstellen zugehörigen NEA konstruieren minimalen DEA ableiten (Verfahren von Thompson) DEA in Programmiersprache implementieren (s. letzte Übungsaufgabe)

Endliche Automaten als Scanner (2): startet auf dem ersten noch nicht gelesenen Zeichen Folge von Schritten abhängig vom Zustand und vom gelesenen Zeichen meldet Finden eines Symbols, wenn in Endzustand und zu nächstem Zeichen kein Zustandsübergang existiert existiert kein Übergang ohne Endzustand: letzte Übergänge rückgängig machen bis zuletzt durchlaufenen Endzustand

Endliche Automaten als Scanner (3): Tokenklassen für richtige Programmiersprache z.b. Bezeichner: (a z A Z)(a z A Z 0 9)* Integer: (1 2 9)(0 1 2 9)* Float: (1 9)(0 9)*.(0 9)* Operatoren: (+ - * / =.) Anweisungen: if then else for while Kommentar: #(a.. z A.. Z _ - : )# Separator: ; Aufgabe: Schreiben Sie ein Java- o. C-Programm, welches eine Sprache mit diesen Token scannt und den Namen der jeweiligen Tokenklasse ausgibt.

lex, flex: Scanner-Generierungstool Input: Datei folgenden Aufbaus (bsp.l) Definitionen %% lex-regeln %% benutzerdefinierte Routinen Generierung mittels flex bsp.l Output: Datei namens lex.yy.c mit Funktion yylex() yylex() in C-Dateien nutzen; gcc prog.c lex.yy.c lfl o prog

Definitionen-Teil: 1. Festlegung der Wirtsprache (C, Ratfor): %C bzw. %R 2. C- oder Ratfor-Programmteile 3. C- oder Ratfor-Programmteile in %{.%} 4. Reguläre Definitionen 5. Startbedingungen 6. Zeichensatz-Tabellen 7. Verstellen von lex-internen Tabellengrößen

C- bzw. Ratfor Programmteile: entweder erstes Zeichen pro Zeile Leerstelle oder Tab dahinter C-/Ratfor-Deklarationen/Definitionen werden unverändert an globalster Stelle in generiertes Programm übernommen Beispiel: %%. int operand[10]; char op;