Vorlesung Compilertechnik Sommersemester 2008

Slides:



Advertisements
Ähnliche Präsentationen
Niklaus Wirth: Prinzipien der Programmiersprachen und PASCAL
Advertisements

ALP II: Objektorientierte Programmierung Sommersemester 2006
Programmiersprachen Eine allgemeine Übersicht der gängigsten Sprachen und ihrer Einteilung Gabriel Bretschner IG08 Fach: Informatiksysteme Einleitung Definition.
Hash-Tabellen und -Funktionen Hash-Tabellen in Java
Vorlesung Compilertechnik Sommersemester 2008
Vorlesung Compilertechnik Sommersemester 2009
ALGOL ALGOrithmic Language.
Hochschule Fulda – FB ET Sommersemester 2010
„Such-Algorithmen“ Zusammenfassung des Kapitels 11
8. Formale Sprachen und Grammatiken
10. Grundlagen imperativer Programmiersprachen
Lösung 7.1 Syntax und Semantik
Imperative Programmierung
der Universität Oldenburg
Einführung in Berechenbarkeit und Formale Sprachen
Christos, Kornelia, Jan Christos, Kornelia, Jan Entwicklungsumgebung Versteht unseren Java Programm Code Versteht unseren Java Programm.
Kapitel 4 Syntaktische Analyse: LR Parsing.
FH-Hof Einbindung von JavaScript Anweisungen
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Java: Grundlagen der Objektorientierung
Strukturierte Programmierung
Entwicklung der Programmiersprachen
M a r c – o l i v e r p a h l Informatik II – Kapitel 18 Übersetzung Zusammenfassung des Kapitel 18 Küchlin, Weber, Vorversion Einführung in die Informatik,
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 5 Polymorphismus Sommersemester 2003 Lars Bernard.
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 3 Klassen, Objekte, Arrays und Kontrollstrukturen Sommersemester 2003 Lars Bernard.
Sommersemester 2003 Lars Bernard
Parsing regulärer Ausdrücke
Einführung Wat jibt´s denn? Mit Computa kenn´ ick mir aus! Guten Tag,
Automatisches Testen und Bewerten von Java-Klassen
Praxis-Repetitorium JAVA zusätzliche, ergänzende Lehrveranstaltung
PKJ 2005/1 Stefan Dissmann Zusammenfassung Bisher im Kurs erarbeitete Konzepte(1): Umgang mit einfachen Datentypen Umgang mit Feldern Umgang mit Referenzen.
Fachgebiet Software Engineering Übersicht © Albert Zündorf, Kassel University Compilerbau und Reverse Engineering m Vorlesung im Wintersemester.
Einführung in C EDV1 - 03C-Einführung.
Einführung in C EDV1 - 04C-Einführung.
Konzepte von Programmiersprachen
Einführung in die Programmierung Datensammlung
MSDN Webcast: VB. NET für Einsteiger und Umsteiger Einführung in VB
Von der Sprache zum Programm
Einführung Inhalte dieses Kurses Generationen der Programmiersprachen
? Was ist Informatik? Was ist Informatik? Alexander Lange
Proseminar an der TU München Martin Levihn
Dateien Datei = File (engl.) Mögliche Inhalte einer Datei
Wiederholte Programmausführung
Willkommen... Studentinnen und Studenten der Studiengänge Umweltnaturwissenschaften Erdwissenschaften Agrarwissenschaften zur.
Informatik Objekte und Klassen 1. Objektorientiertes Modellieren und Programmieren 1.1 Objekte und Klassen.
Computerorientierte Physik VORLESUNG und Übungen Vorlesung Zeit: Mo., – Uhr Ort: Hörsaal 5.01, Institut für Physik, Universitätsplatz 5, A-8010.
Dynamische Datentypen
Historische Entwicklung und ihre Einteilung
Programmieren in C Einführung
Programiersprache Mustafa SÖYLEMEZ e
Programmiersprachen Proseminar Grundlagen wissenschaftlichen Arbeitens
Informatik Otto-Hahn-Gymnasium im Wahlpflichtbereich II
Parameterübergabemechanismen für den Methodenaufruf
Grundlagen Wissenschaftlichen Arbeitens Hilal Tekoglu
Wilfried Imrich CuP - Java Erste Vorlesung Entspricht ungefähr Kapitel 1.1 des Skriptums Wilfried Imrich Montanuniversität Leoben Freitag, 4. Oktober 2002.
MODULA-2.
Agenda für heute, 7. April, 2005 Bedingte ProgrammausführungBedingte Programmausführung Algorithmische Grundlagen Vergleichsoperatoren, Wahrheitswerte.
Programmieren mit BASIC
Objektorientierung.
Frühjahrs-/Sommersemester 2013
Mensch – Maschine - Kommunikation
Robuste Programme durch Ausnahmebehandlung
2 Grundlagen In diesem Abschnitt werden die Grundbegriffe und Methoden der Theorie der formalen Sprachen und der Automaten wiederholt, soweit diese ben.
Geschichte der Informatik
Vorlesung Einführendes Beispiel-
Einführendes Beispiel
The Programming Language Pascal
Objektorientierte (OO) Programmierung
Christos, Kornelia, Jan Christos, Kornelia, Jan Entwicklungsumgebung Versteht unseren Java Programm Code Versteht unseren Java Programm.
 Präsentation transkript:

