Subato

 

Compilerbau (WS 2020)

 

Responsible Lecturer:
panitz

Lecturers

Lecture Times
  • Vorlesung Mon 11:45 c037
Training Groups
  1. Praktikum Mon 14:15 C001
    (panitz)

Exercise Sheets

 


Willkommen zum Compilerbau

 

Vorlesung

Es gibt ein Vorlesungsskript  , in dem schrittweise eine Compiler als Beispielprojekt entwickelt wird. Der Quelltext der Anwendung aus dem Skript, befindet sich auf dieser Seite.

Praktikum

Die Prüfungsform besteht in einer praktischen Tätigkeit. In dieser ist in Einzelarbeit ein Compilerprojekt zu realisieren. Das Projekt ist zu dokumentieren und in einem Vortrag vorzustellen.

Anforderungen an Compilerbau Projekt

Zu schreiben ist ein Compiler, der eine eigene Quellsprache in eine Maschinensprache übesetzt.

  • Die erzeugten Maschinenprogramme müssen ausführbar sein. (Assmblerprogramme in der Regel mit einer c-main gelinkt, JVM Programme auf der JVM ausführbar.)
  • Als Maschinensprache, kommen Assembler, JVM Byte-Code oder Intermediate Language in Frage. Als Implementierungssprache sind Java, Haskell, C#, C, C++ ... denkbar.
  • Als Generatortool sind Parsergeneratoren wie antlr, javacc, sablecc, bisom/flex, happy, citron denkbar.
  • Es muss eine ausreichende Menge von Beispiel-/Testprogramme geben.
  • Das Projekt soll auf dem git-lab Repository der Informatik versioniert sein. https://gitlab.cs.hs-rm.de/
  • Sprachfeatures der Quellsprache:
    Muss:
    • Ausdrücke der Arithmetik, Vergleiche Bool'sche Operatoren mit Operator-Präzedenzen
    • Fallunterscheidung (z.B. mit if)
    • Funktionsdefinitionen und Funktionsaufrufe.
    • Rekursive Funktionen.
    Ausbaustufe:
    • veränderbare Variablen
    • Schleifen
    • strukturierte Daten (Bei der Generierung von Java Byte Code sind strukturierte Daten Pflicht.)

Bewertungsrahmen:

  • Gibt es unterschiedliche Typen, die gecheckt werden?
  • Wie komplex ist die Quellsprache?
  • Wie ausführlich ist das Testszenario?
  • Gibt es strukturierte Daten?
  • Wurden Optimierungen durchgeführt? (Tail Call?)
  • Lässt sich der Compiler gut verwenden und eigene Programm übersetzen und ausführen?
  • Wie gut ist das Benutzerhandbuch?

 

Lessons
January 25, 2021, 11:45 AM
Umstellung von javacc auf antlr.
Einbau eines switch auf den Typ der Daten im Heap.
Layout als Teil der Grammatik. Cases zu switch müssen alle in gleicher Spalte liegen.
January 18, 2021, 11:45 AM

Tail call Optimierung

January 11, 2021, 11:45 AM

Typcheck und Zugrifff auf Attribute in strukturierten Daten.

January 4, 2021, 11:45 AM
Konstruktordefinition in Assembler und Aufrif von Konstruktoren. Anfang für Feldzugriff.
December 14, 2020, 11:45 AM
Konstruktoren für strukturierte Daten und Generierung einer entsprechenden Klasse für Java Byte Code.
(als v3.tgz speichern und mit tar xvzf v2.tgz entpacken.)
 
 
November 30, 2020, 11:45 AM

Funktionsdefinitionen und Funktionsaufrufe in Assembler. Stack pointer und Base Pointer.

(als v3.tgz speichern und mit tar xvzf v2.tgz entpacken.)
 
November 23, 2020, 11:45 AM
Funktionsdefinitionen und Aufrufe mit Interpreter und JBC Generierung.
(als v2.tgz speichern und mit tar xvzf v2.tgz entpacken.)
November 16, 2020, 11:45 AM
Erweiterung um Addition und geklammerte Ausdrücke und Erzeugen von Assembler.
 
(als v1.tgz speichern und mit tar xvzf v1.tgz entpacken.)
November 9, 2020, 11:45 AM
Parser mit javacc. AST mit Visitor Pattern und Java byte Code Generierung, für Sprache mit Int-Literalen und Multiplikation.
(als v0.tgz speichern und mit tar xvzf v0.tgz entpacken.)
November 2, 2020, 11:45 AM
Übersicht Compiler. Phasen eines Compilers.