8
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.

LW - Grammatica CF

  • 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

Page 1: LW - Grammatica CF

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.

Page 2: LW - Grammatica CF

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)

Page 3: LW - Grammatica CF

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]

Page 4: LW - Grammatica CF

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 () = *

Page 5: LW - Grammatica CF

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))

Page 6: LW - Grammatica CF

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})

Page 7: LW - Grammatica CF

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...

Page 8: LW - Grammatica CF

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