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 if counter = 10 then false else if i1 = i2 then true else greaterEqual(i1, i2 + 1, counter + 1) end end, minusOne : Int → Int minusOne(i) ≡ case i of 1 → 0, 2 → 1, 3 → 2, 4 → 3, 5 → 4, 6 → 5, 7 → 6, 8 → 7, 9 → 8, 10 → 9 end, equalsText : Text × Text → Bool equalsText(t1, t2) ≡ t1 = t2, emptyAccess : Unit → Access ∗ emptyAccess() ≡ tl 〈AccessValueOrVariableName( mk_ValueOrVariableName(mk_Id( ′′ DUMMY ′′ )))〉, isinAccess : Access × Access ∗ → Bool isinAccess(a, al) ≡ if al = 〈〉 then false else if getHeadTextAccess(al) = getTextAccess(a) then true else isinAccess(a, tl al) end end, getHeadTextAccess : Access ∗ → Text getHeadTextAccess(al) ≡ getTextAccess(hd al), getTextAccess : Access → Text 470

D.2. FORMAL SPECIFICATION OF THE TRANSFORMER IN RSL1 getTextAccess(a) ≡ case a of AccessValueOrVariableName(vn) → getText(id(vn)) end, elementsAccess : Access ∗ → Access ∗ elementsAccess(al) ≡ if al = 〈〉 then al else if isinAccess(getHeadAccess(al), getTailAccess(al)) then elementsAccess(getTailAccess(al)) else 〈getHeadAccess(al)〉 elementsAccess(getTailAccess(al)) end end, lengthAccess : Access ∗ → Int lengthAccess(al) ≡ if al = 〈〉 then 0 else 1 + lengthAccess(getTailAccess(al)) end, getHeadAccess : Access ∗ → Access getHeadAccess(al) ≡ hd al, getTailAccess : Access ∗ → Access ∗ getTailAccess(al) ≡ tl al, getHeadTextBinding : Binding ∗ → Text getHeadTextBinding(bl) ≡ getTextBinding(hd bl), lengthBinding : Binding ∗ → Int lengthBinding(bl) ≡ if bl = 〈〉 then 0 else 1 + lengthBinding(tl bl) end, makeIdList : Id → Id ∗ makeIdList(id) ≡ emptyId() 〈id〉, getValueExprList : ValueExprPair → ValueExpr ∗ getValueExprList(ve) ≡ 〈getFirstFromPair(ve), getSecondFromPair(ve)〉, 471

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

if counter = 10 then false<br />

else<br />

if i1 = i2 then true<br />

else greaterEqual(i1, i2 + 1, counter + 1)<br />

end<br />

end,<br />

minusOne : Int → Int<br />

minusOne(i) ≡<br />

case i <strong>of</strong><br />

1 → 0,<br />

2 → 1,<br />

3 → 2,<br />

4 → 3,<br />

5 → 4,<br />

6 → 5,<br />

7 → 6,<br />

8 → 7,<br />

9 → 8,<br />

10 → 9<br />

end,<br />

equalsText : Text × Text → Bool<br />

equalsText(t1, t2) ≡ t1 = t2,<br />

emptyAccess : Unit → Access ∗<br />

emptyAccess() ≡<br />

tl 〈AccessValueOrVariableName(<br />

mk_ValueOrVariableName(mk_Id( ′′ DUMMY ′′ )))〉,<br />

isinAccess : Access × Access ∗ → Bool<br />

isinAccess(a, al) ≡<br />

if al = 〈〉 then false<br />

else<br />

if getHeadTextAccess(al) = getTextAccess(a)<br />

then true<br />

else isinAccess(a, tl al)<br />

end<br />

end,<br />

getHeadTextAccess : Access ∗ → Text<br />

getHeadTextAccess(al) ≡ getTextAccess(hd al),<br />

getTextAccess : Access → Text<br />

470

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

Saved successfully!

Ooh no, something went wrong!