Interpreter für Zwischencode und abstrakte Interpretation

Größe: px
Ab Seite anzeigen:

Download "Interpreter für Zwischencode und abstrakte Interpretation"

Transkript

1 Interpreter für Zwischencode und abstrakte Interpretation

2 Drei-Address Code

3 Übersicht Zwischencode: Drei-Adress, Bytecode,... Zielprogram: RISC, CISC, Stackbasiert Codegenerator: Befehlsauswahl Registervergabe und -zuteilung

4 Drei-Adress-Code Abstrakter Code für eine Register Maschine: x = 2 * a + (b - 3); t1 = 2 * a t2 = b - 3 t3 = t1+t2 x = t3 (MUL, 2, a) (1) (SUB, b, 3) (2) (ADD, $1, $2) (3) (ST, $3,x) (4) Triples Result referred to by position Anmerkung: maximal ein Operator auf der rechten Seite

5 Drei-Address Code Syntax (1) i = 0 (2) x = 2 (3) if i>1 goto 7 (4) x = x*x (5) i = i + 1 (6) goto 3 (7) res = x Drei-Address Zuweisungen: x = y OP z Copy Anweisung: x = y Sprung: goto L Bedingter Sprung: if x OP y goto L Abbruch: halt

6 Drei-Address Code Prolog Darstellung (1) i = 0 (2) x = 2 inst(pc,op,arg1,arg2,arg3). (3) if i>1 goto 7 (4) x = x*x (5) i = i + 1 (6) goto 3 (7) res = x inst(1,assign,i,0,_). inst(2,assign,x,2,_). inst(3,if(>),i,1,7). inst(4,assign(*),x,x,x). inst(5,assign(+),i,i,1). inst(6,goto,_,_,3). inst(7,assign,res,x,_). inst(8,halt,_,_,_).

7 Teile des Interpreters tint(pc,in,out) :- inst(pc,opcode,a1,a2,a3), NextPC is PC+1, ex_opcode(opcode,a1,a2,a3,nextpc,in,out). ex_opcode(halt,_,_,_,_,env,env). ex_opcode(goto,_,_,label,_,in,out) :- tint(label,in,out). inst(1,assign,i,0,_). inst(2,assign,x,2,_). inst(3,if(>),i,1,7). inst(4,assign(*),x,x,x). inst(5,assign(+),i,i,1). inst(6,goto,_,_,3). inst(7,assign,res,x,_). inst(8,halt,_,_,_).

8 Teile des Interpreters ex_opcode(assign(op),var,rhs1,rhs2,nextpc,in,out) :- load(rhs1,in,rhsval1), load(rhs2,in,rhsval2), ex_op(op,rhsval1,rhsval2,res), store(in,var,res,out2), tint(nextpc,out2,out). ex_op(*,a1,a2,r) :- R is A1 * A2. ex_op(+,a1,a2,r) :- R is A1 + A2. ex_op(-,a1,a2,r) :- R is A1 - A2. inst(1,assign,i,0,_). inst(2,assign,x,2,_). inst(3,if(>),i,1,7). inst(4,assign(*),x,x,x). inst(5,assign(+),i,i,1). inst(6,goto,_,_,3). inst(7,assign,res,x,_). inst(8,halt,_,_,_).

9 Java Byte Code

10 Java Byte Code 0-Address Code anstatt x = y * z imul Operanden werden auf den Stack geschoben Ergebnisse auf dem Stack zurückgelassen kann kompakteren Code Ergeben

11 Beispiel public class Power { public static void main(string args[]) { int base = 2; int exp = 5; int i = exp; int res = 1; while (i>0) { i--; res = res*base; } System.out.println(res); } } public static void main(java.lang.string[]); Code: 0: iconst_2 1: istore_1 2: iconst_5 3: istore_2 4: iload_2 5: istore_3 6: iconst_1 7: istore 4 9: iload_3 10: ifle 25 13: iinc 3, -1 16: iload 4 18: iload_1 19: imul 20: istore 4 22: goto 9 Local Variables Operand Stack 25: getstatic #2; //Field java/lang/system.o 28: iload 4 30: invokevirtual #3; //Method java/io/print 33: return Var 0 Var 1 Var MAXVAR 1 2 size Parameters

12 Anmerkungen zusätzlich zum Stack gibt es 256 lokale Variablen (0..255) Parameter an eine Methode werden in den Variablen 0, übergeben für nicht statische Methoden enthält Variable 0 den this Zeiger aber der Interpreter hier verarbeitet nur statische Methoden

13 Unterstützte Opcodes (1) nop return goto Addr Local Variables Var 0 Var 1 Var MAXVAR Parameters istore Var iload Var Operand Stack size iconst Cst pop

14 Unterstützte Opcodes (1) ifle Addr Local Variables Var 0 Var 1 Var Parameters iinc Var, Cst MAXVAR 1 imul Operand Stack... 2 size iadd

15 Prolog Darstellung 0: iconst_2 1: istore_1 2: iconst_5 3: istore_2 4: iload_2 5: istore_3 6: iconst_1 7: istore 4 9: iload_3 10: ifle 25 13: iinc 3, -1 16: iload 4 18: iload_1 19: imul 20: istore 4 22: goto 9 25: println 4 27: return instr(pc,op,nrbytes). /* Prolog Encoding of Byte Code */ instr(0,iconst(2),1). instr(1,istore(1),1). instr(2,iconst(5),1). instr(3,istore(2),1). instr(4,iload(2),1). instr(5,istore(3),1). instr(6,iconst(1),1). instr(7,istore(4),2). instr(9,iload(3),1). instr(10,if1(<=,0,25),3). instr(13,iinc(3,-1),3). instr(16,iload(4),2). instr(18,iload(1),1). instr(19,iop(*),1). instr(20,istore(4),2). instr(22,goto(9),3). instr(25,println(4),2). instr(27,return,1). /* End of Prolog Encoding */

16 Parser Anmerkungen Parser im Skript: Eingabe: ähnlich wie javap Ausgabe kein Lexer: Whitespace muss behandelt werden Newlines werden gezählt (für Fehlermeldungen) digitft(from,to,dig) --> digit(dig), {Dig >= From, Dig =< To}. Im AST werden verschiedenen Operationen gruppiert: iconst_1, iconst_2, -> iconst(x) imul, iadd, > iop(x)

17 Alternativen Es gibt Bibliotheken um kompletten Java Bytecode einzulesen und in eine Prolog Darstellung umzuwandeln:

18 public class Exp extends java.lang.object SourceFile: "Exp.java" minor version: 0 major version: 0 Constant pool: const #1 = Method #5.#14; // java/lang/object."<init>":()v const #2 = class #15; // ArithmeticException const #3 = Method #2.#14; // java/lang/arithmeticexception."<init>":()v const #4 = class #16; // Exp const #5 = class #17; // Object const #6 = Asciz <init>; const #7 = Asciz ()V; const #8 = Asciz Code; const #9 = Asciz LineNumberTable; const #10 = Asciz exp; const #11 = Asciz (II)I; const #12 = Asciz SourceFile; const #13 = Asciz Exp.java; const #14 = NameAndType#6:#7;// "<init>":()v const #15 = Asciz java/lang/arithmeticexception; const #16 = Asciz Exp; const #17 = Asciz java/lang/object; { public Exp(); Code: Stack=1, Locals=1, Args_size=1 0: aload_0 1: invokespecial #1; //Method java/lang/object."<init>":()v 4: return LineNumberTable: line 1: 0 public static final int exp(int,int); Code: Stack=2, Locals=4, Args_size=2 0: iload_1 1: ifge 12 4: new #2; //class ArithmeticException 7: dup 8: invokespecial #3; //Method java/lang/arithmeticexception."<init>":()v 11: athrow 12: iconst_1 13: istore_2 14: iload_1 15: istore_3

