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 overrideTYPES : TYPES × TYPES → TYPES overrideTYPES(t1, t2) ≡ if getTYPESMapEntranceList(t1) = 〈〉 then t2 else if isinTYPES( getFirstTYPES(hd getTYPESMapEntranceList(t1)), domainTYPES(t2)) then overrideTYPES( mk_TYPES(tl getTYPESMapEntranceList(t1)), t2) else overrideTYPES( mk_TYPES(tl getTYPESMapEntranceList(t1)), mk_TYPES( getTYPESMapEntranceList(t2) 〈hd getTYPESMapEntranceList(t1)〉)) end end, isinTYPES : Binding × Binding ∗ → Bool isinTYPES(b, bl) ≡ if bl = 〈〉 then false else if getTextBindingTYPES(b) = getTextBindingTYPES(hd bl) then true else isinTYPES(b, tl bl) end end, getFirstTYPES : TYPESMapEntrance → Binding getFirstTYPES(me) ≡ first(me), getSecondTYPES : TYPESMapEntrance → ExpType getSecondTYPES(me) ≡ second(me), getTextBindingTYPES : Binding → Text getTextBindingTYPES(b) ≡ case b of IdBinding(id) → getText(id) end, 466

D.2. FORMAL SPECIFICATION OF THE TRANSFORMER IN RSL1 getTYPESMapEntranceList : TYPES → TYPESMapEntrance ∗ getTYPESMapEntranceList(types) ≡ map(types), getHeadTYPES : TYPES → TYPESMapEntrance getHeadTYPES(types) ≡ hd getTYPESMapEntranceList(types), /∗**** TYPES end ****∗/ /∗**** Id ****∗/ removeDupletsId : Id ∗ → Id ∗ removeDupletsId(il) ≡ if lengthId(il) = lengthId(elementsId(il)) then il else if isinId(hd il, elementsId(tl il)) then removeDupletsId(tl il) else 〈hd il〉 removeDupletsId(tl il) end end, makeId : Int → Id makeId(no) ≡ mk_Id( ′′ pa_ ′′ intToText(no)), intToText : Int → Text intToText(no) ≡ case no of 0 → ′′ 0 ′′ , 1 → ′′ 1 ′′ , 2 → ′′ 2 ′′ , 3 → ′′ 3 ′′ , 4 → ′′ 4 ′′ , 5 → ′′ 5 ′′ , 6 → ′′ 6 ′′ , 7 → ′′ 7 ′′ , 8 → ′′ 8 ′′ , 9 → ′′ 9 ′′ end, /∗**** Id end ****∗/ /∗**** Set Logic ****∗/ 467

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

overrideTYPES : TYPES × TYPES → TYPES<br />

overrideTYPES(t1, t2) ≡<br />

if getTYPESMapEntranceList(t1) = 〈〉 then t2<br />

else<br />

if<br />

isinTYPES(<br />

getFirstTYPES(hd getTYPESMapEntranceList(t1)),<br />

domainTYPES(t2))<br />

then<br />

overrideTYPES(<br />

mk_TYPES(tl getTYPESMapEntranceList(t1)), t2)<br />

else<br />

overrideTYPES(<br />

mk_TYPES(tl getTYPESMapEntranceList(t1)),<br />

mk_TYPES(<br />

getTYPESMapEntranceList(t2) <br />

〈hd getTYPESMapEntranceList(t1)〉))<br />

end<br />

end,<br />

isinTYPES : Binding × Binding ∗ → Bool<br />

isinTYPES(b, bl) ≡<br />

if bl = 〈〉 then false<br />

else<br />

if<br />

getTextBindingTYPES(b) =<br />

getTextBindingTYPES(hd bl)<br />

then true<br />

else isinTYPES(b, tl bl)<br />

end<br />

end,<br />

getFirstTYPES : TYPESMapEntrance → Binding<br />

getFirstTYPES(me) ≡ first(me),<br />

getSecondTYPES : TYPESMapEntrance → ExpType<br />

getSecondTYPES(me) ≡ second(me),<br />

getTextBindingTYPES : Binding → Text<br />

getTextBindingTYPES(b) ≡<br />

case b <strong>of</strong><br />

IdBinding(id) → getText(id)<br />

end,<br />

466

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

Saved successfully!

Ooh no, something went wrong!