Vorlesung Programmieren

Ähnliche Dokumente
Programmieren in Java

Syntaxanalyse Ausgangspunkt und Ziel

Fachseminar Compilerbau

Übung zu Grundlagen des Übersetzerbaus

Vorlesung Programmieren

Von der Grammatik zum AST

Programmieren in Java

Grundbegriffe der Informatik Tutorium 12

Vorlesung Programmieren

Kapitel 5: Syntax-Analyse

Inhalt Kapitel 11: Formale Syntax und Semantik

Operationen auf Grammatiken

Definition von LR(k)-Grammatiken

Lexikalische Programmanalyse der Scanner

Übung Algorithmen I

Kellerautomat (1/4) Kellerautomat (2/4) Kellerautomat (3/4) Kellerautomat (4/4)

Vorlesung Programmieren

Vorname:... Matrikel-Nr.:... Unterschrift:...

Hallo Welt für Fortgeschrittene Parsen

Compiler: Parser. Prof. Dr. Oliver Braun. Fakultät für Informatik und Mathematik Hochschule München. Letzte Änderung:

9.4 Grundlagen des Compilerbaus

Übungsblatt 7. Thema: Sortieren, Objektorientierung

Übung Algorithmen I

Grundlagen der Programmierung 2 (Comp-D)

Praxis der Softwareentwicklung WS 2015/16

Grundbegriffe der Informatik Tutorium 2

Kontextfreie Grammatiken

JavaCC Rainer Schmidberger

Grundbegriffe der Informatik Tutorium 2

JAVA - Suchen - Sortieren

Inhaltsverzeichnis. Teil 1 Grundlagen 21. Teil 2 Datenstrukturen 85

Automaten und Formale Sprachen alias Theoretische Informatik. Sommersemester 2011

Äquivalente Grammatiken / attributierte Grammatik

Syntax von Programmiersprachen

Algorithmen auf Sequenzen

Übung Algorithmen I

Praxis der Softwareentwicklung

7. Syntax: Grammatiken, EBNF

Compilerbau Syntaxanalyse 68. LR(1)-Syntaxanalyse

Vorlesung Programmieren

Inhaltsverzeichnis. Teil 1 Grundlagen 23

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

Compilerbau. Bachelor-Programm. im SoSe Prof. Dr. Joachim Fischer Dr. Klaus Ahrens Dipl.-Inf. Ingmar Eveslage.

Übung: Algorithmen und Datenstrukturen SS 2007

6 Kontextfreie Grammatiken

! 1. Rekursive Algorithmen.! 2. Rekursive (dynamische) Datenstrukturen. II.3.2 Rekursive Datenstrukturen - 1 -

Alphabet, formale Sprache

Robert Sedgewick. Algorithmen in Java. Teil 1-4 Grundlagen Datenstrukturen Sortieren Suchen. Java-Beratung durch Michael Schidlowsky

Vorlesung Programmieren

f 1 (n) = log(n) + n 2 n 5 f 2 (n) = n 3 + n 2 f 3 (n) = log(n 2 ) f 4 (n) = n n f 5 (n) = (log(n)) 2

Algorithmen und Datenstrukturen I

1 Grammar Engineering. 2 Abstrakte Syntax als abstrakte Algebra. 3 LL(1)-Parser. 4 LR Parser. 5 Fehlerbehandlung. 6 Earley Parser

Grundbegriffe der Informatik

Ergänzungen zur Theoretischen Informatik. Compilerbau mit ANTLR. Literatur Das Standardwerk zum Compilerbau ist [1].

Grammatiken und ANTLR

Robert Sedgewick. Algorithmen in Java. »il 1-4 Grundlagen Datenstrykturen Sortleren Suchen. java-beratung durch Michael Schidlowsky

Informatik II Übung 06. Benjamin Hepp 5 April 2017

Grundbegriffe der Informatik Tutorium 33

Vorlesung Programmieren

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

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

Kapitel 12: Induktive

INSTITUT FÜR THEORETISCHE INFORMATIK, PROF. SANDERS

Algorithms & Data Structures 2

Programmieren I. Kapitel 7. Sortieren und Suchen

Technische Universität München WS 2004/2005 Fakultät für Informatik 11. Dezember 2004 Prof. Dr. Seidl

Tutoraufgabe 1 (Sortieren): Lösung: Datenstrukturen und Algorithmen SS14 Lösung - Übung 4

Übersicht. Datenstrukturen und Algorithmen. Übersicht. Divide-and-Conquer. Vorlesung 9: Quicksort (K7)

1 Formale Sprachen, reguläre und kontextfreie Grammatiken

Teil 7: Interpreterbau Prof. Dr. Max Mühlhäuser FG Telekooperation TU Darmstadt

Was ist ein Compiler?

Algorithmen und Datenstrukturen I - Exkurs Formale Sprachen -

Übungsblatt 1. f(n) = f(n) = O(g(n)) g(n) = O(f(n)) Zeigen oder widerlegen Sie: 3 n = Θ(2 n ) Aufgabe 1.2 Gegeben sei die folgende Funktion:

(08 - Einfache Sortierverfahren)

UE Algorithmen und Datenstrukturen 1 UE Praktische Informatik 1. Übung 9. Sortieren

Software Entwicklung 2. Übersetzerbau 2

Vorname:... Matrikel-Nr.:... Unterschrift:...

Transkript:

