diff --git a/lang/src/main/java/edu/kit/iti/formal/psdbg/parser/ast/Variable.java b/lang/src/main/java/edu/kit/iti/formal/psdbg/parser/ast/Variable.java index f4272ea96409532d0c9c3365e284cf0e2610b615..b185cd9460c0492e3c87f1e3b667f571f6ed1da5 100644 --- a/lang/src/main/java/edu/kit/iti/formal/psdbg/parser/ast/Variable.java +++ b/lang/src/main/java/edu/kit/iti/formal/psdbg/parser/ast/Variable.java @@ -41,6 +41,8 @@ import org.antlr.v4.runtime.Token; @RequiredArgsConstructor @EqualsAndHashCode(callSuper = false) public class Variable extends Literal implements Comparable { + public static final String MAGIC_PREFIX = "#"; + @NonNull private String identifier; public Variable(Token variable) { diff --git a/rt-key/src/main/java/edu/kit/iti/formal/psdbg/interpreter/funchdl/RuleCommandHandler.java b/rt-key/src/main/java/edu/kit/iti/formal/psdbg/interpreter/funchdl/RuleCommandHandler.java index fc84c7cdf2174960335fc587e8c2ea5ef3bbea85..ac24a07814aa5d5a60e4afc6830b6baba515223f 100644 --- a/rt-key/src/main/java/edu/kit/iti/formal/psdbg/interpreter/funchdl/RuleCommandHandler.java +++ b/rt-key/src/main/java/edu/kit/iti/formal/psdbg/interpreter/funchdl/RuleCommandHandler.java @@ -24,6 +24,7 @@ import edu.kit.iti.formal.psdbg.interpreter.data.State; import edu.kit.iti.formal.psdbg.interpreter.data.VariableAssignment; import edu.kit.iti.formal.psdbg.interpreter.exceptions.ScriptCommandNotApplicableException; import edu.kit.iti.formal.psdbg.parser.ast.CallStatement; +import edu.kit.iti.formal.psdbg.parser.ast.Variable; import lombok.Getter; import lombok.RequiredArgsConstructor; import org.apache.logging.log4j.LogManager; @@ -41,9 +42,11 @@ import java.util.Set; */ @RequiredArgsConstructor public class RuleCommandHandler implements CommandHandler { + public static final String[] MAGIC_PARAMETER_NAMES = new String[]{ + "on", "formula" + }; private static final Logger LOGGER = LogManager.getLogger(RuleCommandHandler.class); - @Getter private final Map rules; @@ -85,15 +88,15 @@ public class RuleCommandHandler implements CommandHandler { @Override public boolean handles(CallStatement call, KeyData data) throws IllegalArgumentException { if (rules.containsKey(call.getCommand())) return true;//static/rigid rules - try{ - if (data != null) { - Goal goal = data.getGoal(); - Set rules = findTaclets(data.getProof(), goal); - return rules.contains(call.getCommand()); - } + try { + if (data != null) { + Goal goal = data.getGoal(); + Set rules = findTaclets(data.getProof(), goal); + return rules.contains(call.getCommand()); + } } catch (NullPointerException npe) { System.out.println("npe = " + npe); - return false; + return false; } return false; } @@ -111,7 +114,8 @@ public class RuleCommandHandler implements CommandHandler { State state = interpreter.getCurrentState(); GoalNode expandedNode = state.getSelectedGoalNode(); KeyData kd = expandedNode.getData(); - Map map = new HashMap<>(); + Map map = createParameters(expandedNode.getAssignments()); + params.asMap().forEach((k, v) -> map.put(k.getIdentifier(), v.getData())); LOGGER.info("Execute {} with {}", call, map); try { @@ -147,4 +151,12 @@ public class RuleCommandHandler implements CommandHandler { } } + private Map createParameters(VariableAssignment assignments) { + Map params = new HashMap<>(); + for (String s : MAGIC_PARAMETER_NAMES) { + params.put(s, assignments.getValue(new Variable(Variable.MAGIC_PREFIX + s))); + } + return params; + } + }