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
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