19 bytecode(0,'string',0,aload(0),1). bytecode(1,'string',0,invokespecial(methodsignature(methodname(classname(packagename('java/ lang/'),shortclassname('object')),shortmethodname('<init>')),[],none)),3). bytecode(4,'string',0,return,1). :- module('exp_exp_pe',[main/2],[]). :- discontiguous bytecode/5, class/2. bytecode(0,'0',0,aload(0),1). bytecode(1,'0',0,invokespecial(methodsignature(methodname(classname(packagename('java/ lang/'),shortclassname('object')),shortmethodname('<init>')),[],none)),3). bytecode(4,'0',0,return,1). bytecode(0,'0',1,iload(1),1). bytecode(1,'0',1,if0(geint,11),3). bytecode(4,'0',1,new(classname(packagename('java/lang/'),shortclassname('arithmeticexception'))),3). bytecode(7,'0',1,dup,1). bytecode(8,'0',1,invokespecial(methodsignature(methodname(classname(packagename('java/ lang/'),shortclassname('arithmeticexception')),shortmethodname('<init>')),[],none)),3). bytecode(11,'0',1,athrow,1). bytecode(12,'0',1,const(primitivetype(int),1),1). bytecode(13,'0',1,istore(2),1). bytecode(14,'0',1,iload(1),1). bytecode(15,'0',1,istore(3),1). bytecode(16,'0',1,iload(3),1). bytecode(17,'0',1,if0(leint,13),3). bytecode(20,'0',1,iload(2),1). bytecode(21,'0',1,iload(0),1). bytecode(22,'0',1,ibinop(mulint),1). bytecode(23,'0',1,istore(2),1). bytecode(24,'0',1,iinc(3,-1),3). bytecode(27,'0',1,goto(-11),3). bytecode(30,'0',1,iload(2),1). bytecode(31,'0',1,ireturn,1). class('0',class(classname(packagename(''),shortclassname('exp')),final(false),public(true),abstract(false),classname(packagename 'java/lang/'),shortclassname('object')),[],[], [method(methodsignature(methodname(classname(packagename(''),shortclassname('exp')),shortmethodname('<init>')), [],none),bytecodemethod(1,1,0,methodid('0',0), []),final(false),static(false),public),method(methodsignature(methodname(classname(packagename(''),shortclassname('exp')),shortm thodname(exp)),[primitivetype(int),primitivetype(int)],primitivetype(int)),bytecodemethod(4,2,0,methodid('0',1), []),final(true),static(true),public)])). bytecode(0,'object',0,return,1). class('object',class(classname(packagename('java/ lang/'),shortclassname('object')),final(false),public(false),abstract(false),none,[],[], [method(methodsignature(methodname(classname(packagename('java/lang/'),shortclassname('object')),shortmethodname('<init>')), [],none),bytecodemethod(1,1,0,methodid('object',0),[]),final(false),static(false),public)])).

20 Der Interpreter Sehr ähnlich zum 3-Address Code Interpreter Umgebung: Stack + lokale Variablen + PC Local Variables Local Variables succ P Operand Stack Concrete Interpreter Execution Step i_load_1 Operand Stack Current Adress A New Adress (A+1)

21 Auszüge aus dem Code interpreter_loop(pc,in,out) :- print('> '),print(pc), print(' '), print(in), instr(pc,opcode,size),!, NextPC is PC+Size, print(' --> '),print(opcode),nl, ex_opcode(opcode,nextpc,in,out). interpreter_loop(pc,_in,_out) :- print('*** Unknown instruction label: '), print(pc),nl,fail. ex_opcode(return,_,env,env). ex_opcode(goto(label),_,in,out) :- interpreter_loop(label,in,out). ex_opcode(istore(var),nextpc,in,out) :- pop(in,top,in2), store(in2,var,top,out2), interpreter_loop(nextpc,out2,out). Anmerkung: Der Interpreter ist sehr nah an einer small-step Semantik. Wie muss man diesen umschreiben, dass dies deutlicher wird?

22 Mit expliziter small-step Semantik interpreter_loop(pc,in,out) :- small_step((pc,in),(pc2,out2)), interpreter_loop(pc2,out2,out). small_step((pc,in),nextstate) :- instr(pc,opcode,size), NextPC is PC+Size, ex_opcode(opcode,nextpc,in,nextstate) ex_opcode(return,_,env,(stop,env)). ex_opcode(goto(label),_,in,(label,in)). ex_opcode(istore(var),nextpc,in,(nextpc,out2)) :- pop(in,top,in2), store(in2,var,top,out2). Anmerkung: Der Interpreter ist sehr nah an einer small-step Semantik. Wie muss man diesen umschreiben, dass dies deutlicher wird?

23 Abstrakte Interpretation

24 Abstrakte vs Konkrete Ausführung Konkreter Schritt (small-step semantics): Eingabe: PC + Umgebung genau bekannt Ausgabe succ P (S): neuer PC + neue Umgebung Abstrakter / Symbolischer Schritt: Eingabe: PC + Beschreibung der Umgebung Ausgabe: mögliche neue PCs mit jeweils Beschreibungen der Umgebung

25 Abstrakte Interpretation Grundidee: wir führen das Programm auf einem alternativen abstrakten Datenmodell aus abstrakte Datenwerte abstrakte Operationen Informationsverlust, aber dafür kann man unendlich viele Ausführungen in endlicher Zeit analysieren

26 Illustration Local Variables Local Variables succ P Operand Stack Concrete Interpreter Execution Step i_load_1 Operand Stack Current Adress A New Adress (A+1) Local Variables pos pos neg Local Variables pos pos neg succ P A Operand Stack Abstract Interpreter Execution Step i_load_1 Operand Stack pos pos pos Current Adress A New Adress (A+1)

27 Formalisierung St: mögliche Zustände/Umgebungen eines Programms S 0 St: Startzustände succ P : St 7! St succ P : St St semantische Funktion, zb small-step Semantics Interpreter R: erreichbare Zustände eines Programms Verifikation/Analyse entspricht der Frage ob alle Zustände in R eine gewisse Eigenschaft erfüllen

28 Beispiel Zustand im Java Bytecode Interpreter: (PC,Stack,Vars) S 0 = {(0,[], )} succ P ((0,[], )) = (1,[2], ) wenn iconst_2 erste Anweisung succ P ((1,[2], )) = (1,[2],{1 2}) wenn istore_1 zweite Anweisung Bei Parameterübergabe an eine Methode gibt es eine Menge an Startzuständen, zum Beispiel: S 0 = {(0,[],{1 x}) x: } Berechnung von R? Fixpunktsatz von Tarski und Knaster; sichert Existenz eines Fixpunktes und Eindeutigkeit eine kleinsten Fixpunktes für geeignete Funktion F

29 Erreichbare Zustände geliftete Version von f: f (S) ={f(s) s 2 S} monotone Version FP von succp auf Mengen: F P (S) =S 0 [ S [ succ P (S) Iteration einer Funktion: f " 1 = lim n!1 f " n f " 0 (S) =S ^ f " n+1 (S) =f(f " n (S)) Definition der erreichbaren Zustände: R = F P " 1 (;)

30 Voraussetzung: Halbordnung Vertiefung Logische Programmierung Sebastian Krings, Michael Leuschel Überblick Ein Paar A := ha, applei, bestehend aus einer Relation apple auf einer Menge A heißt Halbordnung falls I apple reflexiv: 8a 2 A : a apple a I apple transitiv: 8a, b, c 2 A : a apple b ^ b apple c ) a apple c Konkrete Interpreter Formale Definition Fixpunktsatz Abstrakte Interpreter Grundlagen Konvergenzbeschleunigu Präzision Weitere Domänen I apple antisymmetrisch: 8a, b 2 A : a apple b ^ b apple a ) a = b

31 Voraussetzung: Vollständiger Verband Vertiefung Logische Programmierung Sebastian Krings, Michael Leuschel Überblick Konkrete Interpreter Formale Definition Fixpunktsatz I Halbordnung A := ha, applei I Für jede Teilmenge a A existieren sup(a) undinf (a). Abstrakte Interpreter Grundlagen Konvergenzbeschleunigu Präzision Weitere Domänen

32 Monotone Funktion Vertiefung Logische Programmierung Sebastian Krings, Michael Leuschel Überblick I Halbordnung A := ha, applei I Funktion f : A! A heißt monoton, falls I 8x, y 2 A : x apple y ) f (x) apple f (y) Konkrete Interpreter Formale Definition Fixpunktsatz Abstrakte Interpreter Grundlagen Konvergenzbeschleunigu Präzision Weitere Domänen

33 Fixpunktsatz von Tarski und Knaster Vertiefung Logische Programmierung Sebastian Krings, Michael Leuschel Überblick Sei A := ha, applei ein vollständiger Verband, f : A! A monotone Funktion und P := {x 2 A f (x) =x} die Menge der Fixpunkte von f in A. DannistP 6= ; und P := hp, applei ebenfalls ein vollständiger Verband. Konkrete Interpreter Formale Definition Fixpunktsatz Abstrakte Interpreter Grundlagen Konvergenzbeschleunigu Präzision Weitere Domänen

