logo of the SSW institute
Institut für Systemsoftware
Johannes Kepler Universität Linz
Fachbereich Informatik
logo of the Cristian Doppler Research Association
Christian Doppler Labor
Automated Software Engineering

Home

General
Staff
Contact
Partners
Alumni

Research
Areas
Projects
Papers
Books
Reports

Teaching
Lectures
Exams
B.Projects
M.Theses
PhD Theses
Go Abroad

Misc
Library
Seminars
Gallery
Links
Search

Webmaster


logo of the Johannes Kepler University (JKU)

Übersetzerbau

339.280 Mössenböck Do 8:30 - 10:00 HS 2 Beginn: 8.10.2009

Die Lehrveranstaltung vermittelt praktische Kenntnisse im Übersetzerbau. Studierende sollen in die Lage versetzt werden, Übersetzer für einfache Programmiersprachen, Kommandosprachen und allgemeine strukturierte Eingabeströme zu implementieren. Es werden die wichtigsten Phasen eines Übersetzers wie lexikalische Analyse, Syntaxanalyse, Semantikverarbeitung und Codeerzeugung behandelt. Darüber hinaus werden Beschreibungstechniken wie attributierte Grammatiken und ihre Verarbeitung durch Compiler-Generatoren erläutert. Die Vorlesung bietet auch eine Einführung in die Theorie der Formalen Sprachen, soweit sie für den Übersetzerbau relevant ist.

Übersetzerbau-Kenntnisse sind nicht nur für Compiler-Entwickler wichtig, sondern auch für Anwendungsprogrammierer. In vielen Programmen müssen Parameter, Programmoptionen oder Eingabedateien verarbeitet werden, die syntaktisch strukturiert sind. Für diese Aufgaben sind oft Kenntnisse über Syntaxanalyse oder Symbollistenverwaltung nötig. Die Vorlesung zeigt, wie man solche Aufgaben systematisch löst.

Fortgeschrittene Übersetzerbau-Techniken wie Codeerzeugung für Registermaschinen, Codeoptimierung und getrennte Übersetzung werden in einer anschließenden Wahlvorlesung angeboten.

Inhalt

  1. Überblick

  2. 1.1 Motivation
    1.2 Struktur eines Compilers
    1.3 Grammatiken
    1.4 Syntaxbaum und Mehrdeutigkeit
    1.5 Grammatikklassen nach Chomsky
    1.6 Die Sprache MicroJava

  3. Lexikalische Analyse (Scanning)

  4. 2.1 Aufgaben der lexikalischen Analyse
    2.2 Reguläre Grammatiken und Endliche Automaten
    2.3 Scanner-Implementierung

  5. Syntaxanalyse (Parsing)

  6. 3.1 Kontextfreie Grammatiken und Kellerautomaten
    3.2 Rekursiver Abstieg
    3.3 LL(1)-Eigenschaft
    3.4 Fehlerbehandlung

  7. Semantikanschluss

  8. 4.1 Attributierte Grammatiken (prozedurale Sicht)
    4.2 Attributierte Grammatiken nach Knuth

  9. Symbolliste

  10. 5.1 Überblick
    5.2 Objekte
    5.3 Scopes
    5.4 Typen
    5.5 Universum

  11. Codeerzeugung

  12. 6.1 Überblick
    6.2 Die MicroJava VM
    6.3 Codespeicher
    6.4 Items
    6.5 Ausdrücke
    6.6 Zuweisungen
    6.7 Sprünge und Marken
    6.8 Ablaufkontrollstrukturen
    6.9 Methoden

  13. Bottomup-Syntaxanalyse

  14. 7.1 Arbeitsweise eines Bottomup-Parsers
    7.2 LR-Grammatiken
    7.3 LR-Tabellenerzeugung
    7.4 Tabellenverkleinerung
    7.5 Semantikanschluss
    7.6 LR-Fehlerbehandlung

  15. Compiler-Generatoren

  16. 8.1 Yacc
    8.2 Lex
    8.3 Coco/R

Skript

Das Skript ist auf der Webseite dieser LVA im KUSSS als PDF-Dokument verfügbar.

Literatur

Hauptsächliche Literatur

  • H.Mössenböck: Übersetzer. In P.Rechenberg, G.Pomberger: Informatik-Handbuch, 4. Auflage, Hanser-Verlag 2006
    Eine Zusammenfassung des Übersetzerbaus auf 22 Seiten. Deckt sich gut mit dem Vorlesungsstoff.

  • P.Rechenberg: Formale Sprachen und Automaten. In P.Rechenberg, G.Pomberger: Informatik-Handbuch, 4. Auflage, Hanser-Verlag 2006
    Die in der Vorlesung benötigte Theorie über Grammatiken, Sprachen und ihre Verarbeitung.

  • N.Wirth: Grundlagen und Techniken des Compilerbaus. Oldenbourg, 2008
    Ein Meister des Übersetzerbaus zeigt, wie er in der Praxis arbeitet.
    Englisch Ausgabe unter www-old.oberon.ethz.ch/WirthPubl/CBEAll.pdf

  • P.Terry: Compiling with C# and Java. Pearson Addison-Wesley 2005
    Ein gutes Buch, das viele Teile dieser Vorlesung abdeckt und auch den Einsatz des Compilergenerators Coco/R behandelt.

  • R. Hunter: The Essence of Compilers.Pearson Prentice Hall, 1999
    Ein gutes Buch, das den Stoff dieser Vorlesung recht gut abdeckt.

Weiterführende Literatur

  • A.V.Aho, M.Lam, R.Sethi, J.D.Ullman: Compiler -- Prinzipien, Techniken und Werkzeuge. Pearson Studium 2008.
    engl.: Compilers -- Principles, Techniques and Tools. Pearson Education 2007

    Ein Klassiker unter den Übersetzerbau-Büchern. Einfach zu lesen. Geht von den Grundlagen bis zur Optimierung.

  • A.W.Appel: Modern Compiler Implementation in Java. 2nd edition. Cambridge University Press 2002
    Sehr gutes und aktuelles Buch, das den Übersetzerbau in seiner vollen Breite und mit vielen Varianten abdeckt.

  • S.Muchnick: Advanced Compiler Design and Implementation. Morgan Kaufmann, 1997.
    Ein sehr vollständiges und weit über den Stoff dieser Vorlesung hinausgehendes Compilerbuch. Nicht ganz billig, aber für Interessierte durchaus lohnend.

  • H.Bal, D.Grune, C.Jacobs: Modern Compiler Design. John Wiley, 2000
    Ebenfalls ein gutes Buch, das den momentanen Stand der Technik gut abdeckt.

  • D.A.Watt, D.F.Brown: Programming Language Processors in Java. Prentice-Hall 2000
    Relativ umfassendes und praktisch orientiertes Buch.

  • W.M.Waite, G.Goos: Compiler Construction. Springer-Verlag 1984
    Gehaltvoll aber schwer zu lesen, weil stark theoretisch. Ausführliches Kapitel über attributierte Grammatiken.

  • U.Kastens: Übersetzerbau. Oldenburg-Verlag 1990
    Gutes Kapitel über attributierte Grammatiken.

  • R.Wilhelm, D.Maurer: Übersetzerbau. Springer-Verlag 1992
    Behandelt auch die Übersetzung logischer und funktionaler Sprachen.

  • J.R.Levine, T.Mason, D.Brown: lex & yacc. O'Reilly & Associates 1995
    Ausführliche Beschreibung der Übersetzerbau-Werkzeuge lex und yacc.

Online-Quellen

Prüfung

Schriftliche Klausur am Ende des Semesters.