Upload
milla
View
33
Download
0
Embed Size (px)
DESCRIPTION
LW - Grammatica CF. Prog::=Decs main () Stats. Decs::=Dec | Dec Decs. Dec::=VDec | FDec. VDec::=PDec | Type Id = Exp; PDec::=Type Id; FDec::= Type Id(PDecs) {[ with Decs do ] Stats result Exp} | void Id(PDecs) {[ with Decs do ] Stats} PDecs::=PDec | PDec PDecs. - PowerPoint PPT Presentation
Citation preview
LW - Grammatica CF
Prog ::= Decs main() Stats.Decs ::= Dec | Dec Decs. Dec ::= VDec | FDec.VDec ::= PDec | Type Id = Exp; PDec ::= Type Id;FDec ::= Type Id(PDecs) {[with Decs do] Stats result Exp} |
void Id(PDecs) {[with Decs do] Stats}PDecs ::= PDec | PDec PDecs. Type ::= int | bool.Stats ::= Stat | Stat Stats.Stat ::= Exp; | while (Exp) {Stats} | if (Exp) {Stats} else {Stats}|
?Id | !Exp.Exp ::= Id | Id = Exp | Id(Exps) | Exp + Exp | …Exps ::= Exp | Exp Exps.
Funzioni di Semantica Statica[_]s
Prog :LProg(LW) P {*}[_]s
Decs :LDecs(LW) Envs Envs P Envs [_]s
Dec :LDec(LW) Envs Envs P Envs [_]sDec(d,,l) = [_]s
Decs(d,,l) [_]s
VDec :LVDec(LW) Envs EnvsP Envs [_]sVDec(d,,l) = [_]s
Decs(d,,l) [_]s
PDecs :LPDecs(LW) Envs Envs P Envs [_]sPDecs(d,,l) =
[_]sDecs(d,,l)
[_]sPDec :LPDec(LW) Envs Envs P Envs [_]s
PDec(d,,l) = [_]sDecs(d,,l)
[_]sFDec :LFDec(LW) Envs Envs P Envs [_]s
FDec(d,,l) = [_]sDecs(d,,l)
[_]sStats :LStats(LW) Envs P {*}
[_]sStat :LStat(LW) Envs P {*} [_]s
Stat(st,) = [_]sStats(st,)
[_]sExp :LExp(LW) Envs P Types [_]s
Exp(e,) = [_]sExps(e,)
[_]sExps :LExps(LW) Envs P Types+
Envs = [LId(LW) PTypes]Fin, dove Types = BTypes (BTypes+ RTypes), dove BTypes = {int, bool} e RTypes = BTypes {void}Notazione per funzioni parziali a dominio finito f[X PA]Fin
se f è [], Dom(f) = Øse f è [a1/x1,…, an/xn] con tutte le xi distinte, Dom(f) = {x1,…,xn } e f(xi)=(ai )se f è g[a/x], Dom(f) = Dom(g) x} e f(x)= g(x) se x x, altrimenti f(x)=ase f è g[h], Dom(f) = Dom(g)Dom(h) e f(x)= h(x) se x Dom(h), altrimenti f(x)= g(x) se f è g\X, Dom(f) = Dom(g)\X e f(x)= g(x)
Regole della Sem. Statica per Decs[d]s(l) = loc [ds]s(loc) = 0
_____________________________________________________
[d ds]s(l) = 0
[e]s(l)=t _________________________________ id Dom(l)[t id = e;]s(l) = l[t/id]
______________________________ id Dom(l) [t id;]s(l) = l[t/id]
[pl](l],[(lt,void)/f]) = loc [sts](l] loc]) = * lt=types(pl)__________________________________________________________________ f Dom(l) [void f(pl) {sts}](l) = l[(lt,void)/f]
[pl](l],[(lt,t)/f]) = loc [sts](l] loc]) = * [e](l] loc]) = t lt=types(pl)_____________________________________________________________________________________ f Dom(l) [t f(pl) {sts result e}](l) = l[(lt,t)/f] t ≠ void
[pl](l],[(lt,t)/f]) = loc [ds](l], loc) = ’loc [sts](”) = * [e](”) = t lt=types(pl)__________________________________________________________________________________________ f Dom(l) [t f(pl) {with ds do sts result e}](l) = l[(lt,t)/f] ” = l] ’loc]
t ≠ void
[pl](l],[(lt,void)/f]) = loc [ds](l], loc) = ’loc [sts](”) = * lt=types(pl)________________________________________________________________________________ f Dom(l) [void f(pl) {with ds do sts}](l) = l[(lt,void)/f] ” = l] ’loc]
Regole della Sem. Statica per Exps, Stats e Prog[e]s() = t [es]s() = lt____________________________________
[e es]s() = t lt [e]s() = t __________________________ (id) = t [id = e]s () = t
________________________ id Dom() [id]s () = (id) (id)BTypes
[es]() = lt_____________________ (id) = (lt,t) [id(es)]() = t
[e1]() = int [e2]() = int____________________________________
[e1+ e2]() = int
etc...
[e]s() = t ________________
[e;]s () = *
[e]s() = bool [sts]s () = *_________________________________________
[while (e) {sts} ]s () = *
[e]s() = bool [sts1]s () = * [sts2]s () = *______________________________________________________________
[if (e) {sts1} else {sts2} ]s () = *
[e]s() = t ________________
[!e]s () = * ____________________ (id) BTypes [?id]s () = *
[ds](],[]) = [sts]s() = * ________________________________________________
[ds main() sts]s () = *
Funzioni di Semantica Denotazionale[_]Prog :LProg(LW) Input P Output[_]Decs :LDecs(LW) Env States P Env States [_]Dec :LDec(LW) Env States P Env States [_]Dec(d,r,s) = [_]Decs(d,r,s) [_]VDec :LVDec(LW) Env States P Env States [_]VDec(d,r,s) = [_]Decs(d,r,s) [_]PDecs :LPDecs(LW) Env States P Env States [_]PDecs(d,r,s) = [_]Decs(d,r,s) [_]PDec :LPDec(LW) Env States P Env States [_]PDec(d,r,s) = [_]Decs(d,r,s) [_]FDec :LFDec(LW) Env States P Env States [_]FDec(d,r,s) = [_]Decs(d,r,s) [_]Type:LType(LW) Set[_]Stats :LStats(LW) Env States P States [_]Stat :LStat(LW) Env States P States [_]Stat(st,r,s) = [_]Stats(st,r,s)[_]Exp :LExp(LW) Env States P Value States [_]Exp(e,r,s) = [_]Exps(e,r,s)[_]Exps :LExps(LW) Env States P Value+ States
Env = [LId(LW) p FunLoc ]Fin, dove Loc = TBTypesLocT
Fun = [Arg p Res], Arg = [Z| B]+ States e Res = [Z| B|{*}] StatesStates = Input Output [Loc p Value]Fin, dove Value = TBTypes[T] e [int] = Z, [bool] = B, [void] = {*}Input = Output = Value*
Nuova Loc Env States definito da Nuova(l,r,s) sse l (Im(r) Dom(s))
Regole della Sem. Denot. per Decs 1
____________________________________________ [RT f(T x) {[with ds do]sts return e}](r,s) = (r[F/f],s)
______________________________________ [void f(T x) {[with ds do]sts}](r,s) = (r[F/f],s)
F è definita induttivamente da tutte le regole della semantica più le seguenti 2 A [Aw se c’è il with] e B, per leggibilità riportate nel riquadro
[sts] (r[/f,lx/x],sc[v/lx] ) = s’A _____________________________________ Nuova(lx,r,sc) F(v,sc) = (*,s’\{lx})
[e](r0[/f],s0) = (u ,s’) F(u,s’) = (*,s”)B __________________________________________________
[f(e)] (r0[/f],s0) = (*,s”)
[ds](r[/f,lx/x],sc[v/lx] ) = r1,s1 [sts] (r1,s1) = s’
Aw ________________________________________________________ Nuova(lx,r,sc)
F(v,sc) = (*,s’\{lx})
F è definita induttivamente da tutte le regole della semantica più le seguenti 2 A [Aw se c’è il with] e B, per leggibilità riportate nel riquadro
[sts] (r[/f,lx/x],sc[v/lx] ) = s1 [e](r [/f,lx/x],s1) = (u ,s’)
A ________________________________________________________ Nuova(lx,r,sc) F(v,sc) = (u,s’\{lx})
[e](r0[/f],s0) = (v ,s’) F(v,s’) = (u,s”)B __________________________________________________
[f(e)] (r0[/f],s0) = (u,s”)
[ds](r[/f,lx/x],sc[v/lx] ) = r1,s1 [sts] (r1,s1) = s2 [e](r1,s2) = (u ,s’)
Aw _____________________________________________________________________________ Nuova(lx,r,sc)
F(v,sc) = (u,s’\{lx})
Regole della Sem. Denot. per Decs ed Exps[d](r,s) = (r’,s’) [ds] (r’,s’) = (r”,s”)___________________________________________________
[d ds] (r,s) = (r”,s”)
________________________________ Nuova(l,r,s)
[t x](r,s) = (r[l/x],s[/l]) lLocT
[e](r,s) = (v,s’) ______________________________________ Nuova(l,r,s’) [t x = e](r,s) = (r[l/x],s’[v/l]) lLocT
[e] (r,s) = (v,s’) [es] (r,s’) = (lv,s”)___________________________________________________
[e es] (r,s) = (v lv,s”)
___________________________ r(x) Loc [x](r,s) = (s(r(x)),s)
[es](r,s) = (lv ,s’)______________________________
[f(es)](r,s) = r(f)(lv,s’)
[e] (r,s) = (v,s’) [e’] (r,s’) = (v’,s”)__________________________________________________ v + v’ = a [e + e’] (r,s) = (a,s”)
[e](r,s) = (v,s’) ______________________________________
[x = e](r,s) = (v,s’[v/r(x)])
etc...
Regole della Sem. Denot. per Stats e Prog [st] (r,s) = s’ [sts] (r,s’) = s”__________________________________________
[st sts ] (r,s) = s”
[e](r,s) = (v ,s’)_______________________
[e;](r,s) =s’
[e](r,s) = (tt ,s’) [sts] (r,s’) = s”____________________________________________
[if (e) {sts} else {sts’}](r,s) = s”
[e](r,s) = (ff ,s’) ___________________________________
[while (e) {sts}](r,s) = s’
[e](r,s) = (tt ,s’) [sts] (r,s’) = s” [while (e) {sts}](r,s”) = s0
___________________________________________________________________________________
[while (e) {sts}](r,s) = s0
[e](r,s) = (ff ,s’) [sts’] (r,s’) = s”____________________________________________
[if (e) {sts} else {sts’}](r,s) = s”
[ds]([],(i,,[])) = (r ,s) [sts] (r,s) = (i’,o,m)__________________________________________________________
[ds main() sts](i) = o