34 Fixpunktsatz von Tarski und Knaster - Beweisidee Vertiefung Logische Programmierung Sebastian Krings, Michael Leuschel Überblick I 8Y : Y P, soll es ein P-Supremum geben. Die Fälle Y = P und Y = ; sind gezeigt. Betrachtet werden nun die anderen Fälle. Dazu wird ausgenutzt, dass hu, applei mit U := {x 2 A S A Y apple x} wieder ein vollständiger Verband ist, und f U eine monotone Funktion U! U ist, die einen kleinsten Fixpunkt in U hat. Dieser ist das P-Supremum von Y. I D.h.: S P Y := T A {x 2 A S A Y [ f (x) apple x}. I Infimum wieder analog. Konkrete Interpreter Formale Definition Fixpunktsatz Abstrakte Interpreter Grundlagen Konvergenzbeschleunigu Präzision Weitere Domänen

35 Eigenschaften von FP FP ist monoton : S S FP(S) FP(S ) FP hat einen kleinsten Fixpunkt lfp(fp) = R Aber, es kann sein, dass es kein endliches n gibt so dass FP n = R die Domäne St kann unendlich sein ist dies der Fall für unseren Java Bytecode Interpreter mit (PC,Stack,Vars)?

36 Idee der Abstrakten Interpretation Eine Funktion F A P definieren die auf einer endlichen abstrakten Domäne arbeitet oder sicher stellt, dass nach endlicher Zeit ein Fixpunkt gefunden wird Was muss für F A P gelten? R A = F A P " 1 (?) Was muss für die abstrakte Domäne im Vergleich zur konkreten Domäne (St) gelten? Wie kann man R A interpretieren?

37 Abstrakte Domäne Konkrete Domäne C (St in unserem Fall), abstrakte Domäne A Konkretisierungsfunktion γ : A 2 C Abstraktionsfunktion α: 2 C A es muss für alle S gelten S γ(α(s)) Partielle Ordnung: a 1 v a 2 i (a 1 ) (a 2 ) a a 2 i a 1 v a 2 ^ a 2 6v a 1

38 Top und Bottom Wir führen immer zwei zusätzliche Element in der abstrakten Domäne auf: Bottom mit γ( ) =, Top mit γ( ) = C a 1 v a 2 i (a 1 ) (a 2 ) Z - 0 Z +

39 Complete lattices Definition. Acompletelatticeisaposet C;,,,, such that the least upper bound S and the greatest lower bound S exists for every subset S of C. = C denotes the infimum of C and = C denotes the supremum of C. Example 1: (S);,,S,, is a complete lattice. Example 2: The integers (extended with and + ) is a complete lattice Z {, + };,, +, max, min. 18 / 55

40 Abstrakte Domäne als Verband Verband (Lattice; Verband_(Mathematik)) Z - 0 Z + Konkrete Werte: Lattice (Verband) (POW(C), ) Abstrakter Verband (A, ) c obere Schranke (upper bound) von a wenn a c a b ist die kleinste obere Schranke von a und b (least upper bound, lub): a a b, b a b, (a c b c) a b c a b ist die grösste untere Schranke von a und b (greatest lower bound, glb): a b a, a b b, (c a c b) c a b

41 Eigenschaften : Galois Connection Z - 0 Z + S γ(α(s)) (Soundness) α ist monoton γ ist monoton (per Definition von ) oft verlangt man dass α die genauste Abstraktionsfunktion ist (Galois Connection): A = α(γ(a))

42 Beispiel Vertiefung Logische Programmierung Sebastian Krings, Michael Leuschel Überblick I Interpreter aus letzten Kapitel arbeitete auf C = Z I Vorschlag: A = {0, Z +, Z, >} I (0) = {0}, (Z )={x 2 Z : x apple 1} I (Z + )={x 2 Z : x 1} Konkrete Interpreter Formale Definition Fixpunktsatz Abstrakte Interpreter Grundlagen Konvergenzbeschleunigu Präzision Weitere Domänen I (>) =Z

43 Sound Approximation Sei F eine Funktion C C, dann ist F A ADom ADom eine Sound Approximation von F wenn {F(c) c γ(a)} γ(f A (A)) Gleiches für binäre, Funktionen {F(c,c ) c γ(a),c γ(a )} γ(f A (A,A ))

44 ADom = {Pos,Neg,0,, } Beispiel Z - 0 Z + γ(pos) = N \ {0}, γ(0) = {0}, γ(neg) = Z \ N Prüfen ob Pos + A Pos = Pos korrekt ist: {F(c,c ) c γ(a),c γ(a )} γ(f A (A,A )) {(c+c ) c γ(pos),c γ(pos)} γ(pos + A Pos) {(c+c ) c N \ {0},c N \ {0}} γ(pos) N \ {0,1} N \ {0}

45 Tests im Interpreter if (x>=0) then A else B wenn γ(x) N dann muss A abstrakt ausgewertet werden wenn γ(x) N = muss B abstrakt ausgewertet werden sonst müssen A und B abstrakt ausgewertet werden abstrakte Ergebnisse von A und B müssen kombiniert werden (least upper bound) Domäne von x kann in A und B eingeschränkt werden

46 Illustration 2 : Bedingte Sprünge Local Variables Local Variables succ P Operand Stack Concrete Interpreter Execution Step ifle 5000 Operand Stack Current Adress A 32 New Adress (A+1) Local Variables pos pos neg Local Variables pos pos neg Operand Stack succ P A Operand Stack... New Adress (A+1) 2 Current Adress A ifle 5000 Local Variables pos pos neg Operand Stack... 2 New Adress (5000)

47 Umsetzung im Prolog Interpreter Abstrakte Domäne wählen Least Upper Bound definieren Abstraktionsfunktion definieren (wir brauchen dies nür für einen Wert) Operationen auf dieser Domäne definieren Tests definieren

48 Prolog Code (Auszug) abstract_domain_element(0). abstract_domain_element(pos). abstract_domain_element(neg). abstract_domain_element(top). lub(x,x,r) :-!,R=X. lub(x,y,top) :- X\=Y. % abstract a single value abstract_value(x,av) :- number(x),!, (X=0 -> AV=0 ; (X>0 -> AV = pos ; AV = neg) ). abstract_value(x,x). aex_op(+,0,x,x). aex_op(+,pos,0,pos). aex_op(+,pos,pos,pos). aex_op(+,pos,neg,top). aex_op(+,pos,top,top). aex_op(+,neg,0,neg). aex_op(+,neg,pos,top). aex_op(+,neg,neg,neg). aex_op(+,neg,top,top). aex_op(+,top,_,top). test_op(<,top,_). test_op(<,neg,_). test_op(<,0,pos). test_op(<,0,top). test_op(<,pos,pos). test_op(<,pos,top).

49 Umsetzung im Prolog Abstrakter Zustand: (PC,AStack,AEnv) AStack: 1..n > ADom Interpreter AEnv: > ADom (bzw. partielle Funktion; siehe unten) S 0 = {(0,[], )} AEnv = bedeutet dass alle lokalen Variablen auf Bottom gesetzt sind succ P ((0,[], )) = (1,[pos], ) wenn iconst_2 erste Anweisung Wir abstrahieren die Variablenwerte auf eine abstrakte Domäne ADom für die Werte Wir abstrahieren nicht den Program Counter, nicht die Grösse des Stacks, und nicht die Menge der gebundenen lokalen Variablen Generell ist Konvergenz nicht garantiert! Wieso klappt dies hier?

50 Konvergenz Wir abstrahieren nicht den Program Counter, nicht die Grösse des Stacks, und nicht die Menge der gebundenen lokalen Variablen Program Counter: endlich viele mögliche Werte lokale Variablen: endlich viele Kombinationen an abstrakten Werten card(adom) 256 Stack: wenn Java Programm korrekt: für jeden Programmpunkt PC gibt es eine Stackgrösse: d.h. endlich viele abstrakte Kombinationen wenn Java Programm nicht korrekt: beenden wir die abstrakte Interpretation, sobald dies entdeckt wird

51 Prolog Code lub_program_point(pc,env(s,vars),res,change) :- (retract(memo(pc,env(sm,varsm))) -> lub_stack(s,sm,sr), %print(lub_stack(pc,s,sm,sr)), lub_local_vars(vars,varsm,varsr), % print(lub_local_vars(pc,vars,varsm,varsr)), Res = env(sr,varsr), assert(memo(pc,res)), (Res=env(SM,VarsM) -> Change=false ; print(' <REANALYZE> '),Change = true) ; assert(memo(pc,env(s,vars))), Res = env(s,vars), Change=true ). lub_stack([],[],[]). lub_stack([],[_ _],_) :- nl,print('***'),nl,print('*** Illegal bytecode: Varying stack pattern at PC'),nl,print('***'),nl,nl,fail. lub_stack([_ _],[],_) :- nl,print('***'),nl,print('*** Illegal bytecode: Varying stack pattern at PC'),nl,print('***'),nl,nl,fail. lub_stack([h1 T1],[H2 T2], [H3 T3]) :- lub(h1,h2,h3), lub_stack(t1,t2,t3). lub_local_vars([],x,x). lub_local_vars([h T],[],[H T]). lub_local_vars([key/val1 T1],[Key/Val2 T2],[Key/Val3 T3]) :-!, lub(val1,val2,val3), lub_local_vars(t1,t2,t3). lub_local_vars([key1/val1 T1],[Key2/Val2 T2],[H T3]) :- Key1 \= Key2, -> (H=Key1/Val1, lub_local_vars(t1,[key2/val2 T2],T3)) ; (H=Key2/Val2, lub_local_vars([key1/val1 T1],T2,T3)) ).

