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 TypeDef == SortDef(sd_id : Id) | VariantDef(id : Id, variant_list : Variant ∗ ) | UnionDef( ud_id : Id, name_or_wildcard_list : NameOrWildcard ∗ ) | ShortRecordDef( srd_id : Id, component_kind_string : ComponentKind ∗ ) | AbbreviationDef(abbr_id : Id, type_expr : TypeExpr), Variant == Make_Constructor(constructor : Constructor) | RecordVariant( record_constructor : Constructor, component_kind_list : ComponentKind ∗ ), Constructor :: id : Id, ComponentKind :: optional_destructor : OptionalDestructor type_expr : TypeExpr optional_reconstructor : OptionalReconstructor, OptionalDestructor == Destructor(id : Id) | NoDestructor, OptionalReconstructor == Reconstructor(id : Id) | NoReconstructor, NameOrWildcard == Name(var : ValueOrVariableName) | Wildcard, /∗Value Definitions∗/ ValueDef == ExplicitValueDef( single_typing : SingleTyping, value_expr : ValueExpr) | ExplicitFunctionDef( fun_single_typing : SingleTyping, formal_function_application : FormalFunctionApplication, fun_value_expr : ValueExpr, pre_cond : OptionalPreCondition), OptionalPreCondition == PreCondition(cond : ValueExpr) | NoPreCondition, Typing == Make_SingleTyping(single_typing : SingleTyping) | Make_MultipleTyping(multiple_typing : MultipleTyping), SingleTyping :: 302

D.1. FORMAL SPECIFICATION OF THE RSL AST binding : Binding type_expr : TypeExpr, MultipleTyping :: binding_list : Binding ∗ type_expr : TypeExpr, FormalFunctionApplication == IdApplication( id : Id, formal_function_parameter : FormalFunctionParameter), FormalFunctionParameter :: binding_list : Binding ∗ , Binding == IdBinding(id : Id) | Make_ProductBinding(prod_binding : ProductBinding), ProductBinding :: binding_list : Binding ∗ , /∗Variable Definitions∗/ VariableDef == SingleVariableDef( id : Id, type_expr : TypeExpr, optional_initialisation : OptionalInitialisation) | MultipleVariableDef( id_list : Id ∗ , m_type_expr : TypeExpr), OptionalInitialisation == Initialisation(value_expr : ValueExpr) | NoInitialisation, /∗Test Definitions∗/ TestDef == TestCase(id : Id, value_expr : ValueExpr), /∗Type Expressions∗/ TypeExpr == TypeLiteral(type_literal : TypeLiterals) | TypeName(id : Id) | TypeExprProduct(component_list : TypeExpr ∗ ) | TypeExprSet(type_expr_set : TypeExprSets) | TypeExprList(type_expr_list : TypeExprLists) | TypeExprMap(type_expr_map : TypeExprMaps) | FunctionTypeExpr( type_expr_argument : TypeExpr, function_arrow : FunctionArrow, type_expr_result : ResultDesc) | SubtypeExpr( single_typing : SingleTyping, restriction : ValueExpr) | 303

D.1. FORMAL SPECIFICATION OF THE RSL AST<br />

binding : Binding type_expr : TypeExpr,<br />

MultipleTyping ::<br />

binding_list : Binding ∗ type_expr : TypeExpr,<br />

FormalFunctionApplication ==<br />

IdApplication(<br />

id : Id,<br />

formal_function_parameter :<br />

FormalFunctionParameter),<br />

FormalFunctionParameter :: binding_list : Binding ∗ ,<br />

Binding ==<br />

IdBinding(id : Id) |<br />

Make_ProductBinding(prod_binding : ProductBinding),<br />

ProductBinding :: binding_list : Binding ∗ ,<br />

/∗Variable Definitions∗/<br />

VariableDef ==<br />

SingleVariableDef(<br />

id : Id,<br />

type_expr : TypeExpr,<br />

optional_initialisation : OptionalInitialisation) |<br />

MultipleVariableDef(<br />

id_list : Id ∗ , m_type_expr : TypeExpr),<br />

OptionalInitialisation ==<br />

Initialisation(value_expr : ValueExpr) |<br />

NoInitialisation,<br />

/∗Test Definitions∗/<br />

TestDef == TestCase(id : Id, value_expr : ValueExpr),<br />

/∗Type Expressions∗/<br />

TypeExpr ==<br />

TypeLiteral(type_literal : TypeLiterals) |<br />

TypeName(id : Id) |<br />

TypeExprProduct(component_list : TypeExpr ∗ ) |<br />

TypeExprSet(type_expr_set : TypeExprSets) |<br />

TypeExprList(type_expr_list : TypeExprLists) |<br />

TypeExprMap(type_expr_map : TypeExprMaps) |<br />

FunctionTypeExpr(<br />

type_expr_argument : TypeExpr,<br />

function_arrow : FunctionArrow,<br />

type_expr_result : ResultDesc) |<br />

SubtypeExpr(<br />

single_typing : SingleTyping,<br />

restriction : ValueExpr) |<br />

303

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

Saved successfully!

Ooh no, something went wrong!