Transformation of Applicative Specifications into Imperative ...
Transformation of Applicative Specifications into Imperative ... Transformation of Applicative Specifications into Imperative ...
APPENDIX C. FORMAL SPECIFICATIONS OF TRANSFORMATIONS /∗Returns a list of type expressions from a type expression.∗/ /∗ Arguments: ======= te: the type expression Result: ======= TypeExpr_list: the corresponding list ∗/ typeExprToList : TypeExpr → TypeExpr ∗ typeExprToList(te) ≡ case te of TypeExprProduct(tep) → tep, → 〈te〉 end, /∗Returns the number of type expressions in a type expression.∗/ /∗ Arguments: ======= te: the type expression Results: ===== Int: the number of type expressions ∗/ getLengthTE : TypeExpr → Int getLengthTE(te) ≡ case te of TypeExprProduct(tep) → getLengthTEL(tep), BracketedTypeExpr(bte) → getLengthTE(bte), → 1 end, /∗Returns the number of type expressions in a type expression list.∗/ /∗ Arguments: ======= tel: the type expression list Results: ===== 222
C.1. FORMAL SPECIFICATION OF THE TRANSFORMER Int: the number of type expressions ∗/ getLengthTEL : TypeExpr ∗ → Int getLengthTEL(tel) ≡ if tel = 〈〉 then 0 else getLengthTE(hd tel) + getLengthTEL(tl tel) end, /∗Removes superfluous occurrences of UNIT from a type expression.∗/ /∗ Arguments: ======= te: the type expression Result: ======= TypeExpr: the resulting type expression ∗/ truncate : TypeExpr → TypeExpr truncate(tel) ≡ case tel of TypeLiteral(literal) → tel, TypeName(id) → tel, TypeExprProduct(telp) → if truncateTypeExprProduct(telp) = 〈〉 then TypeLiteral(UNIT) else if len truncateTypeExprProduct(telp) = 1 then hd truncateTypeExprProduct(telp) else TypeExprProduct( truncateTypeExprProduct(telp)) end end, TypeExprSet(tes) → tel, TypeExprList(te) → tel, TypeExprMap(tem) → tel, FunctionTypeExpr(te, fa, rd) → FunctionTypeExpr( truncate(te), fa, mk_ResultDesc( read_access_desc(rd), write_access_desc(rd), truncate(type_expr(rd)))), 223
- Page 188 and 189: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 190 and 191: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 192 and 193: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 194 and 195: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 196 and 197: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 198 and 199: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 200 and 201: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 202 and 203: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 204 and 205: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 206 and 207: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 208 and 209: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 210 and 211: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 212 and 213: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 214 and 215: APPENDIX C. FORMAL SPECIFICATIONS O
- 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 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
C.1. FORMAL SPECIFICATION OF THE TRANSFORMER<br />
Int: the number <strong>of</strong> type expressions<br />
∗/<br />
getLengthTEL : TypeExpr ∗ → Int<br />
getLengthTEL(tel) ≡<br />
if tel = 〈〉 then 0<br />
else getLengthTE(hd tel) + getLengthTEL(tl tel)<br />
end,<br />
/∗Removes superfluous occurrences <strong>of</strong> UNIT from<br />
a type expression.∗/<br />
/∗<br />
Arguments:<br />
=======<br />
te: the type expression<br />
Result:<br />
=======<br />
TypeExpr: the resulting type expression<br />
∗/<br />
truncate : TypeExpr → TypeExpr<br />
truncate(tel) ≡<br />
case tel <strong>of</strong><br />
TypeLiteral(literal) → tel,<br />
TypeName(id) → tel,<br />
TypeExprProduct(telp) →<br />
if truncateTypeExprProduct(telp) = 〈〉<br />
then TypeLiteral(UNIT)<br />
else<br />
if len truncateTypeExprProduct(telp) = 1<br />
then hd truncateTypeExprProduct(telp)<br />
else<br />
TypeExprProduct(<br />
truncateTypeExprProduct(telp))<br />
end<br />
end,<br />
TypeExprSet(tes) → tel,<br />
TypeExprList(te) → tel,<br />
TypeExprMap(tem) → tel,<br />
FunctionTypeExpr(te, fa, rd) →<br />
FunctionTypeExpr(<br />
truncate(te), fa,<br />
mk_ResultDesc(<br />
read_access_desc(rd),<br />
write_access_desc(rd),<br />
truncate(type_expr(rd)))),<br />
223