diff --git a/plugins/org.etsi.mts.tdl.graphical.labels.data/src/org/etsi/mts/tdl/graphical/labels/Data.xtext b/plugins/org.etsi.mts.tdl.graphical.labels.data/src/org/etsi/mts/tdl/graphical/labels/Data.xtext index ef5b52061aacaf38bba1ed7d8a623a6127aec239..48cfb0b756dc14266cd87a4d5cf87ede0393312e 100644 --- a/plugins/org.etsi.mts.tdl.graphical.labels.data/src/org/etsi/mts/tdl/graphical/labels/Data.xtext +++ b/plugins/org.etsi.mts.tdl.graphical.labels.data/src/org/etsi/mts/tdl/graphical/labels/Data.xtext @@ -48,18 +48,22 @@ EString returns ecore::EString: DataInstanceUse returns DataInstanceUse: dataInstance=[DataInstance|EString] ('(' argument+=ParameterBinding ( "," argument+=ParameterBinding)* ')' )? - ('.' reduction+=[Member|EString])* + ('.' reduction+=MemberReference)* //TODO: if for some reason the data instance use does have a name //it will cause problems... same applies for other scenarios //TODO: create a more elegant way to handle that gracefully) //(name=EString)? ; +MemberReference returns MemberReference: + member=[Member|EString] +; + FormalParameterUse returns FormalParameterUse: parameter=[FormalParameter|EString] ('(' argument+=ParameterBinding ( "," argument+=ParameterBinding)* ')' )? - ( "." reduction+=[Member|EString])* + ( "." reduction+=MemberReference)* ; FunctionCall returns FunctionCall: @@ -67,7 +71,7 @@ FunctionCall returns FunctionCall: '(' (argument+=ParameterBinding ( "," argument+=ParameterBinding)*)? ')' - ('.' reduction+=[Member|EString])* + ('.' reduction+=MemberReference)* ; VariableUse returns VariableUse: @@ -75,7 +79,7 @@ VariableUse returns VariableUse: '->' variable=[Variable|EString] ('(' argument+=ParameterBinding ( "," argument+=ParameterBinding)* ')' )? - ("." reduction+=[Member|EString])* + ("." reduction+=MemberReference)* ; TimeLabelUse returns TimeLabelUse: @@ -518,7 +522,7 @@ Variable returns Variable: Interaction returns Message: sourceGate=[GateReference|EStringDot] ('sends' | isTrigger=Trigger) - argument+=DataUse + argument=DataUse 'to' target+=Target ( "," target+=Target)* ( @@ -540,7 +544,7 @@ Trigger returns ecore::EBoolean : Target returns Target: targetGate=[GateReference|EStringDot] - ('where it is' 'assigned' 'to' variable+=[Variable|EString])? + ('where it is' 'assigned' 'to' variable=[Variable|EString])? ( 'with' '{' @@ -600,11 +604,17 @@ Behaviour returns Behaviour: ; Block returns Block: - ('[' guard=DataUse ']')? + ('[' guard+=LocalExpression ']')? '{' behaviour+=Behaviour ( behaviour+=Behaviour)* '}' ; + +LocalExpression returns LocalExpression: + expression=DataUse +; + + CompoundBehaviour returns CompoundBehaviour: block=Block ; @@ -634,7 +644,7 @@ TimerStart returns TimerStart: BoundedLoopBehaviour returns BoundedLoopBehaviour: 'repeat' - numIteration=DataUse + numIteration+=LocalExpression 'times' // 'from' startValue=DataInstanceSpecification // 'to' endValue=DataInstanceSpecification