Interpreter für Zwischencode und abstrakte Interpretation
|
|
- Gerhardt Huber
- vor 6 Jahren
- Abrufe
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 Inhalt Bytecode Allgemein Architektur Aufbau Instruktionsgruppen Beispiel FU Berlin, Bytecode, Übersetzerbau 2013
MehrAbstarkte 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
MehrPraktikum 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
MehrOffenbar 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
MehrKlasse 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
MehrZwischencode-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
MehrVerlä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
MehrVerlä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
MehrBytecode-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
MehrBytecode-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
MehrInstitut 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
MehrUnterspezifikation 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
MehrInstitut 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
Mehr12 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,
MehrSemantik 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
MehrProgrammiertechnik. 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
MehrInformatik 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
MehrSemantik 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
MehrMethoden. 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
MehrKapitel 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
MehrInstitut 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
MehrVorkurs 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
MehrElementare 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
Mehr3.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:
MehrJava 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
MehrVorlesung 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
MehrEinfü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.
MehrPrü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
MehrProzeduren 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
MehrProgrammieren 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
MehrVorkurs 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
MehrInstitut 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
MehrInfo 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
MehrInformatik 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
MehrGrundbegriffe 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:
Mehr14 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
MehrDie 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
Mehr14 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.
MehrKorrektheit 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
Mehr14 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
MehrRepetitorium 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
MehrGrundlagen 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");
MehrEinstieg 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
MehrSoftware 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
MehrImplementieren 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
MehrEs 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
Mehr2 Eine einfache Programmiersprache
2 Eine einfache Programmiersprache Eine Programmiersprache soll Datenstrukturen anbieten Operationen auf Daten erlauben Kontrollstrukturen zur Ablaufsteuerung bereitstellen Als Beispiel betrachten wir
Mehr2 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
MehrSchwerpunkte. 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
Mehr6 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
MehrQualitä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
MehrDeklaration 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
MehrAngewandte 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
MehrMartin 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
Mehr1 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,
MehrInformatik 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.
Mehr4. 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;
Mehr1. 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
MehrInstitut 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
MehrJava 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/
Mehr2. 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
MehrFormale 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
MehrParameterü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
MehrProgrammieren 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
MehrZuerst 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
MehrSE2-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
MehrStandardkonstrukte 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
MehrEinstieg 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
MehrEinstieg 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
MehrVorkurs 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
MehrZwischencodeerzeugung 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.
Mehr7. 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
Mehrhue12 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
MehrProgrammieren 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
Mehr19. 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
Mehrn 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 -
MehrHeap 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
MehrVon 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
MehrKapitel 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
Mehr2 Eine einfache Programmiersprache
2 Eine einfache Programmiersprache Eine Programmiersprache soll Datenstrukturen anbieten Operationen auf Daten erlauben Kontrollstrukturen zur Ablaufsteuerung bereitstellen Als Beispiel betrachten wir
MehrHeap 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
Mehr6 Speicherorganisation
6 Speicherorganisation Der Speicher des Programms ist in verschiedene Speicherbereiche untergliedert Speicherbereiche, die den eigentlichen Programmcode und den Code der Laufzeitbibliothek enthalten; einen
MehrJ.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
MehrTechnische 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
MehrInformatik 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
MehrKontrollstrukturen: 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/
MehrJavakurs 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
MehrSoftware 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
MehrKontrollfluss. 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
MehrInformatik 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)
MehrProf. 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
MehrBeispiel: 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,
Mehr6 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
MehrPC/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 Imperative vs. funktionale Programmierung Plakativ lassen sich folgende Aussagen treffen: funktional: imperativ: Berechnung von Werten
MehrEWS, 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,
MehrDieÜ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