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 Results: ===== VariableDef_list: the resulting variable definition list ∗/ makeVariableDeclList : TRANS → VariableDef ∗ makeVariableDeclList(trans) ≡ if trans = [ ] then 〈〉 else 〈makeVariableDef(hd trans, trans)〉 makeVariableDeclList(trans \ {hd trans}) end, /∗Makes a variable definition from a type name id.∗/ /∗ Arguments: ======= typename: the type name id Results: ===== VariableDef: the resulting variable definition ∗/ makeVariableDef : Id × TRANS → VariableDef makeVariableDef(typename, trans) ≡ SingleVariableDef( trans(typename), TypeName(typename), NoInitialisation), /∗Transforms a type declaration if possible.∗/ /∗ Arguments: ======= tdl: the type declaration Results: ===== DResult: the result of the transformation ∗/ TRTypeDecl : TypeDef ∗ × TYPINGS × FUNC × TRANS → DResult TRTypeDecl(tdl, typings, func, trans) ≡ if CheckTypeDefList(tdl, typings, func, trans) then Transformable(TypeDecl(tdl)) else Not_transformable 146

C.1. FORMAL SPECIFICATION OF THE TRANSFORMER end, /∗Checks for transformability of a type definfition list.∗/ /∗ Arguments: ======= tdl: the list of type definitions Results: ===== Bool: true if the list is transformable, false otherwise ∗/ CheckTypeDefList : TypeDef ∗ × TYPINGS × FUNC × TRANS → Bool CheckTypeDefList(tdl, typings, func, trans) ≡ if tdl = 〈〉 then true else CheckTypeDef(hd tdl, typings, func, trans) ∧ CheckTypeDefList(tl tdl, typings, func, trans) end, /∗Checks for transformability of a type definfition. ∗/ /∗ Arguments: ======= td: the type definition Results: ===== Bool: true if the type definition is transformable, false otherwise ∗/ CheckTypeDef : TypeDef × TYPINGS × FUNC × TRANS → Bool CheckTypeDef(td, typings, func, trans) ≡ case td of SortDef(id) → id ∈ dom trans, VariantDef(id, vl) → CheckVariantList(id, vl, typings, func, trans) ∧ id ∈ elems typings(id), ShortRecordDef(id, cl) → CheckComponentKindList( id, cl, typings, func, trans) ∧ 147

APPENDIX C. FORMAL SPECIFICATIONS OF TRANSFORMATIONS<br />

Results:<br />

=====<br />

VariableDef_list: the resulting variable definition<br />

list<br />

∗/<br />

makeVariableDeclList : TRANS → VariableDef ∗<br />

makeVariableDeclList(trans) ≡<br />

if trans = [ ] then 〈〉<br />

else<br />

〈makeVariableDef(hd trans, trans)〉 <br />

makeVariableDeclList(trans \ {hd trans})<br />

end,<br />

/∗Makes a variable definition from a type name<br />

id.∗/<br />

/∗<br />

Arguments:<br />

=======<br />

typename: the type name id<br />

Results:<br />

=====<br />

VariableDef: the resulting variable definition<br />

∗/<br />

makeVariableDef : Id × TRANS → VariableDef<br />

makeVariableDef(typename, trans) ≡<br />

SingleVariableDef(<br />

trans(typename), TypeName(typename),<br />

NoInitialisation),<br />

/∗Transforms a type declaration if possible.∗/<br />

/∗<br />

Arguments:<br />

=======<br />

tdl: the type declaration<br />

Results:<br />

=====<br />

DResult: the result <strong>of</strong> the transformation<br />

∗/<br />

TRTypeDecl :<br />

TypeDef ∗ × TYPINGS × FUNC × TRANS → DResult<br />

TRTypeDecl(tdl, typings, func, trans) ≡<br />

if CheckTypeDefList(tdl, typings, func, trans)<br />

then Transformable(TypeDecl(tdl))<br />

else Not_transformable<br />

146

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

Saved successfully!

Ooh no, something went wrong!