Transformation of Applicative Specifications into Imperative ...

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

26.09.2013 Views

APPENDIX D. SPECIFICATION OF TRANSFORMER IN RSL1 func, trans, types))) else if and( containsGen( vel, typeExprToExpTypeList(arg), trans, func), not( onlyTOIArgument( vel, trans, types))) then mk_VE_TYPES( makeSequencingExpr( TRFunctionAppl( ve, valueExprList( TRValueExprListProductFunc( vel, expTypeList( arg, lengthVE(vel)), func, trans, types)), typeExprToExpTypeList(arg), func, trans, types), type_expr(res), et, trans, func), typesMap( TRValueExprListProductFunc( vel, expTypeList( arg, lengthVE(vel)), func, trans, types))) else mk_VE_TYPES( makeSequencingExpr( ApplicationExpr( ve, removeTOI( valueExprList( TRValueExprListProductFunc( vel, expTypeList( arg, lengthVE(vel)), func, trans, types)), typeExprToExpTypeList(arg), 392

D.2. FORMAL SPECIFICATION OF THE TRANSFORMER IN RSL1 end end trans)), type_expr(res), et, trans, func), typesMap( TRValueExprListProductFunc( vel, expTypeList( arg, lengthVE(vel)), func, trans, types))) end else /∗List or map application.∗/ TRListMapAppl(ve, vel, et, func, trans, types) end, → TRListMapAppl(ve, vel, et, func, trans, types) end, TRFunctionAppl : ValueExpr × ValueExpr ∗ × ExpType ∗ × FUNC × TRANS × TYPES → ValueExpr TRFunctionAppl(ve, vel, etl, func, trans, types) ≡ ApplicationExpr( ve, 〈LetExpr( 〈mk_LetDef( MakeBinding( makeBinding( bindingList( makeLetBinding( lengthVE(vel), 0, 〈〉, 〈〉 )))), ProductExpr(vel))〉, ProductExpr( makeValueExprList( vel, etl, valueExprList( makeLetBinding( lengthVE(vel), 0, 〈〉, 〈〉)), trans, func)))〉), removeTOI : ValueExpr ∗ × ExpType ∗ × TRANS → 393

D.2. FORMAL SPECIFICATION OF THE TRANSFORMER IN RSL1<br />

end<br />

end<br />

trans)), type_expr(res),<br />

et, trans, func),<br />

typesMap(<br />

TRValueExprListProductFunc(<br />

vel,<br />

expTypeList(<br />

arg, lengthVE(vel)), func,<br />

trans, types)))<br />

end<br />

else<br />

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

TRListMapAppl(ve, vel, et, func, trans, types)<br />

end,<br />

→<br />

TRListMapAppl(ve, vel, et, func, trans, types)<br />

end,<br />

TRFunctionAppl :<br />

ValueExpr × ValueExpr ∗ × ExpType ∗ ×<br />

FUNC × TRANS × TYPES →<br />

ValueExpr<br />

TRFunctionAppl(ve, vel, etl, func, trans, types) ≡<br />

ApplicationExpr(<br />

ve,<br />

〈LetExpr(<br />

〈mk_LetDef(<br />

MakeBinding(<br />

makeBinding(<br />

bindingList(<br />

makeLetBinding(<br />

lengthVE(vel), 0, 〈〉, 〈〉<br />

)))), ProductExpr(vel))〉,<br />

ProductExpr(<br />

makeValueExprList(<br />

vel, etl,<br />

valueExprList(<br />

makeLetBinding(<br />

lengthVE(vel), 0, 〈〉, 〈〉)),<br />

trans, func)))〉),<br />

removeTOI :<br />

ValueExpr ∗ × ExpType ∗ × TRANS →<br />

393

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

Saved successfully!

Ooh no, something went wrong!