Transformation of Applicative Specifications into Imperative ...
Transformation of Applicative Specifications into Imperative ... Transformation of Applicative Specifications into Imperative ...
APPENDIX C. FORMAL SPECIFICATIONS OF TRANSFORMATIONS ie: the if expression et: the expected type of the if expression Results: ======= Bool: true if the if expression can be transformed, false otherwise ∗/ CheckIfExpr : IfExpr × ExpType × TYPINGS × FUNC × TRANS × ENV × TYPES → Bool × ENV × TYPES CheckIfExpr(ie, et, typings, func, trans, env, types) ≡ let (b1, env1, types1) = CheckValueExpr( condition(ie), Known(TypeLiteral(BOOL)), typings, func, trans, env, types), (b1 ′ , env1 ′ , types1 ′ ) = CheckValueExpr( if_case(ie), et, typings, func, trans, env1, types1), (b2, env2, types2) = CheckElsif( elsif_list(ie), et, typings, func, trans, env1, types1 ′ ), (b3, env3, types3) = CheckValueExpr( else_case(ie), et, typings, func, trans, env2, types2) in (b1 ∧ b1 ′ ∧ b2 ∧ b3, env3, types3) end, /∗Checks for transformability of an elsif list. ∗/ /∗ Arguments: ======= eil: the elsif list et: the expected type of the if expression Results: ======= Bool: true if the elsif list can be transformed, false otherwise 178
C.1. FORMAL SPECIFICATION OF THE TRANSFORMER ∗/ CheckElsif : Elsif ∗ × ExpType × TYPINGS × FUNC × TRANS × ENV × TYPES → Bool × ENV × TYPES CheckElsif(eil, et, typings, func, trans, env, types) ≡ if eil = 〈〉 then (true, env, types) else let (b1, env1, types1) = CheckValueExpr( condition(hd eil), Known(TypeLiteral(BOOL)), typings, func, trans, env, types), (b2, env2, types2) = CheckValueExpr( elsif_case(hd eil), et, typings, func, trans, env1, types1) in if (b1 ∧ b2) then CheckElsif( tl eil, et, typings, func, trans, env1, types2) else (false, env1, types2) end end end, /∗Checks for transformability of a case branch list. ∗/ /∗ Arguments: ======= cbl: the case branch list et: the expected type of the case expression Results: ======= Bool: true if the case branch list can be transformed, false otherwise ∗/ CheckCaseBranchList : CaseBranch ∗ × ExpType × TYPINGS × FUNC × 179
- Page 144 and 145: CHAPTER 12. POSSIBLE EXTENSIONS OF
- Page 146 and 147: CHAPTER 13. CONCLUSION RSL AST and
- Page 148 and 149: CHAPTER 13. CONCLUSION 132
- Page 150 and 151: BIBLIOGRAPHY [ST02] Donald Sannello
- Page 152 and 153: APPENDIX A. USING AND EXTENDING THE
- Page 154 and 155: APPENDIX A. USING AND EXTENDING THE
- Page 156 and 157: APPENDIX B. CONTENTS OF CD-ROM 140
- Page 158 and 159: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 160 and 161: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 162 and 163: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 164 and 165: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 166 and 167: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 168 and 169: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 170 and 171: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 172 and 173: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 174 and 175: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 176 and 177: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 178 and 179: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 180 and 181: APPENDIX C. FORMAL SPECIFICATIONS O
- 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 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 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
C.1. FORMAL SPECIFICATION OF THE TRANSFORMER<br />
∗/<br />
CheckElsif :<br />
Elsif ∗ × ExpType × TYPINGS × FUNC × TRANS ×<br />
ENV × TYPES →<br />
Bool × ENV × TYPES<br />
CheckElsif(eil, et, typings, func, trans, env, types) ≡<br />
if eil = 〈〉 then (true, env, types)<br />
else<br />
let<br />
(b1, env1, types1) =<br />
CheckValueExpr(<br />
condition(hd eil),<br />
Known(TypeLiteral(BOOL)), typings, func,<br />
trans, env, types),<br />
(b2, env2, types2) =<br />
CheckValueExpr(<br />
elsif_case(hd eil), et, typings, func,<br />
trans, env1, types1)<br />
in<br />
if (b1 ∧ b2)<br />
then<br />
CheckElsif(<br />
tl eil, et, typings, func, trans, env1,<br />
types2)<br />
else (false, env1, types2)<br />
end<br />
end<br />
end,<br />
/∗Checks for transformability <strong>of</strong> a case branch<br />
list.<br />
∗/<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 />
Bool: true if the case branch list can be transformed,<br />
false otherwise<br />
∗/<br />
CheckCaseBranchList :<br />
CaseBranch ∗ × ExpType × TYPINGS × FUNC ×<br />
179