Compiler and Language-Processing Tools

Information about this lecture can be found in KIS and in the Module Handbook.

The lecture will be held in English.

News

  • Die Termine für die mündlichen Prüfungen sind festgelegt (siehe Organisatorisches)

Topics of the Lecture

  • Syntax specification of programming and formal languages
  • Lexical analysis: scanning, scanner generation, application of scanner generators
  • Context free analyses: parsing, parser generation, application of parser generators
  • Design and use of abstract syntax
  • Context sensitive analysis: name analysis, type analysis, attribution techniques and tools
  • Processing of XML documents
  • Compilation techniques for procedural and object-oriented languages
  • Intermediate languages for compilation
  • Semantical aspects and optimization techniques
  • Instruction selection
  • Register assignment
  • Code generation
  • Automatic memory management and garbage collection

People

Prof. Dr. Arnd Poetzsch-Heffter will give the lecture and %JAN_LINK% will give the practice sessions.

Organisation

  • The lecture will take place on Wednesdays and Fridays, from 08:15 to 09:45 in room 32-439. The first lecture is on Wednesday, April 20.
  • The practical classes will take place on Fridays at 11:15 in room 34/420.

Material

Lecture Slides

No Title Date Slides Info
1 Introduction Lecture 20/4 Slides (1 per page), Slides (2 per page), Slides (8 per page) updated on 20 April
2 Lexical Analysis Lecture 27/4 Slides (1 per page), Slides (2 per page), Slides (8 per page)
3 Context-free syntax analysis (slides 1-46) Lecture 29/4 Slides (1 per page), Slides (2 per page), Slides (8 per page)
4 (slides 47-84) Lecture 4/5 slide sets above updated on May 3
5 (slides (85-92)+((101-110) Lecture 6/5 slide sets above updated on May 4 (corrections on 58-60, additional slides)
6 (slides (93-100)+(111-139) Lecture 11/5 slide sets above updated on May 8 (added slides 93-100 and 121-152)
7a (slides (139-152) Lecture 18/5 slide sets above
7b Context-dependent analysis (slides (1-32) Lecture 18/5 Slides (1 per page), Slides (2 per page), Slides (8 per page)
8 (slides 33-64) Lecture 25/5 slide sets above updated on May 23
9 (slides 65-114) Lecture 1/6 slide sets above updated on June 1
10 Translation of imperative language constructs (slides 1-41) Lecture 3/6 Slides (1 per page), Slides (2 per page), Slides (8 per page)
11 (slides 41-78) Lecture 8/6 slide sets above updated on June 8
12 (slides 79-11) Lecture 10/6 slide sets above updated on June 9
13a (slides 111-130) Lecture 22/6 slide sets above updated on June 20
13b Translation of object-oriented language constructs (slides 1-51) Lecture 22/6 Slides (1 per page), Slides (2 per page), Slides (8 per page)
14 Selected Topics in Compiler Construction (slides 1-57) Lecture 24/6 Slides (1 per page), Slides (2 per page), Slides (8 per page)
15 (slides 58-89) Lecture 1/7 slide sets above updated slides 58-95 on July 1
16 (slides 90-129) Lecture 8/7 slide sets above updated slides 95-151 on July 7
17 (slides 130-170) Lecture 13/7 slide sets above updated slides 130-187 on July 13
18a (slides 171-195) Lecture 15/7 slide sets above
18b Garbage Collection (slides 1-26) Lecture 15/7 Slides (1 per page), Slides (2 per page), Slides (8 per page)
19a (slides 27-41) Lecture 20/7 slide sets above updated slides 27-41 on July 19
19b XML Processing (slides 1-54) Lecture 20/7 Slides (1 per page), Slides (2 per page), Slides (8 per page)
20 (slides 55-88) Lecture 22/7 slide sets above

Praktische Übungen

Die praktischen Übungen finden im SCI-Terminalraum 32/411 statt.

Nr Titel Datum Material
1 Parser Generatoren und Java CUP 13. Mai 2011 Folien
2 ASTs in Java with Katja 20. Mai 2011 Folien, expr.katja, Evaluator.java, PrettyPrinter.java
3 Zweite Katja Übung 27. Mai 2011 Folien, Beispiel-Code als ZIP
4 MIPS Translation 29. Juni 2011 Folien
5 Translation of OO Concepts 8. Juli 2011 Folien

Problem Sheets

Please work out the exercises in groups of 2 or at most 3 people. Please send the solutions before the given date via email to %JAN_LINK%. If there are any questions or obscurities regarding the exercises, please do not hesitate and contact %JAN_LINK%. Do not wait until the hand in date!

No Hand Out Hand In Exercise Sheet Additional Recources Comments on Solutions
1 20. April 27. April Exercise 1 Ex1.java Notizen aus der Übung
2 27. April 4. Mai Exercise 2 Lösungshinweise zu Aufgabe 1 Notizen aus der Übung
3 4. Mai 11. Mai Exercise 3 Beispiel Makefile Notizen aus der Übung, Lösungshinweise zu den Aufgaben 1 und 2, XML-Parser: xml.flex, Grammatik (in JavaCUP), XMLParser.java
4 11. Mai 18. Mai Exercise 4 MiniJava.flex, Token.java Notizen aus der Übung
5 18. Mai 25. Mai Exercise 5 MiniJava.katja Lösungshinweise zu Aufgabe 1
6 25. Mai 1. Juni Exercise 6 KatjaAttribute.java
7 1. Juni 8. Juni Exercise 7 Lösungshinweise zu Aufgabe 1
8 9. Juni 22. Juni Exercise 8
9 22. Juni 29. Juni Exercise 9
10 29. Juni 6. Juli Exercise 10 Notizen aus der Übung
11 6. Juni 13. Juli Exercise 11
12 14. Juni 20. Juli Exercise 12 TAC.katja Notizen aus der Übung

Additional Files

Literature

  • A. Appel: Modern Compiler Implementation in Java, Cambridge University Press, 2002 (2nd edition), INF 466/120

  • Wilhelm, R.; Maurer, D.: Übersetzerbau: Theorie, Konstruktion, Generierung, Springer, 1992. INF 466/109

For literature concerning the lecture, consult the following web site.

Dokumentation und Hinweise zu den verwendeten Tools

  • JFlex (Scanner-Generator)
  • JavaCUP (Parser-Generator)
  • Katja (AST-Generator)

  • Katja - Java CUP - Tutorial. Unter KatjaUndJavaCUP findet ihr ein Tutorial, dass zeigt wie man Katja in Verbindung mit Java CUP benutzt.
  • Java CUP und static imports. Die offizielle Java CUP Version unterstützt keine static imports! Da das Arbeiten mit Katja dann etwas unschön wird, haben wir eine modifizierte Variante von Java CUP erstellt, die dieses Feature unterstützt. Ihr findet diese Version im Subversion unter https://softech.informatik.uni-kl.de/svn/Studenten/trunk/11_CLP/common/lib. Ihr findet dort ebenfalls JAR-Dateien für JFlex und Katja. Ihr könnt in eurem Build-Process auch auf diese JAR-Dateien direkt verweisen, oder mittels svn copy in euer Verzeichnis kopieren.
  • Erstellen von TAGS für Übungsabgaben. Um eure Abgaben jeweils zu markieren legt bitte in eurem group-Verzeichnis ein Verzeichnis tags an. Ihr benötigt außerdem ein weiteres Unterverzeichnis indem ihr die aktuelle Version eures Kompilers habt, z.b. trunk. Um jetzt eine Abgabe zu taggen, führt ihr den Befehl svn copy trunk tags/blattX durch.