Vorlesung Programmieren 14 Parsen, Suchen und Sortieren 19./26.01.2015 Prof. Dr. Ralf H. Reussner Version 1.0 LEHRSTUHL FÜR SOFTWARE-DESIGN UND QUALITÄT (SDQ) INSTITUT FÜR PROGRAMMSTRUKTUREN UND DATENORGANISATION (IPD), FAKULTÄT FÜR INFORMATIK sdq.ipd.kit.edu KIT Universität des Landes Baden-Württemberg und nationales Forschungszentrum in der Helmholtz-Gemeinschaft www.kit.edu

Erinnerung: Wichtige Termine Programmieren Übungsschein: Anmeldungszeitraum zwischen und 30.01.2015 Programmieren Abschlussaufgaben: Anmeldungszeitraum zwischen 02.02.2015 und 13.02.2015 Anmeldung jeweils über das Campus Management Portal : https://campus.studium.kit.edu/ 2

Parsen Fragestellung: Wie kann ein String in seine semantisch bedeutsamen Teile zerlegt und seine Struktur festgestellt werden? Beispiele: 13 + 4 * 52.5 13 + 4 * 52.5 Dies ist ein Beispiel. Dies ist ein Beispiel. Subj. Präd. Obj. class List { int x;... class List { int x ;... Idee: Verwende formale Sprachen und (kontextfreie) Grammatiken! 13 + 4 * 52.5 3

Beispiel: Taschenrechner Symbole: Terminalsymbole für Grundrechenarten, Klammern, Zahlen Nonterminalsymbol: E (für expression) Grammatik: (erster Versuch) E E + E E - E E * E E / E ( E ) z Problem: Struktur (wie Punkt-vor-Strich) geht verloren! Grammatik: (zweiter Versuch) Expr Term + Expr Term - Expr Term Term Fact * Term Fact / Term Fact Fact ( Expr ) z 4

Beispiel Taschenrechner: Parsebaum Expr Term + Expr Term - Expr Term Term Fact * Term Fact / Term Fact Fact ( Expr ) z 13 + 4 * 52.5 Expr Term + Expr Fact Term z Fact * Term z Fact z 5

Top-Down Parsen Wie können wir anhand der Grammatik einen Parser programmieren? Top-Down / Recursive-Descent ( Rekursiver Abstieg ) Parser Bottom-Up Parser Wir wollen einen Top-Down-Parser erstellen Ausgehend vom Startsymbol bestimme die nächste anzuwendende Regel Verwende Look-Ahead-Symbol Grammatik-Transformation (Links-Faktorisierung) erforderlich: Expr Term + Expr Term - Expr Term Term Fact * Term Fact / Term Fact Fact ( Expr ) z wird zu Expr Term RExp RExp + Expr - Expr ε Term Fact RTrm RTrm * Term / Term ε Fact ( Expr ) z Jetzt kann anhand des nächsten zu lesenden Zeichens die anzuwendende Regel eindeutig bestimmt werden (LL(1)-Sprache) 6

Recursive Descent Parser: Hilfsfunktionen Wir verwenden die Java StreamTokenizer-Klasse zur lexikalischen Analyse 13 + 4 * 52.5 Implementierung (Hilfsfunktionen): class Calculator { private int lookahead; private StreamTokenizer tokenizer; private void next() throws IOException { lookahead = tokenizer.nexttoken(); private void match(int expected) throws IOException, ParseException { if (lookahead!= expected) { throw new ParseException("unexpected token"); else { next();... 13 + 4 * 52.5 Token TT_EOF, TT_NUMBER, TT_WORD 7

Rekursiver Abstieg: Umsetzung Regeln (I) // Expr Term + Expr Term - Expr Term private void parseexpr() throws IOException, ParseException { parseterm(); if (lookahead == '+' lookahead == '-') { next(); parseexpr(); // Term Fact * Term Fact / Term Fact private void parseterm() throws IOException, ParseException { parsefact(); if (lookahead == '*' lookahead == '/') { next(); parseterm(); 8

Rekursiver Abstieg: Umsetzung Regeln (II) // Fact ( Expr ) z private void parsefact() throws IOException, ParseException { if (lookahead == '(') { match('('); parseexpr(); match(')'); else if (lookahead == StreamTokenizer.TT_NUMBER) { next(); else { error("unexpected symbol"); Demo! 9

Zusammenfassung Parsen Parsen: Struktur eines Textes erkennen Zwei große Klassen von Parsern: Top-Down Bottom-Up Vorgehensweise zur Erstellung eines Top-Down-Parsers: Grammatik erstellen Evtl. Grammatik-Transformationen Implementierung jeder Regel in einer Methode Für komplexere Grammatiken: verwende Parser-Generator ANTLR, JavaCC,... Für einfache (reguläre) Sprachen: verwende Automaten / reguläre Ausdrücke Mehr zu Parsern in der Vorlesung Compilerbau 10

Suchen, Sortieren Zu Suchen: Lineare Suche, Binäre Suche Sortieren: Bubblesort, Selectionsort, Insertionsort, Quicksort, Mergesort siehe Folien Pretschner (Wintersemester 2011/12) 11

Video: The Sound of Sorting Von Timo Bingmann (Mitarbeiter AG Sanders) entwickelt Sicht- und hörbar gemachte Algorithmen: Selection Sort Insertion Sort Quick Sort Merge Sort YouTube: Sound of Sorting 12