Transformation of Applicative Specifications into Imperative ...
Transformation of Applicative Specifications into Imperative ... Transformation of Applicative Specifications into Imperative ...
APPENDIX D. SPECIFICATION OF TRANSFORMER IN RSL1 getTextIdFUNC : Id → Text getTextIdFUNC(id) ≡ getText(id), getFUNCMapEntranceList : FUNC → FUNCMapEntrance ∗ getFUNCMapEntranceList(func) ≡ map(func), /∗**** FUNC end ****∗/ /∗**** ENV ****∗/ updateENV : ENV × ExpType × TRANS → ENV updateENV(env, et, trans) ≡ case et of Known(te) → case te of TypeName(tn) → if isinId(tn, domainTRANS(trans)) then /∗Type of interest.∗/ removeENV(env, tn) else /∗Not type of interest.∗/ env end, → env end, Unknown → env end, setEnv : Access ∗ × ENV → ENV setEnv(al, env) ≡ if al = 〈〉 then env else case hd al of AccessValueOrVariableName(vn) → setEnv(tl al, removeENV(env, id(vn))), → setEnv(tl al, env) end end, makeENV : LetBinding × TypeExpr × TRANS → ENV makeENV(lb, te, trans) ≡ case lb of 460
D.2. FORMAL SPECIFICATION OF THE TRANSFORMER IN RSL1 MakeBinding(b) → makeENVBinding(b, te, trans), → mk_ENV(〈〉) end, makeENVBinding : Binding × TypeExpr × TRANS → ENV makeENVBinding(b, te, trans) ≡ case b of IdBinding(idb) → case te of TypeName(tn) → if isinId(tn, domainTRANS(trans)) then mk_ENV(〈mk_ENVMapEntrance(tn, b)〉) else mk_ENV(〈〉) end, → mk_ENV(〈〉) end, Make_ProductBinding(pb) → makeENVBindingList( binding_list(pb), typeExprToList(te), trans) end, makeENVBindingList : Binding ∗ × TypeExpr ∗ × TRANS → ENV makeENVBindingList(bl, tel, trans) ≡ if bl = 〈〉 then mk_ENV(〈〉) else overrideENV( makeENVBinding(hd bl, hd tel, trans), makeENVBindingList(tl bl, tl tel, trans)) end, /∗**** ENV map ****∗/ domainENV : ENV → Id ∗ domainENV(env) ≡ if getENVMapEntranceList(env) = 〈〉 then 〈〉 else 〈getFirstENV(hd getENVMapEntranceList(env))〉 domainENV(mk_ENV(tl getENVMapEntranceList(env))) end, rangeENV : ENV → Binding ∗ rangeENV(env) ≡ if getENVMapEntranceList(env) = 〈〉 then 〈〉 461
- Page 426 and 427: APPENDIX D. SPECIFICATION OF TRANSF
- Page 428 and 429: APPENDIX D. SPECIFICATION OF TRANSF
- Page 430 and 431: APPENDIX D. SPECIFICATION OF TRANSF
- Page 432 and 433: APPENDIX D. SPECIFICATION OF TRANSF
- Page 434 and 435: APPENDIX D. SPECIFICATION OF TRANSF
- Page 436 and 437: APPENDIX D. SPECIFICATION OF TRANSF
- Page 438 and 439: APPENDIX D. SPECIFICATION OF TRANSF
- Page 440 and 441: APPENDIX D. SPECIFICATION OF TRANSF
- Page 442 and 443: APPENDIX D. SPECIFICATION OF TRANSF
- Page 444 and 445: APPENDIX D. SPECIFICATION OF TRANSF
- Page 446 and 447: APPENDIX D. SPECIFICATION OF TRANSF
- Page 448 and 449: APPENDIX D. SPECIFICATION OF TRANSF
- Page 450 and 451: APPENDIX D. SPECIFICATION OF TRANSF
- Page 452 and 453: APPENDIX D. SPECIFICATION OF TRANSF
- Page 454 and 455: APPENDIX D. SPECIFICATION OF TRANSF
- Page 456 and 457: APPENDIX D. SPECIFICATION OF TRANSF
- Page 458 and 459: APPENDIX D. SPECIFICATION OF TRANSF
- Page 460 and 461: APPENDIX D. SPECIFICATION OF TRANSF
- Page 462 and 463: APPENDIX D. SPECIFICATION OF TRANSF
- Page 464 and 465: APPENDIX D. SPECIFICATION OF TRANSF
- Page 466 and 467: APPENDIX D. SPECIFICATION OF TRANSF
- Page 468 and 469: APPENDIX D. SPECIFICATION OF TRANSF
- Page 470 and 471: APPENDIX D. SPECIFICATION OF TRANSF
- Page 472 and 473: APPENDIX D. SPECIFICATION OF TRANSF
- Page 474 and 475: APPENDIX D. SPECIFICATION OF TRANSF
- Page 478 and 479: APPENDIX D. SPECIFICATION OF TRANSF
- Page 480 and 481: APPENDIX D. SPECIFICATION OF TRANSF
- Page 482 and 483: APPENDIX D. SPECIFICATION OF TRANSF
- Page 484 and 485: APPENDIX D. SPECIFICATION OF TRANSF
- Page 486 and 487: APPENDIX D. SPECIFICATION OF TRANSF
- Page 488 and 489: APPENDIX D. SPECIFICATION OF TRANSF
- Page 490 and 491: APPENDIX D. SPECIFICATION OF TRANSF
- Page 492 and 493: APPENDIX E. ANTLR GRAMMAR END = "en
- Page 494 and 495: APPENDIX E. ANTLR GRAMMAR ; d = d e
- Page 496 and 497: APPENDIX E. ANTLR GRAMMAR ; } ( com
- Page 498 and 499: APPENDIX E. ANTLR GRAMMAR ; ) ∗ }
- Page 500 and 501: APPENDIX E. ANTLR GRAMMAR ; } else
- Page 502 and 503: APPENDIX E. ANTLR GRAMMAR prod_bind
- Page 504 and 505: APPENDIX E. ANTLR GRAMMAR ; | | | |
- Page 506 and 507: APPENDIX E. ANTLR GRAMMAR ; | NAT {
- Page 508 and 509: APPENDIX E. ANTLR GRAMMAR ; { ve3 =
- Page 510 and 511: APPENDIX E. ANTLR GRAMMAR ( | RPARE
- Page 512 and 513: APPENDIX E. ANTLR GRAMMAR | { optio
- Page 514 and 515: APPENDIX E. ANTLR GRAMMAR new RSLLi
- Page 516 and 517: APPENDIX E. ANTLR GRAMMAR infix_op_
- Page 518 and 519: APPENDIX E. ANTLR GRAMMAR : v l = v
- Page 520 and 521: APPENDIX E. ANTLR GRAMMAR } t e s t
- Page 522 and 523: APPENDIX E. ANTLR GRAMMAR } : ’ .
- Page 524 and 525: APPENDIX E. ANTLR GRAMMAR 508
APPENDIX D. SPECIFICATION OF TRANSFORMER IN RSL1<br />
getTextIdFUNC : Id → Text<br />
getTextIdFUNC(id) ≡ getText(id),<br />
getFUNCMapEntranceList : FUNC → FUNCMapEntrance ∗<br />
getFUNCMapEntranceList(func) ≡ map(func),<br />
/∗**** FUNC end ****∗/<br />
/∗**** ENV ****∗/<br />
updateENV : ENV × ExpType × TRANS → ENV<br />
updateENV(env, et, trans) ≡<br />
case et <strong>of</strong><br />
Known(te) →<br />
case te <strong>of</strong><br />
TypeName(tn) →<br />
if isinId(tn, domainTRANS(trans))<br />
then<br />
/∗Type <strong>of</strong> interest.∗/<br />
removeENV(env, tn)<br />
else<br />
/∗Not type <strong>of</strong> interest.∗/<br />
env<br />
end,<br />
→ env<br />
end,<br />
Unknown → env<br />
end,<br />
setEnv : Access ∗ × ENV → ENV<br />
setEnv(al, env) ≡<br />
if al = 〈〉 then env<br />
else<br />
case hd al <strong>of</strong><br />
AccessValueOrVariableName(vn) →<br />
setEnv(tl al, removeENV(env, id(vn))),<br />
→ setEnv(tl al, env)<br />
end<br />
end,<br />
makeENV : LetBinding × TypeExpr × TRANS → ENV<br />
makeENV(lb, te, trans) ≡<br />
case lb <strong>of</strong><br />
460