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 DL_not_transformable → Class_not_transformable end, → Class_not_transformable end, TRDeclList : Decl ∗ × TYPINGS × FUNC × TRANS × Decl ∗ → DLResult TRDeclList(dl, typings, func, trans, dlres) ≡ if dl = 〈〉 then DL_transformable(dlres) else case TRDecl(hd dl, typings, func, trans) of Decl_transformable(decl) → TRDeclList( tl dl, typings, func, trans, dlres 〈decl〉), Decl_not_transformable → DL_not_transformable end end, TRDecl : Decl × TYPINGS × FUNC × TRANS → DeclResult TRDecl(d, typings, func, trans) ≡ case d of TypeDecl(tdl) → case TRTypeDecl(tdl, typings, func, trans) of Transformable(decl) → Decl_transformable(decl), Not_transformable → Decl_not_transformable end, ValueDecl(vd) → case TRValueDecl(vd, typings, func, trans) of Transformable(decl) → Decl_transformable(decl), Not_transformable → Decl_not_transformable end, → Decl_not_transformable end, makeVariables : Decl ∗ × TRANS → Decl ∗ makeVariables(decl, trans) ≡ if decl = 〈〉 then 〈VariableDecl(makeVariableDeclList(trans))〉 else 312

D.2. FORMAL SPECIFICATION OF THE TRANSFORMER IN RSL1 case hd decl of TypeDecl(tdl) → 〈hd decl〉 makeVariables(tl decl, trans), ValueDecl(vdl) → 〈VariableDecl(makeVariableDeclList(trans))〉 decl end end, makeVariableDeclList : TRANS → VariableDef ∗ makeVariableDeclList(trans) ≡ if getTRANSMapEntranceList(trans) = 〈〉 then 〈〉 else 〈makeVariableDef( first(getHeadTRANS(trans)), trans)〉 makeVariableDeclList( removeTRANS(trans, first(getHeadTRANS(trans)))) end, makeVariableDef : Id × TRANS → VariableDef makeVariableDef(typename, trans) ≡ SingleVariableDef( getMapValueTRANS(trans, typename), TypeName(typename), NoInitialisation), TRTypeDecl : TypeDef ∗ × TYPINGS × FUNC × TRANS → DResult TRTypeDecl(tdl, typings, func, trans) ≡ if CheckTypeDefList(tdl, typings, func, trans) then Transformable(TypeDecl(tdl)) else Not_transformable end, CheckTypeDefList : TypeDef ∗ × TYPINGS × FUNC × TRANS → Bool CheckTypeDefList(tdl, typings, func, trans) ≡ if tdl = 〈〉 then true else and( CheckTypeDef(hd tdl, typings, func, trans), CheckTypeDefList(tl tdl, typings, func, trans)) end, CheckTypeDef : 313

D.2. FORMAL SPECIFICATION OF THE TRANSFORMER IN RSL1<br />

case hd decl <strong>of</strong><br />

TypeDecl(tdl) →<br />

〈hd decl〉 makeVariables(tl decl, trans),<br />

ValueDecl(vdl) →<br />

〈VariableDecl(makeVariableDeclList(trans))〉 <br />

decl<br />

end<br />

end,<br />

makeVariableDeclList : TRANS → VariableDef ∗<br />

makeVariableDeclList(trans) ≡<br />

if getTRANSMapEntranceList(trans) = 〈〉 then 〈〉<br />

else<br />

〈makeVariableDef(<br />

first(getHeadTRANS(trans)), trans)〉 <br />

makeVariableDeclList(<br />

removeTRANS(trans, first(getHeadTRANS(trans))))<br />

end,<br />

makeVariableDef : Id × TRANS → VariableDef<br />

makeVariableDef(typename, trans) ≡<br />

SingleVariableDef(<br />

getMapValueTRANS(trans, typename),<br />

TypeName(typename), NoInitialisation),<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 />

end,<br />

CheckTypeDefList :<br />

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

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

if tdl = 〈〉 then true<br />

else<br />

and(<br />

CheckTypeDef(hd tdl, typings, func, trans),<br />

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

end,<br />

CheckTypeDef :<br />

313

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

Saved successfully!

Ooh no, something went wrong!