Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
PubblicatoBruno Vigano Modificato 9 anni fa
1
Ex.1 - Semantica dell’Assegnamento Com := Path Ide = Expr (assegnamento) Com * Cenv * Heap * Astack com Heap * Astack * Cenv Una soluzione parziale: expr top( ’ ) = (x, ) = top( ) defined( , i) ’ =update ( , i, v) ”=push(pop( ’),(x,push(pop( ), ’) _________________________________________________ com Con 2 problemi: update: frame*ide*val non è una funzione discesa ricorsiva della struttura
2
Assegnamento: una soluzione Com := Path Ide = Expr (assegnamento) Com * Cenv * Heap * Astack com Heap * Astack * Cenv path c expr update update _____________________________ com Ide * Val * (Ide | Loc | met) * Cenv * Heap * Astack update Heap * Astack * Cenv
3
Update: frame in Ide * Val * (Ide | Loc | met) * Cenv * Heap * Astack update Heap * Astack top( ) = (x, ) = top( ) defined( , i) ’ :update ( , i, v) __________________________________________________________ update top( ) = (x, ) = top( ) not defined( , i) ’ = pop( update _____________________________________________ update top( ) = (x, ) empty( ) update _____________________________________________ update Notazione: ’ :update ( , i, v) indica che la modifica su provoca la modifica del componente corrente in un nuovo componente ’
4
Update: frame in Ide * Val * (Ide | Loc | met) * Cenv * Heap * Astack update Heap * Astack (l) = (c, , _) defined( , i) ’ update ( , i, v) _____________________________________________ update (l) = (c, , _) not defined( , i) update _____________________________________________ update
5
Update: frame in Ide * Val * (Ide | Loc | met) * Cenv * Heap * Astack update Heap * Astack * Cenv (c) = (c1, , _, _, _) defined( , i) ’ :update ( , i, v) _____________________________________________ update (c) = (c1, , _, _, _) not defined( , i) update _____________________________________________ update
6
Ex.2 - this.this: applichiamo le regole path p’ naming v ___________________________________________________ expr expr top( ) = (o, _) ____________________________ path o path o top( ) = (o, _) ____________________________ naming o naming o p’=o=met Ma: o≠met
7
Ex.3 - Comando Return: semantica Com := return (terminazione valutazione) Com * Cenv * Heap * Astack com Heap * Astack * Cenv top( ) = (x, ) _____________________________________ com com
8
Ex.4 - Return: semantica come espressione Expr := return e Expr * Cenv * Heap * Astack expr Val * Heap (* Astack) expr _______________________________________ expr expr
9
Ex.5 - Un programma: semantica public class A{ public static int x; public int y; public void P1(int y){ this.y=y+x; x=P2(this); } public int P2(A z){ z.y = y+ A.x; return x; } public A(){ x = 7; y = x; }} class B extends A{ public static int z; public static int w; public int P2(A z){ z.x = y + w; return B.z; } public B(){ z = x+1; w = 0; }} class Princ{ public static void main(String[] args){ B o = new B(); int m = o.P2(o); }}
10
Parte statica: ambiente object …. Aobjectx 0 - y 0 P1 (int y) b1 ? P2(A z) b2 ? {x=7;y=x} BAz 0 w 0 - y 0 P1 (int y) b1 ? P2(A z) b3 ? {x=7;y=x; z=x+1;w=0} Princobject - main (.. args) b4 Princ - P1 (int y) b1 ? P2(A z) b3 ? {x=7;y=x; z=x+1;w=0} b1 {this.y=y+x; x=P2(this);} b2 {z.y=y+A.x; return x;} b3 {z.x=y+w; return B.x;} b3 {B o=new B(); int m= o.P2(o);}
11
Parte dinamica: Astack heap struttura iniziale: il primo record di attivazione … graficamente valutando espressione new B() … graficamente
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.