• 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!
1
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 12¨ Ausgabe: 29.1.2009 Besprechung: 4.2.2009

Aufgabe 1:Codeerzeugung

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

1. x=a∗b+c∗d;

2. x[i] =y[j]∗z[k];

3. x=x+ 1;

Verwenden Sie die Verfahren zum Neuschreiben von B¨aumen aus den Zusatzfolien der Vorlesung, um Code f¨ur die einzelnen Anweisungen zu erzeugen.

Aufgabe 2:LR-Parser zur Codegenerierung

Anstatt Baumersetzungsverfahren kann man auch einen LR-Parser zur Erzeugung von Maschinencode nutzen.

Dazu werden die Ausdr¨ucke der Zwischensprache in einer normalisierte Pr¨afixdarstellung als String dargestellt.

Die Codeerzeugung geschieht dann mit Hilfe eines LR-Parsers dessen Aktionen bei der komplettierung einer Regel das Ausgeben von Quelltext ist. Passende Regeln zu den Ersetzungen der Vorlesungsfolien sehen dann z.B. so aus:

Ri → Ca { LD Ri, #a}

Ri → Mx { LD Ri, x}

M → =Mx Ri { ST x, Ri}

M → =indRi Rj { ST∗Ri, RJ} Ri → ind+Ri Rj { LD Ri, a(Rj)} Ri → +Ri ind+Ca Rj { ADD Ri, Ri, a(Rj)} Ri → +Ri Rj { ADD Ri, Ri, Rj}

R → sp

M → m

Das Terminalmsteht dabei f¨ur einen bestimmten Ort im Arbeitsspeicher (z.B. den Platz einer globalen Varia- blen). Das Stackregister wird durch das TerminalSPgekennzeichnet. Das Terminalcsteht f¨ur Konstanten.

Der Ausdrucka[i] =b+ 1 sieht damit zum Beispiel so aus:

= ind + + Ca sp ind + Ci sp + Mb C1

2.1Anwendung

Wie sehen die Anweisungen aus der letzten Aufgabe in Pr¨afixform aus?

Wenden Sie das Verfahren auf die Ausdr¨ucke in der vorigen Aufgabe an!

2.2Regeln schreiben

Erweitern Sie das Verfahren auf while-Anweisungen.

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

Es wird also anscheinend kein speziellere Datentyp f¨ ur Closures angelegt, der einen Funktionszeiger und einen Zeiger auf die Umgebung

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

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