Vorlesung Compilertechnik Sommersemester 2008 Einführung M. Schölzel

Literatur A.V. Aho, J.D. Ullman: The Theory of Parsing, Translation, and Compiling – Volume I: Parsing. Prentice Hall, 1972, ISBN: 0-13-914556-7 . A.V. Aho, J.D. Ullman: The Theory of Parsing, Translation, and Compiling – Volume II: Compiling. Prentice Hall, 1973, ISBN: 0-13-914564-8. W.M. Waite, G. Goos: Compiler Construction. Springer Verlag, 1984, ISBN: 0-387-90821-8. R. Wilhelm, D. Maurer: Übersetzerbau – Theorie, Konstruktion, Generierung. Springer Verlag, 1992, ISBN:3-540-55704-0. A.V. Aho, M.S. Lam, R. Sethi, J.D. Ullman: Compilers – Principles, Techniques, & Tools, Second edition. Pearson Addison Wesley, 2007, ISBN: 0-321-48681-1. P. Bachmann: Mathematische Grundlagen der Informatik. Akademie Verlag, 1992, ISBN: 3-05-501242-5. D. Scheibler, M. Henke, P. Bachmann: Skript zur Compilertechnik. Vorlesungsskript, 2004.

Gegenseitige Abhängigkeiten Entwicklung der Compiler ist eng mit der Entwicklung der Programmiersprachen und Computerarchitekturen verbunden. Sprachen für Parallelrechner Computer- architektur Programmier- sprachen Native-Abarbeitung von Java-Bytecode (JOP) Behandelbaren Konstrukten, Vermeidung von schwer (z.B. Schlüsselworte als Bezeichner zulassen) Optimierungen Strukturierte Programmierung Deklarative Programmierung Objektorientierung Optimierung; Ausnutzung des CISC-Befehlssatzes Grenzen der statischen Compiler

Geschichte der Programmiersprachen (und Compiler) Imperative Programmiersprachen Objektorientierte Programmiersprachen Strukturierte Programmiersprachen Grace Hopper John Warner Backus Plankalkül von Zuse für ZR4; erst viel später praktisch umgesetzt 1972: PASCAL als konsequente Umsetzung eines strukturierten Programmierparadigmas C 1957: Fortran erster komerzieller Compiler für IBM 704 LISP, 1958, zur Implementierung von FORTRAN Unterprogrammen ALGOL-60: Erstmals Beschreibung der Syntax durch BNF Aufkommen von Assemblermnemonic 1952: Erster Compiler A-0 COBOL Simula 67, ergänzte Algol 60 um objektorientierte Konzepte: Klassen, Objekte, Koroutinen, Vererbung Smalltalk: rein objektorientiert James Gosling C++ Java Ken Thompson, Dennis Ritchie Erste Computer, Programmierung mit Binärcodes 1940 1950 1960 1970 1980 1990

Beispiel: FORTRAN I Anweisungen sind an festen Positionen auf der Lochkarte ausgerichtet Keine Subroutinen Keine geschachtelten Ausdrücke Speziell für die IBM 704 entwickelt Aus dem ersten Fortran Manual von 1956, gefunden auf: http://www.paulgraham.com/history.html

Beispiel: COBOL 004000-COMPUTE-PAYMENT. * MOVE 0 TO LW-LOAN-ERROR-FLAG. IF (LW-LOAN-AMT ZERO) OR (LW-INT-RATE ZERO) (LW-NBR-PMTS ZERO) MOVE 1 TO LW-LOAN-ERROR-FLAG GO TO 004000-EXIT. COMPUTE LW-INT-PMT = LW-INT-RATE / 1200 ON SIZE ERROR COMPUTE LW-PMT-AMT ROUNDED = (LW-LOAN-AMT * LW-INT-PMT) / (1 - 1.00000000 / ( (1 + LW-INT-PMT) ** LW-NBR-PMTS) ) COMPUTE LW-TOTAL-PMTS = LW-PMT-AMT * LW-NBR-PMTS COMPUTE LW-TOTAL-INT = LW-TOTAL-PMTS - LW-LOAN-AMT. 004000-EXIT. EXIT.

