aboutsummaryrefslogtreecommitdiffstats
path: root/Application/org.eclipse.viatra.solver.language/src
diff options
context:
space:
mode:
authorLibravatar Kristóf Marussy <marussy@mit.bme.hu>2020-05-19 21:18:06 +0200
committerLibravatar Kristóf Marussy <marussy@mit.bme.hu>2020-05-19 21:18:06 +0200
commitb3c1c5b30ae8ea7ebad391c9250b4509d5a4cc9b (patch)
treead3222182065b8fac7d9b3d528c4efabf2aa0dd2 /Application/org.eclipse.viatra.solver.language/src
parentMerge branch 'master' of github.com:viatra/VIATRA-Generator (diff)
downloadVIATRA-Generator-b3c1c5b30ae8ea7ebad391c9250b4509d5a4cc9b.tar.gz
VIATRA-Generator-b3c1c5b30ae8ea7ebad391c9250b4509d5a4cc9b.tar.zst
VIATRA-Generator-b3c1c5b30ae8ea7ebad391c9250b4509d5a4cc9b.zip
Config language WIP
Diffstat (limited to 'Application/org.eclipse.viatra.solver.language/src')
-rw-r--r--Application/org.eclipse.viatra.solver.language/src/org/eclipse/viatra/solver/language/GenerateSolverLanguage.mwe21
-rw-r--r--Application/org.eclipse.viatra.solver.language/src/org/eclipse/viatra/solver/language/SolverLanguage.xtext71
2 files changed, 46 insertions, 26 deletions
diff --git a/Application/org.eclipse.viatra.solver.language/src/org/eclipse/viatra/solver/language/GenerateSolverLanguage.mwe2 b/Application/org.eclipse.viatra.solver.language/src/org/eclipse/viatra/solver/language/GenerateSolverLanguage.mwe2
index 7f95e737..50072f0d 100644
--- a/Application/org.eclipse.viatra.solver.language/src/org/eclipse/viatra/solver/language/GenerateSolverLanguage.mwe2
+++ b/Application/org.eclipse.viatra.solver.language/src/org/eclipse/viatra/solver/language/GenerateSolverLanguage.mwe2
@@ -32,6 +32,7 @@ Workflow {
32 language = StandardLanguage { 32 language = StandardLanguage {
33 name = "org.eclipse.viatra.solver.language.SolverLanguage" 33 name = "org.eclipse.viatra.solver.language.SolverLanguage"
34 fileExtensions = "vsc" 34 fileExtensions = "vsc"
35 referencedResource = "platform:/resource/org.eclipse.viatra.solver.language/model/SolverLanguage.genmodel"
35 36
36 serializer = { 37 serializer = {
37 generateStub = false 38 generateStub = false
diff --git a/Application/org.eclipse.viatra.solver.language/src/org/eclipse/viatra/solver/language/SolverLanguage.xtext b/Application/org.eclipse.viatra.solver.language/src/org/eclipse/viatra/solver/language/SolverLanguage.xtext
index 1306b626..d0578d78 100644
--- a/Application/org.eclipse.viatra.solver.language/src/org/eclipse/viatra/solver/language/SolverLanguage.xtext
+++ b/Application/org.eclipse.viatra.solver.language/src/org/eclipse/viatra/solver/language/SolverLanguage.xtext
@@ -1,22 +1,23 @@
1grammar org.eclipse.viatra.solver.language.SolverLanguage with org.eclipse.xtext.common.Terminals 1grammar org.eclipse.viatra.solver.language.SolverLanguage with org.eclipse.xtext.common.Terminals
2import "http://www.eclipse.org/emf/2002/Ecore" as ecore 2import "http://www.eclipse.org/emf/2002/Ecore" as ecore
3generate solverLanguage "http://www.eclipse.org/viatra/solver/language/SolverLanguage" 3import "http://www.eclipse.org/viatra/solver/language/SolverLanguage"
4 4
5Problem: 5Problem:
6 (statements+=Statement)*; 6 (statements+=Statement)*;
7 7
8Statement: 8Statement:
9 ( 9 (
10 AssertionOrDefinition | PredicateDefinition | UnnamedErrorPrediateDefinition | DefaultDefinition | ExternPredicateDefinition | 10 AssertionOrDefinition | PredicateDefinition | UnnamedErrorPrediateDefinition | DefaultDefinition | MetricDefinition |
11 MetricDefinition | ExternMetricDefinition | ClassDefinition | ScopeDefinition | ObjectiveDefinition 11 ExternPredicateDefinition | ExternMetricDefinition | ExternAggregatorDefinition | ExternDatatypeDefinition |
12 ClassDefinition | ScopeDefinition | ObjectiveDefinition
12 ) FULL_STOP; 13 ) FULL_STOP;
13 14
14AssertionOrDefinition returns Statement: 15AssertionOrDefinition returns Statement:
15 Expression ( 16 Expression (
16 {Assertion.body=current} (":" range=Expression)? | 17 {Interpretation.body=current} ":" range=Expression |
17 {PredicateDefinition.head=current} ":-" body=Expression | 18 {PredicateDefinition.head=current} ":-" body=Expression |
18 {MetricDefinition.head=current} "=" body=Expression 19 {MetricDefinition.head=current} "=" body=Expression
19 ); 20 )?;
20 21
21PredicateDefinition: 22PredicateDefinition:
22 (functional?="functional" error?="error"? | error?="error" functional?="functional"?) head=Call ":-" body=Expression; 23 (functional?="functional" error?="error"? | error?="error" functional?="functional"?) head=Call ":-" body=Expression;
@@ -27,24 +28,42 @@ UnnamedErrorPrediateDefinition:
27DefaultDefinition: 28DefaultDefinition:
28 "default" head=Call ":" range=Expression; 29 "default" head=Call ":" range=Expression;
29 30
31MetricDefinition:
32 type=[NamedElement|QualifiedName] head=Call "=" body=Expression;
33
30ExternPredicateDefinition: 34ExternPredicateDefinition:
31 "extern" head=Call; 35 "extern" name=QualifiedName argumentList=ArgumentList;
32 36
33enum MetricType: 37ExternMetricDefinition:
34 INT="int" | REAL="real"; 38 "extern" type=[NamedElement|QualifiedName] name=QualifiedName argumentList=ArgumentList;
35 39
36MetricDefinition: 40ExternAggregatorDefinition:
37 type=MetricType head=Expression "=" body=Expression; 41 "extern" type=[NamedElement|QualifiedName] name=QualifiedName "{" inputType=[NamedElement|QualifiedName] "..." "}";
38 42
39ExternMetricDefinition: 43ExternDatatypeDefinition:
40 "extern" type=MetricType head=Call; 44 "extern" "datatype" name=QualifiedName ("extends" supertypes+=[NamedElement|QualifiedName] ("," supertypes+=[NamedElement|QualifiedName])*);
45
46Variable:
47 type=[NamedElement|QualifiedName]? name=ID;
41 48
42Expression: 49Expression:
43 IfElse | DisjunctiveExpression; 50 IfElse | Let | ImplicationExpression;
44 51
45IfElse: 52IfElse:
46 "if" condition=Expression "then" then=Expression "else" else=Expression; 53 "if" condition=Expression "then" then=Expression "else" else=Expression;
47 54
55Let:
56 "let" bindings+=LetBinding ("," bindings+=LetBinding)* "in" body=Expression;
57
58LetBinding:
59 variable=Variable "=" value=AdditiveExpression;
60
61enum ImplicationOperator returns BinaryOperator:
62 IMPLIES = "=>";
63
64ImplicationExpression returns Expression:
65 DisjunctiveExpression ({BinaryExpression.left=current} op=ImplicationOperator right=ImplicationExpression)?;
66
48DisjunctiveExpression returns Expression: 67DisjunctiveExpression returns Expression:
49 ConjunctiveExpression ( 68 ConjunctiveExpression (
50 {Disjunction.children+=current} (";" children+=ConjunctiveExpression)+ | 69 {Disjunction.children+=current} (";" children+=ConjunctiveExpression)+ |
@@ -57,9 +76,6 @@ Case:
57ConjunctiveExpression returns Expression: 76ConjunctiveExpression returns Expression:
58 ComparisonExpression ({Conjunction.children+=current} ("," children+=ComparisonExpression)+)?; 77 ComparisonExpression ({Conjunction.children+=current} ("," children+=ComparisonExpression)+)?;
59 78
60enum BinaryOperator:
61 EQ | NOT_EQ | LESS | LESS_EQ | GREATER | GREATER_EQ | IN | ADD | SUB | MUL | DIV | POW;
62
63enum ComparisonOperator returns BinaryOperator: 79enum ComparisonOperator returns BinaryOperator:
64 EQ="==" | NOT_EQ="!=" | LESS="<" | LESS_EQ="<=" | GREATER=">" | GREATER_EQ=">=" | IN="in"; 80 EQ="==" | NOT_EQ="!=" | LESS="<" | LESS_EQ="<=" | GREATER=">" | GREATER_EQ=">=" | IN="in";
65 81
@@ -82,7 +98,10 @@ enum ExponentialOp returns BinaryOperator:
82 POW="^"; 98 POW="^";
83 99
84ExponentialExpression returns Expression: 100ExponentialExpression returns Expression:
85 UnaryExpression ({BinaryExpression.left=current} op=ExponentialOp right=ExponentialExpression)?; 101 CastExpression ({BinaryExpression.left=current} op=ExponentialOp right=CastExpression)?;
102
103CastExpression returns Expression:
104 UnaryExpression ({CastExpression.body=current} "as" type=[NamedElement|QualifiedName])?;
86 105
87enum UnaryOp: 106enum UnaryOp:
88 NEG="!" | PLUS="+" | MINUS="-" | MAY="may" | MUST="must" | CURRENT="current"; 107 NEG="!" | PLUS="+" | MINUS="-" | MAY="may" | MUST="must" | CURRENT="current";
@@ -91,16 +110,19 @@ UnaryExpression returns Expression:
91 AggregationExpression | {UnaryExpression} op=UnaryOp body=AggregationExpression; 110 AggregationExpression | {UnaryExpression} op=UnaryOp body=AggregationExpression;
92 111
93AggregationExpression returns Expression: 112AggregationExpression returns Expression:
94 AtomicExpression | Count | Aggregation; 113 AtomicExpression | QuantifiedExpression | Aggregation;
95 114
96Count: 115LocalVariables:
97 "count" "{" body=Expression "}"; 116 {LocalVariables} "[" (variables+=Variable ("," variables+=Variable)*)? "]";
98 117
99enum AggregationOp: 118enum Quantifier:
100 ONLY="only" | SUM="sum" | PROD="prod" | AVG="avg" | MIN="min" | MAX="max"; 119 EXISTS="exists" | FORALL="forall" | COUNT="count";
120
121QuantifiedExpression:
122 quantifier=Quantifier localVariables=LocalVariables? "{" body=Expression "}";
101 123
102Aggregation: 124Aggregation:
103 op=AggregationOp "{" body=Expression "|" condition=Expression "}"; 125 op=[NamedElement|QualifiedName] localVariables=LocalVariables? "{" body=Expression ("|" condition=Expression)? "}";
104 126
105AtomicExpression returns Expression: 127AtomicExpression returns Expression:
106 Reference | Call | Interval | Literal | "(" Expression ")"; 128 Reference | Call | Interval | Literal | "(" Expression ")";
@@ -224,7 +246,4 @@ terminal REFLEXIVE_TRANSITIVE_CLOSURE:
224 246
225terminal FULL_STOP: 247terminal FULL_STOP:
226 "synthetic:FULL_STOP"; 248 "synthetic:FULL_STOP";
227
228NamedElement:
229 name=QualifiedName;
230 249