aboutsummaryrefslogtreecommitdiffstats
path: root/language
diff options
context:
space:
mode:
authorLibravatar Garami Bence <85867500+garamibence@users.noreply.github.com>2021-10-12 17:09:32 +0200
committerLibravatar Garami Bence <85867500+garamibence@users.noreply.github.com>2021-10-20 18:54:11 +0200
commit97b13eee9a8053afa8fd29ecc8887394040332d3 (patch)
treec4d37ca2ed70d5f55181f746a3516a0e5a5d4a9d /language
parentMerge pull request #3 from golej-marci/language-to-store (diff)
downloadrefinery-97b13eee9a8053afa8fd29ecc8887394040332d3.tar.gz
refinery-97b13eee9a8053afa8fd29ecc8887394040332d3.tar.zst
refinery-97b13eee9a8053afa8fd29ecc8887394040332d3.zip
Add syntax for direct rules and direct predicates
Xtext and Class diagram extended.
Diffstat (limited to 'language')
-rw-r--r--language/src/main/java/tools/refinery/language/Problem.xtext50
1 files changed, 46 insertions, 4 deletions
diff --git a/language/src/main/java/tools/refinery/language/Problem.xtext b/language/src/main/java/tools/refinery/language/Problem.xtext
index 6b46ee86..c4c890e3 100644
--- a/language/src/main/java/tools/refinery/language/Problem.xtext
+++ b/language/src/main/java/tools/refinery/language/Problem.xtext
@@ -8,7 +8,7 @@ Problem:
8 statements+=Statement*; 8 statements+=Statement*;
9 9
10Statement: 10Statement:
11 ClassDeclaration | EnumDeclaration | PredicateDefinition | Assertion | NodeValueAssertion | ScopeDeclaration | 11 ClassDeclaration | EnumDeclaration | PredicateDefinition | RuleDefinition | Assertion | NodeValueAssertion | ScopeDeclaration |
12 UniqueDeclaration; 12 UniqueDeclaration;
13 13
14ClassDeclaration: 14ClassDeclaration:
@@ -32,30 +32,72 @@ ReferenceDeclaration:
32 name=Identifier 32 name=Identifier
33 ("opposite" opposite=[ReferenceDeclaration|QualifiedName])?; 33 ("opposite" opposite=[ReferenceDeclaration|QualifiedName])?;
34 34
35enum PredicateKind:
36 DIRECT="direct";
37
35PredicateDefinition: 38PredicateDefinition:
36 (error?="error" "pred"? | "pred") 39 (error?="error" "pred"? | kind=PredicateKind? "pred")
37 name=Identifier 40 name=Identifier
38 "(" (parameters+=Parameter ("," parameters+=Parameter)*)? ")" 41 "(" (parameters+=Parameter ("," parameters+=Parameter)*)? ")"
39 ("<->" bodies+=Conjunction (";" bodies+=Conjunction)*)? 42 ("<->" bodies+=Conjunction (";" bodies+=Conjunction)*)?
40 "."; 43 ".";
41 44
45enum RuleKind:
46 DIRECT="direct";
47
48RuleDefinition:
49 kind=RuleKind "rule"
50 name=Identifier
51 "(" (parameters+=Parameter ("," parameters+=Parameter)*)? ")"
52 (":" bodies+=Conjunction (";" bodies+=Conjunction)*
53 "~>" action=Action)?
54 ".";
55
42Parameter: 56Parameter:
43 parameterType=[Relation|QualifiedName]? name=Identifier; 57 parameterType=[Relation|QualifiedName]? name=Identifier;
44 58
45Conjunction: 59Conjunction:
46 literals+=Literal ("," literals+=Literal)*; 60 literals+=Literal ("," literals+=Literal)*;
47 61
62Action:
63 actionLiterals+=ActionLiteral ("," actionLiterals+=ActionLiteral)*;
64
48Literal: 65Literal:
49 Atom | NegativeLiteral; 66 Atom | ValueLiteral | NegativeLiteral;
67
68ValueLiteral:
69 atom=Atom
70 (refinement?=":"|"=")
71 values+=LogicConstant ("|" values+=LogicConstant)*;
50 72
51NegativeLiteral: 73NegativeLiteral:
52 "!" atom=Atom; 74 "!" atom=Atom;
53 75
76ActionLiteral:
77 ValueActionLiteral | DeleteActionLiteral | NewActionLiteral;
78
79ValueActionLiteral:
80 atom=Atom
81 (refinement?=":"|"=")
82 value=LogicValue;
83
84DeleteActionLiteral:
85 "delete" variableOrNode=[VariableOrNode|QualifiedName];
86
87NewActionLiteral:
88 "new" variable=NewVariable;
89
90NewVariable:
91 name=Identifier;
92
54Atom: 93Atom:
55 relation=[Relation|QualifiedName] 94 relation=[Relation|QualifiedName]
56 transitiveClosure?="+"? 95 transitiveClosure?="+"?
57 "(" (arguments+=Argument ("," arguments+=Argument)*)? ")"; 96 "(" (arguments+=Argument ("," arguments+=Argument)*)? ")";
58 97
98LogicConstant:
99 value=LogicValue;
100
59Argument: 101Argument:
60 VariableOrNodeArgument | ConstantArgument; 102 VariableOrNodeArgument | ConstantArgument;
61 103
@@ -142,7 +184,7 @@ QualifiedName hidden():
142 184
143Identifier: 185Identifier:
144 ID | "true" | "false" | "unknown" | "error" | "class" | "abstract" | "extends" | "enum" | "pred" | "scope" | 186 ID | "true" | "false" | "unknown" | "error" | "class" | "abstract" | "extends" | "enum" | "pred" | "scope" |
145 "unique" | "default" | "problem" | "contains" | "refers"; 187 "unique" | "default" | "problem" | "contains" | "refers" | "new" | "delete";
146 188
147Integer returns ecore::EInt hidden(): 189Integer returns ecore::EInt hidden():
148 "-"? INT; 190 "-"? INT;