• Keine Ergebnisse gefunden

Übungsblatt 9: Übersetzer und sprachverarbeitende Werkzeuge (SS 2011)

N/A
N/A
Protected

Academic year: 2022

Aktie "Übungsblatt 9: Übersetzer und sprachverarbeitende Werkzeuge (SS 2011)"

Copied!
2
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Prof. Dr. Arnd Poetzsch-Heffter Dr.-Ing. Jan Schäfer

Technische Universität Kaiserslautern Fachbereich Informatik AG Softwaretechnik

Übungsblatt 9: Übersetzer und sprachverarbeitende Werkzeuge (SS 2011)

Hand Out: 22. Juni 2011 Hand In: 29. Juni 2011

Aufgabe 1 Prüfungsfragen zu den Vorlesungen

Überlegen Sie sich mindestens zwei Prüfungsfragen und tragen Sie diese unterhttp://bit.ly/kJORSiein.

Aufgabe 2 Einfache Codegenerierung

Erweitern Sie Ihren Compiler um ein Backend zur Erzeugung von MIPS-Assembler. Gehen Sie dabei davon aus, dass Sie nur Eingaben behandeln, die aus einer Klasse mit einer statischen Methode (Main.main) bestehen.

Diese Methode ruft sichnichtrekursiv selbst auf. Konzentrieren Sie sich auf die Übersetzung von Statements und Expressions.

Kopieren Sie sich dazu den Code aus demcommon/src/minijava/backendOrdner des Subversion-Repositories in Ihren Gruppen-Ordner. Der Ordner enthält eine Katja-Spezifikation für abstrakte Syntax des MIPS-Assembler und Code, um diesen als Assemblercode auszugeben. Die KlasseBackend stellt Methoden bereit, die Sie aus Ihrem Compiler aufrufen, um das Backend auf einen MiniJava-AST anzuwenden.

In der KlasseMIPSTranslationfügen Sie ihren Code zur Übersetzung von Statements und Expressions an den dokumentierten Stellen ein.

Sie können den vorgegebenen Code auch ändern.

Hinweise:

• Sehen Sie den zur Verfügung gestellten Code erst durch, und lesen Sie die Kommentare, bevor Sie anfangen Ihren Code zu entwickeln.

• Der Assembler-Code soll in Dateien geschrieben werden, die bis auf die Endung, genauso heißen wie die zu übersetzenden Quelldateien. Verwenden Sie die Endung.asm. Code hierfür ist in der KlasseBackend zur Verfügung gestellt.

• Verwenden Sie MARS, um Ihre Compilerausgaben zu testen.

Aufgabe 3 MIPS-Assembler für Nicht-Strikte Ausdrücke

Übersetzen Sie nach dem Verfahren der Vorlesung die folgenden Statements mit nicht-strikten Boolschen Aus- drücken nach MIPS-Assembler. Übersetzen Sie das Statement Skip in die NOOP-Instruktion. Führen Siekeine Optimierung durch.

a) ItThenElse( Not( And(True, False)), Skip, Skip ) b) While ( Or(False, True), Skip)

(2)

Aufgabe 4 MIPS-Assembler für Prozeduraufrufe

Übersetzen Sie, basierend auf dem Vorlesungswissen über Stackframes und Prozeduren, folgende MiniJava- Methode nach MIPS-Assembler von Hand. Schreiben Sie auch einen exemplarischen Aufruf dieser Methode in MIPS-Assembler.

static int test(int i, boolean j) { int result = 0;

if (j) {

result = i + 1;

} else {

result = result - i;

}

return result;

}

Formulieren Sie Ihren Pro- und Epilog so generisch, dass klar wird, wie er für andere MiniJava-Methoden ausse- hen müsste.

Aufgabe 5 Verschachtelte Prozeduren

Betrachten Sie folgende verschachtelte Prozeduren:

proc P var vp proc Q

var vq begin end proc R

var vr1 var vr2 proc S begin

call Q end begin

call S end begin

call R end

a) Geben Sie zu jeder Prozedur die Verschachtelungstiefe, die sichtbaren Variablen, die aufrufbaren Prozeduren und den direkten statischen Vorgänger an.

b) Betrachten Sie folgende Aufrufkette: P -> R -> S -> Q. Geben Sie einen passenden Stack mit SPR- Referenzen an (wie das Beispiel auf Folie 115).

Referenzen

ÄHNLICHE DOKUMENTE

Das Build-Skript muss unter Linux funktionieren, wobei Sie davon ausgehen können, dass java und javac ausführbar und im PATH sind und dass die JFlex.jar -Datei im CLASSPATH ist

Sie sollen eine Methode schreiben, die ein ExpressionPos -Objekt nimmt und den zugrunde liegenden Ausdruck mathematisch korrekt vereinfacht, in dem konstante Teilausdrücke

• Jede CompilationUnit muss genau eine Klasse Main mit einer statischen Methode static void main() enthalten.. • Jede Methode und jedes Attribut

Textboxen müssen als ganzes auf einer Seite erscheinen (sie dürfen nicht umgebrochen werden). Zwischen zwei Textboxen auf einer Seite muss genau eine Zeile frei bleiben. Textboxen

Die Methoden lassen sich nicht direkt in MiniJava implementieren, deshalb wird IO fest in den Compiler eingebaut.. class

d) Erweitern Sie die Namens- und Typanalyse um die neuen Konstrukte. Nun sind auch nicht-statische Methoden und Felder in Klassen erlaubt. Beachten Sie, dass Sie in statischen

Erweitern Sie die Zwischensprache von oben so, dass Sie als Zwischensprache für Ihren MiniJava-Compiler ge- eignet ist und integrieren Sie die zuvor implementierte Analyse

Ihr Programm soll eine Datei einlesen und die Baumstruktur als Text ausgeben, so dass man nachvollziehen kann, dass korrekt