52 Intervalle Zahlen werden oft durch Intervalle dargestellt ADom = { a..b a:z b:z a b} {, } γ(a..b) = {x x a x b} a..b +A c..d = (a+c)..(b+d) Unendliche Domäne, Konvergenz nicht garantiert i:=0; j:=100; while(i<j) do i:=i+2;

53 Widening Konvergenzbeschleunigung: nach fester Anzahl von Schritten ohne Stabilisierung: Abstraktion auf LUB oder mehr (Einschränkungen verwerfen, ) zusätzlicher Verlust an Präzision

54 Konstantenpropagation Spezialfall der abstrakten Interpretation konkrete Domäne C ADom = C {nac} nac = not a constant γ(c) = {c} wenn c C γ(nac) = C

55 Prolog Code abstract_domain_element(1). abstract_domain_element(0). abstract_domain_element(x) :- X \=0, X\=1, number(x). abstract_domain_element(nac). lub(x,x,r) :-!,R=X. lub(_x,_y,nac). aex_op(*,0,_,r) :-!, R=0. aex_op(*,_,0,r) :-!, R=0. aex_op(op,x1,x2,r) :- %print(ex_op(op,x1,x2,r)),nl, number(x1), number(x2), ex_op_concrete(op,x1,x2,r). aex_op(_,x,y,nac) :- \+ number(x) ; \+ number(y). test_op(op,x,y) :- number(x),number(y),test_op_concrete(op,x,y). test_op(_op,x,y) :- \+ number(x) ; \+ number(y). false_op(op,x,y) :- number(x),number(y),false_op_concrete(op,x,y). false_op(_op,x,y) :- \+ number(x) ; \+ number(y). abstract_value(x,x).

56 Quelle: Google Scholar Geschichte

57 Andere Ansätze Datenflussanalyse (Dataflow Analysis): Lattices und Transferfunktionen Typ-basierte Ansätze (Dependent Types, ) basierend auf Typeinferenz Regular Types, Set-Based Analysis Symbolische Darstellungen Cousot: alles ist abstrakte Interpretation

Java Bytecode Eike Robert Freie Universität Berlin. Softwareprojekt Übersetzerbau, 2013

Java Bytecode Eike Robert Freie Universität Berlin. Softwareprojekt Übersetzerbau, 2013 Java Bytecode Eike Robert Freie Universität Berlin Softwareprojekt Übersetzerbau, 2013 Inhalt Bytecode Allgemein Architektur Aufbau Instruktionsgruppen Beispiel FU Berlin, Bytecode, Übersetzerbau 2013

Mehr

Abstarkte Interpretation I

Abstarkte Interpretation I Lehr- und Forschungseinheit Theoretische Informatik Hauptseminar Programmanalyse SS 2009 Abstrakte Interpretation I Prof. Dr. Martin Hofmann Referent: Gliederung I. Grundlagen der abstrakten Interpretation

Mehr

Praktikum Compilerbau Sitzung 9 Java Bytecode

Praktikum Compilerbau Sitzung 9 Java Bytecode Praktikum Compilerbau Sitzung 9 Java Bytecode Prof. Dr.-Ing. Gregor Snelting Matthias Braun und Sebastian Buchwald IPD Snelting, Lehrstuhl für Programmierparadigmen KIT Universität des Landes Baden-Württemberg

Mehr

Offenbar hängt das Ergebnis nur von der Summe der beiden Argumente ab...

Offenbar hängt das Ergebnis nur von der Summe der beiden Argumente ab... 0 1 2 0 2 1 1 2 0 2 1 0 Offenbar hängt das Ergebnis nur von der Summe der beiden Argumente ab... 0 1 2 0 1 2 1 1 3 2 2 3 212 Um solche Tabellen leicht implementieren zu können, stellt Java das switch-statement

Mehr

