Transformation of Applicative Specifications into Imperative ...
Transformation of Applicative Specifications into Imperative ... Transformation of Applicative Specifications into Imperative ...
APPENDIX C. FORMAL SPECIFICATIONS OF TRANSFORMATIONS /∗Checks if one of the ids of the type expression list is in the Idset.∗/ /∗ Arguments: ======= tel: the type expression list idset: the set of ids, either the domain or range of TRANS Results: ===== Bool: true if on of the ids of the type expression list is in the idset, false otherwise ∗/ includesTRANSNameList : TypeExpr ∗ × Id-set → Bool includesTRANSNameList(tel, idset) ≡ if tel = 〈〉 then false else includesTRANSName(Known(hd tel), idset) ∨ includesTRANSNameList(tl tel, idset) end, /∗Gets the variable name corresponding to a type of interest. Pre_condition: et = Known(TypeName(id)).∗/ /∗ Arguments: ======= et: the expected type Result: ======= ValueExpr: the corresponding ValueOrVariableName ∗/ getTRANS : ExpType × TRANS → ValueExpr getTRANS(et, trans) ≡ case et of Known(te) → case te of TypeName(tn) → Make_ValueOrVariableName( mk_ValueOrVariableName(trans(tn))) end end, 280
C.1. FORMAL SPECIFICATION OF THE TRANSFORMER /∗Gets the id corresponding to a type of interest. Pre_condition: et = Known(TypeName(id)).∗/ /∗ Arguments: ======= et: the expected type Result: ======= Id: the corresponding Id ∗/ getTRANSId : ExpType × TRANS → Id getTRANSId(et, trans) ≡ case et of Known(te) → case te of TypeName(tn) → trans(tn) end end, /∗**** TRANS end ****∗/ /∗**** TYPINGS ****∗/ /∗Makes a TYPINGS map from a type definition list. ∗/ /∗ Arguments: ======= tdl: the type definition list ∗/ makeTYPINGSMap : TypeDef ∗ → TYPINGS makeTYPINGSMap(tdl) ≡ if tdl = 〈〉 then [ ] else makeTYPINGSEntrance(hd tdl) † makeTYPINGSMap(tl tdl) end, /∗Makes a TYPINGS map entrance from a type definition. ∗/ /∗ Arguments: ======= td: the type definition 281
- 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 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 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
- Page 338 and 339: APPENDIX D. SPECIFICATION OF TRANSF
- Page 340 and 341: APPENDIX D. SPECIFICATION OF TRANSF
- Page 342 and 343: APPENDIX D. SPECIFICATION OF TRANSF
- Page 344 and 345: APPENDIX D. SPECIFICATION OF TRANSF
C.1. FORMAL SPECIFICATION OF THE TRANSFORMER<br />
/∗Gets the id corresponding to a type <strong>of</strong> interest.<br />
Pre_condition: et = Known(TypeName(id)).∗/<br />
/∗<br />
Arguments:<br />
=======<br />
et: the expected type<br />
Result:<br />
=======<br />
Id: the corresponding Id<br />
∗/<br />
getTRANSId : ExpType × TRANS → Id<br />
getTRANSId(et, trans) ≡<br />
case et <strong>of</strong><br />
Known(te) →<br />
case te <strong>of</strong><br />
TypeName(tn) → trans(tn)<br />
end<br />
end,<br />
/∗**** TRANS end ****∗/<br />
/∗**** TYPINGS ****∗/<br />
/∗Makes a TYPINGS map from a type definition list.<br />
∗/<br />
/∗<br />
Arguments:<br />
=======<br />
tdl: the type definition list<br />
∗/<br />
makeTYPINGSMap : TypeDef ∗ → TYPINGS<br />
makeTYPINGSMap(tdl) ≡<br />
if tdl = 〈〉 then [ ]<br />
else<br />
makeTYPINGSEntrance(hd tdl) †<br />
makeTYPINGSMap(tl tdl)<br />
end,<br />
/∗Makes a TYPINGS map entrance from a type definition.<br />
∗/<br />
/∗<br />
Arguments:<br />
=======<br />
td: the type definition<br />
281