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 addId : Id × Id ∗ → Id ∗ addId(id, idl) ≡ if isinId(id, idl) then idl else idl 〈id〉 end, unionId : Id ∗ × Id ∗ → Id ∗ unionId(il1, il2) ≡ if il1 = 〈〉 then il2 else unionId(tl il1, addId(hd il1, il2)) end, isinId : Id × Id ∗ → Bool isinId(id, idl) ≡ if idl = 〈〉 then false else if getHeadTextId(idl) = getText(id) then true else isinId(id, tl idl) end end, getHeadTextId : Id ∗ → Text getHeadTextId(idlist) ≡ getText(hd idlist), lengthId : Id ∗ → Int lengthId(idl) ≡ if idl = 〈〉 then 0 else 1 + lengthId(tl idl) end, lengthVE : ValueExpr ∗ → Int lengthVE(vel) ≡ if vel = 〈〉 then 0 else 1 + lengthVE(tl vel) end, concatVE : ValueExpr × ValueExpr ∗ → ValueExpr ∗ concatVE(ve, vel) ≡ 〈ve〉 vel, lengthTE : TypeExpr ∗ → Int lengthTE(tel) ≡ if tel = 〈〉 then 0 else 1 + lengthTE(tl tel) end, lengthET : ExpType ∗ → Int lengthET(etl) ≡ if etl = 〈〉 then 0 else 1 + lengthET(tl etl) end, lengthLetDefList : LetDef ∗ → Int lengthLetDefList(ldl) ≡ 468

D.2. FORMAL SPECIFICATION OF THE TRANSFORMER IN RSL1 if ldl = 〈〉 then 0 else 1 + lengthLetDefList(tl ldl) end, /∗**** Logic ****∗/ and : Bool × Bool → Bool and(b1, b2) ≡ if b1 then b2 else false end, or : Bool × Bool → Bool or(b1, b2) ≡ if b1 then true else b2 end, not : Bool → Bool not(b) ≡ if b then false else true end, /∗**** Logic end ****∗/ /∗**** HELPERS ****∗/ notInTYPINGS : Id × TYPINGS × TRANS → Bool notInTYPINGS(id, typings, trans) ≡ if isinId(id, domainTRANS(trans)) then not( isinId( id, elementsId(getMapValueTYPINGS(typings, id)))) else true end, getValueExpr : VE_TYPES → ValueExpr getValueExpr(vetypes) ≡ valueExpr(vetypes), makeLetDefList : LetDef → LetDef ∗ makeLetDefList(ld) ≡ 〈ld〉, getPattern : Pattern → Pattern getPattern(p) ≡ p, equals : Int × Int → Bool equals(i1, i2) ≡ i1 = i2, greaterEqual : Int × Int × Int → Bool greaterEqual(i1, i2, counter) ≡ 469

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

addId : Id × Id ∗ → Id ∗<br />

addId(id, idl) ≡<br />

if isinId(id, idl) then idl else idl 〈id〉 end,<br />

unionId : Id ∗ × Id ∗ → Id ∗<br />

unionId(il1, il2) ≡<br />

if il1 = 〈〉 then il2<br />

else unionId(tl il1, addId(hd il1, il2))<br />

end,<br />

isinId : Id × Id ∗ → Bool<br />

isinId(id, idl) ≡<br />

if idl = 〈〉 then false<br />

else<br />

if getHeadTextId(idl) = getText(id) then true<br />

else isinId(id, tl idl)<br />

end<br />

end,<br />

getHeadTextId : Id ∗ → Text<br />

getHeadTextId(idlist) ≡ getText(hd idlist),<br />

lengthId : Id ∗ → Int<br />

lengthId(idl) ≡<br />

if idl = 〈〉 then 0 else 1 + lengthId(tl idl) end,<br />

lengthVE : ValueExpr ∗ → Int<br />

lengthVE(vel) ≡<br />

if vel = 〈〉 then 0 else 1 + lengthVE(tl vel) end,<br />

concatVE :<br />

ValueExpr × ValueExpr ∗ → ValueExpr ∗<br />

concatVE(ve, vel) ≡ 〈ve〉 vel,<br />

lengthTE : TypeExpr ∗ → Int<br />

lengthTE(tel) ≡<br />

if tel = 〈〉 then 0 else 1 + lengthTE(tl tel) end,<br />

lengthET : ExpType ∗ → Int<br />

lengthET(etl) ≡<br />

if etl = 〈〉 then 0 else 1 + lengthET(tl etl) end,<br />

lengthLetDefList : LetDef ∗ → Int<br />

lengthLetDefList(ldl) ≡<br />

468

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

Saved successfully!

Ooh no, something went wrong!