Transformation of Applicative Specifications into Imperative ...
Transformation of Applicative Specifications into Imperative ... Transformation of Applicative Specifications into Imperative ...
APPENDIX C. FORMAL SPECIFICATIONS OF TRANSFORMATIONS getAccessObs(idset, ve, et, func, trans) ≡ case ve of Make_ValueLiteral(vl) → mk_AccessResult(〈〉, idset), Make_ValueOrVariableName(vn) → mk_AccessResult(〈〉, idset), Make_BasicExpr(be) → mk_AccessResult(〈〉, idset), ProductExpr(vel) → getAccessObsList(idset, vel, et, func, trans), Make_SetExpr(se) → getAccessObsSetExpr( idset, se, getSetType(et), func, trans), Make_ListExpr(le) → getAccessObsListExpr( idset, le, getListType(et), func, trans), Make_MapExpr(me) → getAccessObsMapExpr( 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.∗/ let ar = getAccessObsListList( idset, vl, expTypeList(arg, len vl), func, trans) in mk_AccessResult( removeDuplets( accessList(ar) getSequencingAccess( ve, type_expr(res), et, trans, func)), idSet(ar)) end end else 250
C.1. FORMAL SPECIFICATION OF THE TRANSFORMER /∗Not evaluated yet.∗/ case type_expr(func(id(vn))) of FunctionTypeExpr(arg, fa, res) → let ar = getAccessObs( idset ∪ {id(vn)}, value_expr(func(id(vn))), Known(type_expr(res)), func, trans), ar ′ = getAccessObsListList( idset, vl, expTypeList(arg, len vl), func, trans) in mk_AccessResult( removeDuplets( getAccess(arg, trans) accessList(ar) accessList(ar ′ ) getSequencingAccess( ve, type_expr(res), et, trans, func)), idSet(ar) ∪ idSet(ar ′ )) end end end else getAccessObsList( idset, vl, et, func, trans) end, → getAccessObsList(idset, vl, et, func, trans) end, BracketedExpr(bve) → getAccessObs(idset, bve, et, func, trans), ValueInfixExpr(first, op, second) → getAccessObsList( idset, 〈first, second〉, Unknown, func, trans ), ValuePrefixExpr(op, operand) → getAccessObs( idset, operand, Unknown, func, trans), 251
- Page 216 and 217: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 218 and 219: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 220 and 221: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 222 and 223: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 224 and 225: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 226 and 227: APPENDIX C. FORMAL SPECIFICATIONS O
- 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 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 278 and 279: 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
APPENDIX C. FORMAL SPECIFICATIONS OF TRANSFORMATIONS<br />
getAccessObs(idset, ve, et, func, trans) ≡<br />
case ve <strong>of</strong><br />
Make_ValueLiteral(vl) →<br />
mk_AccessResult(〈〉, idset),<br />
Make_ValueOrVariableName(vn) →<br />
mk_AccessResult(〈〉, idset),<br />
Make_BasicExpr(be) → mk_AccessResult(〈〉, idset),<br />
ProductExpr(vel) →<br />
getAccessObsList(idset, vel, et, func, trans),<br />
Make_SetExpr(se) →<br />
getAccessObsSetExpr(<br />
idset, se, getSetType(et), func, trans),<br />
Make_ListExpr(le) →<br />
getAccessObsListExpr(<br />
idset, le, getListType(et), func, trans),<br />
Make_MapExpr(me) →<br />
getAccessObsMapExpr(<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 />
let<br />
ar =<br />
getAccessObsListList(<br />
idset, vl,<br />
expTypeList(arg, len vl),<br />
func, trans)<br />
in<br />
mk_AccessResult(<br />
removeDuplets(<br />
accessList(ar) <br />
getSequencingAccess(<br />
ve, type_expr(res), et,<br />
trans, func)), idSet(ar))<br />
end<br />
end<br />
else<br />
250