Transformation of Applicative Specifications into Imperative ...
Transformation of Applicative Specifications into Imperative ... Transformation of Applicative Specifications into Imperative ...
APPENDIX C. FORMAL SPECIFICATIONS OF TRANSFORMATIONS ======= ListPattern: the imperative version of the list pattern ∗/ TRListPattern : ListPattern × FUNC × TRANS × TYPES → ListPattern × TYPES TRListPattern(lp, func, trans, types) ≡ case lp of Make_EnumeratedListPattern(elp) → let (elp ′ , types ′ ) = TROptInnerPattern( inner_pattern(elp), func, trans, types) in (Make_EnumeratedListPattern( mk_EnumeratedListPattern(elp ′ )), types ′ ) end, ConcatenatedListPattern(elp, p) → let (elp ′ , types1) = TROptInnerPattern( inner_pattern(elp), func, trans, types), (p ′ , types2) = TRPattern(p, func, trans, types1) in (ConcatenatedListPattern( mk_EnumeratedListPattern(elp ′ ), p ′ ), types2 ) end end, /∗Transforms an optional inner pattern.∗/ /∗ Arguments: ======= oip: optional inner pattern Results: ======= OptionalInnerPattern: the imperative version of the optional inner pattern ∗/ TROptInnerPattern : OptionalInnerPattern × FUNC × TRANS × TYPES → 220
C.1. FORMAL SPECIFICATION OF THE TRANSFORMER OptionalInnerPattern × TYPES TROptInnerPattern(oip, func, trans, types) ≡ case oip of InnerPatternList(pl) → let (pl ′ , types ′ ) = TRPatternList(pl, func, trans, types) in (InnerPatternList(pl ′ ), types ′ ) end, NoInnerPattern → (oip, types) end, /∗Establishes an assignment expression.∗/ /∗ Arguments: ======= ve: the value expression et: the corresponding expected type Results: ======= ValueExpr: the resulting value expression ∗/ makeAssignExpr : ValueExpr × ExpType × TRANS → ValueExpr makeAssignExpr(ve, et, trans) ≡ case et of Known(te) → case te of TypeName(tn) → if tn ∈ dom trans then /∗Type of interest.∗/ AssignExpr(trans(tn), ve) else /∗Not type of interest.∗/ ve end, → ve end, Unknown → ve end, /∗**** TypeExpr ****∗/ 221
- 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 232 and 233: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 234 and 235: 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
- Page 282 and 283: APPENDIX C. FORMAL SPECIFICATIONS O
- Page 284 and 285: APPENDIX C. FORMAL SPECIFICATIONS O
C.1. FORMAL SPECIFICATION OF THE TRANSFORMER<br />
OptionalInnerPattern × TYPES<br />
TROptInnerPattern(oip, func, trans, types) ≡<br />
case oip <strong>of</strong><br />
InnerPatternList(pl) →<br />
let<br />
(pl ′ , types ′ ) =<br />
TRPatternList(pl, func, trans, types)<br />
in<br />
(InnerPatternList(pl ′ ), types ′ )<br />
end,<br />
NoInnerPattern → (oip, types)<br />
end,<br />
/∗Establishes an assignment expression.∗/<br />
/∗<br />
Arguments:<br />
=======<br />
ve: the value expression<br />
et: the corresponding expected type<br />
Results:<br />
=======<br />
ValueExpr: the resulting value expression<br />
∗/<br />
makeAssignExpr :<br />
ValueExpr × ExpType × TRANS → ValueExpr<br />
makeAssignExpr(ve, et, trans) ≡<br />
case et <strong>of</strong><br />
Known(te) →<br />
case te <strong>of</strong><br />
TypeName(tn) →<br />
if tn ∈ dom trans<br />
then<br />
/∗Type <strong>of</strong> interest.∗/<br />
AssignExpr(trans(tn), ve)<br />
else<br />
/∗Not type <strong>of</strong> interest.∗/<br />
ve<br />
end,<br />
→ ve<br />
end,<br />
Unknown → ve<br />
end,<br />
/∗**** TypeExpr ****∗/<br />
221