Übungen zu Übersetzerbau

In den Übungen wird ein vollständiger Übersetzer für eine Java-ähnliche Programmiersprache (MicroJava) implementiert. Die Übungsaufgaben bauen aufeinander auf, so dass am Ende des Semesters ein vollständiger Übersetzer vorliegt.

Beginn: 4.10.2001

LVA-Leiter

LVA-NR. Gruppe LVA-Leiter Zeit Raum Ergebnisse
338.181 1 Wöß Do 10:15 - 11:45 KHG II als pdf
338.182 2 Wöß Do 12:45 - 14:15 K 001 A als pdf
338.183 3 Rammerstorfer Do 14:30 - 16:15 K 001 A als pdf

Tutoren

Name Kürzel Email
Baumgartner, Hans-Peter HPB hans-peter.baumgartner@students.uni-linz.ac.at
Fahrnberger, Markus MF markus.fahrnberger@students.uni-linz.ac.at
Girlinger, Franz FG franz.girlinger@students.uni-linz.ac.at
Löberbauer, Markus ML markus.loeberbauer@students.uni-linz.ac.at
Pakhomova, Natalia NP nataliepakhomova@hotmail.com
Prünner, Kurt KP pruenner@ssw.uni-linz.ac.at

Übungsmodus

  • Es gibt 7 Übungen
  • Die ersten sechs davon sind obligatorisch!!!
  • Achtung! Abschreiben und abschreiben lassen ist gefährlich.
    Abgeschriebene Übungen werden bei allen Beteiligten NICHT gewertet. Bei den ersten 6 Übungen resultiert das sofort in einem negativen Schein!
  • Die Übungen haben eine Maximalpunktzahl die proportional zum geschätzten Übungsaufwand ist.
  • Die siebte Übung erlaubt ein Streichresultat (gewichtet nach max. Punktzahl)
  • Übungsabgabe erfolgt in unregelmässigen Abständen jeweils bis Donnerstag, 8:15
  • Notenschlüssel (wenn die ersten 6 Übungen gewertet wurden):
      ab PkteNote
      21Sehr gut (1)
      18Gut (2)
      15Befriedigend (3)
      12Genügend (4)
      0Nicht genügend (5)
    Der Punktedurchschnitt, der die Gesamtnote bestimmt, wird folgendermaßen berechnet:

    MAX ( Punktedurchschnitt UE1 bis UE6 ; Punktedurchschnitt UE1 bis UE7)

    Dh man kann sich durch die 7. Übung nur noch verbessern, nicht aber verschlechtern.

  • Ab zwei abgegebenen Übungen wird ein Schein ausgestellt (positiv oder negativ).

Übungen

Angabe max.Pkt. Ausgabe Abgabe Hinweise, Downloads, ...
Übung 1 (als .pdf) 20 4.10. 11.10.  
Übung 2 (als .pdf) 24 11.10. 25.10. Token.java
Übung 3 (als .pdf) 32 25.10. 8.11.
  • Fehlerbehandlung:
    Es muss KEINE Fehlerbehandlung implementiert werden. Der Parser darf beim ersten Fehler abbrechen.
  • Testen: Es sollen folgende Dinge getestet werden:
    • ein (längeres) MicroJava-Programm, das alle Grammatikregeln anwendet und erfolgreich (also fehlerfrei) geparst wird
    • viele (ganz kurze) MicroJava-Programme, die jeweils unterschiedliche Fehlerfälle abdecken
Übung 4 (als .pdf) 8 8.11. 22.11.  
Übung 5 (als .pdf) 20 22.11. 6.12. MJ-Programm TestAllProds.mic (last updated: Nov 29, 2001)
Testoutput für TestAllProds.mic (last updated: Nov 29, 2001)
  • Hinweis 1: beim Testoutput sind schon tatsächliche Adressen für die Methodenanfänge eingefügt. Diese können aber erst bei der Codegenerierung bestimmt werden, dh sie müssen bei UE 5 noch NICHT eingetragen werden! Bitte entschuldigt ev. Verwirrungen, die daraus entstanden sind.
  • Hinweis 2: die Symbol-Objekte (Obj) des MicroJava-Programms (= Konstanten, innere Klassen, globale Variablen, Methoden) sollen an den locals-Zeiger des Program-Objekts (kind = Obj.Prog) in der Symbolliste angehängt werden. Das Programm-Objekt selbst ist der letzte Knoten im "Universum" (s.VO-Skript S. 17).
