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 mk_TYPINGS( 〈mk_TYPINGSMapEntrance( id, getTYPINGSVariantList(vl))〉), ShortRecordDef(id, ckl) → mk_TYPINGS( 〈mk_TYPINGSMapEntrance( id, getTYPINGSComponentKindList(ckl))〉), AbbreviationDef(id, te) → mk_TYPINGS( 〈mk_TYPINGSMapEntrance( id, getTYPINGSTypeExpr(te))〉) end, getTYPINGSVariantList : Variant ∗ → Id ∗ getTYPINGSVariantList(vl) ≡ if vl = 〈〉 then emptyId() else removeDupletsId( getTYPINGSVariant(hd vl) getTYPINGSVariantList(tl vl)) end, getTYPINGSVariant : Variant → Id ∗ getTYPINGSVariant(v) ≡ case v of Make_Constructor(c) → 〈〉, RecordVariant(c, ckl) → getTYPINGSComponentKindList(ckl) end, getTYPINGSComponentKindList : ComponentKind ∗ → Id ∗ getTYPINGSComponentKindList(ckl) ≡ if ckl = 〈〉 then emptyId() else removeDupletsId( getTYPINGSTypeExpr(type_expr(hd ckl)) getTYPINGSComponentKindList(tl ckl)) end, getTYPINGSNameWildcardList : NameOrWildcard ∗ → Id ∗ getTYPINGSNameWildcardList(nwl) ≡ if nwl = 〈〉 then emptyId() 450

D.2. FORMAL SPECIFICATION OF THE TRANSFORMER IN RSL1 else removeDupletsId( getTYPINGSNameWildcard(hd nwl) getTYPINGSNameWildcardList(tl nwl)) end, getTYPINGSNameWildcard : NameOrWildcard → Id ∗ getTYPINGSNameWildcard(nw) ≡ case nw of Name(var) → 〈id(var)〉, Wildcard → 〈〉 end, getTYPINGSTypeExpr : TypeExpr → Id ∗ getTYPINGSTypeExpr(te) ≡ case te of TypeLiteral(tn) → 〈〉, TypeName(id) → 〈id〉, TypeExprProduct(tep) → getTYPINGSTypeExprList(tep), TypeExprSet(tes) → case tes of FiniteSetTypeExpr(fse) → getTYPINGSTypeExpr(fse), InfiniteSetTypeExpr(ise) → getTYPINGSTypeExpr(ise) end, TypeExprList(les) → case les of FiniteListTypeExpr(fle) → getTYPINGSTypeExpr(fle), InfiniteListTypeExpr(ile) → getTYPINGSTypeExpr(ile) end, TypeExprMap(tem) → case tem of FiniteMapTypeExpr(tedom, terange) → removeDupletsId( getTYPINGSTypeExpr(tedom) getTYPINGSTypeExpr(terange)), InfiniteMapTypeExpr(tedom, terange) → removeDupletsId( getTYPINGSTypeExpr(tedom) getTYPINGSTypeExpr(terange)) 451

APPENDIX D. SPECIFICATION OF TRANSFORMER IN RSL1<br />

mk_TYPINGS(<br />

〈mk_TYPINGSMapEntrance(<br />

id, getTYPINGSVariantList(vl))〉),<br />

ShortRecordDef(id, ckl) →<br />

mk_TYPINGS(<br />

〈mk_TYPINGSMapEntrance(<br />

id, getTYPINGSComponentKindList(ckl))〉),<br />

AbbreviationDef(id, te) →<br />

mk_TYPINGS(<br />

〈mk_TYPINGSMapEntrance(<br />

id, getTYPINGSTypeExpr(te))〉)<br />

end,<br />

getTYPINGSVariantList : Variant ∗ → Id ∗<br />

getTYPINGSVariantList(vl) ≡<br />

if vl = 〈〉 then emptyId()<br />

else<br />

removeDupletsId(<br />

getTYPINGSVariant(hd vl) <br />

getTYPINGSVariantList(tl vl))<br />

end,<br />

getTYPINGSVariant : Variant → Id ∗<br />

getTYPINGSVariant(v) ≡<br />

case v <strong>of</strong><br />

Make_Constructor(c) → 〈〉,<br />

RecordVariant(c, ckl) →<br />

getTYPINGSComponentKindList(ckl)<br />

end,<br />

getTYPINGSComponentKindList :<br />

ComponentKind ∗ → Id ∗<br />

getTYPINGSComponentKindList(ckl) ≡<br />

if ckl = 〈〉 then emptyId()<br />

else<br />

removeDupletsId(<br />

getTYPINGSTypeExpr(type_expr(hd ckl)) <br />

getTYPINGSComponentKindList(tl ckl))<br />

end,<br />

getTYPINGSNameWildcardList :<br />

NameOrWildcard ∗ → Id ∗<br />

getTYPINGSNameWildcardList(nwl) ≡<br />

if nwl = 〈〉 then emptyId()<br />

450

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

Saved successfully!

Ooh no, something went wrong!