Qualificazione dei nomi (paths)

12
1 Qualificazione dei nomi (paths) Path := Path id. | (si parte da Path) this. | (si parte dall’oggetto corrente) (cammino vuoto) 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)

description

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

Transcript of Qualificazione dei nomi (paths)

Page 1: Qualificazione dei nomi (paths)

1

Qualificazione dei nomi (paths)

Path := Path id. | (si parte da Path) this. | (si parte dall’oggetto corrente)

(cammino vuoto)

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)

Page 2: Qualificazione dei nomi (paths)

2

Qualificazione dei nomi

Path * (Ide | Loc | met) * Cenv * Heap * Astack path (Ide | Loc | met)

<P,x, ,,> path p’ <o, p’, ,,> naming o’

_________________________________________________

<P o., x, <P o., x, ,,,,> > path path o’o’

top() = (o, _) ____________________________

<this., met, <this., met, ,,, , > > path path oo

< , x, < , x, ,,, , > > path path xx

Page 3: Qualificazione dei nomi (paths)

3

Come trovare il valore di un nome

Expr := Path Id

Expr * Cenv * Heap * Astack expr Val * Heap

<P, met,,,> path p’ <o, p’, ,, > naming v

___________________________________________________

<P o, <P o, ,,, , > > exprexpr<v, <v, >>

i controlli statici garantiscono che il nome (nel frame opportuno) abbia già ricevuto un valore (inizializzazione o assegnamento) prima dell’uso

Page 4: Qualificazione dei nomi (paths)

4

I comandi

un blocco (corpo di un metodo) è una sequenza di dichiarazioni e comandi (che possono anche essere blocchi nidificati)

la composizione sequenziale viene trattata in modo standard– nel costrutto c;cl valutiamo cl nello stato risultante dalla

valutazione di c trattiamo anche le dichiarazioni di variabili (locali al

metodo) come comandi vediamo solo alcuni casi di comandi

– condizionali e loops hanno la semantica vista nel primo corso

Com * Cenv * Heap * Astack com Heap * Astack * Cenv

Page 5: Qualificazione dei nomi (paths)

5

Sintassi dei comandi

Com := {Com} | (blocco annidato) Path Id = Expr | (assegnamento)Type Id = Expr | (dichiarazione)altri comandi:while-for-…(come nella prima parte)Path Id (Expr_list) | (invocazione di metodo)

Com * Cenv * Heap * Astack com Heap * Astack * Cenv

Page 6: Qualificazione dei nomi (paths)

6

Semantica dei blocchi

Com := {Com} (blocco annidato)

Com * Cenv * Heap * Astack com Heap * Astack * Cenv

top() = (x, ) ’=push(pop(), (x, push( , newframe())))

<c, ,, ’> com <’, ’’, ’> top(’’) = (x,’)

<{c}, <{c}, ,,, , > > com com <<’, push(pop(’, push(pop(’’), (x, pop(’’), (x, pop(’))),’))), ’>’>

Page 7: Qualificazione dei nomi (paths)

7

Semantica delle dichiarazioni

Com := Type Id = Expr (dichiarazione)

Com * Cenv * Heap * Astack com Heap * Astack * Cenv

top() = (x, ) = top()

<e, ,, > expr <v, ’> ’= bind(, i, v)

’=push(pop(), (x,push(pop() , ’)))_________________________________________

<t i = e, <t i = e, ,,, , > > com com <<’, ’, ’,’, >>

la bind “modifica” dentro

Page 8: Qualificazione dei nomi (paths)

8

Invocazione di metodi

Com := Path Id (Expr_list)

path trattati come nelle variabili

<P, x, ,, > path p’

Risoluzione del nome:

Ide * (Ide | Loc) * Cenv * Heap fmetIde * Blocco * (Ide | Loc)

Page 9: Qualificazione dei nomi (paths)

9

Risoluzione del nome (nella classe)

Ide * (Ide | Loc) * Cenv * Heap fmetIde * Blocco * (Ide | Loc)

(c) = (c1, _, , _, _) mdefined(f,)_____________________________________________<f, c:Ide, ,> fmet (f)

(c) = (c1, _, , _, _) not mdefined(f,)

<f, c1, ,> fmet md_____________________________________________<f, c:Ide, ,> fmet md

Page 10: Qualificazione dei nomi (paths)

10

Risoluzione del nome (nell’oggetto)

Ide * (Ide | Loc) * Cenv * Heap fmetIde * Blocco * (Ide | Loc)

(l) = (c, _, ) mdefined(f,)_____________________________________________<f, l:Loc, ,> fmet (f)

(l) = (c, _, ) not mdefined(f,)

<f, c, ,> fmet md_____________________________________________<f, c:Ide, ,> fmet md

Page 11: Qualificazione dei nomi (paths)

11

Invocazione di metodi

Com := Id (Expr) un solo argomento

Com * Cenv * Heap * Astack com Heap * Astack * Cenv

Ide * (Ide | Loc) * Cenv * Heap fmet Ide * Blocco * (Ide | Loc)

top() = (x, _) <P,x, ,> path p’

<f, p’, ,> fmet (par, b, y)

<e, ,, > expr <v, ’> = bind(newframe(), par, v)

’ = push(, (y, push(emptystack(), )))<b, ,’, ’> com <’’, ’’, ’>________________________________________________

<P f (e), ,, )> com <’’,pop(’’), ’>

Page 12: Qualificazione dei nomi (paths)

12

Invocazione di metodi: commenti

top() = (x, _) <P,x, ,> path p’

<f, x, ,> fmet (par, b, y)

<e, ,, > expr <v, ’ > = bind(newframe(), par, v)

’ = push(, (y, push(emptystack(), )))

<b, ,’, ’> com <’’, ’’, ’>________________________________________________

<f(e), ,, )> com <’’, pop(’’), ’>

si effettua la ricerca del metodo a partire dalla classe o dall’oggetto contenuti nella testa della pila

si valuta il parametro attuale si crea un nuovo stack di frames, il cui unico frame contiene l’associazione tra

parametro formale e valore del parametro attuale si pusha sulla pila il record che contiene la classe o l’oggetto associato al metodo

e la pila di frames si valuta il corpo del metodo