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 TROptPreCondition( precond, Known(TypeLiteral(BOOL)), func, trans, alterTYPESMap( typesMap( TRFormalFuncAppl( ffa, func, trans)), letdefList( TRFormalFuncAppl( ffa, func, trans))) )))), preCond( TROptPreCondition( precond, Known(TypeLiteral(BOOL)), func, trans, alterTYPESMap( typesMap( TRFormalFuncAppl( ffa, func, trans)), letdefList( TRFormalFuncAppl( ffa, func, trans)))))) else ExplicitFunctionDef( TRSingleTyping(st, func, trans), formalfa( TRFormalFuncAppl(ffa, func, trans)), LetExpr( letdefList( TRFormalFuncAppl(ffa, func, trans) ), valueExpr( TRValueExpr( ve, Known(type_expr(res)), func, trans, typesMap( TROptPreCondition( precond, Known(TypeLiteral(BOOL)), func, trans, alterTYPESMap( typesMap( 358

D.2. FORMAL SPECIFICATION OF THE TRANSFORMER IN RSL1 end, end end TRFormalFuncAppl( ffa, func, trans )), letdefList( TRFormalFuncAppl( ffa, func, trans )))))))), preCond( TROptPreCondition( precond, Known(TypeLiteral(BOOL)), func, trans, alterTYPESMap( typesMap( TRFormalFuncAppl( ffa, func, trans)), letdefList( TRFormalFuncAppl( ffa, func, trans)))))) TRSingleTyping : SingleTyping × FUNC × TRANS → SingleTyping TRSingleTyping(st, func, trans) ≡ case binding(st) of IdBinding(id) → mk_SingleTyping( binding(st), TRTypeExpr(id, type_expr(st), func, trans)) end, TRTypeExpr : Id × TypeExpr × FUNC × TRANS → TypeExpr TRTypeExpr(id, te, func, trans) ≡ case te of TypeLiteral(literal) → te, TypeName(tid) → if isinId(tid, domainTRANS(trans)) then /∗Type expression of a type of interest.∗/ TypeLiteral(UNIT) else 359

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

end,<br />

end<br />

end<br />

TRFormalFuncAppl(<br />

ffa, func, trans<br />

)),<br />

letdefList(<br />

TRFormalFuncAppl(<br />

ffa, func, trans<br />

)))))))),<br />

preCond(<br />

TROptPreCondition(<br />

precond,<br />

Known(TypeLiteral(BOOL)), func,<br />

trans,<br />

alterTYPESMap(<br />

typesMap(<br />

TRFormalFuncAppl(<br />

ffa, func, trans)),<br />

letdefList(<br />

TRFormalFuncAppl(<br />

ffa, func, trans))))))<br />

TRSingleTyping :<br />

SingleTyping × FUNC × TRANS → SingleTyping<br />

TRSingleTyping(st, func, trans) ≡<br />

case binding(st) <strong>of</strong><br />

IdBinding(id) →<br />

mk_SingleTyping(<br />

binding(st),<br />

TRTypeExpr(id, type_expr(st), func, trans))<br />

end,<br />

TRTypeExpr :<br />

Id × TypeExpr × FUNC × TRANS → TypeExpr<br />

TRTypeExpr(id, te, func, trans) ≡<br />

case te <strong>of</strong><br />

TypeLiteral(literal) → te,<br />

TypeName(tid) →<br />

if isinId(tid, domainTRANS(trans))<br />

then<br />

/∗Type expression <strong>of</strong> a type <strong>of</strong> interest.∗/<br />

TypeLiteral(UNIT)<br />

else<br />

359

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

Saved successfully!

Ooh no, something went wrong!