/* | |
* TODO: License and author (Petter Isberg - MDH) | |
*/ | |
grammar org.polarsys.chess.xtext.FlaDsl with org.eclipse.xtext.common.Terminals | |
import "http://www.eclipse.org/uml2/5.0.0/UML" as uml | |
import "http://www.eclipse.org/emf/2002/Ecore" as ecore | |
generate flaDsl "http://www.intecs.org/chess/xtext/FlaDsl" | |
/* | |
* FLA Grammar | |
*/ | |
Behaviour: | |
rules+=Expression+; | |
Expression: | |
'FLA:' lhs=Lhs '->' rhs=Rhs ';'; | |
Lhs: failures+=InputExpression (',' failures+=InputExpression)*; | |
Rhs: failures+=OutputExpression (',' failures+=OutputExpression)*; | |
InputExpression: (ref=[uml::Port]| "undefined") '.' failureExpr=InFailureExpr; | |
OutputExpression: (ref=[uml::Port]| "undefined") '.' failureExpr=OutFailureExpr; | |
InFailureExpr: | |
failures+=WildcardDefinition | | |
failures+=NoFailureDefinition | | |
failures+=FailureDefinition | | |
'{' failures+=FailureDefinition (',' failures+=FailureDefinition)+ '}' | | |
failures+=VariableDefinition | |
; | |
OutFailureExpr: | |
failures+=NoFailureDefinition | | |
failures+=ComplexNofailureDefinition | | |
failures+=FailureDefinition | | |
'{' failures+=FailureDefinition (',' failures+=FailureDefinition)+ '}' | | |
failures+=VariableDefinition | |
; | |
Definitions: FailureDefinition | NoFailureDefinition | ComplexNofailureDefinition | WildcardDefinition | VariableDefinition; | |
FailureDefinition: {FailureDefinition} type = ActualFailureType ('.' acidAvoidable = ACIDavoidable)?; | |
NoFailureDefinition: {NoFailureDefinition} 'noFailure'; | |
ComplexNofailureDefinition: {NoFailureDefinition} 'noFailure' '.' acidMitigation = ACIDMitigation; | |
WildcardDefinition: {WildcardDefinition} 'wildcard'; | |
VariableDefinition: {VariableDefinition} variableName=ID; | |
enum FailureType: NO_FAILURE='noFailure' | EARLY='early'| LATE='late' | COMMISSION='commission' | OMISSION='omission' | VALUE_SUBTLE='valueSubtle' | VALUE_COARSE='valueCoarse' | WILDCARD="wildcard" | VARIABLE='variable'; | |
enum ActualFailureType returns FailureType: EARLY | LATE | COMMISSION | OMISSION | VALUE_SUBTLE | VALUE_COARSE; | |
enum NoFailureType returns FailureType: NO_FAILURE; | |
enum Wildcard returns FailureType: WILDCARD; | |
ACIDavoidable: a = Aavoidable '.' c = Cavoidable '.' i = Iavoidable '.' d = Davoidable; | |
enum Aavoidable: INCOMPLETION='incompletion' | NONE='none' | UNSPECIFIED='unspecified'; | |
enum Cavoidable: INCONSISTENCY='inconsistency' | NONE='none' | UNSPECIFIED='unspecified'; | |
enum Iavoidable: INTERFERENCE='interference' | NONE='none' | UNSPECIFIED='unspecified'; | |
enum Davoidable: IMPERMANENCE='impermanence' | NONE='none' | UNSPECIFIED='unspecified'; | |
ACIDMitigation: a = Amitigation '.' c = Cmitigation '.' i = Imitigation '.' d = Dmitigation; | |
enum Amitigation: ALL_OR_NOTHING='all_or_nothing' | ALL_OR_COMPENSATION='all_or_compensation' | NONE='none' | UNSPECIFIED='unspecified'; | |
enum Cmitigation: FULL_CONSISTENCY='full_consistency' | RANGE_VIOLATION_ALLOWED='range_violation_allowed' | NONE='none' | UNSPECIFIED='unspecified'; | |
enum Imitigation: SERIALIZABLE='serializable' | PORTABLE_LEVEL='portable_level' | NONE='none' | UNSPECIFIED='unspecified'; | |
enum Dmitigation: NO_LOSS='no_loss' | PARTIAL_LOSS_ALLOWED='partial_loss_allowed' | NONE='none' | UNSPECIFIED='unspecified'; | |
/* | |
* Additional rule to refer UML elements in a Model | |
*/ | |
FQN returns ecore::EString : | |
ID('::'ID)* | |
; |