1 / 12

Qualificazione dei nomi (paths)

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

penney
Download Presentation

Qualificazione dei nomi (paths)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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)

  2. Qualificazione dei nomi Path * (Ide | Loc | met) * Cenv * Heap * Astack path (Ide | Loc | met) <P,x, r, z ,s > path p’ <o, p’, r, z ,s > naming o’ _________________________________________________ <P o., x, r, z ,s > path o’ top(s) = (o, _) ____________________________ <this., met, r, z , s > path o < , x, r, z , s > path x

  3. Come trovare il valore di un nome Expr := Path Id Expr * Cenv * Heap * Astack expr Val * Heap <P, met,r, z ,s > path p’ <o, p’, r, z , s > naming v ___________________________________________________ <P o, r, z , s > expr<v, z > • i controlli statici garantiscono che il nome (nel frame opportuno) abbia già ricevuto un valore (inizializzazione o assegnamento) prima dell’uso

  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

  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

  6. Semantica dei blocchi Com := {Com} (blocco annidato) Com * Cenv * Heap * Astack com Heap * Astack * Cenv top(s) = (x, t) s’=push(pop(s), (x, push(t , newframe()))) <c, r, z, s’> com <z’, s’’,r’> top(s’’) = (x,t’) <{c}, r, z, s> com <z’, push(pop(s’’), (x, pop(t’))),r’>

  7. Semantica delle dichiarazioni Com := Type Id = Expr (dichiarazione) Com * Cenv * Heap * Astack com Heap * Astack * Cenv top(s) = (x, t) j = top(t) <e, r, z, s> expr <v, z’> j’= bind(j, i, v) s’=push(pop(s), (x,push(pop(t) , j’))) _________________________________________ <t i = e, r, z, s> com <z’, s’,r > • la bind “modifica”jdentros

  8. Invocazione di metodi Com := Path Id (Expr_list) • path trattati come nelle variabili <P, x, r, z, s> path p’ • Risoluzione del nome: Ide * (Ide | Loc) * Cenv * Heapfmet Ide * Blocco * (Ide | Loc)

  9. Risoluzione del nome (nella classe) Ide * (Ide | Loc) * Cenv * Heapfmet Ide * Blocco * (Ide | Loc) r(c) = (c1, _, m, _, _) mdefined(f,m) _____________________________________________ <f, c:Ide, r, z> fmet m(f) r(c) = (c1, _, m, _, _) not mdefined(f,m) <f, c1, r, z> fmet md _____________________________________________ <f, c:Ide, r, z> fmet md

  10. Risoluzione del nome (nell’oggetto) Ide * (Ide | Loc) * Cenv * Heapfmet Ide * Blocco * (Ide | Loc) z(l) = (c, _, m) mdefined(f,m) _____________________________________________ <f, l:Loc, r, z> fmet m(f) z(l) = (c, _, m) not mdefined(f,m) <f, c, r, z> fmet md _____________________________________________ <f, c:Ide, r, z> fmet md

  11. Invocazione di metodi Com := Id (Expr) • un solo argomento Com * Cenv * Heap * AstackcomHeap * Astack * Cenv Ide * (Ide | Loc) * Cenv * Heapfmet Ide * Blocco * (Ide | Loc) top(s) = (x, _) <P,x, r, z, s> path p’ <f, p’, r, z> fmet (par, b,y) <e, r, z, s> expr <v, z’> j = bind(newframe(), par, v) s’ = push(s, (y, push(emptystack(), j))) <b, r, z’, s’>com <z’’,s’’, r’> ________________________________________________ <P f (e), r, z, s)> com <z’’,pop(s’’), r’>

  12. Invocazione di metodi: commenti top(s) = (x, _) <P,x, r, z, s > path p’ <f, x, r, z> fmet (par, b,y) <e, r, z, s> expr <v, z’ > j = bind(newframe(), par, v) s’ = push(s, (y, push(emptystack(), j))) <b, r, z’, s’>com <z’’,s’’, r’> ________________________________________________ <f(e), r, z, s)> com <z’’,pop(s’’), r’> • 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

More Related