• 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!
2
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 7¨ Ausgabe: 12.6.2014 Besprechung: 16.6.2014

Aufgabe 1:Abbildung von Exceptions

Gegeben sei die folgende Java-Klasse:

classTryFinally{

public static inttest1(){ try{

return1;

}finally{ return2;

} }

public static inttest2(){ intx = 1;

try{

returnx;

}finally{ x = 2;

} }

public static inttest3(){ while(true){

try{

return1;

} finally{ break;

} }

return2;

}

public static inttest4(){ for(inti = 10; i<20; ){

try{

return++i;

} finally{ continue;

} }

return2;

}

public static voidmain(String[] args){ System.out.println(test1());

System.out.println(test2());

System.out.println(test3());

System.out.println(test4());

} }

1

(2)

1.1Ausgabe

Wie lautet die Ausgabe des Programms? ¨Uberpr¨ufen Sie ihre L¨osung mit Hilfe eines Java-Compilers.

1.2Abbildung

Erarbeiten Sie anhand der letzten Teilaufgabe die Abbildung vontryundfinallyauf einen CFG.

Aufgabe 2:Java Bytecode

Eine detailierte Beschreibung der Java Virtual Machine (und Java Bytecode) finden Sie in der

”The JavaTM Virtual Machine Specification“.

2.1Ubersetzen¨

Ubersetzen Sie den Ausdruck¨ this.x = 32−this.foo()[2] in Java Bytecode. Geben Sie auch einen passenden Konstantenpool an. foo ist eine nicht-statische Methode.

2.2Wissen

• Was ist der Unterschied zwischenaload 2undaload_2?

• Mit den Befehlen bipush und sipush kann man 8- oder 16-Bit-Immediate-Werte auf den Stack legen.

Warum gibt es keine Variante f¨ur 32-Bit-Zahlen? Was tut man stattdessen?

• Was ist der Unterschied zwischenretundreturn?

2.3Fehlersuche

Das folgende Java Bytecode Programm soll ABCDEFGHIJKLMNOPQRSTUVWXYZ ausgeben. Leider haben sich einige Fehler eingeschlichen. Beschreiben und beheben Sie diese Fehler.

. c l a s s p u b l i c p r i n t . s u p e r j ava / l ang / O b j e c t

. m e t h o d p u b l i c s t a t i c mai n ([ L j a v a / l ang / S t r i n g ;) V . l i m i t s t a c k 5

b i p u s h 65 ; s t a r t wit h 65 ( ’ A ’ )

lo op :

; use S y s t e m . out . a p p e n d () to p r i n t the c h a r a c t e r

; S i g n a t u r e : " P r i n t S t r e a m P r i n t S t r e a m . a p p e n d ( ch ar c ) "

g e t s t a t i c jav a / lan g / S y s t e m / out L j a v a / io / P r i n t S t r e a m ;

i n v o k e v i r t u a l ja va / io / P r i n t S t r e a m / a p p e n d ( C ) L j a v a / io / P r i n t S t r e a m ; i c o n s t _ 1

ia dd ; i n c r e m e n t

b i p u s h 90 ; if g r e a t e r tha n 90 ( ’ Z ’ ) j ump to end i f _ i c m p g t end

go to lo op ; n ext l oop i t e r a t i o n

end :

; c all S y s t e m . out . p r i n t l n () to p r o d u c e a l i n e b r e a k

; S i g n a t u r e : " v oid P r i n t S t r e a m . p r i n t l n () "

g e t s t a t i c jav a / lan g / S y s t e m / out L j a v a / io / P r i n t S t r e a m ; i n v o k e v i r t u a l ja va / io / P r i n t S t r e a m / p r i n t l n () V

r e t u r n . end m e t h o d

2

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