aboutsummaryrefslogtreecommitdiffstats
path: root/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.components/src/hu/bme/mit/inf/dslreasoner/faulttree/components/CftLanguage.xtext
diff options
context:
space:
mode:
Diffstat (limited to 'Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.components/src/hu/bme/mit/inf/dslreasoner/faulttree/components/CftLanguage.xtext')
-rw-r--r--Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.components/src/hu/bme/mit/inf/dslreasoner/faulttree/components/CftLanguage.xtext82
1 files changed, 82 insertions, 0 deletions
diff --git a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.components/src/hu/bme/mit/inf/dslreasoner/faulttree/components/CftLanguage.xtext b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.components/src/hu/bme/mit/inf/dslreasoner/faulttree/components/CftLanguage.xtext
new file mode 100644
index 00000000..3d82413f
--- /dev/null
+++ b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.components/src/hu/bme/mit/inf/dslreasoner/faulttree/components/CftLanguage.xtext
@@ -0,0 +1,82 @@
1grammar hu.bme.mit.inf.dslreasoner.faulttree.components.CftLanguage with org.eclipse.xtext.common.Terminals
2
3import "http://www.eclipse.org/emf/2002/Ecore" as ecore
4import "http://www.eclipse.org/viatra/query/patternlanguage/emf/PatternLanguage" as vql
5
6generate cftLanguage "http://www.bme.hu/mit/inf/dslreasoner/faulttree/components/CftLanguage"
7
8CftModel:
9 "package" packageName=QualifiedName ";"?
10 imports+=ImportDeclaration*
11 (componentDefinitions+=ComponentDefinition | transformationDefinitions+=TransformationDefinition)*;
12
13ImportDeclaration:
14 "import" importedNamespace=QualifiedNameWithWildcard ";"?;
15
16ComponentDefinition:
17 "cft" name=ID "{"
18 (("in" inputEvents+=InputEvent* ";")? & ("out" outputEvents+=[EventDeclaration]* ";")?)
19 (eventDefinitions+=EventDefinition ";")*
20 "}";
21
22EventDeclaration:
23 InputEvent | EventDefinition;
24
25InputEvent:
26 name=ID multiple?="[]"?;
27
28EventDefinition:
29 BasicEventDefinition | GateDefinition;
30
31BasicEventDefinition:
32 name=ID "lambda" "=" rate=DOULBE;
33
34GateDefinition:
35 AndGate | OrGate;
36
37AndGate:
38 name=ID "and" inputEvents+=[EventDeclaration]*;
39
40OrGate:
41 name=ID "or" inputEvents+=[EventDeclaration]*;
42
43TransformationDefinition:
44 "transformation" name=ID "{"
45 mappingDefinitions+=MappingDefinition*
46 "}";
47
48MappingDefinition:
49 topLevel?="toplevel"? "mapping" pattern=[vql::Pattern|QualifiedName]
50 "(" parameters+=MappingParameter ("," parameters+=MappingParameter)* ")"
51 (componentInstance=ComponentInstance)? ("{"
52 ((lookupDefinitions+=LookupDefinition | assignments+=Assignment) ";")*
53 "}")?;
54
55MappingParameter:
56 name=ID;
57
58LookupDefinition:
59 "lookup" mapping=[MappingDefinition]
60 "(" arguments+=[MappingParameter] ("," arguments+=[MappingParameter])* ")"
61 "as" name=ID;
62
63Variable:
64 ComponentInstance | LookupDefinition;
65
66Assignment:
67 input=EventReference (multiple?="+=" | ":=") output=EventReference;
68
69EventReference:
70 component=[Variable] "." event=[EventDeclaration];
71
72ComponentInstance:
73 "=>" componentType=[ComponentDefinition|QualifiedName] name=ID?;
74
75QualifiedName returns ecore::EString:
76 ID ("." ID)*;
77
78QualifiedNameWithWildcard returns ecore::EString:
79 QualifiedName ("." "*")?;
80
81terminal DOULBE returns ecore::EDouble:
82 ('0'..'9')+ ("." ('0'..'9')+ | ("." ('0'..'9')+)? ("e" | "E") ("+" | "-")? ('0'..'9')+);