• 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

Sprachtechnologie und Compiler, Sommersemester 2014 Dozent: Prof. Dr.-Ing. G. Snelting

Ubungsleiter: Sebastian Buchwald¨ Sebastian.Buchwald@kit.edu

Ubungsblatt 6¨ Ausgabe: 27.5.2014 Besprechung: 2.6.2014

Aufgabe 1:Auswertungsreihenfolgen

Geben Sie eine attributierte Grammatiken 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.

Geben Sie zur Verdeutlichung ggf. einen passenden Syntaxbaum an.

Aufgabe 2:Namensanalyse

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?

struct x {int x;};

x1 k; int x;

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

Abbildung 1: Beispiel 1 (C++ Code)

1

(2)

extern”C”intrand(void);

intmain(void){ intfoo;

foo:

if(rand()){ float foo;

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

goto foo2 ; }

foo3 = 42;

} }

Abbildung 2: Beispiel 2 (C++ Code)

class Base {

public int X, Y;

public int f(){ return X1 ; }

}

classDerivedextends 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 3: Beispiel 3 (Java Code)

2

(3)

Aufgabe 3:Praxis: Namensanalyse

Unterhttp://pp.info.uni-karlsruhe.de/lehre/SS2014/compiler/uebung/nameana.zipbefindet sich Java Sourcecode mit einem Parser und Interpreter. Die implementierte Sprache besitzt eine Zuweisungs- und einer Ausgabeoperation. Außerdem k¨onnen mit { und } Namensbereiche geschachtelt werden. Die Verwaltung der Symboltabelle in SymbolTable.java wurde entfernt.

• Implementieren Sie die fehlende Funktionalit¨at in SymbolTable.java

Beispiel f¨ur eine Eingabe:

{

f o o = ”ba r ”;

p r i n t ( f o o ) ; {

f o o = ”b a r 2 ”;

p r i n t ( f o o ) ; }

p r i n t ( f o o ) ; }

Korrekte Ausgabe:

f o o i s bar f o o i s b a r 2 f o o i s bar

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

Idee: durchlaufe Programm r¨ uckw¨ arts, ab einer Benutzung ist eine Variable lebendig, ab einer Definition tot?. gen enth¨ alt Variablen die Benutzt werden, kill Variablen

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