aboutsummaryrefslogtreecommitdiffstats
path: root/language/src/main
diff options
context:
space:
mode:
authorLibravatar Garami Bence <85867500+garamibence@users.noreply.github.com>2021-10-13 20:59:35 +0200
committerLibravatar Garami Bence <85867500+garamibence@users.noreply.github.com>2021-10-20 21:12:33 +0200
commitb98bb0df11fb8bc9748247da004321ab94e954c5 (patch)
treeff128c03cfa0a1459de4e928f78f150484fdd269 /language/src/main
parentAdd syntax for direct rules and direct predicates (diff)
downloadrefinery-b98bb0df11fb8bc9748247da004321ab94e954c5.tar.gz
refinery-b98bb0df11fb8bc9748247da004321ab94e954c5.tar.zst
refinery-b98bb0df11fb8bc9748247da004321ab94e954c5.zip
Add scope for new and delete with tests
Diffstat (limited to 'language/src/main')
-rw-r--r--language/src/main/java/tools/refinery/language/resource/DerivedVariableComputer.java18
-rw-r--r--language/src/main/java/tools/refinery/language/scoping/ProblemScopeProvider.java23
2 files changed, 28 insertions, 13 deletions
diff --git a/language/src/main/java/tools/refinery/language/resource/DerivedVariableComputer.java b/language/src/main/java/tools/refinery/language/resource/DerivedVariableComputer.java
index 2061c30e..bb1226c4 100644
--- a/language/src/main/java/tools/refinery/language/resource/DerivedVariableComputer.java
+++ b/language/src/main/java/tools/refinery/language/resource/DerivedVariableComputer.java
@@ -24,11 +24,12 @@ import tools.refinery.language.model.problem.ImplicitVariable;
24import tools.refinery.language.model.problem.Literal; 24import tools.refinery.language.model.problem.Literal;
25import tools.refinery.language.model.problem.NegativeLiteral; 25import tools.refinery.language.model.problem.NegativeLiteral;
26import tools.refinery.language.model.problem.Parameter; 26import tools.refinery.language.model.problem.Parameter;
27import tools.refinery.language.model.problem.PredicateDefinition; 27import tools.refinery.language.model.problem.ParametricDefinition;
28import tools.refinery.language.model.problem.Problem; 28import tools.refinery.language.model.problem.Problem;
29import tools.refinery.language.model.problem.ProblemFactory; 29import tools.refinery.language.model.problem.ProblemFactory;
30import tools.refinery.language.model.problem.ProblemPackage; 30import tools.refinery.language.model.problem.ProblemPackage;
31import tools.refinery.language.model.problem.Statement; 31import tools.refinery.language.model.problem.Statement;
32import tools.refinery.language.model.problem.ValueLiteral;
32import tools.refinery.language.model.problem.VariableOrNodeArgument; 33import tools.refinery.language.model.problem.VariableOrNodeArgument;
33import tools.refinery.language.naming.NamingUtil; 34import tools.refinery.language.naming.NamingUtil;
34 35
@@ -46,13 +47,13 @@ public class DerivedVariableComputer {
46 47
47 public void installDerivedVariables(Problem problem, Set<String> nodeNames) { 48 public void installDerivedVariables(Problem problem, Set<String> nodeNames) {
48 for (Statement statement : problem.getStatements()) { 49 for (Statement statement : problem.getStatements()) {
49 if (statement instanceof PredicateDefinition definition) { 50 if (statement instanceof ParametricDefinition definition) {
50 installDerivedPredicateDefinitionState(definition, nodeNames); 51 installDerivedParametricDefinitionState(definition, nodeNames);
51 } 52 }
52 } 53 }
53 } 54 }
54 55
55 protected void installDerivedPredicateDefinitionState(PredicateDefinition definition, Set<String> nodeNames) { 56 protected void installDerivedParametricDefinitionState(ParametricDefinition definition, Set<String> nodeNames) {
56 Set<String> knownVariables = new HashSet<>(); 57 Set<String> knownVariables = new HashSet<>();
57 knownVariables.addAll(nodeNames); 58 knownVariables.addAll(nodeNames);
58 for (Parameter parameter : definition.getParameters()) { 59 for (Parameter parameter : definition.getParameters()) {
@@ -71,6 +72,9 @@ public class DerivedVariableComputer {
71 for (Literal literal : conjunction.getLiterals()) { 72 for (Literal literal : conjunction.getLiterals()) {
72 if (literal instanceof Atom atom) { 73 if (literal instanceof Atom atom) {
73 createSigletonVariablesAndCollectVariables(atom, knownVariables, newVariables); 74 createSigletonVariablesAndCollectVariables(atom, knownVariables, newVariables);
75 } else
76 if (literal instanceof ValueLiteral valueLiteral) {
77 createSigletonVariablesAndCollectVariables(valueLiteral.getAtom(), knownVariables, newVariables);
74 } 78 }
75 } 79 }
76 createVariables(conjunction, newVariables); 80 createVariables(conjunction, newVariables);
@@ -156,13 +160,13 @@ public class DerivedVariableComputer {
156 160
157 public void discardDerivedVariables(Problem problem) { 161 public void discardDerivedVariables(Problem problem) {
158 for (Statement statement : problem.getStatements()) { 162 for (Statement statement : problem.getStatements()) {
159 if (statement instanceof PredicateDefinition predicateDefinition) { 163 if (statement instanceof ParametricDefinition parametricDefinition) {
160 discardPredicateDefinitionState(predicateDefinition); 164 discardParametricDefinitionState(parametricDefinition);
161 } 165 }
162 } 166 }
163 } 167 }
164 168
165 protected void discardPredicateDefinitionState(PredicateDefinition definition) { 169 protected void discardParametricDefinitionState(ParametricDefinition definition) {
166 for (Conjunction body : definition.getBodies()) { 170 for (Conjunction body : definition.getBodies()) {
167 body.getImplicitVariables().clear(); 171 body.getImplicitVariables().clear();
168 for (Literal literal : body.getLiterals()) { 172 for (Literal literal : body.getLiterals()) {
diff --git a/language/src/main/java/tools/refinery/language/scoping/ProblemScopeProvider.java b/language/src/main/java/tools/refinery/language/scoping/ProblemScopeProvider.java
index 86b39dbc..d31a5308 100644
--- a/language/src/main/java/tools/refinery/language/scoping/ProblemScopeProvider.java
+++ b/language/src/main/java/tools/refinery/language/scoping/ProblemScopeProvider.java
@@ -15,7 +15,9 @@ import org.eclipse.xtext.scoping.Scopes;
15import tools.refinery.language.model.ProblemUtil; 15import tools.refinery.language.model.ProblemUtil;
16import tools.refinery.language.model.problem.ClassDeclaration; 16import tools.refinery.language.model.problem.ClassDeclaration;
17import tools.refinery.language.model.problem.ExistentialQuantifier; 17import tools.refinery.language.model.problem.ExistentialQuantifier;
18import tools.refinery.language.model.problem.PredicateDefinition; 18import tools.refinery.language.model.problem.NewActionLiteral;
19import tools.refinery.language.model.problem.ParametricDefinition;
20import tools.refinery.language.model.problem.Action;
19import tools.refinery.language.model.problem.Problem; 21import tools.refinery.language.model.problem.Problem;
20import tools.refinery.language.model.problem.ProblemPackage; 22import tools.refinery.language.model.problem.ProblemPackage;
21import tools.refinery.language.model.problem.ReferenceDeclaration; 23import tools.refinery.language.model.problem.ReferenceDeclaration;
@@ -38,7 +40,8 @@ public class ProblemScopeProvider extends AbstractProblemScopeProvider {
38 || reference == ProblemPackage.Literals.NODE_VALUE_ASSERTION__NODE) { 40 || reference == ProblemPackage.Literals.NODE_VALUE_ASSERTION__NODE) {
39 return getNodesScope(context, scope); 41 return getNodesScope(context, scope);
40 } 42 }
41 if (reference == ProblemPackage.Literals.VARIABLE_OR_NODE_ARGUMENT__VARIABLE_OR_NODE) { 43 if (reference == ProblemPackage.Literals.VARIABLE_OR_NODE_ARGUMENT__VARIABLE_OR_NODE
44 || reference == ProblemPackage.Literals.DELETE_ACTION_LITERAL__VARIABLE_OR_NODE) {
42 return getVariableScope(context, scope); 45 return getVariableScope(context, scope);
43 } 46 }
44 if (reference == ProblemPackage.Literals.REFERENCE_DECLARATION__OPPOSITE) { 47 if (reference == ProblemPackage.Literals.REFERENCE_DECLARATION__OPPOSITE) {
@@ -64,17 +67,25 @@ public class ProblemScopeProvider extends AbstractProblemScopeProvider {
64 variables.add(singletonVariable); 67 variables.add(singletonVariable);
65 } 68 }
66 } 69 }
67 while (currentContext != null && !(currentContext instanceof PredicateDefinition)) { 70 while (currentContext != null && !(currentContext instanceof ParametricDefinition)) {
68 if (currentContext instanceof ExistentialQuantifier quantifier) { 71 if (currentContext instanceof ExistentialQuantifier quantifier) {
69 variables.addAll(quantifier.getImplicitVariables()); 72 variables.addAll(quantifier.getImplicitVariables());
73 } else
74 if(currentContext instanceof Action action) {
75 for (var literal : action.getActionLiterals()) {
76 if(literal instanceof NewActionLiteral newActionLiteral && newActionLiteral.getVariable() != null) {
77 variables.add(newActionLiteral.getVariable());
78 }
79 }
70 } 80 }
71 currentContext = currentContext.eContainer(); 81 currentContext = currentContext.eContainer();
72 } 82 }
83 IScope parentScope = getNodesScope(context, delegateScope);
73 if (currentContext != null) { 84 if (currentContext != null) {
74 PredicateDefinition definition = (PredicateDefinition) currentContext; 85 ParametricDefinition definition = (ParametricDefinition) currentContext;
75 variables.addAll(definition.getParameters()); 86 parentScope = Scopes.scopeFor(definition.getParameters(),parentScope);
76 } 87 }
77 return Scopes.scopeFor(variables, getNodesScope(context, delegateScope)); 88 return Scopes.scopeFor(variables,parentScope);
78 } 89 }
79 90
80 protected IScope getOppositeScope(EObject context, IScope delegateScope) { 91 protected IScope getOppositeScope(EObject context, IScope delegateScope) {