From 42214746edac8bdc992a52ca8624f996871e2842 Mon Sep 17 00:00:00 2001 From: Kristóf Marussy Date: Mon, 20 May 2024 17:29:07 +0200 Subject: feat(language): node constants in rule actions --- .../language/semantics/ModelInitializer.java | 23 +++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) (limited to 'subprojects/language-semantics') diff --git a/subprojects/language-semantics/src/main/java/tools/refinery/language/semantics/ModelInitializer.java b/subprojects/language-semantics/src/main/java/tools/refinery/language/semantics/ModelInitializer.java index a86e2c47..02b2f920 100644 --- a/subprojects/language-semantics/src/main/java/tools/refinery/language/semantics/ModelInitializer.java +++ b/subprojects/language-semantics/src/main/java/tools/refinery/language/semantics/ModelInitializer.java @@ -31,6 +31,7 @@ import tools.refinery.store.dse.transition.DesignSpaceExplorationBuilder; import tools.refinery.store.dse.transition.Rule; import tools.refinery.store.dse.transition.RuleBuilder; import tools.refinery.store.dse.transition.actions.ActionLiteral; +import tools.refinery.store.dse.transition.actions.ActionLiterals; import tools.refinery.store.model.ModelStoreBuilder; import tools.refinery.store.reasoning.ReasoningAdapter; import tools.refinery.store.reasoning.actions.PartialActionLiterals; @@ -968,7 +969,7 @@ public class ModelInitializer { } } for (var action : body.getActions()) { - actionLiterals.add(toActionLiteral(action, localScope)); + toActionLiterals(action, localScope, actionLiterals); } builder.action(actionLiterals); } catch (RuntimeException e) { @@ -976,8 +977,9 @@ public class ModelInitializer { } } - private ActionLiteral toActionLiteral( - Action action, HashMap localScope) { + private void toActionLiterals( + Action action, HashMap localScope, + List actionLiterals) { if (!(action instanceof AssertionAction assertionAction)) { throw new TracedException(action, "Unknown action"); } @@ -991,11 +993,18 @@ public class ModelInitializer { throw new TracedException(problemArgument, "Invalid argument"); } var variableOrNode = nodeAssertionArgument.getNode(); - if (!(variableOrNode instanceof tools.refinery.language.model.problem.Variable problemVariable)) { - throw new TracedException(problemArgument, "Invalid argument"); + switch (variableOrNode) { + case tools.refinery.language.model.problem.Variable problemVariable -> + arguments[i] = localScope.get(problemVariable); + case Node node -> { + int nodeId = getNodeId(node); + var tempVariable = Variable.of(semanticsUtils.getNameWithoutRootPrefix(node).orElse("_" + nodeId)); + actionLiterals.add(ActionLiterals.constant(tempVariable, nodeId)); + arguments[i] = tempVariable; + } + default -> throw new TracedException(problemArgument, "Invalid argument"); } - arguments[i] = localScope.get(problemVariable); } - return PartialActionLiterals.merge(partialRelation, truthValue, arguments); + actionLiterals.add(PartialActionLiterals.merge(partialRelation, truthValue, arguments)); } } -- cgit v1.2.3-54-g00ecf