|
@@ -2,86 +2,25 @@ include "primitives.alh"
|
|
|
include "object_operations.alh"
|
|
|
include "modelling.alh"
|
|
|
|
|
|
-SimpleAttribute Neutral {}
|
|
|
-SimpleAttribute Boolean {
|
|
|
- constraint = $
|
|
|
- String function constraint(model: Element, id: String):
|
|
|
- if (bool_not(is_physical_boolean(model["model"][id]))):
|
|
|
- return "Boolean has no boolean value at " + id!
|
|
|
- else:
|
|
|
- return "OK"!
|
|
|
- $
|
|
|
-}
|
|
|
-SimpleAttribute String {
|
|
|
- constraint = $
|
|
|
- String function constraint(model: Element, id: String):
|
|
|
- if (bool_not(is_physical_string(model["model"][id]))):
|
|
|
- return "String has no string value at " + id!
|
|
|
- else:
|
|
|
- return "OK"!
|
|
|
- $
|
|
|
-}
|
|
|
-SimpleAttribute Natural {
|
|
|
- constraint =$
|
|
|
- String function constraint(model: Element, id: String):
|
|
|
- if (bool_not(is_physical_int(model["model"][id]))):
|
|
|
- return "Natural has no integer value at " + id!
|
|
|
- elif (integer_lt(model["model"][id], 0)):
|
|
|
- return "Natural does not have a positive or zero value at " + id!
|
|
|
- else:
|
|
|
- return "OK"!
|
|
|
- $
|
|
|
-}
|
|
|
-SimpleAttribute PositiveFloat {
|
|
|
- constraint =$
|
|
|
- String function constraint(model: Element, id: String):
|
|
|
- if (bool_not(is_physical_float(model["model"][id]))):
|
|
|
- return "PositiveFloat has no float value at " + id!
|
|
|
- elif (integer_lt(model["model"][id], 0)):
|
|
|
- return "PositiveFloat does not have a positive or zero value at " + id!
|
|
|
- else:
|
|
|
- return "OK"!
|
|
|
- $
|
|
|
-}
|
|
|
-SimpleAttribute EventScope {
|
|
|
- constraint =$
|
|
|
- String function constraint(model: Element, id: String):
|
|
|
- String self
|
|
|
- self = model["model"][id]
|
|
|
- if (bool_not(is_physical_string(self))):
|
|
|
- return "EventScope has no string value at " + id!
|
|
|
- elif (bool_or(bool_or(bool_or(self != "broad", self != "cd"), bool_or(self != "narrow", self != "output")), self != 'local')):
|
|
|
- return "EventScope can be either 'local', 'broad', 'cd', 'narrow' or 'output' and it does not have a proper value at " + id!
|
|
|
- else:
|
|
|
- return "OK"!
|
|
|
- $
|
|
|
-}
|
|
|
+SimpleAttribute Action {}
|
|
|
+SimpleAttribute Boolean {}
|
|
|
+SimpleAttribute String {}
|
|
|
+SimpleAttribute Natural {}
|
|
|
|
|
|
Class Diagram{
|
|
|
name : String
|
|
|
- author ?: String
|
|
|
- description ?: String
|
|
|
- top ?: String
|
|
|
- class_reference_items ?: String
|
|
|
+ author : String
|
|
|
+ description : String
|
|
|
lower_cardinality = 1
|
|
|
upper_cardinality = 1
|
|
|
}
|
|
|
-Class Inport{
|
|
|
- name: String
|
|
|
-}
|
|
|
-Class Outport{
|
|
|
- name: String
|
|
|
-}
|
|
|
-Association diagram_inports(Diagram, Inport){}
|
|
|
-Association diagram_outports(Diagram, Outport){}
|
|
|
|
|
|
Class Class{
|
|
|
name : String
|
|
|
- constructor_body ?: String
|
|
|
- destructor ?: String
|
|
|
- default ?: Boolean
|
|
|
- external ?: Boolean
|
|
|
- class_behaviour_items ?: String
|
|
|
+ constructor_body? : Action
|
|
|
+ destructor? : Action
|
|
|
+ default : Boolean
|
|
|
+ external : Boolean
|
|
|
}
|
|
|
Association diagram_classes(Diagram, Class){
|
|
|
target_lower_cardinality = 1
|
|
@@ -89,97 +28,43 @@ Association diagram_classes(Diagram, Class){
|
|
|
|
|
|
Class Attribute{
|
|
|
name : String
|
|
|
- type ?: String
|
|
|
}
|
|
|
Association class_attributes(Class, Attribute){}
|
|
|
|
|
|
Class Method{
|
|
|
name : String
|
|
|
- body : String
|
|
|
- return_type ?: String
|
|
|
-}
|
|
|
-
|
|
|
-Class FormalParameter{
|
|
|
- name: String
|
|
|
- type ?: String
|
|
|
- default ?: String
|
|
|
-}
|
|
|
-Association method_parameters(Method, FormalParameter){}
|
|
|
-Association class_methods(Class, Method){}
|
|
|
-Association class_constructor_parameters(Class, FormalParameter){}
|
|
|
-
|
|
|
-Class CanvasPosition{
|
|
|
- x1: Natural
|
|
|
- y1: Natural
|
|
|
- x2 ?: Natural
|
|
|
- y2 ?: Natural
|
|
|
-}
|
|
|
-Association class_ref_position(Class, CanvasPosition){
|
|
|
- target_upper_cardinality = 1
|
|
|
-}
|
|
|
-Association class_beh_position(Class, CanvasPosition){
|
|
|
- target_upper_cardinality = 1
|
|
|
+ body : Action
|
|
|
}
|
|
|
|
|
|
Association association(Class, Class){
|
|
|
name : String
|
|
|
- min ?: Natural
|
|
|
- max ?: Natural
|
|
|
source_upper_cardinality = 1
|
|
|
}
|
|
|
-Association association_positions(association, CanvasPosition){
|
|
|
- order: Natural
|
|
|
-}
|
|
|
|
|
|
Association inheritance(Class, Class){
|
|
|
priority ?: Natural
|
|
|
source_upper_cardinality = 1
|
|
|
}
|
|
|
|
|
|
-Class SuperClassConstructorParameter{
|
|
|
- value : Neutral
|
|
|
-}
|
|
|
-Association inheritance_parent_constructor_parameters(inheritance, SuperClassConstructorParameter){
|
|
|
- order : Natural
|
|
|
-}
|
|
|
-Association inheritance_positions(inheritance, CanvasPosition){
|
|
|
- order: Natural
|
|
|
-}
|
|
|
-
|
|
|
Class State{
|
|
|
name : String
|
|
|
- state_reference_path ?: String
|
|
|
-}
|
|
|
-Association state_position(State, CanvasPosition){
|
|
|
- target_upper_cardinality = 1
|
|
|
}
|
|
|
|
|
|
Class BasicState : State{
|
|
|
isInitial : Boolean
|
|
|
- onEntryScript ?: String
|
|
|
- onExitScript ?: String
|
|
|
+ onEntryScript? : Action
|
|
|
+ onExitScript? : Action
|
|
|
}
|
|
|
|
|
|
Association behaviour(Class, BasicState){
|
|
|
target_lower_cardinality = 1
|
|
|
target_upper_cardinality = 1
|
|
|
}
|
|
|
-Association behaviour_positions(behaviour, CanvasPosition){
|
|
|
- order: Natural
|
|
|
-}
|
|
|
-
|
|
|
-Class ActualParameter{
|
|
|
- exp: String
|
|
|
-}
|
|
|
|
|
|
Class Raise{
|
|
|
- event: String
|
|
|
- scope ?: EventScope
|
|
|
- port ?: String
|
|
|
- target ?: String
|
|
|
-}
|
|
|
-Association raise_parameters(Raise, ActualParameter){
|
|
|
- order : Natural
|
|
|
+ event : String
|
|
|
+ scope? : String
|
|
|
+ target? : String
|
|
|
}
|
|
|
Association state_onentry_raises(BasicState, Raise){
|
|
|
order : Natural
|
|
@@ -204,67 +89,12 @@ Class HistoryState : State{
|
|
|
|
|
|
Association transition(State, State){
|
|
|
name: String
|
|
|
- cond ?: String
|
|
|
- script ?: String
|
|
|
- after ?: PositiveFloat
|
|
|
- event ?: String
|
|
|
- port ?: String
|
|
|
+ cond? : Action
|
|
|
+ script? : Action
|
|
|
+ after? : Action
|
|
|
+ event? : String
|
|
|
source_upper_cardinality = 1
|
|
|
}
|
|
|
-Association transition_parameters(transition, FormalParameter){
|
|
|
- order : Natural
|
|
|
-}
|
|
|
Association transition_raises(transition, Raise){
|
|
|
order : Natural
|
|
|
}
|
|
|
-Association transition_positions(transition, CanvasPosition){
|
|
|
- order: Natural
|
|
|
-}
|
|
|
-
|
|
|
-GlobalConstraint {
|
|
|
- global_constraint = $
|
|
|
- String function constraint(model : Element):
|
|
|
- Element composite_states
|
|
|
- Element parallel_states
|
|
|
- Element children
|
|
|
- String state
|
|
|
- String child
|
|
|
- String name
|
|
|
- Boolean CompInitialFound
|
|
|
- Element encountered_names
|
|
|
-
|
|
|
- composite_states = allInstances(model, "CompositeState")
|
|
|
- parallel_states = allInstances(model, "ParallelState")
|
|
|
-
|
|
|
- while (list_len(composite_states) >0):
|
|
|
- CompInitialFound = False
|
|
|
- encountered_names = create_node()
|
|
|
- state = set_pop(composite_states)
|
|
|
- children = allAssociationDestinations(model, state, "composite_children")
|
|
|
- while (list_len(children)>0):
|
|
|
- child = set_pop(children)
|
|
|
- name = read_attribute(model, child, 'name')
|
|
|
- if (set_in(encountered_names, name)):
|
|
|
- return "Unique state identifier names on the same level/parent violated"!
|
|
|
- else:
|
|
|
- set_add(encountered_names, name)
|
|
|
- if bool_and(read_type(model, child) != 'HistoryState' , read_attribute(model, child, 'isInitial')):
|
|
|
- CompInitialFound = True
|
|
|
- if CompInitialFound == False:
|
|
|
- return "Composite state does not have an initial child state"!
|
|
|
-
|
|
|
- while (list_len(parallel_states) >0):
|
|
|
- encountered_names = create_node()
|
|
|
- state = set_pop(parallel_states)
|
|
|
- children = allAssociationDestinations(model, state, "parallel_children")
|
|
|
- while (list_len(children)>0):
|
|
|
- child = set_pop(children)
|
|
|
- name = read_attribute(model, child, 'name')
|
|
|
- if (set_in(encountered_names, name)):
|
|
|
- return "Unique state identifier names on the same level/parent violated"!
|
|
|
- else:
|
|
|
- set_add(encountered_names, name)
|
|
|
-
|
|
|
- return "OK"!
|
|
|
- $
|
|
|
-}
|