Transformation of Applicative Specifications into Imperative ...
Transformation of Applicative Specifications into Imperative ... Transformation of Applicative Specifications into Imperative ...
APPENDIX C. FORMAL SPECIFICATIONS OF TRANSFORMATIONS else CheckPreCondGen( value_expr(hd cbl), func, trans, types) ∧ CheckPreCondGenCaseBranch( tl cbl, func, trans, types) end, /∗Checks for transformability of a value expression. ∗/ /∗ Arguments: ======= ve: the value expression et: the expected type of the value expression Results: ===== Bool: true if the list is transformable, false otherwise ∗/ CheckValueExpr : ValueExpr × ExpType × TYPINGS × FUNC × TRANS × ENV × TYPES → Bool × ENV × TYPES CheckValueExpr( ve, et, typings, func, trans, env, types) ≡ case ve of Make_ValueLiteral(vl) → (true, updateENV(env, et, trans), types), Make_ValueOrVariableName(vn) → if ∼ isinBinding(IdBinding(id(vn)), dom types) then (true, updateENV(env, et, trans), types) else if checkTRANS( types(IdBinding(id(vn))), dom trans) then /∗The value expression is of the type of interest. ∗/ (isinBinding(IdBinding(id(vn)), rng env), updateENV(env, et, trans), types) else /∗The value expression is not of the type of interest. ∗/ (true, updateENV(env, et, trans), types) 162
C.1. FORMAL SPECIFICATION OF THE TRANSFORMER end end, Make_BasicExpr(be) → (true, env, types), ProductExpr(vel) → CheckValueExprList( vel, expTypeToExpTypeList( removeBrackets(et), len vel), typings, func, trans, env, types), Make_SetExpr(setExpr) → if containsTRANSName( getSetType(et), typings, dom trans) then (false, env, types) else CheckSetExpr( setExpr, getSetType(et), typings, func, trans, env, types) end, Make_ListExpr(listExpr) → if containsTRANSName( getListType(et), typings, dom trans) then (false, env, types) else CheckListExpr( listExpr, getListType(et), typings, func, trans, env, types) end, Make_MapExpr(mapExpr) → if containsTRANSName( tedom(getMapType(et)), typings, dom trans) ∨ containsTRANSName( terange(getMapType(et)), typings, dom trans) then (false, env, types) else CheckMapExpr( mapExpr, getMapType(et), typings, func, trans, env, types) end, ApplicationExpr(ave, vl) → CheckApplicationExpr( ave, vl, et, typings, func, trans, env, types), 163
- Page 128 and 129: CHAPTER 10. EXAMPLES OF TRANSFORMAT
- Page 130 and 131: CHAPTER 10. EXAMPLES OF TRANSFORMAT
- Page 132 and 133: CHAPTER 10. EXAMPLES OF TRANSFORMAT
- Page 134 and 135: CHAPTER 10. EXAMPLES OF TRANSFORMAT
- Page 136 and 137: CHAPTER 11. TEST 11.1.1 Lexer and P
- Page 138 and 139: CHAPTER 11. TEST An overview of the
- Page 140 and 141: CHAPTER 12. POSSIBLE EXTENSIONS OF
- Page 142 and 143: CHAPTER 12. POSSIBLE EXTENSIONS OF
- 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 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 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
APPENDIX C. FORMAL SPECIFICATIONS OF TRANSFORMATIONS<br />
else<br />
CheckPreCondGen(<br />
value_expr(hd cbl), func, trans, types) ∧<br />
CheckPreCondGenCaseBranch(<br />
tl cbl, func, trans, types)<br />
end,<br />
/∗Checks for transformability <strong>of</strong> a value expression.<br />
∗/<br />
/∗<br />
Arguments:<br />
=======<br />
ve: the value expression<br />
et: the expected type <strong>of</strong> the value expression<br />
Results:<br />
=====<br />
Bool: true if the list is transformable, false<br />
otherwise<br />
∗/<br />
CheckValueExpr :<br />
ValueExpr × ExpType × TYPINGS × FUNC × TRANS ×<br />
ENV × TYPES →<br />
Bool × ENV × TYPES<br />
CheckValueExpr(<br />
ve, et, typings, func, trans, env, types) ≡<br />
case ve <strong>of</strong><br />
Make_ValueLiteral(vl) →<br />
(true, updateENV(env, et, trans), types),<br />
Make_ValueOrVariableName(vn) →<br />
if ∼ isinBinding(IdBinding(id(vn)), dom types)<br />
then (true, updateENV(env, et, trans), types)<br />
else<br />
if<br />
checkTRANS(<br />
types(IdBinding(id(vn))), dom trans)<br />
then<br />
/∗The value expression is <strong>of</strong> the type <strong>of</strong> interest.<br />
∗/<br />
(isinBinding(IdBinding(id(vn)), rng env),<br />
updateENV(env, et, trans), types)<br />
else<br />
/∗The value expression is not <strong>of</strong> the type <strong>of</strong> interest.<br />
∗/<br />
(true, updateENV(env, et, trans), types)<br />
162