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 end, → Unknown end, → Unknown end, getMapType : ExpType → MapType getMapType(et) ≡ case et of Known(te) → case te of TypeExprMap(tem) → case tem of FiniteMapTypeExpr(tedom, terange) → mk_MapType(Known(tedom), Known(terange)), FiniteMapTypeExpr(tedom, terange) → mk_MapType(Known(tedom), Known(terange)) end, → mk_MapType(Unknown, Unknown) end, → mk_MapType(Unknown, Unknown) end, getBracketedType : ExpType → ExpType getBracketedType(et) ≡ case et of Known(te) → case te of BracketedTypeExpr(bte) → Known(bte), → Unknown end, Unknown → Unknown end, getListMapTypeArg : ExpType → ExpType getListMapTypeArg(et) ≡ case et of Known(te) → case te of TypeExprList(tel) → Known(TypeExprProduct(〈TypeLiteral(INT)〉)), TypeExprMap(tem) → case tem of FiniteMapTypeExpr(tedom, terange) → 414

D.2. FORMAL SPECIFICATION OF THE TRANSFORMER IN RSL1 Known(TypeExprProduct(〈tedom〉)), InfiniteMapTypeExpr(tedom, terange) → Known(TypeExprProduct(〈tedom〉)) end, → et end, Unknown → Unknown end, removeBrackets : ExpType → ExpType removeBrackets(et) ≡ case et of Known(te) → case te of BracketedTypeExpr(bte) → Known(bte), → et end, → et end, /∗**** ExpType end ****∗/ /∗**** ValueExpr ****∗/ toValueExpr : ValueExpr ∗ → ValueExpr toValueExpr(vel) ≡ if lengthVE(vel) = 1 then hd vel else ProductExpr(vel) end, makeValueExprList : ValueExpr ∗ × ExpType ∗ × ValueExpr ∗ × TRANS × FUNC → ValueExpr ∗ makeValueExprList(vel, etl, vl, trans, func) ≡ if vel = 〈〉 then vel else if and( isGen(hd vel, hd etl, trans, func), not( returnsNonTOI(hd vel, hd etl, trans, func)) ) then 415

APPENDIX D. SPECIFICATION OF TRANSFORMER IN RSL1<br />

end,<br />

→ Unknown<br />

end,<br />

→ Unknown<br />

end,<br />

getMapType : ExpType → MapType<br />

getMapType(et) ≡<br />

case et <strong>of</strong><br />

Known(te) →<br />

case te <strong>of</strong><br />

TypeExprMap(tem) →<br />

case tem <strong>of</strong><br />

FiniteMapTypeExpr(tedom, terange) →<br />

mk_MapType(Known(tedom), Known(terange)),<br />

FiniteMapTypeExpr(tedom, terange) →<br />

mk_MapType(Known(tedom), Known(terange))<br />

end,<br />

→ mk_MapType(Unknown, Unknown)<br />

end,<br />

→ mk_MapType(Unknown, Unknown)<br />

end,<br />

getBracketedType : ExpType → ExpType<br />

getBracketedType(et) ≡<br />

case et <strong>of</strong><br />

Known(te) →<br />

case te <strong>of</strong><br />

BracketedTypeExpr(bte) → Known(bte),<br />

→ Unknown<br />

end,<br />

Unknown → Unknown<br />

end,<br />

getListMapTypeArg : ExpType → ExpType<br />

getListMapTypeArg(et) ≡<br />

case et <strong>of</strong><br />

Known(te) →<br />

case te <strong>of</strong><br />

TypeExprList(tel) →<br />

Known(TypeExprProduct(〈TypeLiteral(INT)〉)),<br />

TypeExprMap(tem) →<br />

case tem <strong>of</strong><br />

FiniteMapTypeExpr(tedom, terange) →<br />

414

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

Saved successfully!

Ooh no, something went wrong!