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 getFirstFromPair : ValueExprPair → ValueExpr getFirstFromPair(vep) ≡ first(vep), getSecondFromPair : ValueExprPair → ValueExpr getSecondFromPair(vep) ≡ second(vep), getExpType : ExpType → ExpType getExpType(et) ≡ et, getAccessIdSet : AccessResult → Id ∗ getAccessIdSet(ar) ≡ accessIdSet(ar), ifExprToList : IfExpr → ValueExpr ∗ ifExprToList(ie) ≡ 〈getCondition(ie)〉 elsifToList(elsif_list(ie)) 〈getElseCase(ie)〉, getCondition : IfExpr → ValueExpr getCondition(ie) ≡ condition(ie), getElseCase : IfExpr → ValueExpr getElseCase(ie) ≡ else_case(ie), emptyVE : Unit → ValueExpr ∗ emptyVE() ≡ tl 〈Make_ValueLiteral(ValueLiteralInteger( ′′ 1 ′′ ))〉, getElsifCondition : Elsif → ValueExpr getElsifCondition(ei) ≡ condition(ei), getElsifCase : Elsif → ValueExpr getElsifCase(ei) ≡ elsif_case(ei), elementsId : Id ∗ → Id ∗ elementsId(idl) ≡ if idl = 〈〉 then idl else if isinId(getHeadId(idl), getTailId(idl)) then elementsId(getTailId(idl)) else 〈getHeadId(idl)〉 elementsId(getTailId(idl)) end end, 472

D.2. FORMAL SPECIFICATION OF THE TRANSFORMER IN RSL1 end interId : Id ∗ × Id ∗ → Id ∗ interId(idl1, idl2) ≡ if idl1 = 〈〉 then idl1 else if isinId(hd idl1, idl2) then 〈hd idl1〉 interId(tl idl1, idl2) else interId(tl idl1, idl2) end end, getHeadId : Id ∗ → Id getHeadId(idl) ≡ hd idl, getTailId : Id ∗ → Id ∗ getTailId(idl) ≡ tl idl, emptyId : Unit → Id ∗ emptyId() ≡ tl 〈mk_Id( ′′ DUMMY ′′ )〉, emptyList : Binding ∗ → Bool emptyList(bl) ≡ bl = 〈〉, getTextId : Id → Text getTextId(id) ≡ getText(id) 473

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

getFirstFromPair : ValueExprPair → ValueExpr<br />

getFirstFromPair(vep) ≡ first(vep),<br />

getSecondFromPair : ValueExprPair → ValueExpr<br />

getSecondFromPair(vep) ≡ second(vep),<br />

getExpType : ExpType → ExpType<br />

getExpType(et) ≡ et,<br />

getAccessIdSet : AccessResult → Id ∗<br />

getAccessIdSet(ar) ≡ accessIdSet(ar),<br />

ifExprToList : IfExpr → ValueExpr ∗<br />

ifExprToList(ie) ≡<br />

〈getCondition(ie)〉 elsifToList(elsif_list(ie)) <br />

〈getElseCase(ie)〉,<br />

getCondition : IfExpr → ValueExpr<br />

getCondition(ie) ≡ condition(ie),<br />

getElseCase : IfExpr → ValueExpr<br />

getElseCase(ie) ≡ else_case(ie),<br />

emptyVE : Unit → ValueExpr ∗<br />

emptyVE() ≡<br />

tl 〈Make_ValueLiteral(ValueLiteralInteger( ′′ 1 ′′ ))〉,<br />

getElsifCondition : Elsif → ValueExpr<br />

getElsifCondition(ei) ≡ condition(ei),<br />

getElsifCase : Elsif → ValueExpr<br />

getElsifCase(ei) ≡ elsif_case(ei),<br />

elementsId : Id ∗ → Id ∗<br />

elementsId(idl) ≡<br />

if idl = 〈〉 then idl<br />

else<br />

if isinId(getHeadId(idl), getTailId(idl))<br />

then elementsId(getTailId(idl))<br />

else<br />

〈getHeadId(idl)〉 elementsId(getTailId(idl))<br />

end<br />

end,<br />

472

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

Saved successfully!

Ooh no, something went wrong!