• 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: 29. Juni 2011 Hand In: 6. Juli 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 Codegenerierung für Methoden

Erweitern Sie ihren Compiler um die Fähigkeit Code für beliebige statische Methoden und deren Aufrufe zu erzeugen.

a) Legen Sie Ihr Layout eines Stackframes, der Methodenpräambel und des -epilogs fest, und dokumentieren Sie es kurz schriftlich.

b) Implementieren Sie die oben beschriebene Erweiterung Ihres Compilers.

Aufgabe 3 Codegenerierung für globale Variablen

Erweitern Sie Ihren Compiler um die Möglichkeit Speicherplatz für statische Attribute von Klassen anzulegen und diese in Ausdrücken zu lesen und zu schreiben.

Aufgabe 4 IO-Bibliothek

Erweitern Sie Ihren Compiler um eine minimale Standardbibliothek. Diese enthält eine KlasseIO, s. unten. Diese Klasse wird implizit jedem Program zur Verfügung gestellt. Die Methoden lassen sich nicht direkt in MiniJava implementieren, deshalb wirdIOfest in den Compiler eingebaut.

class IO {

static void write(int i) { ... } // int in Terminal ausgeben static int read() { ... } // int vom Terminal einlesen }

In der Vorlesung wurden einige Systemcalls vorgestellt, u.a. zum Ausgeben eines Integers. Der Systemcall zum Lesen eines Integers ist dort nicht dokumentiert. Er hat den System-Call-Code 5 und schreibt sein Ergebnis in

$v0.

Hinweis: Um die Integration der KlasseIOmöglichst einfach zu gestalten ist es möglich einen abstrakten Syn- taxbaum fürIOnach dem Parsen an den Parseroutput anzuhängen. Dabei repräsentiert man die Methodenrümp- fe, die nicht in MiniJava programmierbar sind, durch einen Dummy. Beispielsweise können Sie die Deklaration vonMethodDecldurch folgende Deklarationen ersetzen. Dann stehtInternalMethodBody()für einen Metho- denrumpf, der in den Compiler fest eingebaut ist.

MethodDecl ( Integer line, Integer column, Modifiers modifiers, ReturnType retType, Identifier ident, FormalParameters params, MethodBlock body )

MethodBlock = Block

| InternalMethodBody ()

(2)

Die Namens- und Typanalyse kann dann weitgehend unverändert auf dem erweiterten Programm durchgeführt werden. Die Codegenerierung benötigt dann eine Sonderbehandlung fürInternalMethodBody().

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

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

• JavaCup erzeugt, nebem dem Parser, auch noch eine Klasse mit einer Konstante pro definiertem Nichtterminal- typ, diese heißt standardmäßig sym. • JFlex unterstützt die Anbindung

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

| If (Value cond, Statement thenCase, Statement elseCase) Assignment = Add (Value dest, Value left, Value right).. | Minus (Value dest, Value left,