• Keine Ergebnisse gefunden

Karlsruher Institut f¨ ur Technologie

N/A
N/A
Protected

Academic year: 2022

Aktie "Karlsruher Institut f¨ ur Technologie"

Copied!
4
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Karlsruher Institut f¨ ur Technologie

Lehrstuhl f¨ ur Programmierparadigmen

Sprachtechnologie und Compiler WS 2010/2011 Dozent: Prof. Dr.-Ing. G. Snelting

Ubungsleiter: Matthias Braun¨ matthias.braun@kit.edu

Ubungsblatt 7¨ Ausgabe: 05.06.2012 Besprechung: 11.06.2012

Aufgabe 1:Auswertungsreihenfolgen 1.1Eigenschaften

Geben Sie attributierte Grammatiken die die folgenden Bedingungen erf¨ullen. Geben Sie zus¨atzlich zur Ver- deutlichung einen beliebigen Parsebaum.

Geben Sie eine AG an, die:

1. Nur synthetisierte Attribute enth¨alt.

2. Nur ererbte Attribute enth¨alt.

3. Ein Attribut enth¨alt das sowohl synthetisiert als auch ererbt wird.

4. Stets mit einem Baumdurchlauf berechenbar ist.

5. Mehr als einen Baumdurchlauf f¨ur ihre Berechnung ben¨otigen.

6. Nur f¨ur manche B¨aume berechenbar ist. Es sollte sowohl berechenbare als auch nicht berechenbar B¨aume geben, in denen alle Grammatikproduktionen vorkommen.

Aufgabe 2:Attributierte Grammatiken und LL 2.1Bedingungen

Welche Bedingungen m¨ussen gelten damit eine attributierte Grammatik w¨ahrend des LL parsens berechnet werden kann?

2.2Auswertung der Attribute beim rekursiven Abstieg Gegeben sei folgende attributierte Grammatik:

Produktion Attributierungsregeln 1) E→T E’ E.val =T.val+E’.val

E’.constants =E.constants T.constants =E.constants 2) E’→+T E01 E’.val =T.val+E01.val

T.constants =E.constants E01.constants =E.constants 3) E’→ε E’.val = 0

4) T→F T’ T.val =F.val∗T’.val T’.constants=T.constants F.constants =T.constants 5) T’→*F T01 T’.val =F.val∗T01.val

F.constants =T’.constants T01.constants=T’.constants 6) T’→ε T’.val = 1

7) F→(E) F.val =E.val

E.constants =F.constants 8) F→digit F.val =digit.lexval

9) F→constant F.val =F.constants.getConstantV alue(constant.symbol)

1

(2)

Erg¨anzen Sie den folgenden rekursiven Abstieg um die Auswertung der Attributierungsregeln.

v o i d E ( ) { T ( ) ; E ’ ( ) ; }

v o i d E ’ ( ) { s w i t c h ( t ) { c a s e ’ + ’ :

t = nextSymbol ( ) ; T ( ) ;

E ’ ( ) ; b r e a k ; c a s e ’ ) ’ : c a s e EOF:

b r e a k ;

d e f a u l t : F e h l e r ( ) ; }

}

v o i d T( ) { F ( ) ; T ’ ( ) ; }

v o i d T ’ ( ) { s w i t c h ( t ) { c a s e ’∗’ :

t = nextSymbol ( ) ; F ( ) ;

T ’ ( ) ; b r e a k ; c a s e ’ + ’ : c a s e EOF:

b r e a k ;

d e f a u l t : F e h l e r ( ) ; }

}

v o i d F ( ) { s w i t c h ( t ) { c a s e ’ ( ’ :

t = nextSymbol ( ) ; E ( ) ;

i f ( t == ’ ) ’ )

t = nextSymbol ( ) ; e l s e

F e h l e r ( ) ; b r e a k ;

c a s e d i g i t : b r e a k ; c a s e c o n s t a n t :

b r e a k ;

d e f a u l t : F e h l e r ( ) ; }

}

Aufgabe 3:Namensanalyse

2

(3)

class Base {

public int X, Y;

public int f() { return X1 ; }

}

class Derivedextends Base2 { public classInnerextendsBase{

public voidfunc(){ f3 ();

X4 = 20;

Y5 = 10;

}

private int Y; }

public int f() { return X6 ; }

public voidcall f(Base b){ b7 . f8 ();

((Derived) b). f9 ();

}

public int X, Y;

}

Abbildung 1: Beispiel 1 (Java Code)

struct x { int x ; };

x1 k ; int x ;

voidf(void){ x2 = 20; k3 . x4 = 42;}

Abbildung 2: Beispiel 2 (C++ Code)

Die meisten Programmiersprachen besitzen geschachtelte Namensr¨aume. Oft finden sich auch voneinander un- abh¨angige Namensr¨aume f¨ur verschiedene Programmierkonstrukte. Betrachten sie die Abbildungen 1, 2 und 3.

• Auf welche Definitionen beziehen sich die markierten (Bezeichner mit Subskript x1) Referenzen? (Die Subskripte selbst sind nat¨urlich nicht Teil des Programms, sondern hier nur zur Verdeutlichung der Auf- gabenstellung).

• Beschreiben Sie wo in den Beispiele neue Namensraumschachteln entstehen.

• Gibt es unabh¨angig Namensr¨aume?

3

(4)

extern”C”intrand(void);

int main(void){ int foo ;

foo:

if (rand()) { float foo ;

for (float foo = 0; foo <42; ++foo1){ if (rand()<13)

goto foo2 ; }

foo3 = 42;

} }

Abbildung 3: Beispiel 3 (C++ Code)

4

Referenzen

ÄHNLICHE DOKUMENTE

Unter http://pp.info.uni-karlsruhe.de/lehre/SS2012/compiler/uebung/intern/minicalc2.zip finden Sie eine L¨ osung zu Aufgabe 1 aus dem letzten ¨ Ubungsblatt.. Diese wurde um

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¨

Eine detailierte Beschreibung der Java Virtual Machine (und Java Bytecode) finden Sie in der.. ” The Java TM Virtual

Zeichnen Sie anschließend das zugeh¨ orige Hasse-Diagram f¨ ur die Halbordnung.. Ist diese Halbordnung auch

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