La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

1 Espressioni 4 dato che non abbiamo previsto inizializzazioni per le variabili (statiche e di istanza) all’interno delle classi, le espressioni possono.

Presentazioni simili


Presentazione sul tema: "1 Espressioni 4 dato che non abbiamo previsto inizializzazioni per le variabili (statiche e di istanza) all’interno delle classi, le espressioni possono."— Transcript della presentazione:

1 1 Espressioni 4 dato che non abbiamo previsto inizializzazioni per le variabili (statiche e di istanza) all’interno delle classi, le espressioni possono comparire solo all’interno dei metodi 4 consideriamo solo alcuni dei casi di espressioni –quelli che riguardano oggetti

2 2 Espressioni Expr := new Id | (creazione di istanza) Path Id (accesso al valore di una variabile) Path := Path id. | (si parte da Path) this. | (si parte dall’oggetto corrente) (cammino vuoto) 4 Ambigua? No

3 3 La relazione di transizione per le espressioni Expr := new Id | (creazione di istanza) Path Id (accesso al valore di una variabile) Expr * Cenv * Heap * Astack  expr Val * Heap

4 4 Creazione di oggetti Expr * Cenv * Heap * Astack  expr Val * Heap  (a) = (_,_,_, ,  ) l = newloc(  )  ’ = instantiate( , l)  ’ = copy(  )  ’’ = hbind( , l, (a,  ’,  ’))  ’(a) = (_, b, _)  ’= push( , (l, push(emptystack(), newframe())))  com ________________________________________________  expr

5 5 Creazione di oggetti: commenti  (a) = (_,_,_, ,  ) l = newloc(  )  ’ = instantiate( , l)  ’ = copy(  )  ’’ = hbind( , l, (a,  ’,  ’))  ’(a) = (_, b, _)  ’= push( , (l, push(emptystack(), newframe())))  com ________________________________________________  expr 4 l’oggetto contiene –il nome della classe –una copia del frame delle variabili di istanza –una specializzazione sull’oggetto dell’ambiente di metodi di istanza 4 il costruttore viene eseguito come una invocazione di metodo –non facciamo vedere i possibili effetti “nascosti” sui frames di variabili statiche (modifica di  da parte di  com )

6 6 Risoluzione di nomi (semplici) 4 il riferimento ad un identificatore (non qualificato) può in generale essere risolto –nella pila di frames sulla testa dello stack delle attivazioni –nei frames delle variabili di istanza di un oggetto –nei frames di variabili statiche di una classe 4 il modo di effettuare la ricerca dipende da dove essa inizia –un metodo (quello correntemente attivo) –un oggetto –una classe Ide * (Ide | Loc | met) * Cenv * Heap * Astack  naming Val

7 7 Risoluzione di nomi (nella classe) Ide * (Ide | Loc | met) * Cenv * Heap * Astack  naming Val  (c) = (c1, , _, _, _) defined( , i) _____________________________________________  naming  (i)  (c) = (c1, , _, _, _) not defined( , i)  naming v _____________________________________________  naming v

8 8 Risoluzione di nomi (nell’oggetto) Ide * (Ide | Loc | met) * Cenv * Heap * Astack  naming Val  (l) = (c, , _) defined( , i) _____________________________________________  naming  (i)  (l) = (c, , _) not defined( , i)  naming v _____________________________________________  naming v

9 9 Risoluzione di nomi (nel metodo) Ide * (Ide | Loc | met) * Cenv * Heap * Astack  naming Val top(  ) = (x,  )  = top(  ) defined( , i) _____________________________________________  naming  (i) top(  ) = (x,  )  = top(  ) not defined( , i)  ’ = push(pop(  ), (x, pop(  )))  naming v _____________________________________________  naming v top(  ) = (x,  ) empty(  )  naming v _____________________________________________  naming v

10 10 Qualificazione dei nomi (paths) Path := Path id. | (si parte da Path) this. | (si parte dall’oggetto corrente) (cammino vuoto) 4 la semantica di un path determina il punto di partenza di una operazione di naming Path * (Ide | Loc | met) * Cenv * Heap * Astack  path (Ide | Loc | met)

11 11 Qualificazione dei nomi Path * (Ide | Loc | met) * Cenv * Heap * Astack  path (Ide | Loc | met)  path p’  naming o’ _________________________________________________  path o’ top(  ) = (o, _) ____________________________  path o  path x

12 12 Come trovare il valore di un nome Expr := Path Id Expr * Cenv * Heap * Astack  expr Val * Heap  path p’  naming v ___________________________________________________  expr 4 i controlli statici garantiscono che il nome (nel frame opportuno) abbia già ricevuto un valore (inizializzazione o assegnamento) prima dell’uso

13 13 I comandi 4 un blocco (corpo di un metodo) è una sequenza di dichiarazioni e comandi (che possono anche essere blocchi nidificati) 4 la composizione sequenziale viene trattata in modo standard –nel costrutto c;cl valutiamo cl nello stato risultante dalla valutazione di c 4 trattiamo anche le dichiarazioni di variabili (locali al metodo) come comandi 4 vediamo solo alcuni casi di comandi –condizionali e loops hanno la semantica vista nel primo corso Com * Cenv * Heap * Astack  com Heap * Astack * Cenv

14 14 Sintassi dei comandi Com := {Com} | (blocco annidato) Path Id = Expr | (assegnamento) Type Id = Expr | (dichiarazione) Path Id (Expr_list) | (invocazione di metodo) Com * Cenv * Heap * Astack  com Heap * Astack * Cenv

15 15 Semantica dei blocchi Com := {Com} (blocco annidato) Com * Cenv * Heap * Astack  com Heap * Astack * Cenv top(  ) = (x,  )  ’=push(pop(  ), (x, push( , newframe())))  com top(  ’’) = (x,  ’) ________________________________________________  com

16 16 Semantica delle dichiarazioni Com := Type Id = Expr (dichiarazione) Com * Cenv * Heap * Astack  com Heap * Astack * Cenv top(  ) = (x,  )  = top(  )  expr  ’= bind( , i, v)  ’=push(pop(  ), (x,push(pop(  ),  ’))) _________________________________________  com  la bind “modifica”  dentro 


Scaricare ppt "1 Espressioni 4 dato che non abbiamo previsto inizializzazioni per le variabili (statiche e di istanza) all’interno delle classi, le espressioni possono."

Presentazioni simili


Annunci Google