• Keine Ergebnisse gefunden

Karlsruher Institut f¨ur Technologie Lehrstuhl f¨ur Programmierparadigmen

N/A
N/A
Protected

Academic year: 2022

Aktie "Karlsruher Institut f¨ur Technologie Lehrstuhl f¨ur Programmierparadigmen"

Copied!
3
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Karlsruher Institut f¨ ur Technologie

Lehrstuhl f¨ ur Programmierparadigmen

Compilerpraktikum WS 2012/13 Dozent: Prof. Dr.-Ing. G. Snelting

Betreuer: Andreas Zwinkau zwinkau@kit.edu

Ubungsblatt 4¨ Ausgabe: 07.11.2012 Besprechung: 14.11.2012

Aufgabe 1:Abstrakter Syntaxbaum 1.1Modellierung als abstrakte Algebra

Uberlegen Sie sich aus welchen Elementen der abstrakte Syntaxbaum bestehen sollte und erstellen Sie ein kleines¨ Dokument in dem jedes Element in 2-3 S¨atzen beschrieben wird. Formulieren Sie eine entsprechende abstrakte Algebra, wie sie in der Vorlesung Compiler 1 vorgestellt wurde (siehehttp://pp.info.uni-karlsruhe.

de/lehre/SS2012/compiler/intern/03-syntaktischeanalyse.pdf).

1.2Planung

Zeigen Sie an folgendem Beispielprogramm wie Ihr geplanter AST aussehen sollte. Was sind die Unterschiede zum entsprechenden Parsebaum?

1 class A {

2

3 public int x;

4 public int y;

5

6 public int calc(int x, int y) {

7 int sum;

8

9 if (x > y) {

10 sum = x + y;

11 } else {

12 sum = x * y;

13 }

14

15 return sum;

16 }

17 }

1.3Modellierung als attributierte Grammatik

Stellen sie eine attributierte Grammatik f¨ur den Aufbau des abstrakten Syntaxbaums auf (siehehttp://pp.

info.uni-karlsruhe.de/lehre/SS2012/compiler/intern/04-attributiertegrammatiken.pdf) und geben Sie diese ab.

1.4Implementierung

Erweitern Sie ihren Parser anhand der attributierten Grammatik, so dass ein abstrakter Syntaxbaum erzeugt wird.

(2)

Aufgabe 2:Pretty Printer

Eine gute Art und Weise seinen Parser zu testen. Ist die Implementierung eines

”Pretty-Printers“. Also ein Programm dass einen geparsten AST m¨oglichst sch¨on wieder ausgibt. Ein Pretty-Printer arbeitet korrekt, falls es kein semantischer Unterschied zwischen dem ausgegebenen und eingelesenen Programm besteht.

Um die ¨Ubersetzer im Praktikum vergleichbar zu machen beachten Sie bitte folgende Regeln:

• Einger¨uckt wird mit einem Tabulator Zeichen

• Ausdr¨ucke werden stets vollst¨andig geklammert ausgegeben. Ausnahmen hiervon sind die Literale (INTEGER_LITERAL, true,false,null,this,IDENTIFIER). Klammern aus dem Sourcecode werden nicht ausgegeben (so-

fern sie im AST vorhanden sind). Der Lesbarkeit zuliebe1 werden die ¨außeren Ausdr¨ucke in Expression- Statements, in Array-Zugriffen und Argumente beim Aufruf von Funktionen nicht geklammert.

• Bin¨are Operatoren werden mit Leerzeichen umgeben. Un¨are Operatoren ohne Leerzeichen ausgegeben.

• Innerhalb einer Klasse werden zun¨achst alle Methoden, dann alle Felder ausgegeben.

• Methoden und Klassen werden alphabetisch sortiert ausgegeben.

• Im Zweifel sollte man die Art der Formatierung am Beispiel unten ablesen k¨onnen, bei weiteren Fragen schreiben Sie uns E-Mails.

• Leere Block-Statements werden als{ }ausgegeben (keine Zeilenumbr¨uche)

• Falls der else-Teil eines if-Statements ein Empty-Statement enth¨alt so wird der komplette else-Teil nicht ausgegeben.

Beispiel Eingabe:

class HelloWorld {

public int c;

public boolean[] array;

public static /∗blabla∗/ void main(String[] args) {System.out.println( (43110 + 0) );

boolean b = true && (!false);

if (23+19 == (42+0)∗1) b = (0<1);

else if (!array[2+2]){ int x = 0;;

x = x+1;

}else{

new HelloWorld().bar(42+0∗1,−1);

} }

public int bar(int a, int b){return c = (a+b);} }

Ausgabe:

class HelloWorld{

public int bar(int a, int b){ return c = (a + b);

}

public static void main(String[] args){ (System.out).println(43110 + 0);

boolean b = true && (!false);

if ((23 + 19) == ((42 + 0)∗1))

1und weil hier direkt auf den Parsebaum geschlossen werden kann

2

(3)

b = (0 <1);

else if (!(array[2 + 2])){ int x = 0;

x = (x + 1);

}else{

(new HelloWorld()).bar(42 + (0∗ 1),−1);

} }

public boolean[] array;

public int c;

}

Andern Sie ihren Compiler so dass bei Aufruf mit dem Parameter¨ --print-astder AST in obigem Format ausgegeben wird.

3

Referenzen

ÄHNLICHE DOKUMENTE

(5) Alle Strings aus a und b mit einer geraden Anzahl von a und einer ungeraden Anzahl von b (Denksport- aufgabe). Aufgabe 4: Regul¨ are

Enth¨ alt die Zahl einen Punkt, so darf der Buchstabe e oder E angeh¨ angt werden, gefolgt von einem optionalen + oder - und weiteren Ziffern.. Zus¨ atzlich soll bei T NUMBER Tokens

Wenn wir versuchen, eine LR- Parsertabelle daf¨ ur zu erstellen, ergeben sich Konflikte zwischen einigen Aktionen.. Welche

Wie kann man dies anhand der Parsertabelle begr¨

Ubersetzen Sie den Ausdruck ¨ this.x = 32 - this.foo()[2] in Java Bytecode, geben Sie auch einen passenden Konstantenpool an?. (foo ist eine

Erweitern Sie ihren Verband und die dazugeh¨ origen Transferfunktionen, um das gefundene Problem zu beheben.. F¨ uhren Sie eine Fixpunktiteration mit den erweiterten

Sprachtechnologie und Compiler, Sommersemester 2014 Dozent: Prof.. Was f¨ allt

Schreiben Sie mehrere kleine Testprogramme und vergleichen Sie den generierten x86-64-Assemblers f¨ ur zwei optimierende Compiler.. K¨ onnen Sie