• Keine Ergebnisse gefunden

Codeerzeugung – Teil 1 (24 Punkte)

N/A
N/A
Protected

Academic year: 2022

Aktie "Codeerzeugung – Teil 1 (24 Punkte) "

Copied!
2
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Institut für Systemsoftware Übungen zu Übersetzerbau WS 2005/2006

Prof. Dr. H. Mössenböck Übung 5

Zuname Vorname Matr.-Nr.

Übungsgruppe Punkte korr.

‰ 1 (Kotzmann) Do 1015-1145

‰ 2 (Kotzmann) Do 1345-1515 Letzter Abgabetermin

‰ 3 (Wimmer) Do 1015-1145 Mittwoch, 07.12.2005, 2015 Uhr

Codeerzeugung – Teil 1 (24 Punkte)

Erweitern Sie Ihren Compiler um die Codeerzeugung gemäß der in den Unterlagen ausgegebenen  Spezifikation der MicroJava‐VM (siehe VO‐Skriptum Kapitel 6, Seite 6‐13). Die dafür nötigen  Klassen Code und Item befinden sich im Package ssw.mj.codegen.  

Die Klasse Item ist bereits vollständig implementiert. In der Klasse Code sind Methoden zur  Ausgabe häufig verwendeter Code‐Muster (Laden von Werten, Zuweisungen, …) zu implemen‐

tieren. Die Klasse Label wird erst für die nächste Übung benötigt. 

Zusätzlich befindet sich im Package auch ein Decoder (Decoder.java), der Objektcode der MicroJava‐

VM in textueller Form ausgibt. Sie können ihn als Hilfsmittel verwenden, um Ihren erzeugten  Objektcode zu überprüfen. 

In diesem ersten Teil der Codeerzeugung sollen Sie nur die Teile implementieren, die im VO‐

Skriptum bis einschließlich Folie 6.54 (Zuweisungen) beschrieben sind, d.h. Sie brauchen noch  keinen Code für Sprünge und Methoden bzw. Methodenaufrufe erzeugen. Daher sollen Sie bei dieser  Übung in  den  folgenden  Parsermethoden die für die korrekte Codeerzeugung  notwendigen  Änderungen noch nicht implementieren: 

Program, MethodDecl, Block. 

ActPars: nur Code.load() für jeden Parameter aufrufen. 

Condition, CondTerm 

CondFact: Nur Code.load() für beide Operanden aufrufen. 

• Bei Factor die Alternative für Methodenaufrufe: nur die Art des Items auf Stack setzen. 

Relop 

Außerdem  dürfen  Sie  auch  die  Parsermethoden  für  Anweisungen,  die  Sprünge  oder  Methodenaufrufe benötigen, noch unverändert lassen. Das betrifft die folgenden Alternativen in  der Methode Statement: 

• Bei Designator (case ident) die Alternative für Methodenaufrufe (case lpar) 

if‐Anweisung (case if_) 

while‐Anweisung (case while_) 

break‐Anweisung (case break_) 

return‐Anweisung (case return_): Nur Code.load() für den Rückgabewert aufrufen. 

Vergessen Sie nicht, alle Kontextbedingungen, die Sie nun prüfen können, auch tatsächlich zu  prüfen und entsprechende Fehlermeldungen auszugeben. 

(2)

 

Abgabe

Die Abgabe der Übungen 2 – 6 muss auf Papier und elektronisch erfolgen. Geben Sie folgende  Dateien ab: 

• Ausgedruckt auf Papier: Parser.java, Code.java, Tab.java, Struct.java. 

• Elektronisch als ZIP‐Datei: Alle Dateien, die zum Ausführen des Compilers benötigt  werden (Packages ssw.mj, ssw.mj.codegen und ssw.mj.symtab), also auch alle Klassen der  Angabe. Auf die Datei messages.properties nicht vergessen. Die Verzeichnis‐Struktur muss in  der ZIP‐Datei erhalten bleiben. 

Nicht abzugeben: JUnit‐Testfälle, .class‐Dateien, Projekt‐Dateien von IDEs. 

Referenzen

ÄHNLICHE DOKUMENTE

Implementieren Sie in der Klasse Code die Methoden zur Ausgabe häufig verwendeter Code- Muster, zB: Laden von Werten sowie Zuweisungen.. Vervollständigen Sie die

Implementieren Sie in der Klasse Code die Methoden zur Ausgabe häufig verwendeter Code- Muster, zB: Laden von Werten sowie Zuweisungen.. Vervollständigen Sie die

Ein Label verwaltet ein Sprungziel oder solange das Sprungziel unbekannt ist eine Liste von Sprüngen zu diesem Sprungziel.. Vervollständigen Sie die Klasse Label mit den Methoden

Jede Telefonnummer besteht aus einer optionalen Länderkennung (zB. „0732“) und einer beliebigen Anzahl von Ziffernsequenzen (aber mindestens einer).. Jede Länderkennung beginnt mit

Den Code für Sprünge und Methoden-Aufrufe müssen Sie erst in Übung 6 implementieren.. Denken Sie daran, alle Kontextbedingungen, die Sie nun prüfen können, auch tatsächlich

Attributieren Sie die schließlich die Grammatik, um nach folgenden Regeln für jede Methode ein Komplexitätsmaß zu berechnen:.  Jede Anweisung zählt

Den Code für Sprünge und Methoden-Aufrufe müssen Sie erst in Übung 6 implementieren.. Denken Sie daran, alle Kontextbedingungen, die Sie nun prüfen können, auch

Ein Label verwaltet ein Sprungziel oder solange das Sprungziel unbekannt ist eine Liste von Sprüngen zu diesem Sprungziel.. Vervollständigen Sie die Klasse Label mit den Methoden put()