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 expTypeToExpTypeList( removeBrackets(et), lengthVE(vel)), func, trans), NoValueExprList → mk_AccessResult(〈〉, idset) end, getAccessGenOptVEPL : Id ∗ × OptionalValueExprPairList × MapType × FUNC × TRANS → AccessResult getAccessGenOptVEPL(idset, ovel, et, func, trans) ≡ case ovel of ValueExprPairList(vel) → getAccessGenListList( idset, pairListToList(vel), pairListToTypeList(vel, et), func, trans), NoValueExprPairList → mk_AccessResult(〈〉, idset) end, getAccessGenList : Id ∗ × ValueExpr ∗ × ExpType ∗ × FUNC × TRANS → AccessResult getAccessGenList(idset, vel, etl, func, trans) ≡ if vel = 〈〉 then mk_AccessResult(〈〉, idset) else mk_AccessResult( removeDuplets( accessList( getAccessGen( idset, hd vel, hd etl, func, trans)) accessList( getAccessGenList( accessIdSet( getAccessGen( idset, hd vel, hd etl, func, trans)), tl vel, tl etl, func, trans))), accessIdSet( getAccessGenList( accessIdSet( getAccessGen( idset, hd vel, hd etl, func, trans)), 440

D.2. FORMAL SPECIFICATION OF THE TRANSFORMER IN RSL1 end, tl vel, tl etl, func, trans))) getAccessGenListList : Id ∗ × ValueExpr ∗ × ExpType ∗ × FUNC × TRANS → AccessResult getAccessGenListList(idset, vel, etl, func, trans) ≡ if vel = 〈〉 then mk_AccessResult(〈〉, idset) else mk_AccessResult( removeDuplets( accessList( getAccessGen( idset, hd vel, hd etl, func, trans)) accessList( getAccessGenListList( accessIdSet( getAccessGen( idset, hd vel, hd etl, func, trans)), tl vel, tl etl, func, trans))), accessIdSet( getAccessGenListList( accessIdSet( getAccessGen( idset, hd vel, hd etl, func, trans)), tl vel, tl etl, func, trans))) end, getAccessGenLetDefList : Id ∗ × LetDef ∗ × FUNC × TRANS → AccessResult getAccessGenLetDefList(idset, ldl, func, trans) ≡ if ldl = 〈〉 then mk_AccessResult(〈〉, idset) else mk_AccessResult( removeDuplets( accessList( getAccessGen( idset, value_expr(hd ldl), Unknown, func, trans)) accessList( getAccessGenLetDefList( 441

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

end,<br />

tl vel, tl etl, func, trans)))<br />

getAccessGenListList :<br />

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

TRANS →<br />

AccessResult<br />

getAccessGenListList(idset, vel, etl, func, trans) ≡<br />

if vel = 〈〉 then mk_AccessResult(〈〉, idset)<br />

else<br />

mk_AccessResult(<br />

removeDuplets(<br />

accessList(<br />

getAccessGen(<br />

idset, hd vel, hd etl, func, trans)) <br />

accessList(<br />

getAccessGenListList(<br />

accessIdSet(<br />

getAccessGen(<br />

idset, hd vel, hd etl, func,<br />

trans)), tl vel, tl etl, func,<br />

trans))),<br />

accessIdSet(<br />

getAccessGenListList(<br />

accessIdSet(<br />

getAccessGen(<br />

idset, hd vel, hd etl, func, trans)),<br />

tl vel, tl etl, func, trans)))<br />

end,<br />

getAccessGenLetDefList :<br />

Id ∗ × LetDef ∗ × FUNC × TRANS →<br />

AccessResult<br />

getAccessGenLetDefList(idset, ldl, func, trans) ≡<br />

if ldl = 〈〉 then mk_AccessResult(〈〉, idset)<br />

else<br />

mk_AccessResult(<br />

removeDuplets(<br />

accessList(<br />

getAccessGen(<br />

idset, value_expr(hd ldl), Unknown,<br />

func, trans)) <br />

accessList(<br />

getAccessGenLetDefList(<br />

441

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

Saved successfully!

Ooh no, something went wrong!