Transformation of Applicative Specifications into Imperative ...
Transformation of Applicative Specifications into Imperative ... Transformation of Applicative Specifications into Imperative ...
APPENDIX C. FORMAL SPECIFICATIONS OF TRANSFORMATIONS ValueExpr: the imperative version of the if expression ∗/ TRIfExpr : IfExpr × ExpType × FUNC × TRANS × TYPES → ValueExpr × TYPES TRIfExpr(ie, et, func, trans, types) ≡ let (ifcond, types1) = TRValueExpr( condition(ie), Known(TypeLiteral(BOOL)), func, trans, types), (ifcase, types2) = TRValueExpr(if_case(ie), et, func, trans, types1), (elsiflist, types3) = TRElsif(elsif_list(ie), et, func, trans, types2), (elsecase, types4) = TRValueExpr( else_case(ie), et, func, trans, types3) in (Make_IfExpr( mk_IfExpr(ifcond, ifcase, elsiflist, elsecase)), types4) end, /∗Transforms an elsif list.∗/ /∗ Arguments: ======= eil: the elsif list et: the expected type of the if expression Result: ======= Elsif_list: the imperative version of the elsif list ∗/ TRElsif : Elsif ∗ × ExpType × FUNC × TRANS × TYPES → Elsif ∗ × TYPES TRElsif(eil, et, func, trans, types) ≡ if eil = 〈〉 then (〈〉, types) else let (ve1, types1) = TRValueExpr( 216
C.1. FORMAL SPECIFICATION OF THE TRANSFORMER condition(hd eil), Known(TypeLiteral(BOOL)), func, trans, types ), (ve2, types2) = TRValueExpr( elsif_case(hd eil), et, func, trans, types1), (elsiftl, types3) = TRElsif(tl eil, et, func, trans, types2) in (〈mk_Elsif(ve1, ve2)〉 elsiftl, types3) end end, /∗Transforms a case branch list.∗/ /∗ Arguments: ======= cbl: the case branch list et: the expected type of the case expression Results: ======= CaseBranch_list: the imperative version of the case branch list ∗/ TRCaseBranchList : CaseBranch ∗ × ExpType × FUNC × TRANS × TYPES → CaseBranch ∗ × TYPES TRCaseBranchList(cbl, et, func, trans, types) ≡ if cbl = 〈〉 then (〈〉, types) else let (p, types1) = TRPattern(pattern(hd cbl), func, trans, types), (ve, types2) = TRValueExpr( value_expr(hd cbl), et, func, trans, types1), (cbl ′ , types3) = TRCaseBranchList( tl cbl, et, func, trans, types2) in (〈mk_CaseBranch(p, ve)〉 cbl ′ , types3) end end, 217
- Page 182 and 183: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 184 and 185: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 186 and 187: APPENDIX C. FORMAL SPECIFICATIONS O
- 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 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 278 and 279: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 280 and 281: APPENDIX C. FORMAL SPECIFICATIONS O
C.1. FORMAL SPECIFICATION OF THE TRANSFORMER<br />
condition(hd eil),<br />
Known(TypeLiteral(BOOL)), func, trans, types<br />
),<br />
(ve2, types2) =<br />
TRValueExpr(<br />
elsif_case(hd eil), et, func, trans, types1),<br />
(elsiftl, types3) =<br />
TRElsif(tl eil, et, func, trans, types2)<br />
in<br />
(〈mk_Elsif(ve1, ve2)〉 elsiftl, types3)<br />
end<br />
end,<br />
/∗Transforms a case branch list.∗/<br />
/∗<br />
Arguments:<br />
=======<br />
cbl: the case branch list<br />
et: the expected type <strong>of</strong> the case expression<br />
Results:<br />
=======<br />
CaseBranch_list: the imperative version <strong>of</strong> the<br />
case branch list<br />
∗/<br />
TRCaseBranchList :<br />
CaseBranch ∗ × ExpType × FUNC × TRANS × TYPES →<br />
CaseBranch ∗ × TYPES<br />
TRCaseBranchList(cbl, et, func, trans, types) ≡<br />
if cbl = 〈〉 then (〈〉, types)<br />
else<br />
let<br />
(p, types1) =<br />
TRPattern(pattern(hd cbl), func, trans, types),<br />
(ve, types2) =<br />
TRValueExpr(<br />
value_expr(hd cbl), et, func, trans, types1),<br />
(cbl ′ , types3) =<br />
TRCaseBranchList(<br />
tl cbl, et, func, trans, types2)<br />
in<br />
(〈mk_CaseBranch(p, ve)〉 cbl ′ , types3)<br />
end<br />
end,<br />
217