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 BracketedExpr(bve) → let (b, env ′ , types ′ ) = CheckValueExpr( bve, Unknown, typings, func, trans, env, types) in (b, updateENV(env ′ , et, trans), types ′ ) end, ValueInfixExpr(first, op, second) → let (b, env ′ , types ′ ) = CheckValueExprList( 〈first, second〉, 〈Unknown, Unknown〉, typings, func, trans, env, types) in (b, updateENV(env ′ , et, trans), types ′ ) end, ValuePrefixExpr(op, operand) → let (b, env ′ , types ′ ) = CheckValueExpr( operand, Unknown, typings, func, trans, env, types) in (b, updateENV(env ′ , et, trans), types ′ ) end, LetExpr(ldl, lve) → let (b, env ′ , types ′ ) = CheckLetDefList( ldl, typings, func, trans, env, types), (b ′ , env ′′ , types ′′ ) = CheckValueExpr( lve, et, typings, func, trans, env ′ , types ′ ) in (b ∧ b ′ , env ′′ , types ′′ ) end, Make_IfExpr(ie) → CheckIfExpr( ie, et, typings, func, trans, env, types), CaseExpr(cond, cbl) → let 164

C.1. FORMAL SPECIFICATION OF THE TRANSFORMER end, (b, env ′ , types ′ ) = CheckValueExpr( cond, Unknown, typings, func, trans, env, types), (b ′ , env ′′ , types ′′ ) = CheckCaseBranchList( cbl, et, typings, func, trans, env ′ , types ′ ) in (b ∧ b ′ , env ′′ , types ′′ ) end /∗Checks for transformability of a list of value expressions.∗/ /∗ Arguments: ======= vel: the list of value expressions etl: the list of the corresponding expected types of the value expressions Results: ===== Bool: true if the list is transformable, false otherwise ∗/ CheckValueExprList : ValueExpr ∗ × ExpType ∗ × TYPINGS × FUNC × TRANS × ENV × TYPES → Bool × ENV × TYPES CheckValueExprList( vel, etl, typings, func, trans, env, types) ≡ if vel = 〈〉 then (true, env, types) else let (b, env ′ , types ′ ) = CheckValueExpr( hd vel, hd etl, typings, func, trans, env, types) in if ∼ b then (b, env ′ , types ′ ) else CheckValueExprList( tl vel, tl etl, typings, func, trans, env ′ , 165

APPENDIX C. FORMAL SPECIFICATIONS OF TRANSFORMATIONS<br />

BracketedExpr(bve) →<br />

let<br />

(b, env ′ , types ′ ) =<br />

CheckValueExpr(<br />

bve, Unknown, typings, func, trans, env,<br />

types)<br />

in<br />

(b, updateENV(env ′ , et, trans), types ′ )<br />

end,<br />

ValueInfixExpr(first, op, second) →<br />

let<br />

(b, env ′ , types ′ ) =<br />

CheckValueExprList(<br />

〈first, second〉, 〈Unknown, Unknown〉,<br />

typings, func, trans, env, types)<br />

in<br />

(b, updateENV(env ′ , et, trans), types ′ )<br />

end,<br />

ValuePrefixExpr(op, operand) →<br />

let<br />

(b, env ′ , types ′ ) =<br />

CheckValueExpr(<br />

operand, Unknown, typings, func, trans,<br />

env, types)<br />

in<br />

(b, updateENV(env ′ , et, trans), types ′ )<br />

end,<br />

LetExpr(ldl, lve) →<br />

let<br />

(b, env ′ , types ′ ) =<br />

CheckLetDefList(<br />

ldl, typings, func, trans, env, types),<br />

(b ′ , env ′′ , types ′′ ) =<br />

CheckValueExpr(<br />

lve, et, typings, func, trans, env ′ ,<br />

types ′ )<br />

in<br />

(b ∧ b ′ , env ′′ , types ′′ )<br />

end,<br />

Make_IfExpr(ie) →<br />

CheckIfExpr(<br />

ie, et, typings, func, trans, env, types),<br />

CaseExpr(cond, cbl) →<br />

let<br />

164

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

Saved successfully!

Ooh no, something went wrong!