|
Veranstalter:
Jan Bredereke
Termin:
Mo 17:15-18:45 Uhr,
MZH
7230
Beginn: Mo. 29.10.2007
Am 28.1.2008 fällt die Vorlesung aus.
ECTS: 2
Kategorie: A
VAK: 03-05-H-705.51
Übersetzer sind grundlegende Werkzeuge der Informatiker.
Für Standardsprachen stehen zwar bereits fertige
Übersetzer zur Verfügung. Aber nur wenn man ihre
Arbeitsweise kennt, kann man alltägliche Fragen beantworten wie
etwa: Welche Fehler in meinem Programm kann der Übersetzer
finden? Wie effizient kann er ein Konstrukt übersetzen?
Viele Implementierungsaufgaben können als Implementierung eines
Übersetzers für eine spezialisierte,
domänenspezifische Sprache aufgefaßt werden. Jede
Übersetzung von Eingabedaten in Ausgabedaten ist eine
Übersetzung von einer spezialisierten Sprache in eine andere
spezialisierte Sprache. Auch die Interaktion mit einem Benutzer ist
eine Übersetzung von Benutzereingaben in Programmausgaben.
Für solche Aufgaben müssen auch heute noch ständig
neue Übersetzer (und Interpreter) implementiert werden.
Es gibt Werkzeuge, mit denen man einen Übersetzer zu
großen Teilen automatisch generieren kann. Die Menge der
Eingaben und die Menge der Ausgaben des Übersetzers stellen je
eine domänenspezifische Sprache (DSL, domain specific
language) dar. In einer Meta-Sprache wird die Eingabe-DSL für
das Generatorwerkzeug beschrieben.
In dieser Vorlesung lernen wir insbesondere die Werkzeuge
lex und yacc kennen, beziehungsweise deren
Varianten flex und bison. Ziel ist, mit diesen Werkzeugen
Übersetzer für eigene domänenspezifische Sprachen
generieren zu können. Weiterhin stellen wir kurz das Werkzeug
sed vor, mit dem man auf regulären
Ausdrücken basierende Textersetzungen in einem Datenstrom
vornehmen kann, sowie das Werkzeug make, mit dem man die
Schritte automatisieren kann, die bei der Generierung eines
Programms aus vielen Quelldateien nötig sind. Insbesondere
dient make der Verwaltung der Abhängigkeiten dieser
Schritte, was bei Programmänderungen wichtig wird.
Ebenso wird der theoretische Hintergrund eingeführt:
Lexikalische Analyse (reguläre Ausdrücke, endliche
Automaten), Syntaxanalyse (kontextfreie Grammatiken, absteigende
Analyse, aufsteigende Analyse, Fehlerbehandlung) und
syntaxgesteuerte Übersetzung (Syntaxbäume,
Übersetzungsschemata).
Voraussetzung für die Teilnahme ist das Vordiplom
oder zumindest der erfolgreiche Abschluß der
Grundstudiumsveranstaltungen "Theoretische Informatik I"
und "Praktische Informatik 2".
Diese
Veranstaltung richtet sich an alle, die an der praktischen
Generierung von Übersetzern mit den Werkzeugen lex und yacc
interessiert sind.
Diese Vorlesung stellt die Werkzeuge lex und yacc viel
ausführlicher vor als die von Berthold Hoffmann
regelmäßig gehaltene Vorlesung und Übung
"Übersetzer". Dort wird der theoretische Hintergrund
des Übersetzerbaus breiter dargestellt, einschließlich
weiterer Aspekte wie Kontextanalyse und Codeerzeugung. Weiterhin
gibt es bei Berthold wechselnde Vertiefungsveranstaltungen zu
"Übersetzer".
- 1. Überblick und Einführung.
(pdf)
29.10.2007
- 2. Lexikalische Analyse.
(pdf)
5.11.2007
- 2.1 Einleitung.
- 2.2 Beschreiben von Lexemen: reguläre Ausdrücke.
- 2.3 Erkennen von Lexemen: endliche Automaten.
- 2.4 Fehlerbehandlung.
- 2.5 Transformation von Lexemen.
- 2.6 Symboltabellenverwaltung.
- 3. Der Textstrom-Editor sed.
(pdf)
- Beispiele und Lösungen
(als tar/gzip -
in Verzeichnis)
12.11.2007
- 3.1 Grundprinzip eines Textstrom-Editors.
- 3.2 Reguläre Ausdrücke in sed.
- 4. Der Scanner-Generator lex.
- 4.1 Grundlagen.
(pdf)
- Beispiele und Lösungen
(als tar/gzip -
in Verzeichnis)
19.11.2007
- 4.1.1 Einführung.
- 4.1.2 Aufbau einer lex-Datei.
- 4.1.3 Einfacher Aufruf von flex.
- 4.1.4 Basiskonstrukte.
- 4.1.5 Weitere nützliche Konstrukte.
- 4.1.6 Übung: Einfacher Taschenrechner.
- 4.1.7 Der Match-Algorithmus.
- 4.1.8 Kommunikation mit einem Parser.
- 4.1.9 Übung: Konversion römischer Zahlen.
- 4.2 Fortgeschrittenes.
(pdf)
- Beispiele und Lösungen
(als tar/gzip -
in Verzeichnis)
26.11.2007
4.2.1 Wiederholung und Festigung.
- 4.2.2 Scanner-Zustände, Grundlagen.
- 4.2.3 Umlenken der Ein- und Ausgabe.
- 4.2.4 Reguläre Ausdrücke, Fortgeschrittenes.
- 4.2.5 Scanner-Zustände, Fortgeschrittenes.
- 4.2.6 Mehrere Lexer in einem Programm.
- 4.2.7 Aufruf- und Datei-Optionen von flex.
- 4.2.8 flex und andere Lexer.
- 5. Syntaxanalyse und der Parser-Generator yacc.
-
3.12.2007:
(pdf)
- Beispiele und Lösungen
(als tar/gzip -
in Verzeichnis)
- 5.1 Einleitung.
- 5.2 Kontextfreie Grammatiken.
- 5.3 Grundlagen von yacc.
- 5.4 Absteigende Analyse.
-
10.12.2007, 17.12.2007:
(pdf)
- Beispiele für Kap. 5.5.1 bis 5.5.3
(als tar/gzip -
in Verzeichnis)
- 5.5 Aufsteigende Analyse, 1. Teil.
- 5.5.1 Prinzip der aufsteigenden Analyse.
- 5.5.2 Algorithmus der LR-Syntaxanalyse.
- 5.5.3 Konstruktion der Syntaxanalysetabellen.
-
17.12.2007, 7.1.2008:
(pdf)
- Beispiele für Kap. 5.5.4, 1. Teil
(als tar/gzip -
in Verzeichnis)
- Beispiele und Lösungen für den Rest
(als tar/gzip -
in Verzeichnis)
- 5.5 Aufsteigende Analyse, 2. Teil.
- 5.5.4 Konflikte.
- 5.5.5 Präzedenzen.
- 5.5.6 Fehlerbehandlung.
- 6. Syntaxgesteuerte Übersetzung.
(pdf)
- Beispiele
(als tar/gzip -
in Verzeichnis)
14.1.2008:
- 6.1 Syntaxgesteuerte Definitionen.
- 6.2 Konstruktion expliziter Syntaxbäume.
- 6.3 Aufsteigende Auswertung.
- 7. Übersetzungssteuerung mit make.
(pdf)
- Beispiele und Lösungen
(als tar/gzip -
in Verzeichnis)
21.1.2008, 4.2.2008:
- 7.1 Grundlagen von make.
- 7.2 Arbeiten mit make.
- 7.3 Ein wenig Fortgeschrittenes.
- Wiederholung.
(pdf)
4.2.2008:
Ausgewählte Folien der gesamten Vorlesung zur
Wiederholung des Stoffs.
Die Folien werden immer eine Woche vor der zugehörigen Vorlesung hier
veröffentlicht.
Errata:
Fehler in den Folien, die wir erst während der Vorlesung
finden, werden auf einer eigenen
Seite gesammelt.
Eine noch detailliertere Liste der Themen jedes
Kapitels findet sich auf einer eigenen Seite.
- [AhSeUl99] Alfred V. Aho, Ravi Sethi, Jeffrey D. Ullman.
-
Compilerbau, Teil 1.
Oldenbourg,
2. Aufl. (Dez. 1999). ISBN 3-486-25294-1.
Das "Drachenbuch", das Standardwerk zum Thema Compilerbau.
Teil 1 reicht für diese Vorlesung voll aus.
(Im Jahr 2006 ist eine neue Auflage des englischen Originals
erschienen, die deutsche Übersetzung davon steht aber noch
aus.)
- [NN93] N. N.
-
sed(1) Manual-Seite.
In: LunetIX Linuxhandbuch (Juli 1993).
(ps/gzip 7 kB -
pdf 20 kB)
- [HaWoOl93] Mike Haertel, James A. Woods und David Olson.
-
grep(1) Manual-Seite.
In: LunetIX Linuxhandbuch (Juli 1993).
(ps/gzip 5 kB -
pdf 12 kB)
- [LeMaBr95] John R. Levine, Tony Mason und Doug Brown.
-
lex & yacc.
O'Reilly,
zweite korrigierte Auflage (1995). ISBN 1-56592-000-7.
Für die, die ein ausführliches Lehrbuch
zu den Werkzeugen lex und yacc möchten.
Die Manuals von flex und bison sind aber auch sehr gut. Wir
verwenden flex und bison, dieses Buch konzentriert sich auf lex
und yacc.
- [Pax90] Vern Paxson.
-
Flex, version 2.5 - A fast scanner generator.
University of California (1990).
(ps/gzip 108 kB -
pdf 328 kB)
Die Version von flex, die bei SuSE-Linux 8.2 dabei ist.
- [DoSt02] Charles Donelly and Richard Stallman.
-
Bison - The YACC-compatible parser generator.
Version 1.75. Free Software Foundation (2002). ISBN 1-882114-44-2.
GNU Free Documentation License.
(ps/gzip 266 kB -
pdf 454 kB)
Die Version von bison, die bei SuSE-Linux 8.2 dabei ist.
- [StMcSm02] Richard M. Stallman, Roland McGrath und Paul Smith.
-
GNU Make -
A Program for Directing Recompilation.
Version 3.80. Free Software Foundation (Juli 2002). ISBN 1-882114-81-7.
GNU Free Documentation License.
(ps/gzip 385 kB -
pdf 699 kB)
Die aktuelle Version von GNU make. Sie ist bei SuSE-Linux 10.1 dabei.
Quellen für die verwendete Software
Die freien Versionen von lex und yacc, flex und
bison, sollten auf allen Unix-Rechnern des Fachbereiches
installiert sein. Auch bei allen aktuellen Linux-Distributionen
sollten sie dabei sein. Windows-Nutzer finden sie im Cygwin-Paket.
Das gleiche gilt natürlich für GNU make,
sed und grep.
Übersetzergeneratoren für Java
lex und yacc generieren Code in C bzw. C++, aber es gibt auch
Generatoren für Code in Java.
CUP ist ein LALR-Parser, ganz ähnlich wie yacc. Man
kann als Scanner-Generator dazu z.B. JFlex oder
JLex verwenden. Wem die eingeschränkteren
Möglichkeiten eines LL-Parsers reichen, der kann sich auch
javacc oder antlr ansehen. Alle diese Programme
sind wie yacc ebenfalls frei erhältlich.
Download-Links
Die Scheinbedingungen werden am ersten Vorlesungstermin ausgehandelt.
Am Montag, den 29.10.2007, wurde
ausgehandelt:
- keine Übungsaufgaben
- mündliche Prüfung am Ende
- 20-30 min. pro Kandidat
- auf Wunsch mit Beisitzer
Termine: Mo. 11.2.2008 zwischen 10:00 Uhr und 14:30 Uhr
in MZH
8090.
Am 17.12.2008 wurde in der Vorlesung eine Liste mit Terminen
und Uhrzeiten zum Eintragen herumgegeben. Am 7.1.2008 wurde
diese Liste noch einmal herumgegeben.
Zur Vorbereitung auf die Prüfung ist
vielleicht die detaillierte Liste der Themen jedes
Kapitels hilfreich, die auf einer eigenen Seite
steht. Wer zu jedem Stichpunkt etwas Sinnvolles erzählen kann,
der kann der Prüfung sehr, sehr zuversichtlich entgegensehen.
Termine: Mo. 10.3.2008 zwischen 16:30 Uhr und 17:30 Uhr
in MZH
8090.
|
|