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 end end else getAccessGenList( idset, vl, expTypeToExpTypeList( removeBrackets(et), lengthVE(vl)), func, trans) end, → getAccessGenList( idset, vl, expTypeToExpTypeList( removeBrackets(et), lengthVE(vl)), func, trans) end, BracketedExpr(bve) → getAccessGen(idset, bve, et, func, trans), ValueInfixExpr(first, op, second) → getAccessGenList( idset, 〈first, second〉, 〈Unknown, Unknown〉, func, trans), ValuePrefixExpr(op, operand) → getAccessGen( idset, operand, Unknown, func, trans), LetExpr(ldl, lve) → mk_AccessResult( removeDuplets( accessList( getAccessGenLetDefList( idset, ldl, func, trans)) accessList( getAccessGen( accessIdSet( getAccessGenLetDefList( idset, ldl, func, trans)), lve, et, func, trans))), accessIdSet( getAccessGen( accessIdSet( getAccessGenLetDefList( idset, ldl, func, trans)), lve, et, func, trans))), Make_IfExpr(ie) → 436

D.2. FORMAL SPECIFICATION OF THE TRANSFORMER IN RSL1 getAccessGenListList( idset, ifExprToList(ie), 〈Known(TypeLiteral(BOOL))〉 elsifToTypeList(elsif_list(ie), et) 〈et〉, func, trans), CaseExpr(cond, cbl) → mk_AccessResult( removeDuplets( accessList( getAccessGen( idset, cond, Known(TypeLiteral(BOOL)), func, trans )) accessList( getAccessGenCaseBranch( accessIdSet( getAccessGen( idset, cond, Known(TypeLiteral(BOOL)), func, trans)), cbl, et, func, trans))), accessIdSet( getAccessGenCaseBranch( accessIdSet( getAccessGen( idset, cond, Known(TypeLiteral(BOOL)), func, trans)), cbl, et, func, trans))) end, getAssignExpr : ValueExpr × ExpType × TRANS → Access ∗ getAssignExpr(ve, et, trans) ≡ case et of Known(te) → case te of TypeName(tn) → if isinId(tn, domainTRANS(trans)) then /∗Type of interest.∗/ 〈AccessValueOrVariableName( mk_ValueOrVariableName(tn))〉 else /∗Not type of interest.∗/ 437

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

getAccessGenListList(<br />

idset, ifExprToList(ie),<br />

〈Known(TypeLiteral(BOOL))〉 <br />

elsifToTypeList(elsif_list(ie), et) 〈et〉,<br />

func, trans),<br />

CaseExpr(cond, cbl) →<br />

mk_AccessResult(<br />

removeDuplets(<br />

accessList(<br />

getAccessGen(<br />

idset, cond,<br />

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

)) <br />

accessList(<br />

getAccessGenCaseBranch(<br />

accessIdSet(<br />

getAccessGen(<br />

idset, cond,<br />

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

func, trans)), cbl, et, func,<br />

trans))),<br />

accessIdSet(<br />

getAccessGenCaseBranch(<br />

accessIdSet(<br />

getAccessGen(<br />

idset, cond,<br />

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

trans)), cbl, et, func, trans)))<br />

end,<br />

getAssignExpr :<br />

ValueExpr × ExpType × TRANS → Access ∗<br />

getAssignExpr(ve, et, trans) ≡<br />

case et <strong>of</strong><br />

Known(te) →<br />

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

TypeName(tn) →<br />

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

then<br />

/∗Type <strong>of</strong> interest.∗/<br />

〈AccessValueOrVariableName(<br />

mk_ValueOrVariableName(tn))〉<br />

else<br />

/∗Not type <strong>of</strong> interest.∗/<br />

437

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

Saved successfully!

Ooh no, something went wrong!