Copyright © 1998, 1999 by Axel T. Schreiner. All Rights Reserved.
Compilerbau mit Java
Axel-Tobias Schreiner, Fachbereich Mathematik-Informatik, Universität Osnabrück.
Eine Einführung in Compilerbau mit Java.
Vorlesung im Wintersemester 1998/1999.
Von hier aus sind Kopien der OH-Folien des Skripts, der Java-Dokumentation von Sun sowie die Programmbeispiele erreichbar, die in der Vorlesung verwendet werden. Die Texte sind kein komplettes Manuskript der Vorlesung. Zum Selbststudium müßten zusätzlich Bücher über Compilerbau, objekt-orientierte Programmierung und Java konsultiert werden.
Jede Woche gibt es ein Aufgabenblatt. Sollte es nicht selbständig gelöst werden, könnte eine Klausur folgen...
Die Programmbeispiele sind parallel zu den Kapiteln der Vorlesung in Katalogen zusammengefaßt.
Archivierte Kopien der Programmbeispiele, Dokumentation und OH-Folien sowie Entwicklungssysteme, verschiedene Betrachter und ähnliche Werkzeuge können nur im Netz der Universität Osnabrück per File-Transfer-Protokoll abgeholt werden.
In diesem Bereich sind die OH-Folien des Skripts und die Dokumentation des JDK (1.1.6) zu finden.
Das Material aus dem html-Bereich wurde mit Adobe Acrobat in das Portable Document Format gewandelt und mit einem Index versehen. Das Format eignet sich primär zum Drucken und unter Windows auch zur lokalen Volltextsuche.
Je nach Plattform sind dafür spezielle Betrachter erforderlich, die zuvor installiert werden müssen. Betrachter für Windows und Linux befinden sich auch im ftp-Bereich.
Da der Acrobat Reader speziell zu PostScript-Druckern anscheinend nicht immer korrekt ausgibt, befinden sich in diesem Bereich auch PostScript-Dateien.
Java im Lehre-Netz der Osnabrücker Informatik
Für diese Vorlesung sollten die schwarzen NeXT-Rechner in den Rämen 433 und 435 zum Editieren verwendet werden. Alternativ dürfen auch die Linux-Systeme im Raum 339a benutzt werden, wenn sie nicht von Studenten der Vorlesung Informatik A belegt sind.
Das JDK 1.1.6 kann remote auf den Linux-Systemen (apollo, ares, athene, demeter, erebos, gaia, hades, hebe, helios, hermes, hestia, iris, kronos, leto, maia, nereus, nyx, pan, rhea und theia) eingesetzt werden. /usr/local/java/bin wird in den Pfad aufgenommen, wenn in ~/.profile ein Eintrag Java existiert. Die Kommandos heißen auf allen Rechnern java und javac.
Das JDK 1.2 steht remote auf zeus unter Solaris bereit, allerdings in /usr/java1.2 und /usr/demo/JAVA1.2.
Termine 1998/1999
| Vorlesung
| Dienstag, 10:15
| 31/449a
| Schreiner
|
|---|
| Donnerstag, 10:15
|
| Übungen
| Montag, 10:15
| 31/449a
| Kühl
|
|---|
| Sprechstunde
| Donnerstag ab 15:00 n.V.
| 31/321
| Schreiner
|
|---|
| Dienstag 14-16 oder n.V.
| 31/318a
| Kühl
|
Kalender 1998/1999
| Oktober | 13
| Übersicht,
Literatur,
Ziele und Begriffe,
Syntaxgraphen,
Rekursiver Abstieg
|
|---|
| 15
|
BNF, EBNF, Bäume,
Rekursiver Abstieg
|
| 20
|
StreamTokenizer als Scanner, Laufzeitsystem, Persistenz
|
| 22
|
LL(1), JavaCC
|
| 27
|
JJTree,
LR(0) Algorithmus
|
| 29
|
jay Parser-Architektur
|
| November | 3
|
jay Ablauf, Fehlerbehandlung, Konflikte,
cup Grammatik,
|
|---|
| 5
|
jay Beispiele zu Ablaufverfolgung, Animation, Fehlerbehandlung, Konflikte,
cup Architektur
|
| 10
|
cup Details,
jlex Prinzip, Filterprogramme
|
| 12
|
jay Korrektur: Etiketten als Klassennamen,
jlex Scanner,
oops: Architektur
|
| 17
|
oops: Benutzung; lookahead und follow
|
| 19
|
oops: LL(1) Prüfung
|
| 24
|
jag
|
| 26
|
jag: Implementierung der Aktionen,
Code-Generierung für 0- bis 2-Adreß-Maschinen
|
| Dezember | 1
|
Code-Generierung für 2- und 3-Adreß- und Register-Maschinen
|
|---|
| 3
|
Code-Generierung für Register-Maschinen: Registerverwaltung, Triple-Coding durch Konstruktor-Aufrufe
|
| 8
|
Reguläre Ausdrücke;
Ein einfacher Compiler: Sprachbeschreibung,
Grammatik
|
| 10
|
Ein einfacher Compiler: Lexikalische Analyse,
Syntax-Analyse,
Semantik-Analyse
|
| 15
|
Ein einfacher Compiler: Interpretation
Code-Generierung: Dump, C-Code
|
| 17
|
Ein einfacher Compiler: Code-Generierung
|
| Januar | 12
|
Code-Generierung für Kontrollstrukturen,
mixed: mixed-mode Arithmetik,
CompilerKit: schrittweise Entwicklung, Laufzeitsystem
|
|---|
| 14
|
CompilerKit: Laufzeitsystem,
Semantikanalyse, Design-Prinzipien, Konstruktion des Parse-Baums
|
| 19
|
Semantikanalyse: Parse-Baum, sem(), Walkthrough zu sem()
|
| 21
|
Semantikanalyse: Walkthrough zu sem() ,
mixed: Parser
|
| 26
|
mixed: Parser, Quellpositionen,
CompilerKit: Klassenhierarchie, Methoden
|
| 28
|
mixed: Ausbau auf mixed mode,
RE-Strukturen,
proc: Sprachdefinition, Realisierung von return
|
| Februar | 2
|
proc: Interpreter,
Parse-Baum
|
|---|
| 4
|
proc: Semantikanalyse,
Speichermodelle für verschiedene Sprachen
|
| 9
|
block: Sprachdefinition und Beispiele,
Implementierung des Algol-Speichermodells,
rudimentärer Compiler
|
| 11
|
block: Parse-Baum,
Implementierung der Geltungsbereiche; Kritik und Anregungen
|