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 ∗/ makeTYPINGSEntrance : TypeDef → TYPINGS makeTYPINGSEntrance(td) ≡ case td of SortDef(id) → [ id ↦→ 〈〉 ], VariantDef(id, vl) → [ id ↦→ getTYPINGSVariantList(vl) ], ShortRecordDef(id, ckl) → [ id ↦→ getTYPINGSComponentKindList(ckl) ], AbbreviationDef(id, te) → [ id ↦→ getTYPINGSTypeExpr(te) ] end, /∗Gets an id list to the TYPINGS map from a variant list.∗/ /∗ Arguments: ======= vl: the variant list Results: ===== Id_list: the resulting list of ids ∗/ getTYPINGSVariantList : Variant ∗ → Id ∗ getTYPINGSVariantList(vl) ≡ if vl = 〈〉 then 〈〉 else removeDupletsId( getTYPINGSVariant(hd vl) getTYPINGSVariantList(tl vl)) end, /∗Gets an id list to the TYPINGS map from a variant. ∗/ /∗ Arguments: ======= v: the variant Results: ===== Id_list: the resulting list of ids ∗/ getTYPINGSVariant : Variant → Id ∗ getTYPINGSVariant(v) ≡ 282

C.1. FORMAL SPECIFICATION OF THE TRANSFORMER case v of Make_Constructor(c) → 〈〉, RecordVariant(c, ckl) → getTYPINGSComponentKindList(ckl) end, /∗Gets an id list to the TYPINGS map from a component kind list.∗/ /∗ Arguments: ======= ckl: the component kind list Results: ===== Id_list: the resulting list of ids ∗/ getTYPINGSComponentKindList : ComponentKind ∗ → Id ∗ getTYPINGSComponentKindList(ckl) ≡ if ckl = 〈〉 then 〈〉 else removeDupletsId( getTYPINGSTypeExpr(type_expr(hd ckl)) getTYPINGSComponentKindList(tl ckl)) end, /∗Gets an id list to the TYPINGS map from a name or wildcard list.∗/ /∗ Arguments: ======= nwl: the name or wildcard list Results: ===== Id_list: the resulting list of ids ∗/ getTYPINGSNameWildcardList : NameOrWildcard ∗ → Id ∗ getTYPINGSNameWildcardList(nwl) ≡ if nwl = 〈〉 then 〈〉 else removeDupletsId( getTYPINGSNameWildcard(hd nwl) getTYPINGSNameWildcardList(tl nwl)) 283

APPENDIX C. FORMAL SPECIFICATIONS OF TRANSFORMATIONS<br />

∗/<br />

makeTYPINGSEntrance : TypeDef → TYPINGS<br />

makeTYPINGSEntrance(td) ≡<br />

case td <strong>of</strong><br />

SortDef(id) → [ id ↦→ 〈〉 ],<br />

VariantDef(id, vl) →<br />

[ id ↦→ getTYPINGSVariantList(vl) ],<br />

ShortRecordDef(id, ckl) →<br />

[ id ↦→ getTYPINGSComponentKindList(ckl) ],<br />

AbbreviationDef(id, te) →<br />

[ id ↦→ getTYPINGSTypeExpr(te) ]<br />

end,<br />

/∗Gets an id list to the TYPINGS map from a variant<br />

list.∗/<br />

/∗<br />

Arguments:<br />

=======<br />

vl: the variant list<br />

Results:<br />

=====<br />

Id_list: the resulting list <strong>of</strong> ids<br />

∗/<br />

getTYPINGSVariantList : Variant ∗ → Id ∗<br />

getTYPINGSVariantList(vl) ≡<br />

if vl = 〈〉 then 〈〉<br />

else<br />

removeDupletsId(<br />

getTYPINGSVariant(hd vl) <br />

getTYPINGSVariantList(tl vl))<br />

end,<br />

/∗Gets an id list to the TYPINGS map from a variant.<br />

∗/<br />

/∗<br />

Arguments:<br />

=======<br />

v: the variant<br />

Results:<br />

=====<br />

Id_list: the resulting list <strong>of</strong> ids<br />

∗/<br />

getTYPINGSVariant : Variant → Id ∗<br />

getTYPINGSVariant(v) ≡<br />

282

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

Saved successfully!

Ooh no, something went wrong!