Klasse Label. class Label { Code code; List<Integer> fixuplist; // code positions to patch int adr; // address of label in code

Klasse Label. class Label { Code code; List<Integer> fixuplist; // code positions to patch int adr; // address of label in code Klasse Label class Label { Code code; List fixuplist; // code positions to patch int adr; // address of label in code // inserts offset to label at current void put (); // defines label to be

Mehr

Zwischencode-Erzeugung. 2. Juni 2009

Zwischencode-Erzeugung. 2. Juni 2009 Zwischencode-Erzeugung im Rahmen des Seminars "Übersetzung von künstlichen Sprachen" Sebastian Hanneken 2. Juni 2009 1 / 32 1 Einleitung Einordnung Funktion von Zwischencode 3-Adresscode (3AC) 2 Erzeugung

Mehr

Verlässliche Echtzeitsysteme

Verlässliche Echtzeitsysteme Verlässliche Echtzeitsysteme Abstrakte Interpretation Fragestellungen Warum ist es so schwierig Korrektheitsaussagen zu formulieren? auch wenn nur eine bestimmten Programmeigenschaft relevant ist Wie hilft

Mehr

Verlässliche Echtzeitsysteme

Verlässliche Echtzeitsysteme Verlässliche Echtzeitsysteme Grundlagen der statischen Programmanalyse Peter Ulbrich Friedrich-Alexander-Universität Erlangen-Nürnberg Lehrstuhl Informatik 4 (Verteilte Systeme und Betriebssysteme) www4.informatik.uni-erlangen.de

Mehr

Bytecode-Manipulation leicht gemacht. Christian Kumpe, JavaLand 14. März 2018

Bytecode-Manipulation leicht gemacht. Christian Kumpe, JavaLand 14. März 2018 Bytecode-Manipulation leicht gemacht Christian Kumpe, JavaLand 14. März 2018 Agenda Referent Einführung Motivation Werkzeuge Javassist & ClassFileTransformer Fazit Copyright 2018 diva-e Digital Value Excellence

Mehr

Bytecode-Manipulation leicht gemacht. Christian Kumpe, Entwicklertag Karlsruhe 20. Juni 2018

Bytecode-Manipulation leicht gemacht. Christian Kumpe, Entwicklertag Karlsruhe 20. Juni 2018 Bytecode-Manipulation leicht gemacht Christian Kumpe, Entwicklertag Karlsruhe 20. Juni 2018 Agenda Referent Einführung Motivation Werkzeuge Javassist & ClassFileTransformer Fazit Copyright 2018 diva-e

Mehr

Institut für Programmierung und Reaktive Systeme 2. Februar Programmieren I. Übungsklausur

Institut für Programmierung und Reaktive Systeme 2. Februar Programmieren I. Übungsklausur Technische Universität Braunschweig Dr. Werner Struckmann Institut für Programmierung und Reaktive Systeme 2. Februar 2017 Hinweise: Klausurtermine: Programmieren I Übungsklausur Programmieren I: 13. März

Mehr

Unterspezifikation in der Semantik Hole Semantics

Unterspezifikation in der Semantik Hole Semantics in der Semantik Hole Semantics Laura Heinrich-Heine-Universität Düsseldorf Wintersemester 2011/2012 Idee (1) Reyle s approach was developed for DRT. Hole Semantics extends this to any logic. Distinction

Mehr

Institut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke

Institut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke Java 2 Markus Reschke 07.10.2014 Datentypen Was wird gespeichert? Wie wird es gespeichert? Was kann man mit Werten eines Datentyps machen (Operationen, Methoden)? Welche Werte gehören zum Datentyp? Wie

Mehr

12 Abstrakte Klassen, finale Klassen und Interfaces

12 Abstrakte Klassen, finale Klassen und Interfaces 12 Abstrakte Klassen, finale Klassen und Interfaces Eine abstrakte Objekt-Methode ist eine Methode, für die keine Implementierung bereit gestellt wird. Eine Klasse, die abstrakte Objekt-Methoden enthält,

Mehr

Semantik von Programmiersprachen SS 2017

Semantik von Programmiersprachen SS 2017 Lehrstuhl für Programmierparadigmen Denis Lohner Sebastian Ullrich denis.lohner@kit.edu sebastian.ullrich@kit.edu Semantik von Programmiersprachen SS 2017 http://pp.ipd.kit.edu/lehre/ss2017/semantik Lösungen

Mehr

Programmiertechnik. Teil 4. C++ Funktionen: Prototypen Overloading Parameter. C++ Funktionen: Eigenschaften

Programmiertechnik. Teil 4. C++ Funktionen: Prototypen Overloading Parameter. C++ Funktionen: Eigenschaften Programmiertechnik Teil 4 C++ Funktionen: Prototypen Overloading Parameter C++ Funktionen: Eigenschaften Funktionen (Unterprogramme, Prozeduren) fassen Folgen von Anweisungen zusammen, die immer wieder

Mehr

Informatik II - Tutorium 5

Informatik II - Tutorium 5 Informatik II - Tutorium 5 Vincent Becker vincent.becker@inf.ethz.ch 28.03.2018 Vincent Becker 28.03.2018 1 Neue Webseite Vincent Becker 28.03.2018 3 Allgemeines Java-Konvention: Alle Variablen- und Methodennamen

Mehr

Semantik von Programmiersprachen SS 2017

Semantik von Programmiersprachen SS 2017 Lehrstuhl für Programmierparadigmen Denis Lohner Sebastian Ullrich denis.lohner@kit.edu sebastian.ullrich@kit.edu Semantik von Programmiersprachen SS 2017 http://pp.ipd.kit.edu/lehre/ss2017/semantik Lösungen

Mehr

Methoden. Gerd Bohlender. Einstieg in die Informatik mit Java, Vorlesung vom

Methoden. Gerd Bohlender. Einstieg in die Informatik mit Java, Vorlesung vom Einstieg in die Informatik mit Java, Vorlesung vom 2.5.07 Übersicht 1 2 definition 3 Parameterübergabe, aufruf 4 Referenztypen bei 5 Überladen von 6 Hauptprogrammparameter 7 Rekursion bilden das Analogon

Mehr

Kapitel 6. Fixpunkte und semantische Bereiche

Kapitel 6. Fixpunkte und semantische Bereiche Kapitel 6 Fixpunkte und semantische Bereiche Sowohl bei der Definition der operationalen Semantik als auch bei der Definition der mathematischen Semantik haben wir mehr oder weniger explizit Fixpunkte

Mehr

Institut für Programmierung und Reaktive Systeme 25. Januar Programmieren I. Übungsklausur

Institut für Programmierung und Reaktive Systeme 25. Januar Programmieren I. Übungsklausur Technische Universität Braunschweig Dr. Werner Struckmann Institut für Programmierung und Reaktive Systeme 25. Januar 2018 Hinweise: Klausurtermine: Programmieren I Übungsklausur Programmieren I: 17. Februar

Mehr

Vorkurs Informatik WiSe 16/17

Vorkurs Informatik WiSe 16/17 Java Ausdrücke und Variablen Dr. Werner Struckmann / Stephan Mielke, Jakob Garbe, 05.10.2016 Technische Universität Braunschweig, IPS Überblick Ausdrücke, Datentypen und Variablen Kontrollstrukturen 05.10.2016

Mehr

Elementare Verbandstheorie. Elementare Verbandstheorie Sommersemester / 1

Elementare Verbandstheorie. Elementare Verbandstheorie Sommersemester / 1 Elementare Verbandstheorie Elementare Verbandstheorie Sommersemester 2009 1 / 1 Halbordnungen Definition Eine binäre Relation auf einer Menge M heisst Halbordnung, wenn sie reflexiv, transitiv und antisymmetrisch

Mehr

3.4 Fixpunkttheorie auf Partialordnungen

3.4 Fixpunkttheorie auf Partialordnungen 3.4 Fixpunkttheorie auf Partialordnungen Definition 3.15 (Partialordnung) Sei L eine Menge und eine binäre Relation auf L. O = L, heißt Partialordnung, falls folgende Bedingungen erfüllt sind: Reflexivität:

Mehr

Java Bytecode. Vorlesung Modellierung, Analyse, Verifikation Wintersemester 2018/19. Register und Stack. Klassenhierarchie und Typen

Java Bytecode. Vorlesung Modellierung, Analyse, Verifikation Wintersemester 2018/19. Register und Stack. Klassenhierarchie und Typen Vorlesung Modellierung, Analyse, Verifikation Wintersemester 2018/19 Prof. Barbara König Zwischensprache zwischen Hochsprache (Java) und Maschinensprache Vorteil: Maschinenunabhängigkeit, Geschwindigkeitsvorteil

Mehr

Vorlesung Modellierung, Analyse, Verifikation Wintersemester 2018/19

Vorlesung Modellierung, Analyse, Verifikation Wintersemester 2018/19 Vorlesung Modellierung, Analyse, Verifikation Wintersemester 2018/19 Prof. Barbara König Barbara König Modellierung, Analyse, Verifikation 1 Zwischensprache zwischen Hochsprache (Java) und Maschinensprache

Mehr

Einführung IMP-Syntax Reduktionssemantik Maschinen-Semantik. Teil IV. Semantik imperativer Sprachen

Einführung IMP-Syntax Reduktionssemantik Maschinen-Semantik. Teil IV. Semantik imperativer Sprachen Teil IV Semantik imperativer Sprachen 201 1. Einführung Alternativen zur Beschreibung der Semantik: natürliche Sprache (bisher, unpräzise) operational Reduktionssemantik (vgl. Haskell-Semantik in Kap.

Mehr

Prüfung Softwareentwicklung II (IB)

Prüfung Softwareentwicklung II (IB) Hochschule für angewandte Wissenschaften München Fakultät für Informatik und Mathematik Studiengruppe IB 2 B, IB 2 C Sommersemester 2013 Prüfung Softwareentwicklung II (IB) Datum : 11.07.2013, 08:30 Uhr

Mehr

Prozeduren vs. Funktionen

Prozeduren vs. Funktionen Prozeduren vs. Funktionen Mit der Formalisierung wird auch der Unterschied zwischen Prozeduren und Funktionen noch einmal klar. Der Aufruf beider Varianten bewirkt zunächst das Gleiche: die Eingabevariablen

Mehr

Programmieren in Java

Programmieren in Java Programmieren in Java Vorlesung 10: Ein Interpreter für While Prof. Dr. Peter Thiemann Albert-Ludwigs-Universität Freiburg, Germany SS 2015 Peter Thiemann (Univ. Freiburg) Programmieren in Java JAVA 1

Mehr

Vorkurs Informatik WiSe 17/18

Vorkurs Informatik WiSe 17/18 Java Ausdrücke und Variablen Dr. Werner Struckmann / Stephan Mielke, Nicole Naczk, 05.10.2017 Technische Universität Braunschweig, IPS Überblick Ausdrücke, Datentypen und Variablen Kontrollstrukturen 05.10.2017

Mehr

Institut für Programmierung und Reaktive Systeme. Java 7. Markus Reschke

Institut für Programmierung und Reaktive Systeme. Java 7. Markus Reschke Institut für Programmierung und Reaktive Systeme Java 7 Markus Reschke 14.10.2014 Vererbung in Java Vererbung ermöglicht es, Klassen zu spezialisieren Wiederverwendung vorhandener Klassen Kindsklasse erhält

Mehr

Info B VL 11: Innere Klassen/Collections

Info B VL 11: Innere Klassen/Collections Info B VL 11: Innere Klassen/Collections Objektorientiere Programmierung in Java 2003 Ute Schmid (Vorlesung) Elmar Ludwig (Übung) FB Mathematik/Informatik, Universität Osnabrück Info B VL 11: Innere Klassen/Collections

Mehr

Informatik II Übung 5. Pascal Schärli

Informatik II Übung 5. Pascal Schärli Informatik II Übung 5 pascscha@student.ethz.ch Warm - Up Warm - Up public static int power(int base, int exp) { int out=1; for(int i = 0; i

Mehr

Grundbegriffe der Informatik

Grundbegriffe der Informatik Grundbegriffe der Informatik Einheit 17: Relationen Thomas Worsch Karlsruher Institut für Technologie, Fakultät für Informatik Wintersemester 2013/2014 1/61 Anmerkung Änderung im Wintersemester 2013/2014:

Mehr

14 Abstrakte Klassen, finale Klassen, Interfaces

14 Abstrakte Klassen, finale Klassen, Interfaces Eine abstrakte Objekt-Methode ist eine Methode, für die keine Implementierung bereit gestellt wird. Eine Klasse, die abstrakte Objekt-Methoden enthält, heißt ebenfalls abstrakt. Für eine abstrakte Klasse

Mehr

Die abstrakte Klasse Expression:

Die abstrakte Klasse Expression: Die abstrakte Klasse Expression: Expression abstract evaluate() Add Neg Const 501 Die abstrakte Klasse Expression: Expression abstract evaluate() Add Neg Const Leider (zum Glück?) lässt sich nicht die

Mehr

14 Abstrakte Klassen, finale Klassen, Interfaces. Auswertung von Ausdrücken. Beispiel. Abstrakte Methoden und Klassen

14 Abstrakte Klassen, finale Klassen, Interfaces. Auswertung von Ausdrücken. Beispiel. Abstrakte Methoden und Klassen Auswertung von Ausdrücken Eine abstrakte Objekt-Methode ist eine Methode, für die keine Implementierung bereit gestellt wird. Eine Klasse, die abstrakte Objekt-Methoden enthält, heißt ebenfalls abstrakt.

Mehr

Korrektheit und Hoare-Kalkül für Imperative Programme

Korrektheit und Hoare-Kalkül für Imperative Programme Korrektheit und Hoare-Kalkül für Imperative Programme Martin Wirsing in Zusammenarbeit mit Moritz Hammer und Axel Rauschmayer SS 06 Ziele Partielle und totale Korrektheit kennen lernen Die Regeln des Hoare-Kalkül

Mehr

14 Abstrakte Klassen, finale Klassen, Interfaces

14 Abstrakte Klassen, finale Klassen, Interfaces Eine abstrakte Objekt-Methode ist eine Methode, für die keine Implementierung bereit gestellt wird. Eine Klasse, die abstrakte Objekt-Methoden enthält, heißt ebenfalls abstrakt. Für eine abstrakte Klasse

Mehr

Repetitorium Programmieren I + II

Repetitorium Programmieren I + II Repetitorium Programmieren I + II Stephan Gimbel Johanna Mensik Michael Roth 6. März 2012 Agenda 1 Operatoren 2 Datentypen Gleitpunkt Zahl Typkonvertierung 3 Strommanipulatoren 4 Bedingungen if-else switch-case

Mehr

Grundlagen der Programmierung Prof. H. Mössenböck. 6. Methoden

Grundlagen der Programmierung Prof. H. Mössenböck. 6. Methoden Grundlagen der Programmierung Prof. H. Mössenböck 6. Methoden Parameterlose Methoden Beispiel: Ausgabe einer Überschrift class Sample { static void printheader() { // Methodenkopf Out.println("Artikelliste");

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java Vorlesung vom 18.4.07, Grundlagen Übersicht 1 Kommentare 2 Bezeichner für Klassen, Methoden, Variablen 3 White Space Zeichen 4 Wortsymbole 5 Interpunktionszeichen 6 Operatoren 7 import Anweisungen 8 Form

Mehr

Software Engineering Informatik. Grundlagen der Statischen Analyse und ihre Werkzeuge

Software Engineering Informatik. Grundlagen der Statischen Analyse und ihre Werkzeuge Grundlagen der Statischen Analyse und ihre Werkzeuge Übersicht 1. Statische Analyse Allgemein 2. Grundlagen 3. Abstrakte Interpretation 4. Werkzeuge der Statischen Analyse 5. Zusammenfassung 2 Sichere

Mehr

Implementieren von Klassen

Implementieren von Klassen Implementieren von Klassen Felder, Methoden, Konstanten Dr. Beatrice Amrhein Überblick Felder/Mitglieder (Field, Member, Member-Variable) o Modifizierer Konstanten Methoden o Modifizierer 2 Felder und

Mehr

Es findet eine binäre/iterative o.ä. Suche statt. (8 Punkte);

Es findet eine binäre/iterative o.ä. Suche statt. (8 Punkte); Aufgabe 1. Postcondition für f. Rückgabewert ist die grösste Zahl r, für die r 5 x. In anderen Worten r = 5 x. Precondition für g. y 5 x und z 5 > x. Postcondition für g. Rückgabewert ist die grösste Zahl

Mehr

2 Eine einfache Programmiersprache

2 Eine einfache Programmiersprache 2 Eine einfache Programmiersprache Eine Programmiersprache soll Datenstrukturen anbieten Operationen auf Daten erlauben Kontrollstrukturen zur Ablaufsteuerung bereitstellen Als Beispiel betrachten wir

Mehr

2 Eine einfache Programmiersprache. Variablen. Operationen Zuweisung. Variablen

2 Eine einfache Programmiersprache. Variablen. Operationen Zuweisung. Variablen Variablen Eine Programmiersprache soll Datenstrukturen anbieten Operationen auf Daten erlauben Kontrollstrukturen zur Ablaufsteuerung bereitstellen Variablen dienen zur Speicherung von Daten. Um Variablen

Mehr

Schwerpunkte. 10. Felder (Arrays) Grundprinzip von Arrays. Klassifikation von Typen in Programmiersprachen

Schwerpunkte. 10. Felder (Arrays) Grundprinzip von Arrays. Klassifikation von Typen in Programmiersprachen Schwerpunkte 10. Felder (Arrays) Teil 1 Java-Beispiele: Echo.java Primzahlen.java Monate.java Klassifikation von Typen in Programmiersprachen Array: einziger strukturierter Typ in Java Deklaration, Erzeugung

Mehr

6 Denotationale Semantik Semantik von Programmiersprachen

6 Denotationale Semantik Semantik von Programmiersprachen 6.2 Fixpunkttheorie Im vorherigen Abschnitt haben wir den Fixpunktoperator FIX als Grenzwert der Fixpunktiteration postuliert. Es ist aber noch nicht klar, dass die Fixpunktiteration immer zu einem Grenzwert

Mehr

Qualitätssicherung von Software (SWQS)

Qualitätssicherung von Software (SWQS) Qualitätssicherung von Software (SWQS) Prof. Dr. Holger Schlingloff Humboldt-Universität zu Berlin und Fraunhofer FOKUS 6.6.2013: Statische Analyse Folie 2 Fragen zur Wiederholung Was ist der Unterschied

Mehr

Deklaration einer Klasse Innere innerhalb Klassen einer in Ja anderen v a Klasse

Deklaration einer Klasse Innere innerhalb Klassen einer in Ja anderen v a Klasse Innere Klassen in Java Java 1.0: nur top-level Klassen Seit Java Version 1.1: Innere Klassen Deklaration einer Klasse innerhalb einer anderen Klasse Illustration Eigenschaften Vorteile Anwendungsmöglichkeiten

Mehr

Angewandte Mathematik und Programmierung

Angewandte Mathematik und Programmierung Angewandte Mathematik und Programmierung Einführung in das Konzept der objektorientierten Anwendungen zu mathematischen Rechnens WS 2013/14 Operatoren Operatoren führen Aktionen mit Operanden aus. Der

Mehr

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Martin Unold INFORMATIK. Geoinformatik und Vermessung Zusammenfassung Was ist eine Programmiersprache? Eine Sprache, die Formal eindeutig in Maschinenbefehle übersetzbar ist Für Menschen einfacher verständlich ist als Bytecode Zur Formulierung von Datenstrukturen

Mehr

1 Abstrakte Klassen, finale Klassen und Interfaces

1 Abstrakte Klassen, finale Klassen und Interfaces 1 Abstrakte Klassen, finale Klassen und Interfaces Eine abstrakte Objekt-Methode ist eine Methode, für die keine Implementierung bereit gestellt wird. Eine Klasse, die abstrakte Objekt-Methoden enthält,

Mehr

Informatik II Übung 4 Gruppe 7

Informatik II Übung 4 Gruppe 7 Informatik II Übung 4 Gruppe 7 Leyna Sadamori leyna.sadamori@inf.ethz.ch Informatik II Übung 4 Leyna Sadamori 20. März 2014 1 Administratives Text Encoding: UTF-8 Informatik II Übung 4 Leyna Sadamori 20.

Mehr

4. Zahlendarstellungen

4. Zahlendarstellungen 121 4. Zahlendarstellungen Wertebereich der Typen int, float und double Gemischte Ausdrücke und Konversionen; Löcher im Wertebereich; Fliesskommazahlensysteme; IEEE Standard; Grenzen der Fliesskommaarithmetik;

Mehr

1. Grundzüge der Objektorientierung 2. Methoden, Unterprogramme und Parameter 3. Datenabstraktion 4. Konstruktoren 5. Vordefinierte Klassen

1. Grundzüge der Objektorientierung 2. Methoden, Unterprogramme und Parameter 3. Datenabstraktion 4. Konstruktoren 5. Vordefinierte Klassen 1. Grundzüge der Objektorientierung 2. Methoden, Unterprogramme und Parameter 3. Datenabstraktion 4. Konstruktoren 5. Vordefinierte Klassen II.2.2 Methoden, Unterprogramme und Parameter - 1 - 2. Methoden

Mehr

Institut für Programmierung und Reaktive Systeme. Java 6. Markus Reschke

Institut für Programmierung und Reaktive Systeme. Java 6. Markus Reschke Institut für Programmierung und Reaktive Systeme Java 6 Markus Reschke 13.10.2014 OOP Objekte = Verhalten (durch Methoden) + Daten (durch Attribute) Klassen = Baupläne für Objekte Kapselung von Programmteilen

Mehr

Java Tools JDK. IDEs. Downloads. Eclipse. IntelliJ. NetBeans. Java SE 8 Java SE 8 Documentation

Java Tools JDK. IDEs.  Downloads. Eclipse. IntelliJ. NetBeans. Java SE 8 Java SE 8 Documentation Java Tools JDK http://www.oracle.com/technetwork/java/javase/ Downloads IDEs Java SE 8 Java SE 8 Documentation Eclipse http://www.eclipse.org IntelliJ http://www.jetbrains.com/idea/ NetBeans https://netbeans.org/

Mehr

2. Unterprogramme und Methoden

2. Unterprogramme und Methoden 2. Unterprogramme und Methoden Durch Methoden wird ausführbarer Code unter einem Namen zusammengefasst. Dieser Code kann unter Verwendung von sogenannten Parametern formuliert sein, denen später beim Aufruf

Mehr

Formale Spezifikation mit Java Modeling Language

Formale Spezifikation mit Java Modeling Language Formale Spezifikation mit Java Modeling Language Daniel Bruns Praxis der Software-Entwicklung, 25 November 2010 INSTITUT FÜR THEORETISCHE INFORMATIK KIT Universität des Landes Baden-Württemberg und nationales

Mehr

Parameterübergabemechanismen für den Methodenaufruf

Parameterübergabemechanismen für den Methodenaufruf Methode, griech. der Weg zu etwas, planmäßiges Verfahren -Brockhaus Parameterübergabemechanismen für den Methodenaufruf Prof. Dr. Christian Böhm in Zusammenarbeit mit Gefei Zhang http://www.dbs.ifi.lmu.de/lehre/nfinfosw

Mehr

Programmieren in Java

Programmieren in Java Programmieren in Java Vorlesung 02: Methoden Prof. Dr. Peter Thiemann Albert-Ludwigs-Universität Freiburg, Germany SS 2017 Peter Thiemann (Univ. Freiburg) Programmieren in Java JAVA 1 / 17 Inhalt Scanner

Mehr

Zuerst wird die Bedingung ausgewertet. Ist sie erfüllt, wird der Rumpf des while-statements ausgeführt. Nach Ausführung des Rumpfs wird das gesamte

Zuerst wird die Bedingung ausgewertet. Ist sie erfüllt, wird der Rumpf des while-statements ausgeführt. Nach Ausführung des Rumpfs wird das gesamte Zuerst wird die Bedingung ausgewertet. Ist sie erfüllt, wird der Rumpf des while-statements ausgeführt. Nach Ausführung des Rumpfs wird das gesamte while-statement erneut ausgeführt. Ist die Bedingung

Mehr

SE2-6. Übung Johannes Bürdek

SE2-6. Übung Johannes Bürdek SE2-6. Übung 11.12.2014 Johannes Bürdek johannes.buerdek@es.tu-darmstadt.de Fragen und Support: se2@es.tu-darmstadt.de oder ins Forum: https://moodle.tu-darmstadt.de/mod/forum/view.php?id=56674 ES Real-Time

Mehr

Standardkonstrukte in Java

Standardkonstrukte in Java Robert Buchholz, Sven Schneider JavaKurs 2006 1. Tag Freitagsrunde / Tutoren 03. April 2006 Was lernen wir heute noch kennen? 1 Methoden Definition einer Methode Aufruf einer Methode 2 Datenstruktur Array

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 22 Einstieg in die Informatik mit Java Grundlagen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 22 1 Kommentare 2 Bezeichner für Klassen, Methoden, Variablen 3 White

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 26 Einstieg in die Informatik mit Java Methoden Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 26 1 Methoden 2 Methodendefinition 3 Parameterübergabe, Methodenaufruf

Mehr

Vorkurs Informatik WiSe 15/16

Vorkurs Informatik WiSe 15/16 Java 7 Dr. Werner Struckmann / Stephan Mielke, Jakob Garbe, 21.10.2015 Technische Universität Braunschweig, IPS Überblick OO in Java Vererbung Abstrakte Klassen und Interfaces 21.10.2015 Dr. Werner Struckmann

Mehr

Zwischencodeerzeugung Compiler II

Zwischencodeerzeugung Compiler II Zwishenodeerzeugung Compiler II Prof. Dr. Ursula Goltz 14.09.2012 Einleitung Front-End... Parser Sem. Analys Zwishenodegenerator Bak-End Codegenerator... Zwishendarstellung (Zwishenode) evtl. mashinennunabh.

Mehr

7. Vererbung und Polymorphie

7. Vererbung und Polymorphie 210 7. Vererbung und Polymorphie Ausdrucksbäume, Vererbung, Code-Wiederverwendung, virtuelle Funktionen, Polymorphie, Konzepte des objektorientierten Programmierens (Ausdrucks-)Bäume -(3-(4-5))*(3+4*5)/6

Mehr

hue12 January 24, 2017

hue12 January 24, 2017 hue12 January 24, 2017 1 Abgabehinweise Beachten Sie unbedingt diese Hinweise, sonst erhalten Sie keine Punkte aus dieser Abgabe! Für Details siehe z.b. Folien der nullten Zentralübung 1.1 Namen und Matrikelnummern

Mehr

Programmieren in Java

Programmieren in Java Programmieren in Java Vorlesung 05: Generics Prof. Dr. Peter Thiemann Albert-Ludwigs-Universität Freiburg, Germany SS 2015 Peter Thiemann (Univ. Freiburg) Programmieren in Java JAVA 1 / 19 Inhalt Generics

Mehr

19. Vererbung und Polymorphie

19. Vererbung und Polymorphie 667 19. Vererbung und Polymorphie Ausdrucksbäume, Vererbung, Code-Wiederverwendung, virtuelle Funktionen, Polymorphie, Konzepte des objektorientierten Programmierens (Ausdrucks-)Bäume -(3-(4-5))*(3+4*5)/6

Mehr

n 1. Grundzüge der Objektorientierung n 2. Methoden, Unterprogramme und Parameter n 3. Datenabstraktion n 4. Konstruktoren n 5. Vordefinierte Klassen

n 1. Grundzüge der Objektorientierung n 2. Methoden, Unterprogramme und Parameter n 3. Datenabstraktion n 4. Konstruktoren n 5. Vordefinierte Klassen n 1. Grundzüge der Objektorientierung n 2. Methoden, Unterprogramme und Parameter n 3. Datenabstraktion n 4. Konstruktoren n 5. Vordefinierte Klassen II.2.2 Methoden, Unterprogramme und Parameter - 1 -

Mehr

Heap vs. Stack vs. statisch. 6 Speicherorganisation. Beispiel Statische Variablen. Statische Variablen

Heap vs. Stack vs. statisch. 6 Speicherorganisation. Beispiel Statische Variablen. Statische Variablen Heap vs. vs. statisch Der Speicher des Programms ist in verschiedene Speicherbereiche untergliedert Speicherbereiche, die den eigentlichen Programmcode und den Code der Laufzeitbibliothek enthalten; einen

Mehr

Von der Programmiersprache WHILE zum ersten Einstieg in Java

Von der Programmiersprache WHILE zum ersten Einstieg in Java Von der Programmiersprache WHILE zum ersten Einstieg in Java Die Programmiersprache WHILE bildet den Kern jeder imperativen Programmiersprache. Man geht davon aus, dass die Ein- Ausgabe primitiv organisiert

Mehr

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden Kapitel 8 Programmierkurs Birgit Engels Anna Schulze Zentrum für Angewandte Informatik Köln Objektorientierte Programmierung Methoden Überladen von Methoden Der this-zeiger Konstruktoren Vererbung WS 07/08

Mehr

2 Eine einfache Programmiersprache

2 Eine einfache Programmiersprache 2 Eine einfache Programmiersprache Eine Programmiersprache soll Datenstrukturen anbieten Operationen auf Daten erlauben Kontrollstrukturen zur Ablaufsteuerung bereitstellen Als Beispiel betrachten wir

Mehr

Heap vs. Stack vs. statisch. 6 Speicherorganisation. Beispiel Statische Variablen. Statische Variablen

Heap vs. Stack vs. statisch. 6 Speicherorganisation. Beispiel Statische Variablen. Statische Variablen Heap vs. vs. statisch Der Speicher des Programms ist in verschiedene Speicherbereiche untergliedert Speicherbereiche, die den eigentlichen Programmcode und den Code der Laufzeitbibliothek enthalten; einen

Mehr

6 Speicherorganisation

6 Speicherorganisation 6 Speicherorganisation Der Speicher des Programms ist in verschiedene Speicherbereiche untergliedert Speicherbereiche, die den eigentlichen Programmcode und den Code der Laufzeitbibliothek enthalten; einen

Mehr

J.5 Die Java Virtual Machine

J.5 Die Java Virtual Machine Java Virtual Machine Die Java Virtual Machine 22 Prof. Dr. Rainer Manthey Informatik II Java-Compiler und Java Virtual Machine Quellcode-Datei class C... javac D.java Java-Compiler - Dateien class class

Mehr

Technische Informatik 1 Übung 2 Assembler (Rechenübung) Georgia Giannopoulou (ggeorgia@tik.ee.ethz.ch) 22./23. Oktober 2015

Technische Informatik 1 Übung 2 Assembler (Rechenübung) Georgia Giannopoulou (ggeorgia@tik.ee.ethz.ch) 22./23. Oktober 2015 Technische Informatik 1 Übung 2 Assembler (Rechenübung) Georgia Giannopoulou (ggeorgia@tik.ee.ethz.ch) 22./23. Oktober 2015 Ziele der Übung Aufgabe 1 Aufbau und Aufruf von Funktionen in Assembler Codeanalyse

Mehr

Informatik II Übung 4. Pascal Schärli

Informatik II Übung 4. Pascal Schärli Informatik II Übung 4 pascscha@student.ethz.ch Nachbesprechung Serie 3 - Aufgabe 1 Schleifeninvariante: z+u j=i j Nach der while-scheife: u=0 z= i j Was passiert wenn man das Programm so abändert? Schleifeninvariante

Mehr

Kontrollstrukturen: Wiederholungsanweisungen

Kontrollstrukturen: Wiederholungsanweisungen Kontrollstrukturen: Wiederholungsanweisungen Philipp Wendler Zentralübung zur Vorlesung Einführung in die Informatik: Programmierung und Softwareentwicklung https://www.sosy-lab.org/teaching/2017-ws-infoeinf/

Mehr

Javakurs für Anfänger

Javakurs für Anfänger Javakurs für Anfänger Einheit 06: Einführung in Kontrollstrukturen Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Heutige Agenda 1. Teil: Einführung in Kontrollstrukturen 3 Grundstrukturen von

Mehr

Software Entwicklung 1

Software Entwicklung 1 Software Entwicklung 1 Annette Bieniusa / Arnd Poetzsch-Heffter AG Softech FB Informatik TU Kaiserslautern Fallstudie: Arithmetische Ausdrücke Bieniusa/Poetzsch-Heffter Software Entwicklung 1 2/ 33 Überblick

Mehr

Kontrollfluss. man Verzweigungen und Sprünge. o bisher linear (von oben nach unten) o Für interessante Programme braucht

Kontrollfluss. man Verzweigungen und Sprünge. o bisher linear (von oben nach unten) o Für interessante Programme braucht Kontrollanweisungen Kontrollfluss o bisher linear (von oben nach unten) o Für interessante Programme braucht man Verzweigungen und Sprünge Kontrollfluss o bisher linear (von oben nach unten) o Für interessante

Mehr

Informatik II Übung 04

Informatik II Übung 04 Informatik II Übung 04 Michael Baumann mbauman@student.ethz.ch n.ethz.ch/~mbauman 23.03.2016 Ablauf 1) Nachbesprechung Serie 3 2) Stacks 3) Vorbesprechung Serie 4 4) Bytecode und Assembler 2 Ablauf 1)

Mehr

Prof. Dr. Wolfgang Schramm. Vorlesung. Techniken der Programmentwicklung. Exkurs: Anonyme Klassen

Prof. Dr. Wolfgang Schramm. Vorlesung. Techniken der Programmentwicklung. Exkurs: Anonyme Klassen Prof. Dr. Wolfgang Schramm Vorlesung Exkurs: Anonyme Klassen Techniken der Programmentwicklung Prof. Dr. Wolfgang Schramm Vorlesung Exkurs: Anonyme Klassen Techniken der Programmentwicklung Anonyme Klassen

Mehr

Beispiel: Temperaturumwandlung. Imperative Programmierung. Schwerpunkte. 3. Grundlegende Sprachkonstruktionen imperativer Programme

Beispiel: Temperaturumwandlung. Imperative Programmierung. Schwerpunkte. 3. Grundlegende Sprachkonstruktionen imperativer Programme Schwerpunkte 3. Grundlegende Sprachkonstruktionen imperativer Programme Java-Beispiele: Temperature.java Keyboard.java Imperative Programmierung Beispiel für ein Programm aus drei Komponenten Variable,

Mehr

6 Speicherorganisation

6 Speicherorganisation Der Speicher des Programms ist in verschiedene Speicherbereiche untergliedert Speicherbereiche, die den eigentlichen Programmcode und den Code der Laufzeitbibliothek enthalten; einen Speicherbereich für

Mehr

PC/XT/AT ASSEMBLER-BUCH

PC/XT/AT ASSEMBLER-BUCH PC/XT/AT ASSEMBLER-BUCH Alle Befehle + Makro-Assembler KLAUS-DIETER THIES t

Mehr

Übergang von funktionaler zu OOP. Algorithmen und Datenstrukturen II 1

Übergang von funktionaler zu OOP. Algorithmen und Datenstrukturen II 1 Übergang von funktionaler zu OOP Algorithmen und Datenstrukturen II 1 Imperative vs. funktionale Programmierung Plakativ lassen sich folgende Aussagen treffen: funktional: imperativ: Berechnung von Werten

Mehr

EWS, WS 2016/17 Pfahler I-1

EWS, WS 2016/17 Pfahler I-1 Vorlesung und Übung Universität Paderborn Wintersemester 2016/2017 Dr. Peter Pfahler Funktionen EWS, WS 2016/17 Pfahler I-1 Funktionen Funktion: Rechenvorschrift mit einem Namen und ggf. formalen Parametern,

Mehr

DieÜbersetzung funktionaler Programmiersprachen

DieÜbersetzung funktionaler Programmiersprachen DieÜbersetzung funktionaler Programmiersprachen 107 11 Die Sprache PuF Wir betrachten hier nur die Mini-Sprache PuF( Pure Functions ). Insbesondere verzichten wir(vorerst) auf: Seiteneffekte; Datenstrukturen;

Mehr