Loading plugins/Prototypes/org.etsi.mts.tdl.tx/src/org/etsi/mts/tdl/TDLtx.xtext +145 −101 Original line number Diff line number Diff line Loading @@ -19,11 +19,11 @@ Package returns tdl::Package: 'Package' name=Identifier BEGIN WithFragment? (^import+=ElementImport)* (packagedElement+=PackageableElement)* (nestedPackage+=Package)* END WithCommentFragment? ; PackageableElement returns tdl::PackageableElement: Loading Loading @@ -58,15 +58,15 @@ PackageableElement returns tdl::PackageableElement: ElementImport returns tdl::ElementImport: {tdl::ElementImport} PrefixFragment? 'Import' ('all' | (importedElement+=[tdl::PackageableElement|Identifier] ( "," importedElement+=[tdl::PackageableElement|Identifier])* ) ) //TODO: check if this (still) works 'from' (importedPackage=[tdl::Package|Identifier] | importedPackage=[tdl::Package|QIdentifier]) WithFragment? WithCommentFragment? ; Comment returns tdl::Comment: Loading @@ -80,25 +80,32 @@ Annotation returns tdl::Annotation: AnnotationType returns tdl::AnnotationType: {tdl::AnnotationType} PrefixFragment? 'AnnotationType' name=Identifier extension=Extension? WithFragmentNested? WithCommentFragment? ; TestObjective returns tdl::TestObjective: {tdl::TestObjective} PrefixFragment? 'TestObjective' name=Identifier (BEGIN ('Description:' description=Identifier)? ( BEGIN ('Description:' description=EString)? ('References:' (objectiveURI+=Identifier)+)? WithFragment? END)? END )? WithCommentFragment? ; Extension returns tdl::Extension: PrefixFragment? 'extends' extending=[tdl::PackageableElement|Identifier] //TODO: this is ambiguous //WithCommentFragment? ; //# Data Loading @@ -107,83 +114,93 @@ Extension returns tdl::Extension: DataResourceMapping returns tdl::DataResourceMapping: {tdl::DataResourceMapping} PrefixFragment? 'Use' resourceURI=Identifier resourceURI=EString 'as' name=Identifier WithFragmentNested? WithCommentFragment? ; DataElementMapping returns tdl::DataElementMapping: PrefixFragment? 'Map' mappableDataElement=[tdl::MappableDataElement|Identifier] ('to' elementURI=Identifier)? ('to' elementURI=EString)? 'in' dataResourceMapping=[tdl::DataResourceMapping|Identifier] 'as' name=Identifier ( BEGIN WithFragment? (parameterMapping+=ParameterMapping)* END )? WithCommentFragment? ; ParameterMapping returns tdl::ParameterMapping: PrefixFragment? parameter=[tdl::Parameter|Identifier] '->' parameterURI=Identifier WithFragmentNested? '->' parameterURI=EString WithCommentFragment? ; SimpleDataType_Impl returns tdl::SimpleDataType: {tdl::SimpleDataType} PrefixFragment? 'Type' name=Identifier WithFragmentNested? WithCommentFragment? ; SimpleDataInstance returns tdl::SimpleDataInstance: PrefixFragment? dataType=[tdl::DataType|Identifier] name=Identifier WithFragmentNested? WithCommentFragment? ; //TODO: alternative specification dialects? StructuredDataType returns tdl::StructuredDataType: {tdl::StructuredDataType} //TODO: add to all other elements? //TODO: extract to packageable element? PrefixFragment? 'Type' name=Identifier extension=Extension? BEGIN //WithFragment? (member+=Member)* END WithCommentFragment? ; Member returns tdl::Member: PrefixFragment? (isOptional?='optional')? dataType=[tdl::DataType|Identifier] name=Identifier WithFragmentNested? WithCommentFragment? ; //TODO: alternative specification dialects? StructuredDataInstance returns tdl::StructuredDataInstance: PrefixFragment? dataType=[tdl::DataType|Identifier] name=Identifier //TODO: use keywords? (unassignedMember=UnassignedMemberTreatment)? BEGIN //WithFragment? //TODO: use parentheses instead? (structure vs parameters) //TODO: disambiguate when indentation is used? //TODO: align with data use (memberAssignment+=MemberAssignment)* END WithCommentFragment? ; MemberAssignment returns tdl::MemberAssignment: PrefixFragment? member=[tdl::Member|Identifier] '=' memberSpec=StaticDataUse WithFragmentNested? WithCommentFragment? ; //TODO: test below Loading @@ -196,15 +213,18 @@ CollectionDataType returns tdl::CollectionDataType: 'Collection' name=Identifier 'of' itemType=[tdl::DataType|Identifier] //TODO: use angle brackets instead of 'of'? WithCommentFragment? ; CollectionDataInstance returns tdl::CollectionDataInstance: PrefixFragment? //TODO: keep square brackets? ->discuss later (exclusive to guards or guards shall use a word?) dataType=[tdl::DataType|Identifier] //-> should probably be preferred for index or also for begin/end below //alternatively dataType 'collection' name? //alternatively dataType 'collection' name? -> no name=Identifier '[' item+=StaticDataUse* ']' WithCommentFragment? ; ProcedureSignature returns tdl::ProcedureSignature: Loading @@ -212,19 +232,21 @@ ProcedureSignature returns tdl::ProcedureSignature: 'Signature' name=Identifier '(' parameter+=ProcedureParameter ( "," parameter+=ProcedureParameter)* ')' WithCommentFragment? ; ProcedureParameter returns tdl::ProcedureParameter: PrefixFragment? kind=ParameterKind dataType=[tdl::DataType|Identifier] name=Identifier WithFragmentNested? WithCommentFragment? ; enum ParameterKind returns tdl::ParameterKind: //TODO: add @ prefixes? ->no In = 'in' | Out = 'out' | Exception = 'exception'; //TODO: remove? Parameter returns tdl::Parameter: Member | FormalParameter | ProcedureParameter; Loading @@ -232,15 +254,15 @@ FormalParameter returns tdl::FormalParameter: PrefixFragment? dataType=[tdl::DataType|Identifier] name=Identifier //TODO: fix fragments //WithFragmentNested WithCommentFragment? ; Variable returns tdl::Variable: PrefixFragment? dataType=[tdl::DataType|Identifier] 'variable' dataType=[tdl::DataType|Identifier] name=Identifier WithCommentFragment? ; //TODO: remove? Loading @@ -254,6 +276,7 @@ Action_Impl returns tdl::Action: name=Identifier ('(' formalParameter+=FormalParameter ( "," formalParameter+=FormalParameter)* ')')? (':' body=EString)? WithCommentFragment? ; Function returns tdl::Function: Loading @@ -263,9 +286,9 @@ Function returns tdl::Function: ('(' formalParameter+=FormalParameter ( "," formalParameter+=FormalParameter)* ')')? 'returns' returnType=[tdl::DataType|Identifier] (':' body=EString)? WithCommentFragment? ; enum UnassignedMemberTreatment returns tdl::UnassignedMemberTreatment: AnyValue = '?' | AnyValueOrOmit = '*'; Loading @@ -278,6 +301,7 @@ PredefinedFunction returns tdl::PredefinedFunction: 'Predefined' name=Identifier ('returns' returnType=[tdl::DataType|Identifier])? WithCommentFragment? ; //## Data Use Loading @@ -292,7 +316,10 @@ StaticDataUse returns tdl::StaticDataUse: OmitValue returns tdl::OmitValue: {tdl::OmitValue} PrefixFragment? 'omit' //TODO: this is ambiguous //WithCommentFragment? ; //# Time Loading @@ -302,22 +329,25 @@ Timer returns tdl::Timer: PrefixFragment? 'timer' name=Identifier WithCommentFragment? ; TimeConstraint returns tdl::TimeConstraint: PrefixFragment? PrefixNameFragment? //TODO: this is ambiguous //PrefixFragment? timeConstraintExpression=StaticDataUse //TODO: revert to DataUse //WithCommentFragment? ; TimeLabel returns tdl::TimeLabel: {tdl::TimeLabel} PrefixFragment? //TODO: this is ambiguous //PrefixFragment? name=Identifier //WithCommentFragment? ; enum TimeLabelUseKind returns tdl::TimeLabelUseKind: //TODO: add '@'? -> likely not Last = 'Last' | Previous = 'Previous' | First = 'First' ; Loading @@ -335,18 +365,21 @@ GateType returns tdl::GateType: 'Gate' name=Identifier (extension=Extension)? //TODO: revert to 'accepts' 'supports' dataType+=[tdl::DataType|Identifier] ( "," dataType+=[tdl::DataType|Identifier])* //TODO: potential ambiguity? WithCommentFragment? ; enum GateTypeKind returns tdl::GateTypeKind: //TODO: add '@' prefix? -> no Message = 'Message' | Procedure = 'Procedure'; GateInstance returns tdl::GateInstance: PrefixFragment? type=[tdl::GateType|Identifier] 'gate' type=[tdl::GateType|Identifier] name=Identifier WithCommentFragment? ; ComponentType returns tdl::ComponentType: Loading @@ -360,6 +393,7 @@ ComponentType returns tdl::ComponentType: (timer+=Timer)* (variable+=Variable)* END WithCommentFragment? ; ComponentInstance returns tdl::ComponentInstance: Loading @@ -373,28 +407,28 @@ ComponentInstance returns tdl::ComponentInstance: //create ROLE TYPE ID //create ROLE ID of type TYPE (old notation) -> to be aligned with data type syntax and the rest role=ComponentInstanceRole WithCommentFragment? ; enum ComponentInstanceRole returns tdl::ComponentInstanceRole: //TODO: add '@' prefix? SUT = 'SUT' | Tester = 'Tester'; GateReference returns tdl::GateReference: //name=Identifier //TODO: check how it was done previously //TODO: fix fragments //TODO: this is ambiguous //PrefixFragment? component=[tdl::ComponentInstance|Identifier] '.' gate=[tdl::GateInstance|Identifier] // WithFragmentNested? // NameFragment? //WithCommentFragment? //TODO: add extended name fragments ; Connection returns tdl::Connection: PrefixFragment? 'connect' endPoint+=GateReference ( 'to' endPoint+=GateReference)+ //TODO: fix fragments // WithFragmentNested? // NameFragment? endPoint+=GateReference 'to' endPoint+=GateReference WithCommentFragment? //TODO: add extended name fragments ; Loading @@ -407,6 +441,7 @@ TestConfiguration returns tdl::TestConfiguration: (componentInstance+=ComponentInstance)* (connection+=Connection)* END WithCommentFragment? ; //# Test Behaviour Loading @@ -415,7 +450,6 @@ TestConfiguration returns tdl::TestConfiguration: TestDescription returns tdl::TestDescription: PrefixFragment? PrefixTDObjectiveFragment? 'TestDescription' (isLocallyOrdered?='Implementation')? name=Identifier Loading @@ -424,6 +458,8 @@ TestDescription returns tdl::TestDescription: ( behaviourDescription=BehaviourDescription )? WithCommentFragment? //TODO: add extended objective fragments ; BehaviourDescription returns tdl::BehaviourDescription: Loading Loading @@ -453,23 +489,27 @@ Block returns tdl::Block: ; LocalExpression returns tdl::LocalExpression: PrefixFragment? PrefixNameFragment? //TODO: this is ambiguous //PrefixFragment? (scope=[tdl::ComponentInstance|Identifier] ':')? expression=StaticDataUse //TODO: revert to DataUse //WithCommentFragment? //TODO: add extended name fragments ; CompoundBehaviour returns tdl::CompoundBehaviour: PrefixFragment? PrefixObjectiveFragment? PrefixNameFragment? block=Block //TODO: extract to fragment // PrefixObjectiveFragment? // PrefixNameFragment? //TODO: periodic / exceptional fragments //('periodic' '{' periodic+=PeriodicBehaviour ( "," periodic+=PeriodicBehaviour)* '}' )? //('exceptional' '{' exceptional+=ExceptionalBehaviour ( "," exceptional+=ExceptionalBehaviour)* '}' )? // WithCommentFragment? ; Loading @@ -477,10 +517,11 @@ CompoundBehaviour returns tdl::CompoundBehaviour: TimerStart returns tdl::TimerStart: PrefixFragment? PrefixObjectiveFragment? PrefixNameFragment? PrefixTimeLabelFragment? PrefixTimeConstraintFragment? //TODO: extract to fragment // PrefixObjectiveFragment? // PrefixNameFragment? // PrefixTimeLabelFragment? // PrefixTimeConstraintFragment? 'start' componentInstance=[tdl::ComponentInstance|Identifier] '.' Loading @@ -492,10 +533,11 @@ TimerStart returns tdl::TimerStart: TimerStop returns tdl::TimerStop: PrefixFragment? PrefixObjectiveFragment? PrefixNameFragment? PrefixTimeLabelFragment? PrefixTimeConstraintFragment? //TODO: extract to fragment // PrefixObjectiveFragment? // PrefixNameFragment? // PrefixTimeLabelFragment? // PrefixTimeConstraintFragment? 'stop' componentInstance=[tdl::ComponentInstance|Identifier] '.' Loading @@ -504,10 +546,11 @@ TimerStop returns tdl::TimerStop: TimeOut returns tdl::TimeOut: PrefixFragment? PrefixObjectiveFragment? PrefixNameFragment? PrefixTimeLabelFragment? PrefixTimeConstraintFragment? //TODO: extract to fragment // PrefixObjectiveFragment? // PrefixNameFragment? // PrefixTimeLabelFragment? // PrefixTimeConstraintFragment? componentInstance=[tdl::ComponentInstance|Identifier] '.' timer=[tdl::Timer|Identifier] Loading @@ -523,17 +566,17 @@ TimeOut returns tdl::TimeOut: //All fragments shall be optional at the point of access //Use: contained/standalone block fragment WithFragmentNested returns tdl::Element: BEGIN WithFragment END ; //fragment WithFragmentNested returns tdl::Element: // BEGIN // WithCommentFragment // END //; //Use: inline block - within other blocks, e.g. with other contents fragment WithFragment returns tdl::Element: fragment WithCommentFragment returns tdl::Element: ('With:' BEGIN (comment+=Comment | annotation+=Annotation)+ (comment+=Comment)+ END ) ; Loading @@ -560,35 +603,36 @@ fragment TimeConstraintFragment returns tdl::AtomicBehaviour: ; //Use: for packageable elements only? or for all instead of 'With' fragments? (backwards compatibility?) //TODO: '@' was used for time labels only before fragment PrefixFragment returns tdl::Element: ('@' comment+=Comment | '@' annotation+=Annotation)+ //('@' comment+=Comment | '@' annotation+=Annotation)+ ('@' annotation+=Annotation)+ ; fragment PrefixNameFragment returns tdl::Element: '@' NameFragment ; fragment PrefixObjectiveFragment returns tdl::Behaviour: '@' ObjectiveFragment ; fragment PrefixTDObjectiveFragment returns tdl::TestDescription: '@' TDObjectiveFragment ; fragment PrefixTimeConstraintFragment returns tdl::AtomicBehaviour: '@' TimeConstraintFragment ; fragment PrefixTimeLabelFragment returns tdl::AtomicBehaviour: '@' TimeLabelFragment ; //fragment PrefixNameFragment returns tdl::Element: // '@' NameFragment //; // //fragment PrefixObjectiveFragment returns tdl::Behaviour: // '@' ObjectiveFragment //; // //fragment PrefixTDObjectiveFragment returns tdl::TestDescription: // '@' TDObjectiveFragment //; // //fragment PrefixTimeConstraintFragment returns tdl::AtomicBehaviour: // '@' TimeConstraintFragment //; // //fragment PrefixTimeLabelFragment returns tdl::AtomicBehaviour: // '@' TimeLabelFragment //; //## ValueConverter Rules (Pseudo-terminals) //TODO: why does this strip quotes when it is a single word? EString returns ecore::EString: STRING // | ID Loading Loading
plugins/Prototypes/org.etsi.mts.tdl.tx/src/org/etsi/mts/tdl/TDLtx.xtext +145 −101 Original line number Diff line number Diff line Loading @@ -19,11 +19,11 @@ Package returns tdl::Package: 'Package' name=Identifier BEGIN WithFragment? (^import+=ElementImport)* (packagedElement+=PackageableElement)* (nestedPackage+=Package)* END WithCommentFragment? ; PackageableElement returns tdl::PackageableElement: Loading Loading @@ -58,15 +58,15 @@ PackageableElement returns tdl::PackageableElement: ElementImport returns tdl::ElementImport: {tdl::ElementImport} PrefixFragment? 'Import' ('all' | (importedElement+=[tdl::PackageableElement|Identifier] ( "," importedElement+=[tdl::PackageableElement|Identifier])* ) ) //TODO: check if this (still) works 'from' (importedPackage=[tdl::Package|Identifier] | importedPackage=[tdl::Package|QIdentifier]) WithFragment? WithCommentFragment? ; Comment returns tdl::Comment: Loading @@ -80,25 +80,32 @@ Annotation returns tdl::Annotation: AnnotationType returns tdl::AnnotationType: {tdl::AnnotationType} PrefixFragment? 'AnnotationType' name=Identifier extension=Extension? WithFragmentNested? WithCommentFragment? ; TestObjective returns tdl::TestObjective: {tdl::TestObjective} PrefixFragment? 'TestObjective' name=Identifier (BEGIN ('Description:' description=Identifier)? ( BEGIN ('Description:' description=EString)? ('References:' (objectiveURI+=Identifier)+)? WithFragment? END)? END )? WithCommentFragment? ; Extension returns tdl::Extension: PrefixFragment? 'extends' extending=[tdl::PackageableElement|Identifier] //TODO: this is ambiguous //WithCommentFragment? ; //# Data Loading @@ -107,83 +114,93 @@ Extension returns tdl::Extension: DataResourceMapping returns tdl::DataResourceMapping: {tdl::DataResourceMapping} PrefixFragment? 'Use' resourceURI=Identifier resourceURI=EString 'as' name=Identifier WithFragmentNested? WithCommentFragment? ; DataElementMapping returns tdl::DataElementMapping: PrefixFragment? 'Map' mappableDataElement=[tdl::MappableDataElement|Identifier] ('to' elementURI=Identifier)? ('to' elementURI=EString)? 'in' dataResourceMapping=[tdl::DataResourceMapping|Identifier] 'as' name=Identifier ( BEGIN WithFragment? (parameterMapping+=ParameterMapping)* END )? WithCommentFragment? ; ParameterMapping returns tdl::ParameterMapping: PrefixFragment? parameter=[tdl::Parameter|Identifier] '->' parameterURI=Identifier WithFragmentNested? '->' parameterURI=EString WithCommentFragment? ; SimpleDataType_Impl returns tdl::SimpleDataType: {tdl::SimpleDataType} PrefixFragment? 'Type' name=Identifier WithFragmentNested? WithCommentFragment? ; SimpleDataInstance returns tdl::SimpleDataInstance: PrefixFragment? dataType=[tdl::DataType|Identifier] name=Identifier WithFragmentNested? WithCommentFragment? ; //TODO: alternative specification dialects? StructuredDataType returns tdl::StructuredDataType: {tdl::StructuredDataType} //TODO: add to all other elements? //TODO: extract to packageable element? PrefixFragment? 'Type' name=Identifier extension=Extension? BEGIN //WithFragment? (member+=Member)* END WithCommentFragment? ; Member returns tdl::Member: PrefixFragment? (isOptional?='optional')? dataType=[tdl::DataType|Identifier] name=Identifier WithFragmentNested? WithCommentFragment? ; //TODO: alternative specification dialects? StructuredDataInstance returns tdl::StructuredDataInstance: PrefixFragment? dataType=[tdl::DataType|Identifier] name=Identifier //TODO: use keywords? (unassignedMember=UnassignedMemberTreatment)? BEGIN //WithFragment? //TODO: use parentheses instead? (structure vs parameters) //TODO: disambiguate when indentation is used? //TODO: align with data use (memberAssignment+=MemberAssignment)* END WithCommentFragment? ; MemberAssignment returns tdl::MemberAssignment: PrefixFragment? member=[tdl::Member|Identifier] '=' memberSpec=StaticDataUse WithFragmentNested? WithCommentFragment? ; //TODO: test below Loading @@ -196,15 +213,18 @@ CollectionDataType returns tdl::CollectionDataType: 'Collection' name=Identifier 'of' itemType=[tdl::DataType|Identifier] //TODO: use angle brackets instead of 'of'? WithCommentFragment? ; CollectionDataInstance returns tdl::CollectionDataInstance: PrefixFragment? //TODO: keep square brackets? ->discuss later (exclusive to guards or guards shall use a word?) dataType=[tdl::DataType|Identifier] //-> should probably be preferred for index or also for begin/end below //alternatively dataType 'collection' name? //alternatively dataType 'collection' name? -> no name=Identifier '[' item+=StaticDataUse* ']' WithCommentFragment? ; ProcedureSignature returns tdl::ProcedureSignature: Loading @@ -212,19 +232,21 @@ ProcedureSignature returns tdl::ProcedureSignature: 'Signature' name=Identifier '(' parameter+=ProcedureParameter ( "," parameter+=ProcedureParameter)* ')' WithCommentFragment? ; ProcedureParameter returns tdl::ProcedureParameter: PrefixFragment? kind=ParameterKind dataType=[tdl::DataType|Identifier] name=Identifier WithFragmentNested? WithCommentFragment? ; enum ParameterKind returns tdl::ParameterKind: //TODO: add @ prefixes? ->no In = 'in' | Out = 'out' | Exception = 'exception'; //TODO: remove? Parameter returns tdl::Parameter: Member | FormalParameter | ProcedureParameter; Loading @@ -232,15 +254,15 @@ FormalParameter returns tdl::FormalParameter: PrefixFragment? dataType=[tdl::DataType|Identifier] name=Identifier //TODO: fix fragments //WithFragmentNested WithCommentFragment? ; Variable returns tdl::Variable: PrefixFragment? dataType=[tdl::DataType|Identifier] 'variable' dataType=[tdl::DataType|Identifier] name=Identifier WithCommentFragment? ; //TODO: remove? Loading @@ -254,6 +276,7 @@ Action_Impl returns tdl::Action: name=Identifier ('(' formalParameter+=FormalParameter ( "," formalParameter+=FormalParameter)* ')')? (':' body=EString)? WithCommentFragment? ; Function returns tdl::Function: Loading @@ -263,9 +286,9 @@ Function returns tdl::Function: ('(' formalParameter+=FormalParameter ( "," formalParameter+=FormalParameter)* ')')? 'returns' returnType=[tdl::DataType|Identifier] (':' body=EString)? WithCommentFragment? ; enum UnassignedMemberTreatment returns tdl::UnassignedMemberTreatment: AnyValue = '?' | AnyValueOrOmit = '*'; Loading @@ -278,6 +301,7 @@ PredefinedFunction returns tdl::PredefinedFunction: 'Predefined' name=Identifier ('returns' returnType=[tdl::DataType|Identifier])? WithCommentFragment? ; //## Data Use Loading @@ -292,7 +316,10 @@ StaticDataUse returns tdl::StaticDataUse: OmitValue returns tdl::OmitValue: {tdl::OmitValue} PrefixFragment? 'omit' //TODO: this is ambiguous //WithCommentFragment? ; //# Time Loading @@ -302,22 +329,25 @@ Timer returns tdl::Timer: PrefixFragment? 'timer' name=Identifier WithCommentFragment? ; TimeConstraint returns tdl::TimeConstraint: PrefixFragment? PrefixNameFragment? //TODO: this is ambiguous //PrefixFragment? timeConstraintExpression=StaticDataUse //TODO: revert to DataUse //WithCommentFragment? ; TimeLabel returns tdl::TimeLabel: {tdl::TimeLabel} PrefixFragment? //TODO: this is ambiguous //PrefixFragment? name=Identifier //WithCommentFragment? ; enum TimeLabelUseKind returns tdl::TimeLabelUseKind: //TODO: add '@'? -> likely not Last = 'Last' | Previous = 'Previous' | First = 'First' ; Loading @@ -335,18 +365,21 @@ GateType returns tdl::GateType: 'Gate' name=Identifier (extension=Extension)? //TODO: revert to 'accepts' 'supports' dataType+=[tdl::DataType|Identifier] ( "," dataType+=[tdl::DataType|Identifier])* //TODO: potential ambiguity? WithCommentFragment? ; enum GateTypeKind returns tdl::GateTypeKind: //TODO: add '@' prefix? -> no Message = 'Message' | Procedure = 'Procedure'; GateInstance returns tdl::GateInstance: PrefixFragment? type=[tdl::GateType|Identifier] 'gate' type=[tdl::GateType|Identifier] name=Identifier WithCommentFragment? ; ComponentType returns tdl::ComponentType: Loading @@ -360,6 +393,7 @@ ComponentType returns tdl::ComponentType: (timer+=Timer)* (variable+=Variable)* END WithCommentFragment? ; ComponentInstance returns tdl::ComponentInstance: Loading @@ -373,28 +407,28 @@ ComponentInstance returns tdl::ComponentInstance: //create ROLE TYPE ID //create ROLE ID of type TYPE (old notation) -> to be aligned with data type syntax and the rest role=ComponentInstanceRole WithCommentFragment? ; enum ComponentInstanceRole returns tdl::ComponentInstanceRole: //TODO: add '@' prefix? SUT = 'SUT' | Tester = 'Tester'; GateReference returns tdl::GateReference: //name=Identifier //TODO: check how it was done previously //TODO: fix fragments //TODO: this is ambiguous //PrefixFragment? component=[tdl::ComponentInstance|Identifier] '.' gate=[tdl::GateInstance|Identifier] // WithFragmentNested? // NameFragment? //WithCommentFragment? //TODO: add extended name fragments ; Connection returns tdl::Connection: PrefixFragment? 'connect' endPoint+=GateReference ( 'to' endPoint+=GateReference)+ //TODO: fix fragments // WithFragmentNested? // NameFragment? endPoint+=GateReference 'to' endPoint+=GateReference WithCommentFragment? //TODO: add extended name fragments ; Loading @@ -407,6 +441,7 @@ TestConfiguration returns tdl::TestConfiguration: (componentInstance+=ComponentInstance)* (connection+=Connection)* END WithCommentFragment? ; //# Test Behaviour Loading @@ -415,7 +450,6 @@ TestConfiguration returns tdl::TestConfiguration: TestDescription returns tdl::TestDescription: PrefixFragment? PrefixTDObjectiveFragment? 'TestDescription' (isLocallyOrdered?='Implementation')? name=Identifier Loading @@ -424,6 +458,8 @@ TestDescription returns tdl::TestDescription: ( behaviourDescription=BehaviourDescription )? WithCommentFragment? //TODO: add extended objective fragments ; BehaviourDescription returns tdl::BehaviourDescription: Loading Loading @@ -453,23 +489,27 @@ Block returns tdl::Block: ; LocalExpression returns tdl::LocalExpression: PrefixFragment? PrefixNameFragment? //TODO: this is ambiguous //PrefixFragment? (scope=[tdl::ComponentInstance|Identifier] ':')? expression=StaticDataUse //TODO: revert to DataUse //WithCommentFragment? //TODO: add extended name fragments ; CompoundBehaviour returns tdl::CompoundBehaviour: PrefixFragment? PrefixObjectiveFragment? PrefixNameFragment? block=Block //TODO: extract to fragment // PrefixObjectiveFragment? // PrefixNameFragment? //TODO: periodic / exceptional fragments //('periodic' '{' periodic+=PeriodicBehaviour ( "," periodic+=PeriodicBehaviour)* '}' )? //('exceptional' '{' exceptional+=ExceptionalBehaviour ( "," exceptional+=ExceptionalBehaviour)* '}' )? // WithCommentFragment? ; Loading @@ -477,10 +517,11 @@ CompoundBehaviour returns tdl::CompoundBehaviour: TimerStart returns tdl::TimerStart: PrefixFragment? PrefixObjectiveFragment? PrefixNameFragment? PrefixTimeLabelFragment? PrefixTimeConstraintFragment? //TODO: extract to fragment // PrefixObjectiveFragment? // PrefixNameFragment? // PrefixTimeLabelFragment? // PrefixTimeConstraintFragment? 'start' componentInstance=[tdl::ComponentInstance|Identifier] '.' Loading @@ -492,10 +533,11 @@ TimerStart returns tdl::TimerStart: TimerStop returns tdl::TimerStop: PrefixFragment? PrefixObjectiveFragment? PrefixNameFragment? PrefixTimeLabelFragment? PrefixTimeConstraintFragment? //TODO: extract to fragment // PrefixObjectiveFragment? // PrefixNameFragment? // PrefixTimeLabelFragment? // PrefixTimeConstraintFragment? 'stop' componentInstance=[tdl::ComponentInstance|Identifier] '.' Loading @@ -504,10 +546,11 @@ TimerStop returns tdl::TimerStop: TimeOut returns tdl::TimeOut: PrefixFragment? PrefixObjectiveFragment? PrefixNameFragment? PrefixTimeLabelFragment? PrefixTimeConstraintFragment? //TODO: extract to fragment // PrefixObjectiveFragment? // PrefixNameFragment? // PrefixTimeLabelFragment? // PrefixTimeConstraintFragment? componentInstance=[tdl::ComponentInstance|Identifier] '.' timer=[tdl::Timer|Identifier] Loading @@ -523,17 +566,17 @@ TimeOut returns tdl::TimeOut: //All fragments shall be optional at the point of access //Use: contained/standalone block fragment WithFragmentNested returns tdl::Element: BEGIN WithFragment END ; //fragment WithFragmentNested returns tdl::Element: // BEGIN // WithCommentFragment // END //; //Use: inline block - within other blocks, e.g. with other contents fragment WithFragment returns tdl::Element: fragment WithCommentFragment returns tdl::Element: ('With:' BEGIN (comment+=Comment | annotation+=Annotation)+ (comment+=Comment)+ END ) ; Loading @@ -560,35 +603,36 @@ fragment TimeConstraintFragment returns tdl::AtomicBehaviour: ; //Use: for packageable elements only? or for all instead of 'With' fragments? (backwards compatibility?) //TODO: '@' was used for time labels only before fragment PrefixFragment returns tdl::Element: ('@' comment+=Comment | '@' annotation+=Annotation)+ //('@' comment+=Comment | '@' annotation+=Annotation)+ ('@' annotation+=Annotation)+ ; fragment PrefixNameFragment returns tdl::Element: '@' NameFragment ; fragment PrefixObjectiveFragment returns tdl::Behaviour: '@' ObjectiveFragment ; fragment PrefixTDObjectiveFragment returns tdl::TestDescription: '@' TDObjectiveFragment ; fragment PrefixTimeConstraintFragment returns tdl::AtomicBehaviour: '@' TimeConstraintFragment ; fragment PrefixTimeLabelFragment returns tdl::AtomicBehaviour: '@' TimeLabelFragment ; //fragment PrefixNameFragment returns tdl::Element: // '@' NameFragment //; // //fragment PrefixObjectiveFragment returns tdl::Behaviour: // '@' ObjectiveFragment //; // //fragment PrefixTDObjectiveFragment returns tdl::TestDescription: // '@' TDObjectiveFragment //; // //fragment PrefixTimeConstraintFragment returns tdl::AtomicBehaviour: // '@' TimeConstraintFragment //; // //fragment PrefixTimeLabelFragment returns tdl::AtomicBehaviour: // '@' TimeLabelFragment //; //## ValueConverter Rules (Pseudo-terminals) //TODO: why does this strip quotes when it is a single word? EString returns ecore::EString: STRING // | ID Loading