sysmlpy 0.1.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (143) hide show
  1. sysmlpy/__init__.py +226 -0
  2. sysmlpy/__main__.py +75 -0
  3. sysmlpy/antlr/README.md +146 -0
  4. sysmlpy/antlr/SysMLv2Lexer.interp +695 -0
  5. sysmlpy/antlr/SysMLv2Lexer.py +1123 -0
  6. sysmlpy/antlr/SysMLv2Lexer.tokens +444 -0
  7. sysmlpy/antlr/SysMLv2Parser.interp +960 -0
  8. sysmlpy/antlr/SysMLv2Parser.py +40750 -0
  9. sysmlpy/antlr/SysMLv2Parser.tokens +444 -0
  10. sysmlpy/antlr/SysMLv2ParserListener.py +4485 -0
  11. sysmlpy/antlr/SysMLv2ParserVisitor.py +2498 -0
  12. sysmlpy/antlr/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.interp +695 -0
  13. sysmlpy/antlr/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.py +1123 -0
  14. sysmlpy/antlr/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.tokens +444 -0
  15. sysmlpy/antlr_parser.py +185 -0
  16. sysmlpy/antlr_visitor.py +10864 -0
  17. sysmlpy/definition.py +1115 -0
  18. sysmlpy/examples/attribute_values.py +161 -0
  19. sysmlpy/examples/part_attributes.py +139 -0
  20. sysmlpy/examples/tuples_sequences.py +231 -0
  21. sysmlpy/formatting.py +47 -0
  22. sysmlpy/grammar/antlr4/README.md +30 -0
  23. sysmlpy/grammar/antlr4/SysMLv2Lexer.g4 +931 -0
  24. sysmlpy/grammar/antlr4/SysMLv2Lexer.interp +695 -0
  25. sysmlpy/grammar/antlr4/SysMLv2Lexer.py +1123 -0
  26. sysmlpy/grammar/antlr4/SysMLv2Lexer.tokens +444 -0
  27. sysmlpy/grammar/antlr4/SysMLv2Parser.g4 +2432 -0
  28. sysmlpy/grammar/antlr4/SysMLv2Parser.interp +960 -0
  29. sysmlpy/grammar/antlr4/SysMLv2Parser.py +40750 -0
  30. sysmlpy/grammar/antlr4/SysMLv2Parser.tokens +444 -0
  31. sysmlpy/grammar/antlr4/SysMLv2ParserListener.py +4485 -0
  32. sysmlpy/grammar/antlr4/SysMLv2ParserVisitor.py +2498 -0
  33. sysmlpy/grammar/antlr4/desc.xml +7 -0
  34. sysmlpy/grammar/antlr4/examples/camera.sysml +14 -0
  35. sysmlpy/grammar/antlr4/examples/toaster-system.sysml +193 -0
  36. sysmlpy/grammar/antlr4/examples/vehicle-model.sysml +118 -0
  37. sysmlpy/grammar/antlr4/pom.xml +59 -0
  38. sysmlpy/grammar/classes.py +8610 -0
  39. sysmlpy/library/LICENSE +165 -0
  40. sysmlpy/library/README.md +52 -0
  41. sysmlpy/library/__init__.py +0 -0
  42. sysmlpy/library/domain/Analysis/AnalysisTooling.sysml +34 -0
  43. sysmlpy/library/domain/Analysis/SampledFunctions.sysml +119 -0
  44. sysmlpy/library/domain/Analysis/StateSpaceRepresentation.sysml +143 -0
  45. sysmlpy/library/domain/Analysis/TradeStudies.sysml +171 -0
  46. sysmlpy/library/domain/Cause and Effect/CausationConnections.sysml +83 -0
  47. sysmlpy/library/domain/Cause and Effect/CauseAndEffect.sysml +81 -0
  48. sysmlpy/library/domain/Geometry/ShapeItems.sysml +899 -0
  49. sysmlpy/library/domain/Geometry/SpatialItems.sysml +168 -0
  50. sysmlpy/library/domain/Metadata/ImageMetadata.sysml +78 -0
  51. sysmlpy/library/domain/Metadata/ModelingMetadata.sysml +143 -0
  52. sysmlpy/library/domain/Metadata/ParametersOfInterestMetadata.sysml +39 -0
  53. sysmlpy/library/domain/Metadata/RiskMetadata.sysml +100 -0
  54. sysmlpy/library/domain/Quantities and Units/ISQ.sysml +42 -0
  55. sysmlpy/library/domain/Quantities and Units/ISQAcoustics.sysml +439 -0
  56. sysmlpy/library/domain/Quantities and Units/ISQAtomicNuclear.sysml +2726 -0
  57. sysmlpy/library/domain/Quantities and Units/ISQBase.sysml +206 -0
  58. sysmlpy/library/domain/Quantities and Units/ISQCharacteristicNumbers.sysml +1991 -0
  59. sysmlpy/library/domain/Quantities and Units/ISQChemistryMolecular.sysml +1353 -0
  60. sysmlpy/library/domain/Quantities and Units/ISQCondensedMatter.sysml +1223 -0
  61. sysmlpy/library/domain/Quantities and Units/ISQElectromagnetism.sysml +2333 -0
  62. sysmlpy/library/domain/Quantities and Units/ISQInformation.sysml +958 -0
  63. sysmlpy/library/domain/Quantities and Units/ISQLight.sysml +1537 -0
  64. sysmlpy/library/domain/Quantities and Units/ISQMechanics.sysml +1564 -0
  65. sysmlpy/library/domain/Quantities and Units/ISQSpaceTime.sysml +1169 -0
  66. sysmlpy/library/domain/Quantities and Units/ISQThermodynamics.sysml +1256 -0
  67. sysmlpy/library/domain/Quantities and Units/MeasurementRefCalculations.sysml +30 -0
  68. sysmlpy/library/domain/Quantities and Units/MeasurementReferences.sysml +526 -0
  69. sysmlpy/library/domain/Quantities and Units/Quantities.sysml +107 -0
  70. sysmlpy/library/domain/Quantities and Units/QuantityCalculations.sysml +70 -0
  71. sysmlpy/library/domain/Quantities and Units/SI.sysml +378 -0
  72. sysmlpy/library/domain/Quantities and Units/SIPrefixes.sysml +48 -0
  73. sysmlpy/library/domain/Quantities and Units/TensorCalculations.sysml +50 -0
  74. sysmlpy/library/domain/Quantities and Units/Time.sysml +274 -0
  75. sysmlpy/library/domain/Quantities and Units/USCustomaryUnits.sysml +260 -0
  76. sysmlpy/library/domain/Quantities and Units/VectorCalculations.sysml +62 -0
  77. sysmlpy/library/domain/Requirement Derivation/DerivationConnections.sysml +63 -0
  78. sysmlpy/library/domain/Requirement Derivation/RequirementDerivation.sysml +39 -0
  79. sysmlpy/library/kernel/Base.kerml +95 -0
  80. sysmlpy/library/kernel/BaseFunctions.kerml +80 -0
  81. sysmlpy/library/kernel/BooleanFunctions.kerml +22 -0
  82. sysmlpy/library/kernel/Clocks.kerml +156 -0
  83. sysmlpy/library/kernel/CollectionFunctions.kerml +68 -0
  84. sysmlpy/library/kernel/Collections.kerml +147 -0
  85. sysmlpy/library/kernel/ComplexFunctions.kerml +47 -0
  86. sysmlpy/library/kernel/ControlFunctions.kerml +117 -0
  87. sysmlpy/library/kernel/ControlPerformances.kerml +135 -0
  88. sysmlpy/library/kernel/DataFunctions.kerml +43 -0
  89. sysmlpy/library/kernel/FeatureReferencingPerformances.kerml +190 -0
  90. sysmlpy/library/kernel/IntegerFunctions.kerml +43 -0
  91. sysmlpy/library/kernel/KerML.kerml +483 -0
  92. sysmlpy/library/kernel/Links.kerml +67 -0
  93. sysmlpy/library/kernel/Metaobjects.kerml +58 -0
  94. sysmlpy/library/kernel/NaturalFunctions.kerml +27 -0
  95. sysmlpy/library/kernel/NumericalFunctions.kerml +43 -0
  96. sysmlpy/library/kernel/Objects.kerml +212 -0
  97. sysmlpy/library/kernel/Observation.kerml +161 -0
  98. sysmlpy/library/kernel/OccurrenceFunctions.kerml +154 -0
  99. sysmlpy/library/kernel/Occurrences.kerml +992 -0
  100. sysmlpy/library/kernel/Performances.kerml +293 -0
  101. sysmlpy/library/kernel/RationalFunctions.kerml +49 -0
  102. sysmlpy/library/kernel/RealFunctions.kerml +56 -0
  103. sysmlpy/library/kernel/ScalarFunctions.kerml +33 -0
  104. sysmlpy/library/kernel/ScalarValues.kerml +23 -0
  105. sysmlpy/library/kernel/SequenceFunctions.kerml +111 -0
  106. sysmlpy/library/kernel/SpatialFrames.kerml +197 -0
  107. sysmlpy/library/kernel/StatePerformances.kerml +145 -0
  108. sysmlpy/library/kernel/StringFunctions.kerml +25 -0
  109. sysmlpy/library/kernel/Transfers.kerml +281 -0
  110. sysmlpy/library/kernel/TransitionPerformances.kerml +66 -0
  111. sysmlpy/library/kernel/TrigFunctions.kerml +35 -0
  112. sysmlpy/library/kernel/Triggers.kerml +188 -0
  113. sysmlpy/library/kernel/VectorFunctions.kerml +273 -0
  114. sysmlpy/library/kernel/VectorValues.kerml +64 -0
  115. sysmlpy/library/systems/Actions.sysml +552 -0
  116. sysmlpy/library/systems/Allocations.sysml +29 -0
  117. sysmlpy/library/systems/AnalysisCases.sysml +38 -0
  118. sysmlpy/library/systems/Attributes.sysml +25 -0
  119. sysmlpy/library/systems/Calculations.sysml +37 -0
  120. sysmlpy/library/systems/Cases.sysml +71 -0
  121. sysmlpy/library/systems/Connections.sysml +60 -0
  122. sysmlpy/library/systems/Constraints.sysml +44 -0
  123. sysmlpy/library/systems/Flows.sysml +126 -0
  124. sysmlpy/library/systems/Interfaces.sysml +89 -0
  125. sysmlpy/library/systems/Items.sysml +153 -0
  126. sysmlpy/library/systems/Metadata.sysml +32 -0
  127. sysmlpy/library/systems/Parts.sysml +81 -0
  128. sysmlpy/library/systems/Ports.sysml +54 -0
  129. sysmlpy/library/systems/Requirements.sysml +194 -0
  130. sysmlpy/library/systems/StandardViewDefinitions.sysml +123 -0
  131. sysmlpy/library/systems/States.sysml +103 -0
  132. sysmlpy/library/systems/SysML.sysml +539 -0
  133. sysmlpy/library/systems/UseCases.sysml +57 -0
  134. sysmlpy/library/systems/VerificationCases.sysml +103 -0
  135. sysmlpy/library/systems/Views.sysml +164 -0
  136. sysmlpy/navigate.py +272 -0
  137. sysmlpy/store.py +547 -0
  138. sysmlpy/usage.py +2978 -0
  139. sysmlpy-0.1.0.dist-info/METADATA +230 -0
  140. sysmlpy-0.1.0.dist-info/RECORD +143 -0
  141. sysmlpy-0.1.0.dist-info/WHEEL +4 -0
  142. sysmlpy-0.1.0.dist-info/entry_points.txt +3 -0
  143. sysmlpy-0.1.0.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,2432 @@
1
+ /*
2
+ * SysML v2 ANTLR4 Grammar
3
+ * Derived from the OMG SysML v2 specification (KEBNF format).
4
+ * Source: https://github.com/Systems-Modeling/SysML-v2-Release
5
+ * Generator: https://github.com/daltskin/sysml-v2-grammar
6
+ * License: MIT
7
+ */
8
+
9
+ parser grammar SysMLv2Parser;
10
+
11
+ options {
12
+ tokenVocab = SysMLv2Lexer;
13
+ }
14
+
15
+ // $antlr-format alignTrailingComments true, columnLimit 150, useTab false
16
+ // $antlr-format allowShortRulesOnASingleLine false, allowShortBlocksOnASingleLine true
17
+ // $antlr-format alignSemicolons hanging, alignColons hanging
18
+ // $antlr-format minEmptyLines 1, maxEmptyLinesToKeep 1, reflowComments false
19
+
20
+ // ===== Expression rules (precedence-climbing) =====
21
+
22
+ ownedExpression
23
+ : IF ownedExpression QUESTION ownedExpression ELSE ownedExpression
24
+ | ownedExpression QUESTION_QUESTION ownedExpression
25
+ | ownedExpression IMPLIES ownedExpression
26
+ | ownedExpression OR ownedExpression
27
+ | ownedExpression AND ownedExpression
28
+ | ownedExpression XOR ownedExpression
29
+ | ownedExpression PIPE ownedExpression
30
+ | ownedExpression AMP ownedExpression
31
+ | ownedExpression ( EQ_EQ | BANG_EQ | EQ_EQ_EQ | BANG_EQ_EQ) ownedExpression
32
+ | ownedExpression ( LT | GT | LE | GE) ownedExpression
33
+ | ownedExpression DOT_DOT ownedExpression
34
+ | ownedExpression ( PLUS | MINUS) ownedExpression
35
+ | ownedExpression ( STAR | SLASH | PERCENT) ownedExpression
36
+ | <assoc = right> ownedExpression ( STAR_STAR | CARET) ownedExpression
37
+ | ( PLUS | MINUS | TILDE | NOT) ownedExpression
38
+ | ( AT_SIGN | AT_AT) typeReference
39
+ | ownedExpression ( ISTYPE | HASTYPE | AT_SIGN) typeReference
40
+ | ownedExpression AS typeReference
41
+ | ownedExpression AT_AT typeReference
42
+ | ownedExpression META typeReference
43
+ | ownedExpression LBRACK sequenceExpressionList? RBRACK
44
+ | ownedExpression HASH LPAREN sequenceExpressionList? RPAREN
45
+ | ownedExpression argumentList
46
+ | ownedExpression DOT qualifiedName
47
+ | ownedExpression DOT bodyExpression
48
+ | ownedExpression DOT_QUESTION bodyExpression
49
+ | ownedExpression ARROW qualifiedName ( bodyExpression | argumentList)
50
+ | ALL typeReference
51
+ | baseExpression
52
+ ;
53
+
54
+ typeReference
55
+ : qualifiedName
56
+ ;
57
+
58
+ sequenceExpressionList
59
+ : ownedExpression (COMMA ownedExpression)*
60
+ ;
61
+
62
+ baseExpression
63
+ : nullExpression
64
+ | REGULAR_COMMENT // ignore block comments used as expression placeholders
65
+ | literalExpression
66
+ | qualifiedName (argumentList | DOT METADATA)? // merged featureRef/metadataAccess/invocation
67
+ | constructorExpression
68
+ | bodyExpression
69
+ | LPAREN AS typeReference RPAREN // cast expression: (as Type)
70
+ | LPAREN sequenceExpressionList? RPAREN
71
+ ;
72
+
73
+ nullExpression
74
+ : NULL
75
+ | LPAREN RPAREN
76
+ ;
77
+
78
+ featureReferenceExpression
79
+ : qualifiedName
80
+ ;
81
+
82
+ metadataAccessExpression
83
+ : qualifiedName DOT METADATA
84
+ ;
85
+
86
+ invocationExpression
87
+ : qualifiedName argumentList
88
+ ;
89
+
90
+ constructorExpression
91
+ : NEW qualifiedName argumentList
92
+ ;
93
+
94
+ bodyExpression
95
+ : LBRACE functionBodyPart RBRACE
96
+ ;
97
+
98
+ argumentList
99
+ : LPAREN (positionalArgumentList | namedArgumentList)? RPAREN
100
+ ;
101
+
102
+ positionalArgumentList
103
+ : ownedExpression (COMMA ownedExpression)*
104
+ ;
105
+
106
+ namedArgumentList
107
+ : namedArgument (COMMA namedArgument)*
108
+ ;
109
+
110
+ namedArgument
111
+ : qualifiedName EQ ownedExpression
112
+ ;
113
+
114
+ literalExpression
115
+ : literalBoolean
116
+ | literalString
117
+ | literalInteger
118
+ | literalReal
119
+ | literalInfinity
120
+ ;
121
+
122
+ literalBoolean
123
+ : TRUE
124
+ | FALSE
125
+ ;
126
+
127
+ literalString
128
+ : DOUBLE_STRING
129
+ ;
130
+
131
+ literalInteger
132
+ : INTEGER
133
+ ;
134
+
135
+ literalReal
136
+ : REAL
137
+ ;
138
+
139
+ literalInfinity
140
+ : STAR
141
+ ;
142
+
143
+ argumentMember
144
+ : ownedExpression
145
+ ;
146
+
147
+ argumentExpressionMember
148
+ : ownedExpression
149
+ ;
150
+
151
+ // ===== Name rule (Identifier or UnrestrictedName) =====
152
+
153
+ name
154
+ : IDENTIFIER
155
+ | STRING
156
+ | unreservedKeyword
157
+ ;
158
+
159
+ // Keywords that appear as names in the official OMG standard library.
160
+ // These are contextually unreserved — valid as identifiers in name positions.
161
+ unreservedKeyword
162
+ : TYPE
163
+ | MULTIPLICITY
164
+ | VAR
165
+ | LANGUAGE
166
+ | LOCALE
167
+ | CROSSES
168
+ | STEP
169
+ | FEATURE
170
+ | BEHAVIOR
171
+ | FUNCTION
172
+ | MEMBER
173
+ | PREDICATE
174
+ | INTERACTION
175
+ | METACLASS
176
+ ;
177
+
178
+ // ===== Parser rules =====
179
+
180
+ identification
181
+ : LT name GT name
182
+ | LT name GT
183
+ | name
184
+ ;
185
+
186
+ relationshipBody
187
+ : SEMI
188
+ | LBRACE relationshipOwnedElement* RBRACE
189
+ | LBRACE ( ownedAnnotation)* RBRACE
190
+ ;
191
+
192
+ relationshipOwnedElement
193
+ : ownedRelatedElement
194
+ | ownedAnnotation
195
+ ;
196
+
197
+ ownedRelatedElement
198
+ : nonFeatureElement
199
+ | featureElement
200
+ ;
201
+
202
+ dependency
203
+ : (prefixMetadataAnnotation)* DEPENDENCY (identification? FROM)? qualifiedName (
204
+ COMMA qualifiedName
205
+ )* TO qualifiedName (COMMA qualifiedName)* relationshipBody
206
+ | (prefixMetadataAnnotation)* DEPENDENCY dependencyDeclaration relationshipBody
207
+ ;
208
+
209
+ annotation
210
+ : qualifiedName
211
+ ;
212
+
213
+ ownedAnnotation
214
+ : annotatingElement
215
+ ;
216
+
217
+ annotatingElement
218
+ : comment
219
+ | documentation
220
+ | textualRepresentation
221
+ | metadataFeature
222
+ ;
223
+
224
+ comment
225
+ : (COMMENT identification? ( ABOUT annotation ( COMMA annotation)*)?)? (LOCALE DOUBLE_STRING)? REGULAR_COMMENT
226
+ ;
227
+
228
+ documentation
229
+ : DOC identification? (LOCALE DOUBLE_STRING)? REGULAR_COMMENT
230
+ ;
231
+
232
+ textualRepresentation
233
+ : (REP identification?)? LANGUAGE DOUBLE_STRING REGULAR_COMMENT
234
+ ;
235
+
236
+ rootNamespace
237
+ : packageBodyElement* EOF
238
+ ;
239
+
240
+ namespace
241
+ : (prefixMetadataMember)* namespaceDeclaration namespaceBody
242
+ ;
243
+
244
+ namespaceDeclaration
245
+ : NAMESPACE identification?
246
+ ;
247
+
248
+ namespaceBody
249
+ : SEMI
250
+ | LBRACE namespaceBodyElement* RBRACE
251
+ ;
252
+
253
+ namespaceBodyElement
254
+ : namespaceMember
255
+ | aliasMember
256
+ | importRule
257
+ ;
258
+
259
+ memberPrefix
260
+ : (visibilityIndicator)?
261
+ ;
262
+
263
+ visibilityIndicator
264
+ : PUBLIC
265
+ | PRIVATE
266
+ | PROTECTED
267
+ ;
268
+
269
+ namespaceMember
270
+ : nonFeatureMember
271
+ | namespaceFeatureMember
272
+ ;
273
+
274
+ nonFeatureMember
275
+ : memberPrefix memberElement
276
+ ;
277
+
278
+ namespaceFeatureMember
279
+ : memberPrefix featureElement
280
+ ;
281
+
282
+ aliasMember
283
+ : memberPrefix ALIAS (LT name GT)? (name)? FOR qualifiedName relationshipBody
284
+ ;
285
+
286
+ qualifiedName
287
+ : (DOLLAR COLON_COLON)? (name COLON_COLON)* name
288
+ ;
289
+
290
+ importRule
291
+ : (visibilityIndicator)? IMPORT (ALL)? importDeclaration relationshipBody
292
+ ;
293
+
294
+ importDeclaration
295
+ : membershipImport
296
+ | namespaceImport
297
+ ;
298
+
299
+ membershipImport
300
+ : qualifiedName (COLON_COLON STAR_STAR)?
301
+ ;
302
+
303
+ namespaceImport
304
+ : qualifiedName COLON_COLON STAR (COLON_COLON STAR_STAR)?
305
+ | filterPackage
306
+ ;
307
+
308
+ filterPackage
309
+ : filterPackageImportDeclaration (filterPackageMember)+
310
+ | filterPackageImport ( filterPackageMember)+
311
+ ;
312
+
313
+ filterPackageMember
314
+ : LBRACK ownedExpression RBRACK
315
+ ;
316
+
317
+ memberElement
318
+ : annotatingElement
319
+ | nonFeatureElement
320
+ ;
321
+
322
+ nonFeatureElement
323
+ : dependency
324
+ | namespace
325
+ | type
326
+ | classifier
327
+ | dataType
328
+ | class
329
+ | structure
330
+ | metaclass
331
+ | association
332
+ | associationStructure
333
+ | interaction
334
+ | behavior
335
+ | function
336
+ | predicate
337
+ | multiplicity
338
+ | package
339
+ | libraryPackage
340
+ | specialization
341
+ | conjugation
342
+ | subclassification
343
+ | disjoining
344
+ | featureInverting
345
+ | featureTyping
346
+ | subsetting
347
+ | redefinition
348
+ | typeFeaturing
349
+ ;
350
+
351
+ featureElement
352
+ : feature
353
+ | step
354
+ | expression
355
+ | booleanExpression
356
+ | invariant
357
+ | connector
358
+ | bindingConnector
359
+ | succession
360
+ | flow
361
+ | successionFlow
362
+ ;
363
+
364
+ type
365
+ : typePrefix TYPE typeDeclaration typeBody
366
+ ;
367
+
368
+ typePrefix
369
+ : (ABSTRACT)? (prefixMetadataMember)*
370
+ ;
371
+
372
+ typeDeclaration
373
+ : (ALL)? identification? (ownedMultiplicity)? (specializationPart | conjugationPart)+ typeRelationshipPart*
374
+ ;
375
+
376
+ specializationPart
377
+ : (COLON_GT | SPECIALIZES) ownedSpecialization (COMMA ownedSpecialization)*
378
+ ;
379
+
380
+ conjugationPart
381
+ : (TILDE | CONJUGATES) ownedConjugation
382
+ ;
383
+
384
+ typeRelationshipPart
385
+ : disjoiningPart
386
+ | unioningPart
387
+ | intersectingPart
388
+ | differencingPart
389
+ ;
390
+
391
+ disjoiningPart
392
+ : DISJOINT FROM ownedDisjoining (COMMA ownedDisjoining)*
393
+ ;
394
+
395
+ unioningPart
396
+ : UNIONS unioning (COMMA unioning)*
397
+ ;
398
+
399
+ intersectingPart
400
+ : INTERSECTS intersecting (COMMA intersecting)*
401
+ ;
402
+
403
+ differencingPart
404
+ : DIFFERENCES differencing (COMMA differencing)*
405
+ ;
406
+
407
+ typeBody
408
+ : SEMI
409
+ | LBRACE typeBodyElement* RBRACE
410
+ ;
411
+
412
+ typeBodyElement
413
+ : nonFeatureMember
414
+ | featureMember
415
+ | aliasMember
416
+ | importRule
417
+ ;
418
+
419
+ specialization
420
+ : (SPECIALIZATION identification?)? SUBTYPE specificType (COLON_GT | SPECIALIZES) generalType relationshipBody
421
+ ;
422
+
423
+ ownedSpecialization
424
+ : generalType
425
+ ;
426
+
427
+ specificType
428
+ : qualifiedName (DOT qualifiedName)*
429
+ ;
430
+
431
+ generalType
432
+ : qualifiedName (DOT qualifiedName)*
433
+ ;
434
+
435
+ conjugation
436
+ : (CONJUGATION identification?)? CONJUGATE qualifiedName (DOT qualifiedName)* (
437
+ TILDE
438
+ | CONJUGATES
439
+ ) qualifiedName (DOT qualifiedName)* relationshipBody
440
+ ;
441
+
442
+ ownedConjugation
443
+ : qualifiedName (DOT qualifiedName)*
444
+ ;
445
+
446
+ disjoining
447
+ : (DISJOINING identification?)? DISJOINT qualifiedName (DOT qualifiedName)* FROM qualifiedName (
448
+ DOT qualifiedName
449
+ )* relationshipBody
450
+ ;
451
+
452
+ ownedDisjoining
453
+ : qualifiedName (DOT qualifiedName)*
454
+ ;
455
+
456
+ unioning
457
+ : qualifiedName (DOT qualifiedName)*
458
+ ;
459
+
460
+ intersecting
461
+ : qualifiedName (DOT qualifiedName)*
462
+ ;
463
+
464
+ differencing
465
+ : qualifiedName (DOT qualifiedName)*
466
+ ;
467
+
468
+ featureMember
469
+ : typeFeatureMember
470
+ | ownedFeatureMember
471
+ ;
472
+
473
+ typeFeatureMember
474
+ : memberPrefix MEMBER featureElement
475
+ ;
476
+
477
+ ownedFeatureMember
478
+ : memberPrefix featureElement
479
+ ;
480
+
481
+ classifier
482
+ : typePrefix CLASSIFIER classifierDeclaration typeBody
483
+ ;
484
+
485
+ classifierDeclaration
486
+ : (ALL)? identification? (ownedMultiplicity)? (superclassingPart | conjugationPart)? typeRelationshipPart*
487
+ ;
488
+
489
+ superclassingPart
490
+ : (COLON_GT | SPECIALIZES) ownedSubclassification (COMMA ownedSubclassification)*
491
+ ;
492
+
493
+ subclassification
494
+ : (SPECIALIZATION identification?)? SUBCLASSIFIER qualifiedName (COLON_GT | SPECIALIZES) qualifiedName relationshipBody
495
+ ;
496
+
497
+ ownedSubclassification
498
+ : qualifiedName
499
+ ;
500
+
501
+ feature
502
+ : (
503
+ featurePrefix ( FEATURE | prefixMetadataMember) featureDeclaration?
504
+ | ( endFeaturePrefix | basicFeaturePrefix) ( REF)? featureDeclaration
505
+ ) valuePart? typeBody
506
+ ;
507
+
508
+ endFeaturePrefix
509
+ : (CONST)? END
510
+ ;
511
+
512
+ basicFeaturePrefix
513
+ : (featureDirection)? (DERIVED)? (ABSTRACT)? (COMPOSITE | PORTION)? (VAR | CONST)?
514
+ ;
515
+
516
+ featurePrefix
517
+ : (endFeaturePrefix ownedCrossFeatureMember | basicFeaturePrefix) (prefixMetadataMember)*
518
+ ;
519
+
520
+ ownedCrossFeatureMember
521
+ : ownedCrossFeature
522
+ ;
523
+
524
+ ownedCrossFeature
525
+ : basicFeaturePrefix featureDeclaration
526
+ | basicUsagePrefix usageDeclaration?
527
+ ;
528
+
529
+ featureDirection
530
+ : IN
531
+ | OUT
532
+ | INOUT
533
+ ;
534
+
535
+ featureDeclaration
536
+ : (ALL)? (
537
+ featureIdentification ( featureSpecializationPart | conjugationPart)?
538
+ | featureSpecializationPart
539
+ | conjugationPart
540
+ ) featureRelationshipPart*
541
+ ;
542
+
543
+ featureIdentification
544
+ : LT name GT (name)?
545
+ | name
546
+ ;
547
+
548
+ featureRelationshipPart
549
+ : typeRelationshipPart
550
+ | chainingPart
551
+ | invertingPart
552
+ | typeFeaturingPart
553
+ ;
554
+
555
+ chainingPart
556
+ : CHAINS qualifiedName (DOT qualifiedName)*
557
+ ;
558
+
559
+ invertingPart
560
+ : INVERSE OF ownedFeatureInverting
561
+ ;
562
+
563
+ typeFeaturingPart
564
+ : FEATURED BY ownedTypeFeaturing (COMMA ownedTypeFeaturing)*
565
+ ;
566
+
567
+ featureSpecializationPart
568
+ : featureSpecialization+ multiplicityPart? featureSpecialization*
569
+ | multiplicityPart featureSpecialization*
570
+ ;
571
+
572
+ multiplicityPart
573
+ : ownedMultiplicity (ORDERED ( NONUNIQUE)? | NONUNIQUE ( ORDERED)?)?
574
+ | ( ORDERED ( NONUNIQUE)? | NONUNIQUE ( ORDERED)?)
575
+ ;
576
+
577
+ featureSpecialization
578
+ : typings
579
+ | subsettings
580
+ | references
581
+ | crosses
582
+ | redefinitions
583
+ ;
584
+
585
+ typings
586
+ : typedBy (COMMA featureTyping)*
587
+ ;
588
+
589
+ typedBy
590
+ : (COLON | TYPED BY | DEFINED BY) featureTyping
591
+ ;
592
+
593
+ subsettings
594
+ : subsets (COMMA ownedSubsetting)*
595
+ ;
596
+
597
+ subsets
598
+ : (COLON_GT | SUBSETS) ownedSubsetting
599
+ ;
600
+
601
+ references
602
+ : (COLON_COLON_GT | REFERENCES) ownedReferenceSubsetting
603
+ ;
604
+
605
+ crosses
606
+ : (FAT_ARROW | CROSSES) ownedCrossSubsetting
607
+ ;
608
+
609
+ redefinitions
610
+ : redefines (COMMA ownedRedefinition)*
611
+ ;
612
+
613
+ redefines
614
+ : (COLON_GT_GT | REDEFINES) ownedRedefinition
615
+ ;
616
+
617
+ featureTyping
618
+ : (SPECIALIZATION identification?)? TYPING qualifiedName (COLON | TYPED BY) generalType relationshipBody
619
+ | ownedFeatureTyping
620
+ | conjugatedPortTyping
621
+ ;
622
+
623
+ ownedFeatureTyping
624
+ : qualifiedName (DOT qualifiedName)*
625
+ ;
626
+
627
+ subsetting
628
+ : (SPECIALIZATION identification?)? SUBSET specificType (COLON_GT | SUBSETS) generalType relationshipBody
629
+ ;
630
+
631
+ ownedSubsetting
632
+ : qualifiedName (DOT qualifiedName)*
633
+ ;
634
+
635
+ ownedReferenceSubsetting
636
+ : qualifiedName (DOT qualifiedName)*
637
+ ;
638
+
639
+ ownedCrossSubsetting
640
+ : qualifiedName (DOT qualifiedName)*
641
+ ;
642
+
643
+ redefinition
644
+ : (SPECIALIZATION identification?)? REDEFINITION specificType (COLON_GT_GT | REDEFINES) generalType relationshipBody
645
+ ;
646
+
647
+ ownedRedefinition
648
+ : qualifiedName (DOT qualifiedName)*
649
+ ;
650
+
651
+ ownedFeatureChain
652
+ : featureChain
653
+ | ownedFeatureChaining ( DOT ownedFeatureChaining)+
654
+ ;
655
+
656
+ featureChain
657
+ : ownedFeatureChaining (DOT ownedFeatureChaining)+
658
+ ;
659
+
660
+ ownedFeatureChaining
661
+ : qualifiedName
662
+ ;
663
+
664
+ featureInverting
665
+ : (INVERTING identification?)? INVERSE qualifiedName (DOT qualifiedName)* OF qualifiedName (
666
+ DOT qualifiedName
667
+ )* relationshipBody
668
+ ;
669
+
670
+ ownedFeatureInverting
671
+ : qualifiedName (DOT qualifiedName)*
672
+ ;
673
+
674
+ typeFeaturing
675
+ : FEATURING (identification? OF)? qualifiedName BY qualifiedName relationshipBody
676
+ ;
677
+
678
+ ownedTypeFeaturing
679
+ : qualifiedName
680
+ ;
681
+
682
+ dataType
683
+ : typePrefix DATATYPE classifierDeclaration typeBody
684
+ ;
685
+
686
+ class
687
+ : typePrefix CLASS classifierDeclaration typeBody
688
+ ;
689
+
690
+ structure
691
+ : typePrefix STRUCT classifierDeclaration typeBody
692
+ ;
693
+
694
+ association
695
+ : typePrefix ASSOC classifierDeclaration typeBody
696
+ ;
697
+
698
+ associationStructure
699
+ : typePrefix ASSOC STRUCT classifierDeclaration typeBody
700
+ ;
701
+
702
+ connector
703
+ : featurePrefix CONNECTOR (featureDeclaration? valuePart? | connectorDeclaration) typeBody
704
+ ;
705
+
706
+ connectorDeclaration
707
+ : binaryConnectorDeclaration
708
+ | naryConnectorDeclaration
709
+ ;
710
+
711
+ binaryConnectorDeclaration
712
+ : (featureDeclaration? FROM | ALL FROM?)? connectorEndMember TO connectorEndMember
713
+ ;
714
+
715
+ naryConnectorDeclaration
716
+ : featureDeclaration? LPAREN connectorEndMember COMMA connectorEndMember (
717
+ COMMA connectorEndMember
718
+ )* RPAREN
719
+ ;
720
+
721
+ connectorEndMember
722
+ : connectorEnd
723
+ ;
724
+
725
+ connectorEnd
726
+ : (ownedCrossMultiplicityMember)? (name ( COLON_COLON_GT | REFERENCES))? ownedReferenceSubsetting ownedMultiplicity?
727
+ ;
728
+
729
+ ownedCrossMultiplicityMember
730
+ : ownedCrossMultiplicity
731
+ ;
732
+
733
+ ownedCrossMultiplicity
734
+ : ownedMultiplicity
735
+ ;
736
+
737
+ bindingConnector
738
+ : featurePrefix BINDING bindingConnectorDeclaration typeBody
739
+ ;
740
+
741
+ bindingConnectorDeclaration
742
+ : featureDeclaration (OF connectorEndMember EQ connectorEndMember)?
743
+ | ( ALL)? ( OF? connectorEndMember EQ connectorEndMember)?
744
+ ;
745
+
746
+ succession
747
+ : featurePrefix SUCCESSION successionDeclaration typeBody
748
+ ;
749
+
750
+ successionDeclaration
751
+ : featureDeclaration (FIRST connectorEndMember THEN connectorEndMember)?
752
+ | ( ALL)? ( FIRST? connectorEndMember THEN connectorEndMember)?
753
+ ;
754
+
755
+ behavior
756
+ : typePrefix BEHAVIOR classifierDeclaration typeBody
757
+ ;
758
+
759
+ step
760
+ : featurePrefix STEP featureDeclaration valuePart? typeBody
761
+ ;
762
+
763
+ function
764
+ : typePrefix FUNCTION classifierDeclaration functionBody
765
+ ;
766
+
767
+ functionBody
768
+ : SEMI
769
+ | LBRACE functionBodyPart RBRACE
770
+ ;
771
+
772
+ functionBodyPart
773
+ : (definitionBodyItem | typeBodyElement | returnFeatureMember)* (resultExpressionMember)?
774
+ ;
775
+
776
+ returnFeatureMember
777
+ : memberPrefix RETURN featureElement
778
+ ;
779
+
780
+ resultExpressionMember
781
+ : memberPrefix ownedExpression
782
+ ;
783
+
784
+ expression
785
+ : featurePrefix EXPR featureDeclaration valuePart? functionBody
786
+ ;
787
+
788
+ predicate
789
+ : typePrefix PREDICATE classifierDeclaration functionBody
790
+ ;
791
+
792
+ booleanExpression
793
+ : featurePrefix BOOL featureDeclaration valuePart? functionBody
794
+ ;
795
+
796
+ invariant
797
+ : featurePrefix INV (TRUE | FALSE)? featureDeclaration valuePart? functionBody
798
+ ;
799
+
800
+ ownedExpressionMember
801
+ : ownedExpression
802
+ ;
803
+
804
+ metadataReference
805
+ : elementReferenceMember
806
+ ;
807
+
808
+ typeReferenceMember
809
+ : typeReference
810
+ ;
811
+
812
+ typeResultMember
813
+ : typeReference
814
+ ;
815
+
816
+ referenceTyping
817
+ : qualifiedName
818
+ ;
819
+
820
+ emptyResultMember
821
+ : emptyFeature_
822
+ ;
823
+
824
+ sequenceOperatorExpression
825
+ : ownedExpressionMember COMMA sequenceExpressionListMember
826
+ ;
827
+
828
+ sequenceExpressionListMember
829
+ : sequenceExpressionList
830
+ ;
831
+
832
+ bodyArgumentMember
833
+ : bodyArgument
834
+ ;
835
+
836
+ bodyArgument
837
+ : bodyArgumentValue
838
+ ;
839
+
840
+ bodyArgumentValue
841
+ : bodyExpression
842
+ ;
843
+
844
+ functionReferenceArgumentMember
845
+ : functionReferenceArgument
846
+ ;
847
+
848
+ functionReferenceArgument
849
+ : functionReferenceArgumentValue
850
+ ;
851
+
852
+ functionReferenceArgumentValue
853
+ : functionReferenceExpression
854
+ ;
855
+
856
+ functionReferenceExpression
857
+ : functionReferenceMember
858
+ ;
859
+
860
+ functionReferenceMember
861
+ : functionReference
862
+ ;
863
+
864
+ functionReference
865
+ : referenceTyping
866
+ ;
867
+
868
+ featureChainMember
869
+ : qualifiedName (DOT qualifiedName)*
870
+ ;
871
+
872
+ ownedFeatureChainMember
873
+ : featureChain
874
+ | ownedFeatureChain
875
+ ;
876
+
877
+ featureReferenceMember
878
+ : featureReference
879
+ ;
880
+
881
+ featureReference
882
+ : qualifiedName
883
+ ;
884
+
885
+ elementReferenceMember
886
+ : qualifiedName
887
+ ;
888
+
889
+ constructorResultMember
890
+ : constructorResult
891
+ ;
892
+
893
+ constructorResult
894
+ : argumentList
895
+ ;
896
+
897
+ instantiatedTypeMember
898
+ : qualifiedName (DOT qualifiedName)*
899
+ ;
900
+
901
+ instantiatedTypeReference
902
+ : qualifiedName
903
+ ;
904
+
905
+ namedArgumentMember
906
+ : namedArgument
907
+ ;
908
+
909
+ parameterRedefinition
910
+ : qualifiedName
911
+ ;
912
+
913
+ expressionBodyMember
914
+ : expressionBody
915
+ ;
916
+
917
+ expressionBody
918
+ : LBRACE functionBodyPart RBRACE
919
+ ;
920
+
921
+ booleanValue
922
+ : TRUE
923
+ | FALSE
924
+ ;
925
+
926
+ realValue
927
+ : INTEGER? DOT (INTEGER | REAL)
928
+ | REAL
929
+ ;
930
+
931
+ interaction
932
+ : typePrefix INTERACTION classifierDeclaration typeBody
933
+ ;
934
+
935
+ flow
936
+ : featurePrefix FLOW flowDeclaration typeBody
937
+ ;
938
+
939
+ successionFlow
940
+ : featurePrefix SUCCESSION FLOW flowDeclaration typeBody
941
+ ;
942
+
943
+ flowDeclaration
944
+ : featureDeclaration valuePart? (OF payloadFeatureMember)? (
945
+ FROM flowEndMember TO flowEndMember
946
+ )?
947
+ | ( ALL)? flowEndMember TO flowEndMember
948
+ | usageDeclaration? valuePart? (OF flowPayloadFeatureMember)? (
949
+ FROM flowEndMember TO flowEndMember
950
+ )?
951
+ ;
952
+
953
+ payloadFeatureMember
954
+ : payloadFeature
955
+ ;
956
+
957
+ payloadFeature
958
+ : identification? valuePart
959
+ | identification? payloadFeatureSpecializationPart valuePart?
960
+ | ownedFeatureTyping ( ownedMultiplicity)?
961
+ | ownedMultiplicity ( ownedFeatureTyping)?
962
+ ;
963
+
964
+ payloadFeatureSpecializationPart
965
+ : featureSpecialization+ multiplicityPart? featureSpecialization*
966
+ | multiplicityPart featureSpecialization+
967
+ ;
968
+
969
+ flowEndMember
970
+ : flowEnd
971
+ ;
972
+
973
+ flowEnd
974
+ : qualifiedName (DOT qualifiedName)*
975
+ ;
976
+
977
+ flowFeatureMember
978
+ : flowFeature
979
+ ;
980
+
981
+ flowFeature
982
+ : flowFeatureRedefinition
983
+ ;
984
+
985
+ flowFeatureRedefinition
986
+ : qualifiedName
987
+ ;
988
+
989
+ valuePart
990
+ : featureValue
991
+ ;
992
+
993
+ featureValue
994
+ : (EQ | COLON_EQ | DEFAULT ( EQ | COLON_EQ)?) ownedExpression
995
+ ;
996
+
997
+ multiplicity
998
+ : multiplicitySubset
999
+ | multiplicityRange
1000
+ ;
1001
+
1002
+ multiplicitySubset
1003
+ : MULTIPLICITY identification? subsets typeBody
1004
+ ;
1005
+
1006
+ multiplicityRange
1007
+ : MULTIPLICITY identification? multiplicityBounds typeBody
1008
+ ;
1009
+
1010
+ ownedMultiplicity
1011
+ : ownedMultiplicityRange
1012
+ ;
1013
+
1014
+ ownedMultiplicityRange
1015
+ : multiplicityBounds
1016
+ ;
1017
+
1018
+ multiplicityBounds
1019
+ : LBRACK (multiplicityExpressionMember DOT_DOT)? multiplicityExpressionMember RBRACK
1020
+ ;
1021
+
1022
+ multiplicityExpressionMember
1023
+ : (literalExpression | featureReferenceExpression)
1024
+ ;
1025
+
1026
+ metaclass
1027
+ : typePrefix METACLASS classifierDeclaration typeBody
1028
+ ;
1029
+
1030
+ prefixMetadataAnnotation
1031
+ : HASH prefixMetadataFeature
1032
+ | HASH prefixMetadataUsage
1033
+ ;
1034
+
1035
+ prefixMetadataMember
1036
+ : HASH prefixMetadataFeature
1037
+ | HASH prefixMetadataUsage
1038
+ ;
1039
+
1040
+ prefixMetadataFeature
1041
+ : ownedFeatureTyping
1042
+ ;
1043
+
1044
+ metadataFeature
1045
+ : (prefixMetadataMember)* (AT_SIGN | METADATA) metadataFeatureDeclaration (
1046
+ ABOUT annotation ( COMMA annotation)*
1047
+ )? metadataBody
1048
+ ;
1049
+
1050
+ metadataFeatureDeclaration
1051
+ : (identification? ( COLON | TYPED BY))? ownedFeatureTyping
1052
+ ;
1053
+
1054
+ metadataBody
1055
+ : SEMI
1056
+ | LBRACE ( metadataBodyElement)* RBRACE
1057
+ | LBRACE (definitionMember | metadataBodyUsageMember | aliasMember | importRule)* RBRACE
1058
+ ;
1059
+
1060
+ metadataBodyElement
1061
+ : nonFeatureMember
1062
+ | metadataBodyFeatureMember
1063
+ | aliasMember
1064
+ | importRule
1065
+ ;
1066
+
1067
+ metadataBodyFeatureMember
1068
+ : metadataBodyFeature
1069
+ ;
1070
+
1071
+ metadataBodyFeature
1072
+ : FEATURE? (COLON_GT_GT | REDEFINES)? ownedRedefinition featureSpecializationPart? valuePart? metadataBody
1073
+ ;
1074
+
1075
+ package
1076
+ : (prefixMetadataMember)* packageDeclaration packageBody
1077
+ ;
1078
+
1079
+ libraryPackage
1080
+ : (STANDARD)? LIBRARY (prefixMetadataMember)* packageDeclaration packageBody
1081
+ ;
1082
+
1083
+ packageDeclaration
1084
+ : PACKAGE identification?
1085
+ ;
1086
+
1087
+ packageBody
1088
+ : SEMI
1089
+ | LBRACE packageBodyElement* RBRACE
1090
+ ;
1091
+
1092
+ elementFilterMember
1093
+ : memberPrefix FILTER ownedExpression SEMI
1094
+ ;
1095
+
1096
+ dependencyDeclaration
1097
+ : (identification? FROM)? qualifiedName (COMMA qualifiedName)* TO qualifiedName (
1098
+ COMMA qualifiedName
1099
+ )*
1100
+ ;
1101
+
1102
+ annotatingMember
1103
+ : annotatingElement
1104
+ ;
1105
+
1106
+ packageBodyElement
1107
+ : packageMember
1108
+ | elementFilterMember
1109
+ | aliasMember
1110
+ | importRule
1111
+ ;
1112
+
1113
+ packageMember
1114
+ : memberPrefix (definitionElement | usageElement)
1115
+ ;
1116
+
1117
+ definitionElement
1118
+ : package
1119
+ | libraryPackage
1120
+ | annotatingElement
1121
+ | dependency
1122
+ | attributeDefinition
1123
+ | enumerationDefinition
1124
+ | occurrenceDefinition
1125
+ | individualDefinition
1126
+ | itemDefinition
1127
+ | partDefinition
1128
+ | connectionDefinition
1129
+ | flowDefinition
1130
+ | interfaceDefinition
1131
+ | portDefinition
1132
+ | actionDefinition
1133
+ | calculationDefinition
1134
+ | stateDefinition
1135
+ | constraintDefinition
1136
+ | requirementDefinition
1137
+ | concernDefinition
1138
+ | caseDefinition
1139
+ | analysisCaseDefinition
1140
+ | verificationCaseDefinition
1141
+ | useCaseDefinition
1142
+ | viewDefinition
1143
+ | viewpointDefinition
1144
+ | renderingDefinition
1145
+ | metadataDefinition
1146
+ | allocationDefinition
1147
+ | extendedDefinition
1148
+ ;
1149
+
1150
+ usageElement
1151
+ : nonOccurrenceUsageElement
1152
+ | occurrenceUsageElement
1153
+ ;
1154
+
1155
+ basicDefinitionPrefix
1156
+ : ABSTRACT
1157
+ | VARIATION
1158
+ ;
1159
+
1160
+ definitionExtensionKeyword
1161
+ : prefixMetadataMember
1162
+ ;
1163
+
1164
+ definitionPrefix
1165
+ : basicDefinitionPrefix? definitionExtensionKeyword*
1166
+ ;
1167
+
1168
+ definition
1169
+ : definitionDeclaration definitionBody
1170
+ ;
1171
+
1172
+ definitionDeclaration
1173
+ : identification? subclassificationPart?
1174
+ ;
1175
+
1176
+ definitionBody
1177
+ : SEMI
1178
+ | LBRACE definitionBodyItem* RBRACE
1179
+ ;
1180
+
1181
+ definitionBodyItem
1182
+ : importRule
1183
+ | memberPrefix definitionBodyItemContent
1184
+ | ( sourceSuccessionMember)? memberPrefix endOccurrenceUsageElement
1185
+ | ( sourceSuccessionMember)? memberPrefix occurrenceUsageElement
1186
+ ;
1187
+
1188
+ // Factored dispatch: after memberPrefix is consumed, the next token
1189
+ // (ALIAS, VARIANT, keyword, or identifier) unambiguously selects the branch.
1190
+ // This reduces the SLL prediction DFA from 6 nullable-prefix alternatives to 3+4.
1191
+ definitionBodyItemContent
1192
+ : ALIAS (LT name GT)? (name)? FOR qualifiedName relationshipBody
1193
+ | VARIANT variantUsageElement
1194
+ | definitionElement
1195
+ | nonOccurrenceUsageElement
1196
+ ;
1197
+
1198
+ definitionMember
1199
+ : memberPrefix definitionElement
1200
+ ;
1201
+
1202
+ variantUsageMember
1203
+ : memberPrefix VARIANT variantUsageElement
1204
+ ;
1205
+
1206
+ nonOccurrenceUsageMember
1207
+ : memberPrefix nonOccurrenceUsageElement
1208
+ ;
1209
+
1210
+ occurrenceUsageMember
1211
+ : memberPrefix occurrenceUsageElement
1212
+ ;
1213
+
1214
+ structureUsageMember
1215
+ : memberPrefix structureUsageElement
1216
+ ;
1217
+
1218
+ behaviorUsageMember
1219
+ : memberPrefix behaviorUsageElement
1220
+ ;
1221
+
1222
+ refPrefix
1223
+ : (featureDirection)? (DERIVED)? (ABSTRACT | VARIATION)? (CONSTANT)?
1224
+ ;
1225
+
1226
+ basicUsagePrefix
1227
+ : refPrefix (REF)?
1228
+ ;
1229
+
1230
+ endUsagePrefix
1231
+ : END ownedCrossFeatureMember
1232
+ ;
1233
+
1234
+ usageExtensionKeyword
1235
+ : prefixMetadataMember
1236
+ ;
1237
+
1238
+ unextendedUsagePrefix
1239
+ : endUsagePrefix
1240
+ | basicUsagePrefix
1241
+ ;
1242
+
1243
+ usagePrefix
1244
+ : unextendedUsagePrefix usageExtensionKeyword*
1245
+ ;
1246
+
1247
+ usage
1248
+ : usageDeclaration? usageCompletion
1249
+ ;
1250
+
1251
+ usageDeclaration
1252
+ : identification featureSpecializationPart?
1253
+ | featureSpecializationPart
1254
+ ;
1255
+
1256
+ usageCompletion
1257
+ : valuePart? usageBody
1258
+ ;
1259
+
1260
+ usageBody
1261
+ : definitionBody
1262
+ ;
1263
+
1264
+ defaultReferenceUsage
1265
+ : refPrefix usage
1266
+ ;
1267
+
1268
+ referenceUsage
1269
+ : (endUsagePrefix | refPrefix) REF usage
1270
+ ;
1271
+
1272
+ // Unnamed end feature with specialization (e.g., end :>> QualifiedName;)
1273
+ // Handles end features in connection/flow/interface definition bodies
1274
+ // where no name is given, only a redefines/subsets/typing.
1275
+ endFeatureUsage
1276
+ : endUsagePrefix featureDeclaration usageCompletion
1277
+ ;
1278
+
1279
+ variantReference
1280
+ : ownedReferenceSubsetting featureSpecialization* usageBody
1281
+ ;
1282
+
1283
+ nonOccurrenceUsageElement
1284
+ : referenceUsage
1285
+ | endFeatureUsage
1286
+ | attributeUsage
1287
+ | enumerationUsage
1288
+ | bindingConnectorAsUsage
1289
+ | successionAsUsage
1290
+ | extendedUsage
1291
+ | defaultReferenceUsage
1292
+ ;
1293
+
1294
+ // end [multiplicity] <occurrence-keyword> — e.g. end [1] port p : P;
1295
+ // The END keyword marks a feature as a connection/interface/flow endpoint.
1296
+ // The optional multiplicity constrains the end feature cardinality.
1297
+ endOccurrenceUsageElement
1298
+ : END (name)? (ownedCrossMultiplicityMember)? (NONUNIQUE)? occurrenceUsageElement
1299
+ ;
1300
+
1301
+ occurrenceUsageElement
1302
+ : structureUsageElement
1303
+ | behaviorUsageElement
1304
+ ;
1305
+
1306
+ structureUsageElement
1307
+ : occurrenceUsage
1308
+ | individualUsage
1309
+ | portionUsage
1310
+ | eventOccurrenceUsage
1311
+ | itemUsage
1312
+ | partUsage
1313
+ | viewUsage
1314
+ | renderingUsage
1315
+ | portUsage
1316
+ | connectionUsage
1317
+ | interfaceUsage
1318
+ | allocationUsage
1319
+ | message
1320
+ | flowUsage
1321
+ | successionFlowUsage
1322
+ ;
1323
+
1324
+ behaviorUsageElement
1325
+ : actionUsage
1326
+ | calculationUsage
1327
+ | stateUsage
1328
+ | constraintUsage
1329
+ | requirementUsage
1330
+ | concernUsage
1331
+ | caseUsage
1332
+ | analysisCaseUsage
1333
+ | verificationCaseUsage
1334
+ | useCaseUsage
1335
+ | viewpointUsage
1336
+ | performActionUsage
1337
+ | exhibitStateUsage
1338
+ | includeUseCaseUsage
1339
+ | assertConstraintUsage
1340
+ | satisfyRequirementUsage
1341
+ ;
1342
+
1343
+ variantUsageElement
1344
+ : variantReference
1345
+ | referenceUsage
1346
+ | attributeUsage
1347
+ | bindingConnectorAsUsage
1348
+ | successionAsUsage
1349
+ | occurrenceUsage
1350
+ | individualUsage
1351
+ | portionUsage
1352
+ | eventOccurrenceUsage
1353
+ | itemUsage
1354
+ | partUsage
1355
+ | viewUsage
1356
+ | renderingUsage
1357
+ | portUsage
1358
+ | connectionUsage
1359
+ | interfaceUsage
1360
+ | allocationUsage
1361
+ | message
1362
+ | flowUsage
1363
+ | successionFlowUsage
1364
+ | behaviorUsageElement
1365
+ ;
1366
+
1367
+ subclassificationPart
1368
+ : (COLON_GT | SPECIALIZES) ownedSubclassification (COMMA ownedSubclassification)*
1369
+ ;
1370
+
1371
+ attributeDefinition
1372
+ : definitionPrefix ATTRIBUTE DEF definition
1373
+ ;
1374
+
1375
+ attributeUsage
1376
+ : usagePrefix ATTRIBUTE usage
1377
+ ;
1378
+
1379
+ enumerationDefinition
1380
+ : definitionExtensionKeyword* ENUM DEF definitionDeclaration enumerationBody
1381
+ ;
1382
+
1383
+ enumerationBody
1384
+ : SEMI
1385
+ | LBRACE ( annotatingMember | enumerationUsageMember)* RBRACE
1386
+ ;
1387
+
1388
+ enumerationUsageMember
1389
+ : (prefixMetadataMember)* memberPrefix enumeratedValue
1390
+ ;
1391
+
1392
+ enumeratedValue
1393
+ : ENUM? usage
1394
+ ;
1395
+
1396
+ enumerationUsage
1397
+ : usagePrefix ENUM usage
1398
+ ;
1399
+
1400
+ occurrenceDefinitionPrefix
1401
+ : basicDefinitionPrefix? (INDIVIDUAL emptyMultiplicityMember)? definitionExtensionKeyword*
1402
+ ;
1403
+
1404
+ occurrenceDefinition
1405
+ : occurrenceDefinitionPrefix OCCURRENCE DEF definition
1406
+ ;
1407
+
1408
+ individualDefinition
1409
+ : basicDefinitionPrefix? INDIVIDUAL definitionExtensionKeyword* DEF definition emptyMultiplicityMember
1410
+ ;
1411
+
1412
+ emptyMultiplicityMember
1413
+ : emptyMultiplicity_
1414
+ ;
1415
+
1416
+ occurrenceUsagePrefix
1417
+ : basicUsagePrefix (INDIVIDUAL)? (portionKind)? usageExtensionKeyword*
1418
+ ;
1419
+
1420
+ occurrenceUsage
1421
+ : occurrenceUsagePrefix OCCURRENCE usage
1422
+ ;
1423
+
1424
+ individualUsage
1425
+ : basicUsagePrefix INDIVIDUAL usageExtensionKeyword* usage
1426
+ ;
1427
+
1428
+ portionUsage
1429
+ : basicUsagePrefix (INDIVIDUAL)? portionKind usageExtensionKeyword* usage
1430
+ ;
1431
+
1432
+ portionKind
1433
+ : SNAPSHOT
1434
+ | TIMESLICE
1435
+ ;
1436
+
1437
+ eventOccurrenceUsage
1438
+ : occurrenceUsagePrefix EVENT (
1439
+ ownedReferenceSubsetting featureSpecializationPart?
1440
+ | OCCURRENCE usageDeclaration?
1441
+ ) usageCompletion
1442
+ ;
1443
+
1444
+ sourceSuccessionMember
1445
+ : THEN sourceSuccession
1446
+ ;
1447
+
1448
+ sourceSuccession
1449
+ : sourceEndMember
1450
+ ;
1451
+
1452
+ sourceEndMember
1453
+ : sourceEnd
1454
+ ;
1455
+
1456
+ sourceEnd
1457
+ : (ownedMultiplicity)?
1458
+ ;
1459
+
1460
+ itemDefinition
1461
+ : occurrenceDefinitionPrefix ITEM DEF definition
1462
+ ;
1463
+
1464
+ itemUsage
1465
+ : occurrenceUsagePrefix ITEM usage
1466
+ ;
1467
+
1468
+ partDefinition
1469
+ : occurrenceDefinitionPrefix PART DEF definition
1470
+ ;
1471
+
1472
+ partUsage
1473
+ : occurrenceUsagePrefix PART usage
1474
+ ;
1475
+
1476
+ portDefinition
1477
+ : definitionPrefix PORT DEF definition conjugatedPortDefinitionMember
1478
+ ;
1479
+
1480
+ conjugatedPortDefinitionMember
1481
+ : conjugatedPortDefinition
1482
+ ;
1483
+
1484
+ conjugatedPortDefinition
1485
+ : portConjugation
1486
+ ;
1487
+
1488
+ portUsage
1489
+ : occurrenceUsagePrefix PORT usage
1490
+ ;
1491
+
1492
+ conjugatedPortTyping
1493
+ : TILDE qualifiedName
1494
+ ;
1495
+
1496
+ connectionDefinition
1497
+ : occurrenceDefinitionPrefix CONNECTION DEF definition
1498
+ ;
1499
+
1500
+ connectionUsage
1501
+ : occurrenceUsagePrefix (
1502
+ CONNECTION usageDeclaration? valuePart? ( CONNECT connectorPart)?
1503
+ | CONNECT connectorPart
1504
+ ) usageBody
1505
+ ;
1506
+
1507
+ connectorPart
1508
+ : binaryConnectorPart
1509
+ | naryConnectorPart
1510
+ ;
1511
+
1512
+ binaryConnectorPart
1513
+ : connectorEndMember TO connectorEndMember
1514
+ ;
1515
+
1516
+ naryConnectorPart
1517
+ : LPAREN connectorEndMember COMMA connectorEndMember (COMMA connectorEndMember)* RPAREN
1518
+ ;
1519
+
1520
+ bindingConnectorAsUsage
1521
+ : usagePrefix (BINDING usageDeclaration?)? BIND connectorEndMember EQ connectorEndMember usageBody
1522
+ ;
1523
+
1524
+ successionAsUsage
1525
+ : usagePrefix (SUCCESSION usageDeclaration?)? FIRST connectorEndMember THEN connectorEndMember usageBody
1526
+ ;
1527
+
1528
+ interfaceDefinition
1529
+ : occurrenceDefinitionPrefix INTERFACE DEF definitionDeclaration interfaceBody
1530
+ ;
1531
+
1532
+ interfaceBody
1533
+ : SEMI
1534
+ | LBRACE interfaceBodyItem* RBRACE
1535
+ ;
1536
+
1537
+ interfaceBodyItem
1538
+ : definitionMember
1539
+ | variantUsageMember
1540
+ | interfaceNonOccurrenceUsageMember
1541
+ | ( sourceSuccessionMember)? interfaceOccurrenceUsageMember
1542
+ | aliasMember
1543
+ | importRule
1544
+ ;
1545
+
1546
+ interfaceNonOccurrenceUsageMember
1547
+ : memberPrefix interfaceNonOccurrenceUsageElement
1548
+ ;
1549
+
1550
+ interfaceNonOccurrenceUsageElement
1551
+ : referenceUsage
1552
+ | attributeUsage
1553
+ | enumerationUsage
1554
+ | bindingConnectorAsUsage
1555
+ | successionAsUsage
1556
+ ;
1557
+
1558
+ interfaceOccurrenceUsageMember
1559
+ : memberPrefix interfaceOccurrenceUsageElement
1560
+ ;
1561
+
1562
+ interfaceOccurrenceUsageElement
1563
+ : defaultInterfaceEnd
1564
+ | endOccurrenceUsageElement
1565
+ | structureUsageElement
1566
+ | behaviorUsageElement
1567
+ ;
1568
+
1569
+ defaultInterfaceEnd
1570
+ : END usage
1571
+ ;
1572
+
1573
+ interfaceUsage
1574
+ : occurrenceUsagePrefix INTERFACE interfaceUsageDeclaration interfaceBody
1575
+ ;
1576
+
1577
+ interfaceUsageDeclaration
1578
+ : usageDeclaration? valuePart? (CONNECT interfacePart)?
1579
+ | interfacePart
1580
+ ;
1581
+
1582
+ interfacePart
1583
+ : binaryInterfacePart
1584
+ | naryInterfacePart
1585
+ ;
1586
+
1587
+ binaryInterfacePart
1588
+ : interfaceEndMember TO interfaceEndMember
1589
+ ;
1590
+
1591
+ naryInterfacePart
1592
+ : LPAREN interfaceEndMember COMMA interfaceEndMember (COMMA interfaceEndMember)* RPAREN
1593
+ ;
1594
+
1595
+ interfaceEndMember
1596
+ : interfaceEnd
1597
+ ;
1598
+
1599
+ interfaceEnd
1600
+ : (ownedCrossMultiplicityMember)? (name ( COLON_COLON_GT | REFERENCES))? ownedReferenceSubsetting ownedMultiplicity?
1601
+ ;
1602
+
1603
+ allocationDefinition
1604
+ : occurrenceDefinitionPrefix ALLOCATION DEF definition
1605
+ ;
1606
+
1607
+ allocationUsage
1608
+ : occurrenceUsagePrefix allocationUsageDeclaration usageBody
1609
+ ;
1610
+
1611
+ allocationUsageDeclaration
1612
+ : ALLOCATION usageDeclaration? (ALLOCATE connectorPart)?
1613
+ | ALLOCATE connectorPart
1614
+ ;
1615
+
1616
+ flowDefinition
1617
+ : occurrenceDefinitionPrefix FLOW DEF definition
1618
+ ;
1619
+
1620
+ message
1621
+ : occurrenceUsagePrefix MESSAGE messageDeclaration definitionBody
1622
+ ;
1623
+
1624
+ messageDeclaration
1625
+ : usageDeclaration? valuePart? (OF flowPayloadFeatureMember)? (
1626
+ FROM messageEventMember TO messageEventMember
1627
+ )?
1628
+ | messageEventMember TO messageEventMember
1629
+ ;
1630
+
1631
+ messageEventMember
1632
+ : messageEvent
1633
+ ;
1634
+
1635
+ messageEvent
1636
+ : ownedReferenceSubsetting
1637
+ ;
1638
+
1639
+ flowUsage
1640
+ : occurrenceUsagePrefix FLOW flowDeclaration definitionBody
1641
+ ;
1642
+
1643
+ successionFlowUsage
1644
+ : occurrenceUsagePrefix SUCCESSION FLOW flowDeclaration definitionBody
1645
+ ;
1646
+
1647
+ flowPayloadFeatureMember
1648
+ : flowPayloadFeature
1649
+ ;
1650
+
1651
+ flowPayloadFeature
1652
+ : payloadFeature
1653
+ ;
1654
+
1655
+ flowEndSubsetting
1656
+ : qualifiedName
1657
+ | featureChainPrefix
1658
+ ;
1659
+
1660
+ featureChainPrefix
1661
+ : (ownedFeatureChaining DOT)+ ownedFeatureChaining DOT
1662
+ ;
1663
+
1664
+ actionDefinition
1665
+ : occurrenceDefinitionPrefix ACTION DEF definitionDeclaration actionBody
1666
+ ;
1667
+
1668
+ actionBody
1669
+ : SEMI
1670
+ | LBRACE actionBodyItem* RBRACE
1671
+ ;
1672
+
1673
+ actionBodyItem
1674
+ : nonBehaviorBodyItem
1675
+ | initialNodeMember ( actionTargetSuccessionMember)*
1676
+ | (sourceSuccessionMember)? actionBehaviorMember (actionTargetSuccessionMember)*
1677
+ | guardedSuccessionMember
1678
+ ;
1679
+
1680
+ nonBehaviorBodyItem
1681
+ : importRule
1682
+ | aliasMember
1683
+ | definitionMember
1684
+ | variantUsageMember
1685
+ | nonOccurrenceUsageMember
1686
+ | ( sourceSuccessionMember)? structureUsageMember
1687
+ ;
1688
+
1689
+ actionBehaviorMember
1690
+ : actionNodeMember
1691
+ | behaviorUsageMember
1692
+ ;
1693
+
1694
+ initialNodeMember
1695
+ : memberPrefix FIRST qualifiedName relationshipBody
1696
+ ;
1697
+
1698
+ actionNodeMember
1699
+ : memberPrefix actionNode
1700
+ ;
1701
+
1702
+ actionTargetSuccessionMember
1703
+ : memberPrefix actionTargetSuccession
1704
+ ;
1705
+
1706
+ guardedSuccessionMember
1707
+ : memberPrefix guardedSuccession
1708
+ ;
1709
+
1710
+ actionUsage
1711
+ : occurrenceUsagePrefix ACTION actionUsageDeclaration actionBody
1712
+ ;
1713
+
1714
+ actionUsageDeclaration
1715
+ : usageDeclaration? valuePart?
1716
+ ;
1717
+
1718
+ performActionUsage
1719
+ : occurrenceUsagePrefix PERFORM performActionUsageDeclaration actionBody
1720
+ ;
1721
+
1722
+ performActionUsageDeclaration
1723
+ : (ownedReferenceSubsetting featureSpecializationPart? | ACTION usageDeclaration?) valuePart?
1724
+ ;
1725
+
1726
+ actionNode
1727
+ : controlNode
1728
+ | sendNode
1729
+ | acceptNode
1730
+ | assignmentNode
1731
+ | terminateNode
1732
+ | ifNode
1733
+ | whileLoopNode
1734
+ | forLoopNode
1735
+ ;
1736
+
1737
+ actionNodeUsageDeclaration
1738
+ : ACTION usageDeclaration?
1739
+ ;
1740
+
1741
+ actionNodePrefix
1742
+ : occurrenceUsagePrefix actionNodeUsageDeclaration?
1743
+ ;
1744
+
1745
+ controlNode
1746
+ : mergeNode
1747
+ | decisionNode
1748
+ | joinNode
1749
+ | forkNode
1750
+ ;
1751
+
1752
+ controlNodePrefix
1753
+ : refPrefix (INDIVIDUAL)? (portionKind)? usageExtensionKeyword*
1754
+ ;
1755
+
1756
+ mergeNode
1757
+ : controlNodePrefix MERGE usageDeclaration? actionBody
1758
+ ;
1759
+
1760
+ decisionNode
1761
+ : controlNodePrefix DECIDE usageDeclaration? actionBody
1762
+ ;
1763
+
1764
+ joinNode
1765
+ : controlNodePrefix JOIN usageDeclaration? actionBody
1766
+ ;
1767
+
1768
+ forkNode
1769
+ : controlNodePrefix FORK usageDeclaration? actionBody
1770
+ ;
1771
+
1772
+ acceptNode
1773
+ : occurrenceUsagePrefix acceptNodeDeclaration actionBody
1774
+ ;
1775
+
1776
+ acceptNodeDeclaration
1777
+ : actionNodeUsageDeclaration? ACCEPT acceptParameterPart
1778
+ ;
1779
+
1780
+ acceptParameterPart
1781
+ : payloadParameterMember (VIA nodeParameterMember)?
1782
+ ;
1783
+
1784
+ payloadParameterMember
1785
+ : payloadParameter
1786
+ ;
1787
+
1788
+ payloadParameter
1789
+ : payloadFeature
1790
+ | identification? payloadFeatureSpecializationPart? triggerValuePart
1791
+ ;
1792
+
1793
+ triggerValuePart
1794
+ : triggerFeatureValue
1795
+ ;
1796
+
1797
+ triggerFeatureValue
1798
+ : triggerExpression
1799
+ ;
1800
+
1801
+ triggerExpression
1802
+ : (AT | AFTER) argumentMember
1803
+ | WHEN argumentExpressionMember
1804
+ ;
1805
+
1806
+ sendNode
1807
+ : occurrenceUsagePrefix (actionNodeUsageDeclaration | actionUsageDeclaration) SEND (
1808
+ nodeParameterMember senderReceiverPart?
1809
+ | emptyParameterMember senderReceiverPart?
1810
+ ) actionBody
1811
+ ;
1812
+
1813
+ sendNodeDeclaration
1814
+ : actionNodeUsageDeclaration? SEND nodeParameterMember senderReceiverPart?
1815
+ ;
1816
+
1817
+ senderReceiverPart
1818
+ : VIA nodeParameterMember (TO nodeParameterMember)?
1819
+ | emptyParameterMember TO nodeParameterMember
1820
+ ;
1821
+
1822
+ nodeParameterMember
1823
+ : nodeParameter
1824
+ ;
1825
+
1826
+ nodeParameter
1827
+ : featureBinding
1828
+ ;
1829
+
1830
+ featureBinding
1831
+ : ownedExpression
1832
+ ;
1833
+
1834
+ emptyParameterMember
1835
+ : emptyUsage_
1836
+ ;
1837
+
1838
+ assignmentNode
1839
+ : occurrenceUsagePrefix assignmentNodeDeclaration actionBody
1840
+ ;
1841
+
1842
+ assignmentNodeDeclaration
1843
+ : (actionNodeUsageDeclaration)? ASSIGN assignmentTargetMember featureChainMember COLON_EQ nodeParameterMember
1844
+ ;
1845
+
1846
+ assignmentTargetMember
1847
+ : assignmentTargetParameter
1848
+ ;
1849
+
1850
+ assignmentTargetParameter
1851
+ : (assignmentTargetBinding DOT)?
1852
+ ;
1853
+
1854
+ assignmentTargetBinding
1855
+ : nonFeatureChainPrimaryExpression
1856
+ ;
1857
+
1858
+ terminateNode
1859
+ : occurrenceUsagePrefix actionNodeUsageDeclaration? TERMINATE (nodeParameterMember)? actionBody
1860
+ ;
1861
+
1862
+ ifNode
1863
+ : actionNodePrefix IF expressionParameterMember actionBodyParameterMember (
1864
+ ELSE ( actionBodyParameterMember | ifNodeParameterMember)
1865
+ )?
1866
+ ;
1867
+
1868
+ expressionParameterMember
1869
+ : ownedExpression
1870
+ ;
1871
+
1872
+ actionBodyParameterMember
1873
+ : actionBodyParameter
1874
+ ;
1875
+
1876
+ actionBodyParameter
1877
+ : (ACTION usageDeclaration?)? LBRACE actionBodyItem* RBRACE
1878
+ ;
1879
+
1880
+ ifNodeParameterMember
1881
+ : ifNode
1882
+ ;
1883
+
1884
+ whileLoopNode
1885
+ : actionNodePrefix (WHILE expressionParameterMember | LOOP emptyParameterMember) actionBodyParameterMember (
1886
+ UNTIL expressionParameterMember SEMI
1887
+ )?
1888
+ ;
1889
+
1890
+ forLoopNode
1891
+ : actionNodePrefix FOR forVariableDeclarationMember IN nodeParameterMember actionBodyParameterMember
1892
+ ;
1893
+
1894
+ forVariableDeclarationMember
1895
+ : usageDeclaration?
1896
+ ;
1897
+
1898
+ forVariableDeclaration
1899
+ : usageDeclaration?
1900
+ ;
1901
+
1902
+ actionTargetSuccession
1903
+ : (targetSuccession | guardedTargetSuccession | defaultTargetSuccession) usageBody
1904
+ ;
1905
+
1906
+ targetSuccession
1907
+ : sourceEndMember THEN connectorEndMember
1908
+ ;
1909
+
1910
+ guardedTargetSuccession
1911
+ : guardExpressionMember THEN transitionSuccessionMember
1912
+ ;
1913
+
1914
+ defaultTargetSuccession
1915
+ : ELSE transitionSuccessionMember
1916
+ ;
1917
+
1918
+ guardedSuccession
1919
+ : (SUCCESSION usageDeclaration?)? FIRST featureChainMember guardExpressionMember THEN transitionSuccessionMember usageBody
1920
+ ;
1921
+
1922
+ stateDefinition
1923
+ : occurrenceDefinitionPrefix STATE DEF definitionDeclaration stateDefBody
1924
+ ;
1925
+
1926
+ stateDefBody
1927
+ : SEMI
1928
+ | ( PARALLEL)? LBRACE stateBodyItem* RBRACE
1929
+ ;
1930
+
1931
+ stateBodyItem
1932
+ : nonBehaviorBodyItem
1933
+ | (sourceSuccessionMember)? behaviorUsageMember (targetTransitionUsageMember)*
1934
+ | transitionUsageMember
1935
+ | entryActionMember ( entryTransitionMember)*
1936
+ | doActionMember
1937
+ | exitActionMember
1938
+ ;
1939
+
1940
+ entryActionMember
1941
+ : memberPrefix ENTRY stateActionUsage
1942
+ ;
1943
+
1944
+ doActionMember
1945
+ : memberPrefix DO stateActionUsage
1946
+ ;
1947
+
1948
+ exitActionMember
1949
+ : memberPrefix EXIT stateActionUsage
1950
+ ;
1951
+
1952
+ entryTransitionMember
1953
+ : memberPrefix (guardedTargetSuccession | THEN transitionSuccessionMember) SEMI
1954
+ ;
1955
+
1956
+ stateActionUsage
1957
+ : emptyActionUsage_ SEMI
1958
+ | statePerformActionUsage
1959
+ | stateAcceptActionUsage
1960
+ | stateSendActionUsage
1961
+ | stateAssignmentActionUsage
1962
+ ;
1963
+
1964
+ statePerformActionUsage
1965
+ : performActionUsageDeclaration actionBody
1966
+ ;
1967
+
1968
+ stateAcceptActionUsage
1969
+ : acceptNodeDeclaration actionBody
1970
+ ;
1971
+
1972
+ stateSendActionUsage
1973
+ : sendNodeDeclaration actionBody
1974
+ ;
1975
+
1976
+ stateAssignmentActionUsage
1977
+ : assignmentNodeDeclaration actionBody
1978
+ ;
1979
+
1980
+ transitionUsageMember
1981
+ : memberPrefix transitionUsage
1982
+ ;
1983
+
1984
+ targetTransitionUsageMember
1985
+ : memberPrefix targetTransitionUsage
1986
+ ;
1987
+
1988
+ stateUsage
1989
+ : occurrenceUsagePrefix STATE actionUsageDeclaration stateUsageBody
1990
+ ;
1991
+
1992
+ stateUsageBody
1993
+ : SEMI
1994
+ | ( PARALLEL)? LBRACE stateBodyItem* RBRACE
1995
+ ;
1996
+
1997
+ exhibitStateUsage
1998
+ : occurrenceUsagePrefix EXHIBIT (
1999
+ ownedReferenceSubsetting featureSpecializationPart?
2000
+ | STATE usageDeclaration?
2001
+ ) valuePart? stateUsageBody
2002
+ ;
2003
+
2004
+ transitionUsage
2005
+ : TRANSITION (usageDeclaration? FIRST)? featureChainMember emptyParameterMember (
2006
+ emptyParameterMember triggerActionMember
2007
+ )? (guardExpressionMember)? (effectBehaviorMember)? THEN transitionSuccessionMember actionBody
2008
+ ;
2009
+
2010
+ targetTransitionUsage
2011
+ : emptyParameterMember (
2012
+ TRANSITION (emptyParameterMember triggerActionMember)? (guardExpressionMember)? (
2013
+ effectBehaviorMember
2014
+ )?
2015
+ | emptyParameterMember triggerActionMember (guardExpressionMember)? (effectBehaviorMember)?
2016
+ | guardExpressionMember ( effectBehaviorMember)?
2017
+ )? THEN transitionSuccessionMember actionBody
2018
+ ;
2019
+
2020
+ triggerActionMember
2021
+ : ACCEPT triggerAction
2022
+ ;
2023
+
2024
+ triggerAction
2025
+ : acceptParameterPart
2026
+ ;
2027
+
2028
+ guardExpressionMember
2029
+ : IF ownedExpression
2030
+ ;
2031
+
2032
+ effectBehaviorMember
2033
+ : DO effectBehaviorUsage
2034
+ ;
2035
+
2036
+ effectBehaviorUsage
2037
+ : emptyActionUsage_
2038
+ | transitionPerformActionUsage
2039
+ | transitionAcceptActionUsage
2040
+ | transitionSendActionUsage
2041
+ | transitionAssignmentActionUsage
2042
+ ;
2043
+
2044
+ transitionPerformActionUsage
2045
+ : performActionUsageDeclaration (LBRACE actionBodyItem* RBRACE)?
2046
+ ;
2047
+
2048
+ transitionAcceptActionUsage
2049
+ : acceptNodeDeclaration (LBRACE actionBodyItem* RBRACE)?
2050
+ ;
2051
+
2052
+ transitionSendActionUsage
2053
+ : sendNodeDeclaration (LBRACE actionBodyItem* RBRACE)?
2054
+ ;
2055
+
2056
+ transitionAssignmentActionUsage
2057
+ : assignmentNodeDeclaration (LBRACE actionBodyItem* RBRACE)?
2058
+ ;
2059
+
2060
+ transitionSuccessionMember
2061
+ : transitionSuccession
2062
+ ;
2063
+
2064
+ transitionSuccession
2065
+ : emptyEndMember connectorEndMember
2066
+ ;
2067
+
2068
+ emptyEndMember
2069
+ : emptyFeature_
2070
+ ;
2071
+
2072
+ calculationDefinition
2073
+ : occurrenceDefinitionPrefix CALC DEF definitionDeclaration calculationBody
2074
+ ;
2075
+
2076
+ calculationUsage
2077
+ : occurrenceUsagePrefix CALC actionUsageDeclaration calculationBody
2078
+ ;
2079
+
2080
+ calculationBody
2081
+ : SEMI
2082
+ | LBRACE calculationBodyPart RBRACE
2083
+ ;
2084
+
2085
+ calculationBodyPart
2086
+ : calculationBodyItem* (resultExpressionMember)?
2087
+ ;
2088
+
2089
+ calculationBodyItem
2090
+ : actionBodyItem
2091
+ | returnParameterMember
2092
+ ;
2093
+
2094
+ returnParameterMember
2095
+ : memberPrefix RETURN usageElement
2096
+ ;
2097
+
2098
+ constraintDefinition
2099
+ : occurrenceDefinitionPrefix CONSTRAINT DEF definitionDeclaration calculationBody
2100
+ ;
2101
+
2102
+ constraintUsage
2103
+ : occurrenceUsagePrefix CONSTRAINT constraintUsageDeclaration calculationBody
2104
+ ;
2105
+
2106
+ assertConstraintUsage
2107
+ : occurrenceUsagePrefix ASSERT (NOT)? (
2108
+ ownedReferenceSubsetting featureSpecializationPart?
2109
+ | CONSTRAINT constraintUsageDeclaration
2110
+ ) calculationBody
2111
+ ;
2112
+
2113
+ constraintUsageDeclaration
2114
+ : usageDeclaration? valuePart?
2115
+ ;
2116
+
2117
+ requirementDefinition
2118
+ : occurrenceDefinitionPrefix REQUIREMENT DEF definitionDeclaration requirementBody
2119
+ ;
2120
+
2121
+ requirementBody
2122
+ : SEMI
2123
+ | LBRACE requirementBodyItem* RBRACE
2124
+ ;
2125
+
2126
+ requirementBodyItem
2127
+ : definitionBodyItem
2128
+ | subjectMember
2129
+ | requirementConstraintMember
2130
+ | framedConcernMember
2131
+ | requirementVerificationMember
2132
+ | actorMember
2133
+ | stakeholderMember
2134
+ ;
2135
+
2136
+ subjectMember
2137
+ : memberPrefix subjectUsage
2138
+ ;
2139
+
2140
+ subjectUsage
2141
+ : SUBJECT usageExtensionKeyword* usage
2142
+ ;
2143
+
2144
+ requirementConstraintMember
2145
+ : memberPrefix requirementKind requirementConstraintUsage
2146
+ ;
2147
+
2148
+ requirementKind
2149
+ : ASSUME
2150
+ | REQUIRE
2151
+ ;
2152
+
2153
+ requirementConstraintUsage
2154
+ : ownedReferenceSubsetting featureSpecializationPart? requirementBody
2155
+ | (usageExtensionKeyword* CONSTRAINT | usageExtensionKeyword+) constraintUsageDeclaration calculationBody
2156
+ ;
2157
+
2158
+ framedConcernMember
2159
+ : memberPrefix FRAME framedConcernUsage
2160
+ ;
2161
+
2162
+ framedConcernUsage
2163
+ : ownedReferenceSubsetting featureSpecializationPart? calculationBody
2164
+ | (usageExtensionKeyword* CONCERN | usageExtensionKeyword+) calculationUsageDeclaration calculationBody
2165
+ ;
2166
+
2167
+ actorMember
2168
+ : memberPrefix actorUsage
2169
+ ;
2170
+
2171
+ actorUsage
2172
+ : ACTOR usageExtensionKeyword* usage
2173
+ ;
2174
+
2175
+ stakeholderMember
2176
+ : memberPrefix stakeholderUsage
2177
+ ;
2178
+
2179
+ stakeholderUsage
2180
+ : STAKEHOLDER usageExtensionKeyword* usage
2181
+ ;
2182
+
2183
+ requirementUsage
2184
+ : occurrenceUsagePrefix REQUIREMENT constraintUsageDeclaration requirementBody
2185
+ ;
2186
+
2187
+ satisfyRequirementUsage
2188
+ : occurrenceUsagePrefix (ASSERT ( NOT)? | NOT)? SATISFY (
2189
+ ownedReferenceSubsetting featureSpecializationPart?
2190
+ | REQUIREMENT usageDeclaration?
2191
+ ) valuePart? (BY satisfactionSubjectMember)? requirementBody
2192
+ ;
2193
+
2194
+ satisfactionSubjectMember
2195
+ : satisfactionParameter
2196
+ ;
2197
+
2198
+ satisfactionParameter
2199
+ : satisfactionFeatureValue
2200
+ ;
2201
+
2202
+ satisfactionFeatureValue
2203
+ : satisfactionReferenceExpression
2204
+ ;
2205
+
2206
+ satisfactionReferenceExpression
2207
+ : featureChainMember
2208
+ ;
2209
+
2210
+ concernDefinition
2211
+ : occurrenceDefinitionPrefix CONCERN DEF definitionDeclaration requirementBody
2212
+ ;
2213
+
2214
+ concernUsage
2215
+ : occurrenceUsagePrefix CONCERN constraintUsageDeclaration requirementBody
2216
+ ;
2217
+
2218
+ caseDefinition
2219
+ : occurrenceDefinitionPrefix CASE DEF definitionDeclaration caseBody
2220
+ ;
2221
+
2222
+ caseUsage
2223
+ : occurrenceUsagePrefix CASE constraintUsageDeclaration caseBody
2224
+ ;
2225
+
2226
+ caseBody
2227
+ : SEMI
2228
+ | LBRACE caseBodyItem* ( resultExpressionMember)? RBRACE
2229
+ ;
2230
+
2231
+ caseBodyItem
2232
+ : actionBodyItem
2233
+ | returnParameterMember
2234
+ | subjectMember
2235
+ | actorMember
2236
+ | objectiveMember
2237
+ ;
2238
+
2239
+ objectiveMember
2240
+ : memberPrefix OBJECTIVE objectiveRequirementUsage
2241
+ ;
2242
+
2243
+ objectiveRequirementUsage
2244
+ : usageExtensionKeyword* constraintUsageDeclaration requirementBody
2245
+ ;
2246
+
2247
+ analysisCaseDefinition
2248
+ : occurrenceDefinitionPrefix ANALYSIS DEF definitionDeclaration caseBody
2249
+ ;
2250
+
2251
+ analysisCaseUsage
2252
+ : occurrenceUsagePrefix ANALYSIS constraintUsageDeclaration caseBody
2253
+ ;
2254
+
2255
+ verificationCaseDefinition
2256
+ : occurrenceDefinitionPrefix VERIFICATION DEF definitionDeclaration caseBody
2257
+ ;
2258
+
2259
+ verificationCaseUsage
2260
+ : occurrenceUsagePrefix VERIFICATION constraintUsageDeclaration caseBody
2261
+ ;
2262
+
2263
+ requirementVerificationMember
2264
+ : memberPrefix VERIFY requirementVerificationUsage
2265
+ ;
2266
+
2267
+ requirementVerificationUsage
2268
+ : ownedReferenceSubsetting featureSpecialization* requirementBody
2269
+ | (usageExtensionKeyword* REQUIREMENT | usageExtensionKeyword+) constraintUsageDeclaration requirementBody
2270
+ ;
2271
+
2272
+ useCaseDefinition
2273
+ : occurrenceDefinitionPrefix USE CASE DEF definitionDeclaration caseBody
2274
+ ;
2275
+
2276
+ useCaseUsage
2277
+ : occurrenceUsagePrefix USE CASE constraintUsageDeclaration caseBody
2278
+ ;
2279
+
2280
+ includeUseCaseUsage
2281
+ : occurrenceUsagePrefix INCLUDE (
2282
+ ownedReferenceSubsetting featureSpecializationPart?
2283
+ | USE CASE usageDeclaration?
2284
+ ) valuePart? caseBody
2285
+ ;
2286
+
2287
+ viewDefinition
2288
+ : occurrenceDefinitionPrefix VIEW DEF definitionDeclaration viewDefinitionBody
2289
+ ;
2290
+
2291
+ viewDefinitionBody
2292
+ : SEMI
2293
+ | LBRACE viewDefinitionBodyItem* RBRACE
2294
+ ;
2295
+
2296
+ viewDefinitionBodyItem
2297
+ : definitionBodyItem
2298
+ | elementFilterMember
2299
+ | viewRenderingMember
2300
+ ;
2301
+
2302
+ viewRenderingMember
2303
+ : memberPrefix RENDER viewRenderingUsage
2304
+ ;
2305
+
2306
+ viewRenderingUsage
2307
+ : ownedReferenceSubsetting featureSpecializationPart? usageBody
2308
+ | ( usageExtensionKeyword* RENDERING | usageExtensionKeyword+) usage
2309
+ ;
2310
+
2311
+ viewUsage
2312
+ : occurrenceUsagePrefix VIEW usageDeclaration? valuePart? viewBody
2313
+ ;
2314
+
2315
+ viewBody
2316
+ : SEMI
2317
+ | LBRACE viewBodyItem* RBRACE
2318
+ ;
2319
+
2320
+ viewBodyItem
2321
+ : definitionBodyItem
2322
+ | elementFilterMember
2323
+ | viewRenderingMember
2324
+ | expose
2325
+ ;
2326
+
2327
+ expose
2328
+ : EXPOSE (membershipExpose | namespaceExpose) relationshipBody
2329
+ ;
2330
+
2331
+ membershipExpose
2332
+ : membershipImport
2333
+ ;
2334
+
2335
+ namespaceExpose
2336
+ : namespaceImport
2337
+ ;
2338
+
2339
+ viewpointDefinition
2340
+ : occurrenceDefinitionPrefix VIEWPOINT DEF definitionDeclaration requirementBody
2341
+ ;
2342
+
2343
+ viewpointUsage
2344
+ : occurrenceUsagePrefix VIEWPOINT constraintUsageDeclaration requirementBody
2345
+ ;
2346
+
2347
+ renderingDefinition
2348
+ : occurrenceDefinitionPrefix RENDERING DEF definition
2349
+ ;
2350
+
2351
+ renderingUsage
2352
+ : occurrenceUsagePrefix RENDERING usage
2353
+ ;
2354
+
2355
+ metadataDefinition
2356
+ : (ABSTRACT)? definitionExtensionKeyword* METADATA DEF definition
2357
+ ;
2358
+
2359
+ prefixMetadataUsage
2360
+ : ownedFeatureTyping
2361
+ ;
2362
+
2363
+ metadataUsage
2364
+ : usageExtensionKeyword* (AT_SIGN | METADATA) metadataUsageDeclaration (
2365
+ ABOUT annotation ( COMMA annotation)*
2366
+ )? metadataBody
2367
+ ;
2368
+
2369
+ metadataUsageDeclaration
2370
+ : (identification? ( COLON | TYPED BY))? ownedFeatureTyping
2371
+ ;
2372
+
2373
+ metadataBodyUsageMember
2374
+ : metadataBodyUsage
2375
+ ;
2376
+
2377
+ metadataBodyUsage
2378
+ : REF? (COLON_GT_GT | REDEFINES)? ownedRedefinition featureSpecializationPart? valuePart? metadataBody
2379
+ ;
2380
+
2381
+ extendedDefinition
2382
+ : basicDefinitionPrefix? definitionExtensionKeyword+ DEF definition
2383
+ ;
2384
+
2385
+ extendedUsage
2386
+ : unextendedUsagePrefix usageExtensionKeyword+ usage
2387
+ ;
2388
+
2389
+ filterPackageImportDeclaration
2390
+ : membershipImport
2391
+ | namespaceImportDirect
2392
+ ;
2393
+
2394
+ namespaceImportDirect
2395
+ : qualifiedName COLON_COLON STAR (COLON_COLON STAR_STAR)?
2396
+ ;
2397
+
2398
+ // ===== Stub rules for undefined references =====
2399
+ // These rules are referenced in the spec but not fully defined.
2400
+ // They need manual review and completion.
2401
+
2402
+ calculationUsageDeclaration
2403
+ : usageDeclaration? valuePart?
2404
+ ;
2405
+
2406
+ emptyActionUsage_
2407
+ : /* epsilon */
2408
+ ;
2409
+
2410
+ emptyFeature_
2411
+ : /* epsilon */
2412
+ ;
2413
+
2414
+ emptyMultiplicity_
2415
+ : /* epsilon */
2416
+ ;
2417
+
2418
+ emptyUsage_
2419
+ : /* epsilon */
2420
+ ;
2421
+
2422
+ filterPackageImport
2423
+ : IDENTIFIER /* TODO: stub for filterPackageImport */
2424
+ ;
2425
+
2426
+ nonFeatureChainPrimaryExpression
2427
+ : IDENTIFIER /* TODO: stub for nonFeatureChainPrimaryExpression */
2428
+ ;
2429
+
2430
+ portConjugation
2431
+ : /* epsilon */
2432
+ ;