Meilenstein: Algol-60 Spezifikation der Syntax durch eine BNF Bedeutung von Schlüsselworten hängt nicht von ihrer Position ab (Prinzip der Formatfreiheit) Freie Zeileneinteilung: Weg vom festen Format der Lochkarten wie bei FORTRAN und COBOL Verwendung von Rutishausers Klammergebirgen zur Übersetzung von arithmetischen Formeln in Infixnotation (Bauer und Samelson) Aber: Erzwingt keine strukturierte Programmierung

Beispiel Algol-60 'BEGIN' 'COMENT' POLYGON: CALCULATES THE SIDES OF A POLYGON FOR Z POINTS IN R2 WITH X AND Y VALUES. (Z IS THE FIRST INPUT VALUE FOLLOWED BY PAIRS OF VALUES FOR INDIVIDUAL POINTS) PRINTS FOR EACH POINT THE FOLLOWING VALUES: NUMBER, X, Y, LENGTH OF SIDE, TOTAL LENGTH.; 'INTEGER' I, Z; 'REAL' X0, Y0, XA, Y,A, XN, YN, TL, L; READ(Z); READ(XA, YA); X0:= XA; Y0:= YA; I:= 0; L:= 0.0; NEW: READ(XN, YN); LAST: I:= I+1; TL:= SQRT((XN-XA)*(XN-XA) + (YN-YA)*(YN-YA)); L:= L+TL; PRINT(I, XA, YA, TL, L); XA:= XN; YA:= YN; 'IF' I 'LESS' Z-1 'THEN' 'GOTO' NEW; 'IF' I 'EQUAL' Z-1 'THEN' XN:= X0; YN:= Y0; 'GOTO' LAST; 'END'; 'END' POLYGON

Klassifizierung nach Generation Maschinensprache (kein Compiler erforderlich) 2. Generation Assemblersprachen (sehr einfache Übersetzung) 3. Generation Höhere Programmiersprachen (Fortran, LISP, C, Java, Haskell,…) (komplexe Compiler erforderlich) 4. Generation Anwendungsspezifische Sprachen (SQL) (relativ einfache Syntax; damit einfache Analyse; aber komplexe Verarbeitung) 5. Generation Logische und Constraint-basierte Programmiersprachen (Prolog) (relativ einfache Syntax; damit einfache Analyse; aber komplexe Verarbeitung)

Klassifizierung nach Programmierparadigma Imperative Programmiersprachen Das Programm spezifiziert eine Berechnungsvorschrift, also wie etwas zu berechnen ist (C, Java, …) Starke Orientierung an der Von-Neumann-Architektur Es wird grundsätzlich unterschieden zwischen: Anweisungen: Ändern den Zustand des Speichers oder steuern den Programmfluss Ausdrücke: Berechnen Werte auf Grundlage des aktuellen Speicherzustandes Deklarative Programmiersprachen Das Programm spezifiziert nur was zu berechnen ist (Prolog, [Haskell])

Fokus der Vorlesung Wir werden Techniken zur Entwicklung von Compilern für imperative (insbesondere strukturierte) Programmiersprachen der 3. Generation kennen lernen. Die dabei betrachteten Techniken zur Analyse des Quelltextes lassen sich auch zur Analyse von deklarativen Sprachen und Sprachen der 4. und 5. Generation nutzen. Lernziele: Prinzipien der Gestaltung von Compilern Theoretische Grundlagen der lexikalischen und syntaktischen Analyse Umgang mit und Verständnis von Scanner- und Parsergeneratoren Prinzipien der Zielcodeerzeugung

Gliederung (1) Einführung Grundlagen Formale Sprachen Grammatiken Entwurf kontextfreier Grammatiken Aufbau eines Compilers

Gliederung (2) Lexikalische Analyse Syntaktische Analyse Starkes LL(k) Schwaches LL(k) LR(k) Kontextprüfung (semantische Analyse) Zwischencodeerzeugung Zielcodeerzeugung Standardoptimierungen

Weiter zum Kapitel Grundlagen Ende der Einführung Weiter zum Kapitel Grundlagen