Übung 6 (als .pdf) 40 6.12. 10.1. MicroJava VM
Code-Generator-Gerüst (last updated: Jan 02, 2002)
Decoder-Klasse (last updated: Jan 02, 2002)
MicroJava Testprogram zum Testen des Compilers
Testoutput für TestAllProds.mic (last updated: Jan 02, 2002)
  • Hinweis 1: Arrays
    Zum Anlegen eines Array verwendet man immer den Befehl newarray b. Dabei erhält b den Wert 0, wenn es sich um ein char-Array handelt, in allen anderen Fällen 1. Die Länge des Arrays muss zur Laufzeit zu oberst auf dem Expression Stack liegen.
  • Fehler in Angabe: Datei Code.java
    Die Methoden Code.get und Code.get2 lieferten falsche Werte.
    Die Datei Code.java enthält die Änderung seit 2.1.2002
  • Da in dieser Übung die Endversion des Compilers erstellt wird, muss dieser genau den Spezifikationen aus dem VO-Skriptum entsprechen. Vergleichen Sie also Ihren Compiler mit allen Angaben aus der MicroJava-Sprachbeschreibung (Kapitel 5, S.8-13) und überprüfen Sie auch, ob die erzeugten Maschinenanweisungen der Spezifikation der MicroJava-VM (Kapitel 6, S.14-18) entsprechen.
  • Ergänzung der Spezifikation:
    Die Spezifikation der Maschinenbefehle der MJ-VM ist bei der Angabe der Parameter ungenau und außerdem stimmen die Implementierungsbeschränkungen unter 5.5 des VO-Skripts nicht mit der tatsächlichen Implementierung der MJ-VM überein.
    Richtig sollte es heissen:
    • unter 6.2 Befehlssatz (S.15 VO-Skriptum):
             b ein Byte (8 Bit, vorzeichenbehaftet)
             s ein Shortint (16 Bit, vorzeichenbehaftet)
             w ein Wort (32 Bit, vorzeichenbehaftet)
    • 5.5 Implementierungsbeschränkungen: (S.13 VO-Skriptum):
      • Es darf nicht mehr als 128 lokale Variablen geben.
      • Es darf nicht mehr als 32768 globale Variablen geben.
      • Eine Klasse darf nicht mehr als 32768 Felder haben.
      • Der Code des gesamten Programms kann höchstens 8 KByte groß sein.
    Die Dateien Code.java, Decoder.java und ue6_output.txt wurden am 2.1.2002 entsprechend angepasst.
Übung 7 (optional, als .pdf) 24 10.1. 24.1.  

Zeitplan

UE-Std KW Datum Ausgabe Abgabe Hinweise, Unterlagen, ...
1 40 4.10. UE 1    
2 41 11.10. UE 2 UE 1 Folien UE-Std. 2
--- 42 18.10.     keine UE, VO findet statt!
3 43 25.10. UE 3 UE 2  
--- 44 1.11.     LVA-frei (Allerheiligen)
4 45 8.11. UE 4 UE 3  
--- 46 15.11.     LVA-frei (Landespatron)
5 47 22.11. UE 5 UE 4 Folien: Parser-Methoden (vorher/nachher)
Folie: MJ-Programm Abc
6 48 29.11.      
7 49 6.12. UE 6 UE 5 Folie: Codeerzeugungsanweisungen
8 50 13.12.     Folien: Methodenaufruf-Code
--- 51 20.12.     LVA-frei (Weihnachtsferien)
--- 52 27.12.     LVA-frei (Weihnachtsferien)
--- 1 3.1.     LVA-frei (Weihnachtsferien)
9 2 10.1. UE 7 UE 6  
10 3 17.1.      
11 4 24.1.   UE 7  

Downloads

Weitere Informationen: