Transformation of Applicative Specifications into Imperative ...
Transformation of Applicative Specifications into Imperative ... Transformation of Applicative Specifications into Imperative ...
APPENDIX C. FORMAL SPECIFICATIONS OF TRANSFORMATIONS vdl: the value definition list Result: ======= ValueDef_list: the resulting imperative version of the value definition list ∗/ TRValueDefList : ValueDef ∗ × FUNC × TRANS → ValueDef ∗ TRValueDefList(vdl, func, trans) ≡ if vdl = 〈〉 then 〈〉 else 〈TRValueDef(hd vdl, func, trans)〉 TRValueDefList(tl vdl, func, trans) end, /∗Transforms a value definition.∗/ /∗ Arguments: ======= vd: the value definition Result: ======= ValueDef: the resulting imperative version of the value definition ∗/ TRValueDef : ValueDef × FUNC × TRANS → ValueDef TRValueDef(vd, func, trans) ≡ case vd of ExplicitValueDef(st, ve) → if includesTRANSName( Known(type_expr(st)), dom trans) then case binding(st) of IdBinding(id) → let (transve, types) = TRValueExpr( ve, Known(type_expr(st)), func, trans, [ ]) in ExplicitFunctionDef( TRSingleTyping( mk_SingleTyping( 184
C.1. FORMAL SPECIFICATION OF THE TRANSFORMER end binding(st), FunctionTypeExpr( TypeLiteral(UNIT), TOTAL_FUNCTION_ARROW, mk_ResultDesc( NoReadAccessMode, NoWriteAccessMode, type_expr(st)))), func, trans), IdApplication( id, mk_FormalFunctionParameter(〈〉)), transve, NoPreCondition) end else vd end, ExplicitFunctionDef(st, ffa, ve, precond) → case type_expr(st) of FunctionTypeExpr(arg, fa, res) → let /∗Establishes ENV and TYPES.∗/ (b, ffap, env, types, prlet) = TRFormalFuncAppl(ffa, func, trans), types1 = alterTYPESMap(types, prlet), (precond ′ , types2) = TROptPreCondition( precond, Known(TypeLiteral(BOOL)), func, trans, types1), /∗Transforms the value expression.∗/ (transve, types3) = TRValueExpr( ve, Known(type_expr(res)), func, trans, types2) in if prlet = 〈〉 then ExplicitFunctionDef( TRSingleTyping(st, func, trans), ffap, transve, precond ′ ) else ExplicitFunctionDef( TRSingleTyping(st, func, trans), ffap, LetExpr(prlet, transve), precond ′ ) 185
- 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 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 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
- 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
C.1. FORMAL SPECIFICATION OF THE TRANSFORMER<br />
end<br />
binding(st),<br />
FunctionTypeExpr(<br />
TypeLiteral(UNIT),<br />
TOTAL_FUNCTION_ARROW,<br />
mk_ResultDesc(<br />
NoReadAccessMode,<br />
NoWriteAccessMode,<br />
type_expr(st)))), func,<br />
trans),<br />
IdApplication(<br />
id,<br />
mk_FormalFunctionParameter(〈〉)),<br />
transve, NoPreCondition)<br />
end<br />
else vd<br />
end,<br />
ExplicitFunctionDef(st, ffa, ve, precond) →<br />
case type_expr(st) <strong>of</strong><br />
FunctionTypeExpr(arg, fa, res) →<br />
let<br />
/∗Establishes ENV and TYPES.∗/<br />
(b, ffap, env, types, prlet) =<br />
TRFormalFuncAppl(ffa, func, trans),<br />
types1 = alterTYPESMap(types, prlet),<br />
(precond ′ , types2) =<br />
TROptPreCondition(<br />
precond, Known(TypeLiteral(BOOL)),<br />
func, trans, types1),<br />
/∗Transforms the value expression.∗/<br />
(transve, types3) =<br />
TRValueExpr(<br />
ve, Known(type_expr(res)), func,<br />
trans, types2) in<br />
if prlet = 〈〉<br />
then<br />
ExplicitFunctionDef(<br />
TRSingleTyping(st, func, trans),<br />
ffap, transve, precond ′ )<br />
else<br />
ExplicitFunctionDef(<br />
TRSingleTyping(st, func, trans),<br />
ffap, LetExpr(prlet, transve),<br />
precond ′ )<br />
185