Transformation of Applicative Specifications into Imperative ...

Transformation of Applicative Specifications into Imperative ... Transformation of Applicative Specifications into Imperative ...

26.09.2013 Views

APPENDIX C. FORMAL SPECIFICATIONS OF TRANSFORMATIONS if pl = 〈〉 then (true, env, types) else let (b, env1, types1) = CheckPattern(hd pl, func, trans, env, types) in if b then CheckPatternList( tl pl, func, trans, env1, types1) else (false, env1, types) end end end, /∗Checks for transformability of a list pattern. ∗/ /∗ Arguments: ======= lp: the list pattern Results: ======= Bool: true if the lis pattern can be transformed, false otherwise ∗/ CheckListPattern : ListPattern × FUNC × TRANS × ENV × TYPES → Bool × ENV × TYPES CheckListPattern(lp, func, trans, env, types) ≡ case lp of Make_EnumeratedListPattern(elp) → CheckOptInnerPattern( inner_pattern(elp), func, trans, env, types), ConcatenatedListPattern(elp, p) → let (b1, env1, types1) = CheckOptInnerPattern( inner_pattern(elp), func, trans, env, types), (b2, env2, types2) = CheckPattern(p, func, trans, env1, types1) in (b1 ∧ b2, env2, types2) 182

C.1. FORMAL SPECIFICATION OF THE TRANSFORMER end, end /∗Checks for transformability of a optional inner pattern.∗/ /∗ Arguments: ======= oip: optional inner pattern Results: ======= Bool: true if the optional inner pattern can be transformed, false otherwise ∗/ CheckOptInnerPattern : OptionalInnerPattern × FUNC × TRANS × ENV × TYPES → Bool × ENV × TYPES CheckOptInnerPattern(oip, func, trans, env, types) ≡ case oip of InnerPatternList(pl) → CheckPatternList(pl, func, trans, env, types), NoInnerPattern → (true, env, types) end, /∗Match a type expression against a let binding. ∗/ /∗ Arguments: ======= lb: the let binding te: the type expression Results: ======= Bool: true if the let binding an the type expression can be matched, false otherwise ∗/ matchBindingTE : LetBinding × TypeExpr → Bool matchBindingTE(lb, te) ≡ getLengthLetBinding(lb) ≥ getLengthTE(te), /∗Transforms a value definition list.∗/ /∗ Arguments: ======= 183

APPENDIX C. FORMAL SPECIFICATIONS OF TRANSFORMATIONS<br />

if pl = 〈〉 then (true, env, types)<br />

else<br />

let<br />

(b, env1, types1) =<br />

CheckPattern(hd pl, func, trans, env, types)<br />

in<br />

if b<br />

then<br />

CheckPatternList(<br />

tl pl, func, trans, env1, types1)<br />

else (false, env1, types)<br />

end<br />

end<br />

end,<br />

/∗Checks for transformability <strong>of</strong> a list pattern.<br />

∗/<br />

/∗<br />

Arguments:<br />

=======<br />

lp: the list pattern<br />

Results:<br />

=======<br />

Bool: true if the lis pattern can be transformed,<br />

false otherwise<br />

∗/<br />

CheckListPattern :<br />

ListPattern × FUNC × TRANS × ENV × TYPES →<br />

Bool × ENV × TYPES<br />

CheckListPattern(lp, func, trans, env, types) ≡<br />

case lp <strong>of</strong><br />

Make_EnumeratedListPattern(elp) →<br />

CheckOptInnerPattern(<br />

inner_pattern(elp), func, trans, env, types),<br />

ConcatenatedListPattern(elp, p) →<br />

let<br />

(b1, env1, types1) =<br />

CheckOptInnerPattern(<br />

inner_pattern(elp), func, trans, env,<br />

types),<br />

(b2, env2, types2) =<br />

CheckPattern(p, func, trans, env1, types1)<br />

in<br />

(b1 ∧ b2, env2, types2)<br />

182

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

Saved successfully!

Ooh no, something went wrong!