Transformation of Applicative Specifications into Imperative ...
Transformation of Applicative Specifications into Imperative ... Transformation of Applicative Specifications into Imperative ...
APPENDIX C. FORMAL SPECIFICATIONS OF TRANSFORMATIONS in ar ′ = getAccessObsCaseBranch( idSet(ar), tl cbl, et, func, trans) mk_AccessResult( removeDuplets( accessList(ar) accessList(ar ′ )), idSet(ar ′ )) end end, /∗Returns an access list of the values of types of interest written to during evaluation of a function.∗/ /∗ Arguments: ======= idset: the functions already evaluated ve: the value expression Result: ======= AccessResult: the corresponding access result ∗/ getAccessGen : Id-set × ValueExpr × ExpType × FUNC × TRANS → AccessResult getAccessGen(idset, ve, et, func, trans) ≡ case ve of Make_ValueLiteral(vl) → mk_AccessResult(〈〉, idset), Make_ValueOrVariableName(vn) → if id(vn) ∈ dom func then getAccessGen( idset, ApplicationExpr(ve, 〈〉), et, func, trans) else mk_AccessResult( getAssignExpr(ve, et, trans), idset) end, Make_BasicExpr(be) → mk_AccessResult(〈〉, idset), ProductExpr(vel) → getAccessGenList( idset, vel, 262
C.1. FORMAL SPECIFICATION OF THE TRANSFORMER expTypeToExpTypeList( removeBrackets(et), len vel), func, trans), Make_SetExpr(se) → getAccessGenSetExpr( idset, se, getSetType(et), func, trans), Make_ListExpr(le) → getAccessGenListExpr( idset, le, getListType(et), func, trans), Make_MapExpr(me) → getAccessGenMapExpr( idset, me, getMapType(et), func, trans), ApplicationExpr(ave, vl) → case ave of Make_ValueOrVariableName(vn) → if id(vn) ∈ dom func then if id(vn) ∈ idset then case type_expr(func(id(vn))) of FunctionTypeExpr(arg, fa, res) → /∗Already evaluated.∗/ getAccessGenList( idset, vl, expTypeList(arg, len vl), func, trans) end else /∗Not evaluated yet.∗/ case type_expr(func(id(vn))) of FunctionTypeExpr(arg, fa, res) → let ar = getAccessGen( idset ∪ {id(vn)}, value_expr(func(id(vn))), Known(type_expr(res)), func, trans), ar ′ = getAccessGenList( idset, vl, expTypeList(arg, len vl), func, trans) in mk_AccessResult( 263
- Page 228 and 229: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 230 and 231: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 232 and 233: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 234 and 235: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 236 and 237: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 238 and 239: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 240 and 241: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 242 and 243: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 244 and 245: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 246 and 247: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 248 and 249: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 250 and 251: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 252 and 253: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 254 and 255: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 256 and 257: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 258 and 259: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 260 and 261: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 262 and 263: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 264 and 265: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 266 and 267: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 268 and 269: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 270 and 271: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 272 and 273: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 274 and 275: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 276 and 277: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 280 and 281: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 282 and 283: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 284 and 285: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 286 and 287: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 288 and 289: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 290 and 291: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 292 and 293: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 294 and 295: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 296 and 297: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 298 and 299: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 300 and 301: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 302 and 303: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 304 and 305: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 306 and 307: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 308 and 309: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 310 and 311: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 312 and 313: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 314 and 315: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 316 and 317: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 318 and 319: APPENDIX D. SPECIFICATION OF TRANSF
- Page 320 and 321: APPENDIX D. SPECIFICATION OF TRANSF
- Page 322 and 323: APPENDIX D. SPECIFICATION OF TRANSF
- Page 324 and 325: APPENDIX D. SPECIFICATION OF TRANSF
- Page 326 and 327: APPENDIX D. SPECIFICATION OF TRANSF
C.1. FORMAL SPECIFICATION OF THE TRANSFORMER<br />
expTypeToExpTypeList(<br />
removeBrackets(et), len vel), func, trans),<br />
Make_SetExpr(se) →<br />
getAccessGenSetExpr(<br />
idset, se, getSetType(et), func, trans),<br />
Make_ListExpr(le) →<br />
getAccessGenListExpr(<br />
idset, le, getListType(et), func, trans),<br />
Make_MapExpr(me) →<br />
getAccessGenMapExpr(<br />
idset, me, getMapType(et), func, trans),<br />
ApplicationExpr(ave, vl) →<br />
case ave <strong>of</strong><br />
Make_ValueOrVariableName(vn) →<br />
if id(vn) ∈ dom func<br />
then<br />
if id(vn) ∈ idset<br />
then<br />
case type_expr(func(id(vn))) <strong>of</strong><br />
FunctionTypeExpr(arg, fa, res) →<br />
/∗Already evaluated.∗/<br />
getAccessGenList(<br />
idset, vl,<br />
expTypeList(arg, len vl), func,<br />
trans)<br />
end<br />
else<br />
/∗Not evaluated yet.∗/<br />
case type_expr(func(id(vn))) <strong>of</strong><br />
FunctionTypeExpr(arg, fa, res) →<br />
let<br />
ar =<br />
getAccessGen(<br />
idset ∪ {id(vn)},<br />
value_expr(func(id(vn))),<br />
Known(type_expr(res)), func,<br />
trans),<br />
ar ′ =<br />
getAccessGenList(<br />
idset, vl,<br />
expTypeList(arg, len vl),<br />
func, trans)<br />
in<br />
mk_AccessResult(<br />
263