Loading plugins/Prototypes/org.etsi.mts.tdl.tx/src/org/etsi/mts/tdl/TDLtx.xtext +111 −48 Original line number Diff line number Diff line Loading @@ -41,6 +41,7 @@ PackageableElement returns tdl::PackageableElement: | ComponentType | GateType | TestConfiguration | TestDescription | LocallyOrderedTestDescription ) WithCommentFragment? // | PredefinedAnnotationType Loading Loading @@ -69,8 +70,10 @@ ElementImport returns tdl::ElementImport: ) ) 'from' (importedPackage=[tdl::Package|Identifier] | importedPackage=[tdl::Package|QIdentifier] ( // importedPackage=[tdl::Package|Identifier] // | importedPackage=[tdl::Package|QIdentifier] ) WithCommentFragment? ; Loading Loading @@ -649,21 +652,22 @@ TimeOperation returns tdl::TimeOperation: ; Wait returns tdl::Wait: PrefixFragment? ( 'component' componentInstance=[tdl::ComponentInstance|Identifier]) 'waits' 'for' AtomicPrefixFragment? 'wait' 'for' period=DataUse ( 'on' componentInstance=[tdl::ComponentInstance|Identifier]) ; Quiescence returns tdl::Quiescence: PrefixFragment? //TODO: improve syntax AtomicPrefixFragment? 'quiet' 'for' period=DataUse ( 'component' componentInstance=[tdl::ComponentInstance|Identifier] | 'gate' gateReference=[tdl::GateReference|IdentifierDot] 'on' ( componentInstance=[tdl::ComponentInstance|Identifier] | gateReference=[tdl::GateReference|IdentifierDot] ) 'is' 'quiet' 'for' period=DataUse )? ; Loading @@ -672,7 +676,7 @@ TimerOperation returns tdl::TimerOperation: ; TimerStart returns tdl::TimerStart: PrefixFragment? AtomicPrefixFragment? 'start' componentInstance=[tdl::ComponentInstance|Identifier] '.' Loading @@ -681,7 +685,7 @@ TimerStart returns tdl::TimerStart: ; TimerStop returns tdl::TimerStop: PrefixFragment? AtomicPrefixFragment? 'stop' componentInstance=[tdl::ComponentInstance|Identifier] '.' Loading @@ -689,12 +693,11 @@ TimerStop returns tdl::TimerStop: ; TimeOut returns tdl::TimeOut: PrefixFragment? AtomicPrefixFragment? 'time' 'out' 'on' componentInstance=[tdl::ComponentInstance|Identifier] '.' timer=[tdl::Timer|Identifier] //TODO: refine syntax 'times' 'out' ; Loading Loading @@ -777,10 +780,25 @@ TestConfiguration returns tdl::TestConfiguration: //## Test Description LocallyOrderedTestDescription returns tdl::TestDescription: PrefixFragment? //TODO: consider better way to specify / indicate local ordering //Make local ordering the default? Needs value converter? //According to the meta-model default shall be global ordering (isLocallyOrdered?='Test') name=Identifier ('(' formalParameter+=FormalParameter ( "," formalParameter+=FormalParameter)* ')' )? 'uses' testConfiguration=[tdl::TestConfiguration|Identifier] (behaviourDescription=BehaviourDescription)? ; TestDescription returns tdl::TestDescription: PrefixFragment? 'TestDescription' //TODO: consider better way to specify / indicate local ordering //Make local ordering the default? Needs value converter? //According to the meta-model default shall be global ordering (isLocallyOrdered?='Implementation')? name=Identifier ('(' formalParameter+=FormalParameter ( "," formalParameter+=FormalParameter)* ')' )? Loading Loading @@ -939,25 +957,25 @@ AtomicBehaviour returns tdl::AtomicBehaviour: Break returns tdl::Break: {tdl::Break} PrefixFragment? AtomicPrefixFragment? 'break' ; Stop returns tdl::Stop: {tdl::Stop} PrefixFragment? AtomicPrefixFragment? 'terminate' ; VerdictAssignment returns tdl::VerdictAssignment: PrefixFragment? AtomicPrefixFragment? 'set' 'verdict' 'to' verdict=DataUse ; Assertion returns tdl::Assertion: {tdl::Assertion} PrefixFragment? AtomicPrefixFragment? 'assert' condition=DataUse ('on' componentInstance=[tdl::ComponentInstance|Identifier])? Loading @@ -966,12 +984,13 @@ Assertion returns tdl::Assertion: ; Interaction returns tdl::Interaction: Message | ProcedureCall | ProcedureCallResponse Message | ReceiveMessage | ProcedureCall | ProcedureCallResponse ; Message returns tdl::Message: PrefixFragment? AtomicPrefixFragment? sourceGate=[tdl::GateReference|IdentifierDot] // | sourceGate=[tdl::GateReference|Identifier] ('sends' | (isTrigger?='triggers')) argument=DataUse 'to' Loading @@ -991,13 +1010,45 @@ ValueAssignmentMessage returns tdl::ValueAssignment: //TODO: ambiguity? //PrefixFragment? //TODO: check what the correct syntax shall be 'where' 'it' 'is' 'assigned' 'to' variable=[tdl::Variable|Identifier] //'where' 'it' 'is' 'assigned' 'to' variable=[tdl::Variable|Identifier] //WithNameFragment? ; ProcedureCall returns tdl::ProcedureCall: ReceiveMessage returns tdl::Message: AtomicPrefixFragment? //TODO: make sure scoping works with this as well target+=ReceiveTargetMessage //( "," target+=ReceiveTargetMessage)* 'receives' (isTrigger?='trigger')? argument=DataUse 'from' sourceGate=[tdl::GateReference|IdentifierDot] // | sourceGate=[tdl::GateReference|Identifier] ; ReceiveTargetMessage returns tdl::Target: //TODO: ambiguity? //PrefixFragment? (valueAssignment+=ReceiveValueAssignmentMessage)? targetGate=[tdl::GateReference|IdentifierDot] //TODO: check what the correct syntax shall be //WithNameFragment? ; ReceiveValueAssignmentMessage returns tdl::ValueAssignment: //TODO: ambiguity? //PrefixFragment? variable=[tdl::Variable|Identifier] '=' //WithNameFragment? ; ProcedureCall returns tdl::ProcedureCall: //TODO: ambiguity? AtomicPrefixFragment? //TODO: async await pattern? -> it is actually sync sourceGate=[tdl::GateReference|IdentifierDot] 'calls' Loading @@ -1009,6 +1060,8 @@ ProcedureCall returns tdl::ProcedureCall: ; ProcedureCallResponse returns tdl::ProcedureCall: AtomicPrefixFragment? //TODO: this shall probably be switched (replyTo=[tdl::ProcedureCall|Identifier] ':')? sourceGate=[tdl::GateReference|IdentifierDot] 'responds' Loading Loading @@ -1038,8 +1091,7 @@ ValueAssignmentProcedure returns tdl::ValueAssignment: ; TestDescriptionReference returns tdl::TestDescriptionReference: //TODO: ambiguity? //PrefixFragment? AtomicPrefixFragment? 'execute' testDescription=[tdl::TestDescription|Identifier] //TODO: mandatory parentheses? Loading @@ -1063,7 +1115,7 @@ ActionBehaviour returns tdl::ActionBehaviour: ; ActionReference returns tdl::ActionReference: PrefixFragment? AtomicPrefixFragment? //TODO: simplify syntax further 'perform' //'action' action=[tdl::Action|Identifier] Loading @@ -1072,7 +1124,7 @@ ActionReference returns tdl::ActionReference: ; InlineAction returns tdl::InlineAction: PrefixFragment? AtomicPrefixFragment? //TODO: simplify syntax further 'perform' 'action' ':' body=EString Loading @@ -1080,12 +1132,11 @@ InlineAction returns tdl::InlineAction: ; Assignment returns tdl::Assignment: PrefixFragment? //TODO: shall be mandatory? (componentInstance=[tdl::ComponentInstance|Identifier] '->')? AtomicPrefixFragment? variable=VariableUse '=' expression=DataUse ('on' componentInstance=[tdl::ComponentInstance|Identifier])? ; Loading @@ -1104,7 +1155,7 @@ Assignment returns tdl::Assignment: //Use: inline block - within other blocks, e.g. with other contents fragment WithCommentFragment returns tdl::Element: 'With:' 'with' BEGIN (comment+=Comment)+ //SHall this be '*'? Ambiguity? Loading @@ -1112,7 +1163,7 @@ fragment WithCommentFragment returns tdl::Element: ; fragment WithNameFragment returns tdl::Element: 'With:' 'with' BEGIN //At least one element shall be provided? Ambiguity? NameFragment? Loading @@ -1121,7 +1172,7 @@ fragment WithNameFragment returns tdl::Element: ; fragment WithBehaviourFragment returns tdl::Behaviour: 'With:' 'with' BEGIN //At least one element shall be provided? Ambiguity? NameFragment? Loading @@ -1130,29 +1181,36 @@ fragment WithBehaviourFragment returns tdl::Behaviour: END ; fragment TDPrefixFragment returns tdl::TestDescription: TDObjectiveFragment? ('@' annotation+=Annotation)+ (comment+=Comment)* ; fragment WithTDFragment returns tdl::TestDescription: 'With:' 'with' BEGIN //At least one element shall be provided? Ambiguity? TDObjectiveFragment? (comment+=Comment)* END ; fragment AtomicPrefixFragment returns tdl::AtomicBehaviour: ObjectiveFragment? (comment+=Comment)* ('@' annotation+=Annotation)+ ; fragment WithAtomicFragment returns tdl::AtomicBehaviour: 'With:' 'with' BEGIN //At least one element shall be provided? Ambiguity? NameFragment? ObjectiveFragment? TimeLabelFragment? TimeConstraintFragment? (comment+=Comment)* END ; fragment WithCombinedFragment returns tdl::CombinedBehaviour: 'With:' 'with' BEGIN //At least one element shall be provided? Ambiguity? NameFragment? Loading @@ -1178,11 +1236,11 @@ fragment NameFragment returns tdl::Element: ; fragment TimeLabelFragment returns tdl::AtomicBehaviour: 'TimeLabel:' timeLabel=TimeLabel timeLabel=TimeLabel '=now' ; fragment TimeConstraintFragment returns tdl::AtomicBehaviour: 'TimeConstraints:' timeConstraint+=TimeConstraint ( "," timeConstraint+=TimeConstraint)* LBrace timeConstraint+=TimeConstraint ( "," timeConstraint+=TimeConstraint)* RBrace ; //Use: for packageable elements only? or for all instead of 'With' fragments? (backwards compatibility?) Loading @@ -1191,6 +1249,11 @@ fragment PrefixFragment returns tdl::Element: ('@' annotation+=Annotation)+ ; fragment PrefixCommentFragment returns tdl::Element: ('@' comment+=Comment)* ('@' annotation+=Annotation)+ ; fragment ConstraintFragment returns tdl::DataType: LBrace (constraint+=Constraint)+ RBrace ; Loading Loading @@ -1244,7 +1307,7 @@ IdentifierDot returns ecore::EString: ; QIdentifier returns ecore::EString: ID ('.' ID)+ ID ('.' ID)* ; //Retain Braces even in indentation-based Loading Loading
plugins/Prototypes/org.etsi.mts.tdl.tx/src/org/etsi/mts/tdl/TDLtx.xtext +111 −48 Original line number Diff line number Diff line Loading @@ -41,6 +41,7 @@ PackageableElement returns tdl::PackageableElement: | ComponentType | GateType | TestConfiguration | TestDescription | LocallyOrderedTestDescription ) WithCommentFragment? // | PredefinedAnnotationType Loading Loading @@ -69,8 +70,10 @@ ElementImport returns tdl::ElementImport: ) ) 'from' (importedPackage=[tdl::Package|Identifier] | importedPackage=[tdl::Package|QIdentifier] ( // importedPackage=[tdl::Package|Identifier] // | importedPackage=[tdl::Package|QIdentifier] ) WithCommentFragment? ; Loading Loading @@ -649,21 +652,22 @@ TimeOperation returns tdl::TimeOperation: ; Wait returns tdl::Wait: PrefixFragment? ( 'component' componentInstance=[tdl::ComponentInstance|Identifier]) 'waits' 'for' AtomicPrefixFragment? 'wait' 'for' period=DataUse ( 'on' componentInstance=[tdl::ComponentInstance|Identifier]) ; Quiescence returns tdl::Quiescence: PrefixFragment? //TODO: improve syntax AtomicPrefixFragment? 'quiet' 'for' period=DataUse ( 'component' componentInstance=[tdl::ComponentInstance|Identifier] | 'gate' gateReference=[tdl::GateReference|IdentifierDot] 'on' ( componentInstance=[tdl::ComponentInstance|Identifier] | gateReference=[tdl::GateReference|IdentifierDot] ) 'is' 'quiet' 'for' period=DataUse )? ; Loading @@ -672,7 +676,7 @@ TimerOperation returns tdl::TimerOperation: ; TimerStart returns tdl::TimerStart: PrefixFragment? AtomicPrefixFragment? 'start' componentInstance=[tdl::ComponentInstance|Identifier] '.' Loading @@ -681,7 +685,7 @@ TimerStart returns tdl::TimerStart: ; TimerStop returns tdl::TimerStop: PrefixFragment? AtomicPrefixFragment? 'stop' componentInstance=[tdl::ComponentInstance|Identifier] '.' Loading @@ -689,12 +693,11 @@ TimerStop returns tdl::TimerStop: ; TimeOut returns tdl::TimeOut: PrefixFragment? AtomicPrefixFragment? 'time' 'out' 'on' componentInstance=[tdl::ComponentInstance|Identifier] '.' timer=[tdl::Timer|Identifier] //TODO: refine syntax 'times' 'out' ; Loading Loading @@ -777,10 +780,25 @@ TestConfiguration returns tdl::TestConfiguration: //## Test Description LocallyOrderedTestDescription returns tdl::TestDescription: PrefixFragment? //TODO: consider better way to specify / indicate local ordering //Make local ordering the default? Needs value converter? //According to the meta-model default shall be global ordering (isLocallyOrdered?='Test') name=Identifier ('(' formalParameter+=FormalParameter ( "," formalParameter+=FormalParameter)* ')' )? 'uses' testConfiguration=[tdl::TestConfiguration|Identifier] (behaviourDescription=BehaviourDescription)? ; TestDescription returns tdl::TestDescription: PrefixFragment? 'TestDescription' //TODO: consider better way to specify / indicate local ordering //Make local ordering the default? Needs value converter? //According to the meta-model default shall be global ordering (isLocallyOrdered?='Implementation')? name=Identifier ('(' formalParameter+=FormalParameter ( "," formalParameter+=FormalParameter)* ')' )? Loading Loading @@ -939,25 +957,25 @@ AtomicBehaviour returns tdl::AtomicBehaviour: Break returns tdl::Break: {tdl::Break} PrefixFragment? AtomicPrefixFragment? 'break' ; Stop returns tdl::Stop: {tdl::Stop} PrefixFragment? AtomicPrefixFragment? 'terminate' ; VerdictAssignment returns tdl::VerdictAssignment: PrefixFragment? AtomicPrefixFragment? 'set' 'verdict' 'to' verdict=DataUse ; Assertion returns tdl::Assertion: {tdl::Assertion} PrefixFragment? AtomicPrefixFragment? 'assert' condition=DataUse ('on' componentInstance=[tdl::ComponentInstance|Identifier])? Loading @@ -966,12 +984,13 @@ Assertion returns tdl::Assertion: ; Interaction returns tdl::Interaction: Message | ProcedureCall | ProcedureCallResponse Message | ReceiveMessage | ProcedureCall | ProcedureCallResponse ; Message returns tdl::Message: PrefixFragment? AtomicPrefixFragment? sourceGate=[tdl::GateReference|IdentifierDot] // | sourceGate=[tdl::GateReference|Identifier] ('sends' | (isTrigger?='triggers')) argument=DataUse 'to' Loading @@ -991,13 +1010,45 @@ ValueAssignmentMessage returns tdl::ValueAssignment: //TODO: ambiguity? //PrefixFragment? //TODO: check what the correct syntax shall be 'where' 'it' 'is' 'assigned' 'to' variable=[tdl::Variable|Identifier] //'where' 'it' 'is' 'assigned' 'to' variable=[tdl::Variable|Identifier] //WithNameFragment? ; ProcedureCall returns tdl::ProcedureCall: ReceiveMessage returns tdl::Message: AtomicPrefixFragment? //TODO: make sure scoping works with this as well target+=ReceiveTargetMessage //( "," target+=ReceiveTargetMessage)* 'receives' (isTrigger?='trigger')? argument=DataUse 'from' sourceGate=[tdl::GateReference|IdentifierDot] // | sourceGate=[tdl::GateReference|Identifier] ; ReceiveTargetMessage returns tdl::Target: //TODO: ambiguity? //PrefixFragment? (valueAssignment+=ReceiveValueAssignmentMessage)? targetGate=[tdl::GateReference|IdentifierDot] //TODO: check what the correct syntax shall be //WithNameFragment? ; ReceiveValueAssignmentMessage returns tdl::ValueAssignment: //TODO: ambiguity? //PrefixFragment? variable=[tdl::Variable|Identifier] '=' //WithNameFragment? ; ProcedureCall returns tdl::ProcedureCall: //TODO: ambiguity? AtomicPrefixFragment? //TODO: async await pattern? -> it is actually sync sourceGate=[tdl::GateReference|IdentifierDot] 'calls' Loading @@ -1009,6 +1060,8 @@ ProcedureCall returns tdl::ProcedureCall: ; ProcedureCallResponse returns tdl::ProcedureCall: AtomicPrefixFragment? //TODO: this shall probably be switched (replyTo=[tdl::ProcedureCall|Identifier] ':')? sourceGate=[tdl::GateReference|IdentifierDot] 'responds' Loading Loading @@ -1038,8 +1091,7 @@ ValueAssignmentProcedure returns tdl::ValueAssignment: ; TestDescriptionReference returns tdl::TestDescriptionReference: //TODO: ambiguity? //PrefixFragment? AtomicPrefixFragment? 'execute' testDescription=[tdl::TestDescription|Identifier] //TODO: mandatory parentheses? Loading @@ -1063,7 +1115,7 @@ ActionBehaviour returns tdl::ActionBehaviour: ; ActionReference returns tdl::ActionReference: PrefixFragment? AtomicPrefixFragment? //TODO: simplify syntax further 'perform' //'action' action=[tdl::Action|Identifier] Loading @@ -1072,7 +1124,7 @@ ActionReference returns tdl::ActionReference: ; InlineAction returns tdl::InlineAction: PrefixFragment? AtomicPrefixFragment? //TODO: simplify syntax further 'perform' 'action' ':' body=EString Loading @@ -1080,12 +1132,11 @@ InlineAction returns tdl::InlineAction: ; Assignment returns tdl::Assignment: PrefixFragment? //TODO: shall be mandatory? (componentInstance=[tdl::ComponentInstance|Identifier] '->')? AtomicPrefixFragment? variable=VariableUse '=' expression=DataUse ('on' componentInstance=[tdl::ComponentInstance|Identifier])? ; Loading @@ -1104,7 +1155,7 @@ Assignment returns tdl::Assignment: //Use: inline block - within other blocks, e.g. with other contents fragment WithCommentFragment returns tdl::Element: 'With:' 'with' BEGIN (comment+=Comment)+ //SHall this be '*'? Ambiguity? Loading @@ -1112,7 +1163,7 @@ fragment WithCommentFragment returns tdl::Element: ; fragment WithNameFragment returns tdl::Element: 'With:' 'with' BEGIN //At least one element shall be provided? Ambiguity? NameFragment? Loading @@ -1121,7 +1172,7 @@ fragment WithNameFragment returns tdl::Element: ; fragment WithBehaviourFragment returns tdl::Behaviour: 'With:' 'with' BEGIN //At least one element shall be provided? Ambiguity? NameFragment? Loading @@ -1130,29 +1181,36 @@ fragment WithBehaviourFragment returns tdl::Behaviour: END ; fragment TDPrefixFragment returns tdl::TestDescription: TDObjectiveFragment? ('@' annotation+=Annotation)+ (comment+=Comment)* ; fragment WithTDFragment returns tdl::TestDescription: 'With:' 'with' BEGIN //At least one element shall be provided? Ambiguity? TDObjectiveFragment? (comment+=Comment)* END ; fragment AtomicPrefixFragment returns tdl::AtomicBehaviour: ObjectiveFragment? (comment+=Comment)* ('@' annotation+=Annotation)+ ; fragment WithAtomicFragment returns tdl::AtomicBehaviour: 'With:' 'with' BEGIN //At least one element shall be provided? Ambiguity? NameFragment? ObjectiveFragment? TimeLabelFragment? TimeConstraintFragment? (comment+=Comment)* END ; fragment WithCombinedFragment returns tdl::CombinedBehaviour: 'With:' 'with' BEGIN //At least one element shall be provided? Ambiguity? NameFragment? Loading @@ -1178,11 +1236,11 @@ fragment NameFragment returns tdl::Element: ; fragment TimeLabelFragment returns tdl::AtomicBehaviour: 'TimeLabel:' timeLabel=TimeLabel timeLabel=TimeLabel '=now' ; fragment TimeConstraintFragment returns tdl::AtomicBehaviour: 'TimeConstraints:' timeConstraint+=TimeConstraint ( "," timeConstraint+=TimeConstraint)* LBrace timeConstraint+=TimeConstraint ( "," timeConstraint+=TimeConstraint)* RBrace ; //Use: for packageable elements only? or for all instead of 'With' fragments? (backwards compatibility?) Loading @@ -1191,6 +1249,11 @@ fragment PrefixFragment returns tdl::Element: ('@' annotation+=Annotation)+ ; fragment PrefixCommentFragment returns tdl::Element: ('@' comment+=Comment)* ('@' annotation+=Annotation)+ ; fragment ConstraintFragment returns tdl::DataType: LBrace (constraint+=Constraint)+ RBrace ; Loading Loading @@ -1244,7 +1307,7 @@ IdentifierDot returns ecore::EString: ; QIdentifier returns ecore::EString: ID ('.' ID)+ ID ('.' ID)* ; //Retain Braces even in indentation-based Loading