Transformation of Applicative Specifications into Imperative ...

Transformation of Applicative Specifications into Imperative ... Transformation of Applicative Specifications into Imperative ...

26.09.2013 Views

APPENDIX C. FORMAL SPECIFICATIONS OF TRANSFORMATIONS Make_ValueOrVariableName(vn) → if id(vn) ∈ dom func then /∗Function application.∗/ case type_expr(func(id(vn))) of FunctionTypeExpr(arg, fa, res) → let (ve ′ , types ′ ) = TRValueExpr( value_expr(ld), Known(type_expr(res)), func, trans, types), /∗Updates TYPES.∗/ types ′′ = makeTYPES( binding(ld), Known(type_expr(res)), trans) in if isGen( ve, Known(type_expr(func(id(vn)))), trans, func) then if ∼ returnsNonTOI( ve, Known( type_expr(func(id(vn)))), trans, func) then (mk_LetDef( MakeBinding( IdBinding(mk_Id( ′′ dummy ′′ ))), ve ′ ), types ′ † types ′′ ) else (mk_LetDef( TRLetBinding( binding(ld), type_expr(res), func, trans, types ′′ ), ve ′ ), types ′ † types ′′ ) end else 212

C.1. FORMAL SPECIFICATION OF THE TRANSFORMER (mk_LetDef(binding(ld), ve ′ ), types ′ † types ′′ ) end end end else /∗List or map application.∗/ let (ve ′ , types ′ ) = TRValueExpr( value_expr(ld), Unknown, func, trans, types) in (mk_LetDef(binding(ld), ve ′ ), types ′ † makeTYPES(binding(ld), Unknown, trans)) end end, → let (ve ′ , types ′ ) = TRValueExpr( value_expr(ld), Unknown, func, trans, types) in (mk_LetDef(binding(ld), ve ′ ), types ′ † makeTYPES(binding(ld), Unknown, trans)) end end, → let (ve ′ , types ′ ) = TRValueExpr( value_expr(ld), Unknown, func, trans, types) in (mk_LetDef(binding(ld), ve ′ ), types ′ † makeTYPES(binding(ld), Unknown, trans)) end end, /∗Transforms a let binding.∗/ /∗ 213

C.1. FORMAL SPECIFICATION OF THE TRANSFORMER<br />

(mk_LetDef(binding(ld), ve ′ ),<br />

types ′ † types ′′ )<br />

end<br />

end<br />

end<br />

else /∗List or map application.∗/<br />

let<br />

(ve ′ , types ′ ) =<br />

TRValueExpr(<br />

value_expr(ld), Unknown, func,<br />

trans, types)<br />

in<br />

(mk_LetDef(binding(ld), ve ′ ),<br />

types ′ †<br />

makeTYPES(binding(ld), Unknown, trans))<br />

end<br />

end,<br />

→<br />

let<br />

(ve ′ , types ′ ) =<br />

TRValueExpr(<br />

value_expr(ld), Unknown, func, trans,<br />

types)<br />

in<br />

(mk_LetDef(binding(ld), ve ′ ),<br />

types ′ †<br />

makeTYPES(binding(ld), Unknown, trans))<br />

end<br />

end,<br />

→<br />

let<br />

(ve ′ , types ′ ) =<br />

TRValueExpr(<br />

value_expr(ld), Unknown, func, trans,<br />

types)<br />

in<br />

(mk_LetDef(binding(ld), ve ′ ),<br />

types ′ †<br />

makeTYPES(binding(ld), Unknown, trans))<br />

end<br />

end,<br />

/∗Transforms a let binding.∗/<br />

/∗<br />

213

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!