• Keine Ergebnisse gefunden

Universit¨at Karlsruhe (TH) Lehrstuhl f¨ur Programmierparadigmen

N/A
N/A
Protected

Academic year: 2022

Aktie "Universit¨at Karlsruhe (TH) Lehrstuhl f¨ur Programmierparadigmen"

Copied!
3
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Universit¨ at Karlsruhe (TH)

Lehrstuhl f¨ ur Programmierparadigmen

Sprachtechnologie und Compiler WS 2008/2009 http://pp.info.uni-karlsruhe.de/

Dozent: Prof. Dr.-Ing. G. Snelting snelting@ipd.info.uni-karlsruhe.de Ubungsleiter: Matthias Braun¨ braun@ipd.info.uni-karlsruhe.de Ubungsblatt 11¨ Ausgabe: 19.1.2008 Besprechung: 21.1.2009

Aufgabe 1:Trampolines (Zusatzaufgabe)

Funktionszeiger sind laut C Sprachstandard ganz normale Zeiger (man kann Sie zuvoid∗und zur¨uck casten). Der gcc Compiler unterst¨utzt geschachtelte Funktionen und kann diese auch beliebigen Funktionszeigern zuweisen.

Es wird also anscheinend kein speziellere Datentyp f¨ur Closures angelegt, der einen Funktionszeiger und einen Zeiger auf die Umgebung enth¨alt. Wie kann das Funktionieren?

Aufgabe 2:x86-Assembler

Gegeben sei die folgende 3-Adresszwischensprache:

ti : adridentifier ti :=Speicheradresse der Variablenidentifier ti : load tj ti :=Memory [tj]

ti : constint const ti :=int const ti : plus tj tk ti := tj + tk

ti : less tj tk ti := tj < tk

ti : if tj tk Wenn tj <> 0springe Anweisungtk sonst f¨uhreti+1 aus ti : goto tj Springe zur Anweisungtj

ti : store tj tk Memory [tj] :=tk

ti : arg tj tj als Argument f¨ur den folgenden Call benutzen ti : callfoo Unterprogrammfooaufrufen

Gegeben Sei folgendes Zwischensprachprogramm:

t 0 : a d r i

t 1 : c o n s t 1 t 2 : s t o r e t 0 t 1

t 3 : a d r i

t 4 : l o a d t 3 t 5 : c o n s t 1 t 6 : p l u s t 4 t 5

t 7 : a d r i

t 8 : s t o r e t 7 t 6

t 9 : a d r j

t 1 0 : l o a d t 9 t 1 1 : a d r k t 1 2 : l o a d t 1 1 t 1 3 : p l u s t 1 0 t 1 2 t 1 4 : a d r i

t 1 5 : s t o r e t 1 4 t 1 6 : a d r i t 1 7 : l o a d t 1 6 t 1 8 : a d r j t 1 9 : l o a d t 1 8 t 2 0 : l e s s t 1 7 t 1 9 t 2 1 : i f t 2 0 t 2 7

(2)

t 2 2 : a d r j t 2 3 : l o a d t 2 2 t 2 4 : a d r min t 2 5 : s t o r e t 2 4 t 2 6 : g o t o 31 t 2 7 : a d r i t 2 8 : l o a d t 2 7 t 2 9 : a d r min t 3 0 : s t o r e t 2 9 t 3 1 :

2.1Quellprogramm

Wie k¨onnte die C-Funktion aussehen, aus der der Zwischencode erzeugt wurde?

2.21:1 Umsetzung

Ubersetzen Sie den Zwischencode in IA32-Assembler. Ersetzen Sie zun¨¨ achst jeden Befehl durch einen oder mehrere x86 Befehle.

2.3Optimierung

Geben Sie besseren IA32-Code an.

Aufgabe 3:Zwischensprachen 3.1Grundblagen

• In welche Einheiten wird ein Programm in der Zwischensprache typischerweise eingeteilt?

• Wie ist ein Grundblock definiert?

• Wie ist ein erweiterter Grundblock definiert?

• Wof¨ur sind erweiterte Grundbl¨ocke n¨utzlich?

3.2Ubersetzung¨ voidf(void) {

int x = rand();

x = rand();

label :

x = x + i;

if ( i >100){ gotolabel;

} else if (x <1){ return1;

}

int i = 10;

do{

if ( i <12) f ();

else

i = i + 2;

i = i + 1;

} while(i<20);

}

2

(3)

• Ubersetzen Sie das folgende Programm in die Zwischensprache aus der ersten Aufgabe!¨

• Markieren Sie alle Grundbl¨ocke!

• Teilen Sie das Programm in erweiterte Grundbl¨ocke ein!

Aufgabe 4:Zwischensprachen 2 Gegeben sei folgende C-Funktion f:

voidf(void) {

int a = 4;

int b = 42;

while(1){ int t = a;

a = b;

b = t;

printf (”%d %d\n”, a, b);

} }

4.1Dynamisches Verhalten

Was gibt die Funktion aus?

4.2Tripel-Form

Wie k¨onnte f in einer Zwischensprache mit Tripel-Form aussehen?

4.3Triple-Form mit SSA-Eigenschaft

Wie k¨onnte f in einer Zwischensprache mit Tripel-Form und SSA-Eigenschaft aussehen?

4.4Semantik derΦ-Funktion

Welche besondere Semantik haben Φ-Funktionen? Worauf muss man insbesondere bei diesem Beispiel achten?

3

Referenzen

ÄHNLICHE DOKUMENTE

Die lexikalische Analyse ist strenggenommen nur eine Optimierung, die die Eingabe in eine Form bringt die besser f¨ ur die syntaktische Analyse geeignet ist.. Sie f¨ uhrt zu

Zwar ist ASCII heutzutage so gut wie ¨ uberall unterst¨ utzt, viele Sprachen ben¨ otigen aber weitere Zeichen die in ASCII nicht enthalten sind. Typische ASCII-Erweiterungen im

• Nehmen Sie an die Anzahl der Register ist auf 3 beschr¨ ankt, spielt die Auswertungsreihenfolge bei den Ausdr¨ ucken jetzt noch eine Rolle. Aufgabe

Konstruieren Sie unter der Voraussetzung, dass alle nicht konstanten Operanden im Arbeitsspeicher stehen, Syntaxb¨ aume f¨ ur die folgenden Anweisungen:. 1. x = x

Skizzieren Sie Anordnung der Objekte auf dem Heap f¨ ur die Stelle nach dem Aufruf von ’A.create()’ unter der Annahme, dass beim Start der main Methode der Heap v¨ ollig leer

Semantische Analyse: Namensanalyse, Typanalyse, Operatoridentifikation, Konsistenzpr¨ ufung, Sprach- abh¨ angige Sonderaufgaben, Struktur¨ aquivalenz, Definitionstabelle,

Erstelle daf¨ ur zun¨ achst eine Tabelle mit den Gen- und Kill-Mengen der einzelnen Bl¨ ocke und f¨ uhre danach eine

F¨uhren Sie eine GOTO-Elimination f¨ur die folgende Methode durch (continue ist auch eine spezielle Form