Transformation of Applicative Specifications into Imperative ...
Transformation of Applicative Specifications into Imperative ... Transformation of Applicative Specifications into Imperative ...
APPENDIX C. FORMAL SPECIFICATIONS OF TRANSFORMATIONS end end, removeDuplets( accessList(ar) accessList(ar ′ )), idSet(ar ′ )) /∗Returns an access list of the values of types of interest read from during evaluation of a case branch list.∗/ /∗ Arguments: ======= idset: the functions already evaluated cbl: the case branch list Result: ======= AccessResult: the corresponding access result ∗/ getAccessGenCaseBranch : Id-set × CaseBranch ∗ × ExpType × FUNC × TRANS → AccessResult getAccessGenCaseBranch(idset, cbl, et, func, trans) ≡ if cbl = 〈〉 then mk_AccessResult(〈〉, idset) else let ar = getAccessGen( idset, value_expr(hd cbl), et, func, trans), ar ′ = getAccessGenCaseBranch( idSet(ar), tl cbl, et, func, trans) in mk_AccessResult( removeDuplets( accessList(ar) accessList(ar ′ )), idSet(ar ′ )) end end, /∗**** Access end ****∗/ /∗**** Bindings ****∗/ /∗Makes a product binding from a list of bindings. 272
C.1. FORMAL SPECIFICATION OF THE TRANSFORMER ∗/ /∗ Arguments: ======= bl: the binding list Result: ======= Binding: the corresponding binding ∗/ makeBinding : Binding ∗ → Binding makeBinding(bl) ≡ if len bl = 1 then hd bl else Make_ProductBinding(mk_ProductBinding(bl)) end, /∗Makes a binding list from a value expression list.∗/ /∗ Arguments: ======= length: length of the binding list counter: the number of bindings made so far bl: the binding list vel: the value expression list Results: ===== Binding_list: the resulting binding list ValueExpr_list: the corresponding value expression list ∗/ makeLetBinding : Nat × Nat × Binding ∗ × ValueExpr ∗ → Binding ∗ × ValueExpr ∗ makeLetBinding(length, counter, bl, vel) ≡ if length = 0 then (bl, vel) else let id = makeId(counter) in makeLetBinding( length − 1, counter + 1, bl 〈IdBinding(id)〉, vel 〈Make_ValueOrVariableName( mk_ValueOrVariableName(id))〉) end 273
- 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 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 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
- Page 328 and 329: APPENDIX D. SPECIFICATION OF TRANSF
- Page 330 and 331: APPENDIX D. SPECIFICATION OF TRANSF
- Page 332 and 333: APPENDIX D. SPECIFICATION OF TRANSF
- Page 334 and 335: APPENDIX D. SPECIFICATION OF TRANSF
- Page 336 and 337: APPENDIX D. SPECIFICATION OF TRANSF
C.1. FORMAL SPECIFICATION OF THE TRANSFORMER<br />
∗/<br />
/∗<br />
Arguments:<br />
=======<br />
bl: the binding list<br />
Result:<br />
=======<br />
Binding: the corresponding binding<br />
∗/<br />
makeBinding : Binding ∗ → Binding<br />
makeBinding(bl) ≡<br />
if len bl = 1 then hd bl<br />
else Make_ProductBinding(mk_ProductBinding(bl))<br />
end,<br />
/∗Makes a binding list from a value expression<br />
list.∗/<br />
/∗<br />
Arguments:<br />
=======<br />
length: length <strong>of</strong> the binding list<br />
counter: the number <strong>of</strong> bindings made so far<br />
bl: the binding list<br />
vel: the value expression list<br />
Results:<br />
=====<br />
Binding_list: the resulting binding list<br />
ValueExpr_list: the corresponding value expression<br />
list<br />
∗/<br />
makeLetBinding :<br />
Nat × Nat × Binding ∗ × ValueExpr ∗ →<br />
Binding ∗ × ValueExpr ∗<br />
makeLetBinding(length, counter, bl, vel) ≡<br />
if length = 0 then (bl, vel)<br />
else<br />
let id = makeId(counter) in<br />
makeLetBinding(<br />
length − 1, counter + 1,<br />
bl 〈IdBinding(id)〉,<br />
vel <br />
〈Make_ValueOrVariableName(<br />
mk_ValueOrVariableName(id))〉)<br />
end<br />
273