From db3fc2b069529dafebea6eac207d16430e9cbcc9 Mon Sep 17 00:00:00 2001 From: Fedor Isakov Date: Mon, 30 Nov 2015 00:02:09 +0100 Subject: [PATCH] Updated API sources from the latest version of Logic --- .../constraint/AbstractConstraint.java | 91 +-- .../reactor/constraint/AbstractPredicate.java | 58 ++ .../mps/logic/reactor/constraint/AndItem.java | 13 + .../reactor/constraint/BuiltinConstraint.java | 19 - .../reactor/constraint/ComputingItem.java | 15 - .../reactor/constraint/ComputingSession.java | 111 ---- .../reactor/constraint/ComputingTracer.java | 6 +- .../logic/reactor/constraint/Constraint.java | 13 +- .../constraint/ConstraintOccurrence.java | 13 + .../reactor/constraint/ConstraintSymbol.java | 60 +- .../reactor/constraint/Instructible.java | 2 +- .../constraint/JavaPredicateSymbol.java | 16 + .../logic/reactor/constraint/Predicate.java | 13 + .../reactor/constraint/PredicateSymbol.java | 17 + .../logic/reactor/constraint/Queryable.java | 2 +- .../reactor/constraint/SessionSolver.java | 67 ++ .../constraint/StandardBuiltinConstraint.java | 18 - .../mps/logic/reactor/constraint/Symbol.java | 51 ++ .../AbstractConstraintOccurrence.java | 34 - .../BuiltinConstraintOccurrence.java | 34 - .../constraint/occurrence/ConstraintKind.java | 13 - .../occurrence/ConstraintOccurrence.java | 38 -- .../occurrence/JavaConstraintOccurrence.java | 25 - .../LogicalConstraintOccurence.java | 26 - .../reactor/constraint/occurrence/trace.info | 213 ------ .../mps/logic/reactor/constraint/trace.info | 624 ++++++++---------- .../reactor/program/EvaluationSession.java | 73 ++ .../reactor/program/PlanningSession.java | 60 ++ .../mps/logic/reactor/program/trace.info | 144 ++++ .../reactor/rule/ConstraintRegistry.java | 106 --- .../InvalidConstraintException.java | 2 +- .../mps/logic/reactor/rule/Rule.java | 15 +- .../mps/logic/reactor/rule/RuleBuilder.java | 47 +- .../mps/logic/reactor/rule/trace.info | 459 +++++-------- reactor/Test/test/Rules.kt | 41 +- 35 files changed, 1087 insertions(+), 1452 deletions(-) create mode 100644 reactor/API/src/jetbrains/mps/logic/reactor/constraint/AbstractPredicate.java create mode 100644 reactor/API/src/jetbrains/mps/logic/reactor/constraint/AndItem.java delete mode 100644 reactor/API/src/jetbrains/mps/logic/reactor/constraint/BuiltinConstraint.java delete mode 100644 reactor/API/src/jetbrains/mps/logic/reactor/constraint/ComputingItem.java delete mode 100644 reactor/API/src/jetbrains/mps/logic/reactor/constraint/ComputingSession.java create mode 100644 reactor/API/src/jetbrains/mps/logic/reactor/constraint/ConstraintOccurrence.java create mode 100644 reactor/API/src/jetbrains/mps/logic/reactor/constraint/JavaPredicateSymbol.java create mode 100644 reactor/API/src/jetbrains/mps/logic/reactor/constraint/Predicate.java create mode 100644 reactor/API/src/jetbrains/mps/logic/reactor/constraint/PredicateSymbol.java create mode 100644 reactor/API/src/jetbrains/mps/logic/reactor/constraint/SessionSolver.java delete mode 100644 reactor/API/src/jetbrains/mps/logic/reactor/constraint/StandardBuiltinConstraint.java create mode 100644 reactor/API/src/jetbrains/mps/logic/reactor/constraint/Symbol.java delete mode 100644 reactor/API/src/jetbrains/mps/logic/reactor/constraint/occurrence/AbstractConstraintOccurrence.java delete mode 100644 reactor/API/src/jetbrains/mps/logic/reactor/constraint/occurrence/BuiltinConstraintOccurrence.java delete mode 100644 reactor/API/src/jetbrains/mps/logic/reactor/constraint/occurrence/ConstraintKind.java delete mode 100644 reactor/API/src/jetbrains/mps/logic/reactor/constraint/occurrence/ConstraintOccurrence.java delete mode 100644 reactor/API/src/jetbrains/mps/logic/reactor/constraint/occurrence/JavaConstraintOccurrence.java delete mode 100644 reactor/API/src/jetbrains/mps/logic/reactor/constraint/occurrence/LogicalConstraintOccurence.java delete mode 100644 reactor/API/src/jetbrains/mps/logic/reactor/constraint/occurrence/trace.info create mode 100644 reactor/API/src/jetbrains/mps/logic/reactor/program/EvaluationSession.java create mode 100644 reactor/API/src/jetbrains/mps/logic/reactor/program/PlanningSession.java create mode 100644 reactor/API/src/jetbrains/mps/logic/reactor/program/trace.info delete mode 100644 reactor/API/src/jetbrains/mps/logic/reactor/rule/ConstraintRegistry.java rename reactor/API/src/jetbrains/mps/logic/reactor/{constraint/occurrence => rule}/InvalidConstraintException.java (81%) diff --git a/reactor/API/src/jetbrains/mps/logic/reactor/constraint/AbstractConstraint.java b/reactor/API/src/jetbrains/mps/logic/reactor/constraint/AbstractConstraint.java index 4a3ece03..ec2a3582 100644 --- a/reactor/API/src/jetbrains/mps/logic/reactor/constraint/AbstractConstraint.java +++ b/reactor/API/src/jetbrains/mps/logic/reactor/constraint/AbstractConstraint.java @@ -2,89 +2,34 @@ package jetbrains.mps.logic.reactor.constraint; /*Generated by MPS */ +import java.util.List; +import java.util.Collections; +import java.util.Arrays; +import java.util.ArrayList; -/** - * Abstract superclass for use in implementations of Constraint and AutoConstraint. - */ -public abstract class AbstractConstraint implements ComputingItem { +public class AbstractConstraint implements Constraint { - public AbstractConstraint(String symbol, int arity) { - this.symbol = symbol; - this.arity = arity; + public AbstractConstraint(ConstraintSymbol constraintSymbol, Object... arguments) { + this.symbol = constraintSymbol; + this.arguments = arguments; } - public String name() { + public ConstraintSymbol symbol() { return symbol; } - public String symbol() { - return symbol; + public List arguments() { + return Collections.unmodifiableList(Arrays.asList(arguments)); } - public int arity() { - return arity; - } - - public Instructible handler(ComputingSession session) { - return session.handler(asConstraint()); - } - - public Queryable solver(ComputingSession session) { - return session.solver(asAutoConstraint()); - } - - public abstract Class solverClass(); - - public Class handlerClass() { - return solverClass(); - } - - @Override - public String toString() { - return symbol; - } - - public Constraint asConstraint() { - return (Constraint) this; - } - - public BuiltinConstraint asAutoConstraint() { - return (BuiltinConstraint) this; - } - - protected void registerHandler(ComputingSession session, Instructible instructible) { - session.registerHandler(asConstraint(), instructible); - } - - protected void registerSolver(ComputingSession session, Queryable queryable) { - session.registerSolver(asAutoConstraint(), queryable); - session.registerHandler(asConstraint(), queryable); - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; + public List> argumentTypes() { + ArrayList> types = new ArrayList>(arguments.length); + for (Object arg : arguments) { + types.add(arg.getClass()); } - if (o == null || this.getClass() != o.getClass()) { - return false; - } - - AbstractConstraint that = (AbstractConstraint) o; - if ((symbol != null ? !(((Object) symbol).equals(that.symbol)) : that.symbol != null)) { - return false; - } - - return true; + return types; } - @Override - public int hashCode() { - int result = 17; - result = 31 * result + ((symbol != null ? String.valueOf(symbol).hashCode() : 37)); - return result; - } - - private String symbol; - private int arity; + private ConstraintSymbol symbol; + private Object[] arguments; } diff --git a/reactor/API/src/jetbrains/mps/logic/reactor/constraint/AbstractPredicate.java b/reactor/API/src/jetbrains/mps/logic/reactor/constraint/AbstractPredicate.java new file mode 100644 index 00000000..1a3a19b9 --- /dev/null +++ b/reactor/API/src/jetbrains/mps/logic/reactor/constraint/AbstractPredicate.java @@ -0,0 +1,58 @@ +package jetbrains.mps.logic.reactor.constraint; + +/*Generated by MPS */ + +import java.util.List; +import java.util.Collections; +import java.util.Arrays; + +public abstract class AbstractPredicate implements Predicate { + + public AbstractPredicate(Object... arguments) { + this.arguments = arguments; + } + + @Override + public List arguments() { + return Collections.unmodifiableList(Arrays.asList(arguments)); + } + + public Constraint asConstraint() { + return (Constraint) this; + } + + public Predicate asAutoConstraint() { + return (Predicate) this; + } + + @Override + public String toString() { + return symbol().toString(); + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || this.getClass() != o.getClass()) { + return false; + } + + AbstractPredicate that = (AbstractPredicate) o; + if ((symbol() != null ? !(((Object) symbol()).equals(that.symbol())) : that.symbol() != null)) { + return false; + } + + return true; + } + + @Override + public int hashCode() { + int result = 17; + result = 31 * result + ((symbol() != null ? String.valueOf(symbol()).hashCode() : 37)); + return result; + } + + private Object[] arguments; +} diff --git a/reactor/API/src/jetbrains/mps/logic/reactor/constraint/AndItem.java b/reactor/API/src/jetbrains/mps/logic/reactor/constraint/AndItem.java new file mode 100644 index 00000000..c26c080f --- /dev/null +++ b/reactor/API/src/jetbrains/mps/logic/reactor/constraint/AndItem.java @@ -0,0 +1,13 @@ +package jetbrains.mps.logic.reactor.constraint; + +/*Generated by MPS */ + +import java.util.List; + +public interface AndItem { + + public Symbol symbol(); + + public List arguments(); + +} diff --git a/reactor/API/src/jetbrains/mps/logic/reactor/constraint/BuiltinConstraint.java b/reactor/API/src/jetbrains/mps/logic/reactor/constraint/BuiltinConstraint.java deleted file mode 100644 index de1317f7..00000000 --- a/reactor/API/src/jetbrains/mps/logic/reactor/constraint/BuiltinConstraint.java +++ /dev/null @@ -1,19 +0,0 @@ -package jetbrains.mps.logic.reactor.constraint; - -/*Generated by MPS */ - - -/** - * A constraint that is provided by a solver. Can be either told or asked for a constraint. - */ -public interface BuiltinConstraint extends Constraint { - - public Queryable solver(ComputingSession session); - - public Class solverClass(); - - public String symbol(); - - public int arity(); - -} diff --git a/reactor/API/src/jetbrains/mps/logic/reactor/constraint/ComputingItem.java b/reactor/API/src/jetbrains/mps/logic/reactor/constraint/ComputingItem.java deleted file mode 100644 index 89a017b7..00000000 --- a/reactor/API/src/jetbrains/mps/logic/reactor/constraint/ComputingItem.java +++ /dev/null @@ -1,15 +0,0 @@ -package jetbrains.mps.logic.reactor.constraint; - -/*Generated by MPS */ - - -/** - * A basic item of computation. - */ -public interface ComputingItem { - - public void init(ComputingSession session, ComputingTracer tracer); - - public void dispose(ComputingSession session); - -} diff --git a/reactor/API/src/jetbrains/mps/logic/reactor/constraint/ComputingSession.java b/reactor/API/src/jetbrains/mps/logic/reactor/constraint/ComputingSession.java deleted file mode 100644 index 4783706a..00000000 --- a/reactor/API/src/jetbrains/mps/logic/reactor/constraint/ComputingSession.java +++ /dev/null @@ -1,111 +0,0 @@ -package jetbrains.mps.logic.reactor.constraint; - -/*Generated by MPS */ - -import java.util.Arrays; -import java.util.List; -import java.util.ArrayList; -import java.util.Map; -import java.util.HashMap; - -/** - * Computing session is used to provide an interface for handlers and solvers working together in a single session. - */ -public class ComputingSession { - - public static ComputingSession.Builder with(ComputingItem... cst) { - return new ComputingSession.Builder(cst); - } - - private ComputingSession(ComputingTracer tracer) { - this.tracer = tracer; - } - - public static class Builder { - - private Builder(ComputingItem... item) { - items.addAll(Arrays.asList(item)); - } - - public ComputingSession.Builder withTracer(ComputingTracer tracer) { - this.tracer = tracer; - return this; - } - - public ComputingSession newSession() { - ComputingSession session = new ComputingSession(tracer); - for (ComputingItem ci : items) { - ci.init(session, tracer); - } - return session; - } - - private List items = new ArrayList(); - private ComputingTracer tracer; - } - - - public boolean ask(BuiltinConstraint autoConstraint, Object... arg) { - Queryable solver = solver(autoConstraint); - if (solver == null) { - throw new IllegalStateException("no solver for '" + autoConstraint.symbol() + "'"); - } - - return solver.ask(autoConstraint, arg); - } - - public void tell(Constraint constraint, Object... arg) { - Instructible handler = handler(constraint); - if (handler == null) { - throw new IllegalStateException("no handler for '" + constraint.name() + "'"); - } - - handler.tell(constraint, arg); - } - - public Constraint lookupConstraint(Class clazz) { - for (Map.Entry e : handlers.entrySet()) { - if (clazz.isAssignableFrom(e.getKey().handlerClass())) { - return e.getKey(); - } - } - return null; - } - - public BuiltinConstraint lookupAutoConstraint(Class clazz) { - for (Map.Entry e : solvers.entrySet()) { - if (clazz.isAssignableFrom(e.getKey().solverClass())) { - return e.getKey(); - } - } - return null; - } - - protected Instructible handler(Constraint constraint) { - if (!(handlers.containsKey(constraint))) { - throw new IllegalStateException("no handler: " + constraint); - } - return handlers.get(constraint); - } - - protected Queryable solver(BuiltinConstraint constraint) { - if (!(solvers.containsKey(constraint))) { - throw new IllegalStateException("no handler: " + constraint); - } - return solvers.get(constraint); - } - - protected void registerHandler(Constraint constraint, Instructible instructible) { - handlers.put(constraint, instructible); - } - - protected void registerSolver(BuiltinConstraint constraint, Queryable queryable) { - solvers.put(constraint, queryable); - } - - private Map handlers = new HashMap(); - - private Map solvers = new HashMap(); - - private final ComputingTracer tracer; -} diff --git a/reactor/API/src/jetbrains/mps/logic/reactor/constraint/ComputingTracer.java b/reactor/API/src/jetbrains/mps/logic/reactor/constraint/ComputingTracer.java index d4ee2854..54c949d1 100644 --- a/reactor/API/src/jetbrains/mps/logic/reactor/constraint/ComputingTracer.java +++ b/reactor/API/src/jetbrains/mps/logic/reactor/constraint/ComputingTracer.java @@ -5,8 +5,10 @@ package jetbrains.mps.logic.reactor.constraint; public interface ComputingTracer { - public void askSuccess(BuiltinConstraint autoConstraint, Object... args); + public void askSuccess(PredicateSymbol predicateSymbol, Object... args); - public void askFailure(BuiltinConstraint autoConstraint, Object... args); + public void askFailure(PredicateSymbol predicateSymbol, Object... args); + + public void reportFailure(String message); } diff --git a/reactor/API/src/jetbrains/mps/logic/reactor/constraint/Constraint.java b/reactor/API/src/jetbrains/mps/logic/reactor/constraint/Constraint.java index 0ee21b24..6d1cbf70 100644 --- a/reactor/API/src/jetbrains/mps/logic/reactor/constraint/Constraint.java +++ b/reactor/API/src/jetbrains/mps/logic/reactor/constraint/Constraint.java @@ -2,18 +2,17 @@ package jetbrains.mps.logic.reactor.constraint; /*Generated by MPS */ +import java.util.List; /** * A constraint provided by a handler. Can only be told. + * FIXME: should be merely a factory for ConstraintOccurrence's + * FIXME: should be provided by the session (from ConstraintSymbol) */ -public interface Constraint extends ComputingItem { +public interface Constraint extends AndItem { - public Instructible handler(ComputingSession session); + public ConstraintSymbol symbol(); - public Class handlerClass(); - - public String name(); - - public int arity(); + public List> argumentTypes(); } diff --git a/reactor/API/src/jetbrains/mps/logic/reactor/constraint/ConstraintOccurrence.java b/reactor/API/src/jetbrains/mps/logic/reactor/constraint/ConstraintOccurrence.java new file mode 100644 index 00000000..3147b931 --- /dev/null +++ b/reactor/API/src/jetbrains/mps/logic/reactor/constraint/ConstraintOccurrence.java @@ -0,0 +1,13 @@ +package jetbrains.mps.logic.reactor.constraint; + +/*Generated by MPS */ + +import java.util.List; + +public interface ConstraintOccurrence { + + public Constraint constraint(); + + public List arguments(); + +} diff --git a/reactor/API/src/jetbrains/mps/logic/reactor/constraint/ConstraintSymbol.java b/reactor/API/src/jetbrains/mps/logic/reactor/constraint/ConstraintSymbol.java index 9d7ed7ed..c32091a3 100644 --- a/reactor/API/src/jetbrains/mps/logic/reactor/constraint/ConstraintSymbol.java +++ b/reactor/API/src/jetbrains/mps/logic/reactor/constraint/ConstraintSymbol.java @@ -6,69 +6,19 @@ package jetbrains.mps.logic.reactor.constraint; /** * TODO: move to the constraint model */ -public class ConstraintSymbol { +public class ConstraintSymbol extends Symbol { public static ConstraintSymbol symbol(String id, int arity) { - return new ConstraintSymbol(id, arity, false); + return new ConstraintSymbol(id, arity); } - public static ConstraintSymbol builtinSymbol(String id, int arity) { - return new ConstraintSymbol(id, arity, true); - } - - private ConstraintSymbol(String id, int arity, boolean builtin) { - this.id = id; - this.arity = arity; - this.builtin = builtin; - } - - public String id() { - return id; - } - - public int arity() { - return arity; - } - - public boolean isBuiltin() { - return builtin; + public ConstraintSymbol(String id, int arity) { + super(id, arity); } @Override public String toString() { - return id; + return id() + "/" + arity(); } - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || this.getClass() != o.getClass()) { - return false; - } - - ConstraintSymbol that = (ConstraintSymbol) o; - if ((id != null ? !(id.equals(that.id)) : that.id != null)) { - return false; - } - if (arity != that.arity) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = 17; - result = 43 * result + ((id != null ? String.valueOf(id).hashCode() : 0)); - result = 31 * result + 37 * arity; - return result; - } - - private String id; - private int arity; - - private boolean builtin; } diff --git a/reactor/API/src/jetbrains/mps/logic/reactor/constraint/Instructible.java b/reactor/API/src/jetbrains/mps/logic/reactor/constraint/Instructible.java index c780b5a9..3e2bb04a 100644 --- a/reactor/API/src/jetbrains/mps/logic/reactor/constraint/Instructible.java +++ b/reactor/API/src/jetbrains/mps/logic/reactor/constraint/Instructible.java @@ -5,6 +5,6 @@ package jetbrains.mps.logic.reactor.constraint; public interface Instructible { - public void tell(Constraint constraint, Object... arg); + public void tell(Symbol symbol, Object... arg); } diff --git a/reactor/API/src/jetbrains/mps/logic/reactor/constraint/JavaPredicateSymbol.java b/reactor/API/src/jetbrains/mps/logic/reactor/constraint/JavaPredicateSymbol.java new file mode 100644 index 00000000..d972ff62 --- /dev/null +++ b/reactor/API/src/jetbrains/mps/logic/reactor/constraint/JavaPredicateSymbol.java @@ -0,0 +1,16 @@ +package jetbrains.mps.logic.reactor.constraint; + +/*Generated by MPS */ + + +public class JavaPredicateSymbol extends PredicateSymbol { + + public JavaPredicateSymbol(String expression, int arity) { + super(expression, arity); + } + + @Override + public String toString() { + return "J:" + id() + "/" + arity(); + } +} diff --git a/reactor/API/src/jetbrains/mps/logic/reactor/constraint/Predicate.java b/reactor/API/src/jetbrains/mps/logic/reactor/constraint/Predicate.java new file mode 100644 index 00000000..a13ba875 --- /dev/null +++ b/reactor/API/src/jetbrains/mps/logic/reactor/constraint/Predicate.java @@ -0,0 +1,13 @@ +package jetbrains.mps.logic.reactor.constraint; + +/*Generated by MPS */ + + +/** + * A predicate that is provided by a solver. Can be either told or asked. + */ +public interface Predicate extends AndItem { + + public PredicateSymbol symbol(); + +} diff --git a/reactor/API/src/jetbrains/mps/logic/reactor/constraint/PredicateSymbol.java b/reactor/API/src/jetbrains/mps/logic/reactor/constraint/PredicateSymbol.java new file mode 100644 index 00000000..b2a5a912 --- /dev/null +++ b/reactor/API/src/jetbrains/mps/logic/reactor/constraint/PredicateSymbol.java @@ -0,0 +1,17 @@ +package jetbrains.mps.logic.reactor.constraint; + +/*Generated by MPS */ + + +public class PredicateSymbol extends Symbol { + + public PredicateSymbol(String id, int arity) { + super(id, arity); + } + + @Override + public String toString() { + return id() + "()/" + arity(); + } + +} diff --git a/reactor/API/src/jetbrains/mps/logic/reactor/constraint/Queryable.java b/reactor/API/src/jetbrains/mps/logic/reactor/constraint/Queryable.java index 53a00f58..456a23a4 100644 --- a/reactor/API/src/jetbrains/mps/logic/reactor/constraint/Queryable.java +++ b/reactor/API/src/jetbrains/mps/logic/reactor/constraint/Queryable.java @@ -5,6 +5,6 @@ package jetbrains.mps.logic.reactor.constraint; public interface Queryable extends Instructible { - public boolean ask(BuiltinConstraint autoConstraint, Object... arg); + public boolean ask(PredicateSymbol predicateSymbol, Object... arg); } diff --git a/reactor/API/src/jetbrains/mps/logic/reactor/constraint/SessionSolver.java b/reactor/API/src/jetbrains/mps/logic/reactor/constraint/SessionSolver.java new file mode 100644 index 00000000..5b67c7cd --- /dev/null +++ b/reactor/API/src/jetbrains/mps/logic/reactor/constraint/SessionSolver.java @@ -0,0 +1,67 @@ +package jetbrains.mps.logic.reactor.constraint; + +/*Generated by MPS */ + +import java.util.Map; +import java.util.HashMap; + +/** + * Is used to provide an interface for handlers and solvers working together in a single session. + */ +public abstract class SessionSolver implements Instructible, Queryable { + + public void init(PredicateSymbol... predicateSymbols) { + registerSymbols(null, predicateSymbols); + } + + public void init(ComputingTracer computingTracer, PredicateSymbol... predicateSymbols) { + registerSymbols(computingTracer, predicateSymbols); + } + + @Override + public boolean ask(PredicateSymbol predicateSymbol, Object... arg) { + return solver(predicateSymbol).ask(predicateSymbol, arg); + } + + @Override + public void tell(Symbol symbol, Object... arg) { + handler(symbol).tell(symbol, arg); + } + + public Queryable lookupQueryable(Class clazz) { + for (Map.Entry e : solvers.entrySet()) { + Queryable queryable = e.getValue(); + if (clazz.isAssignableFrom(queryable.getClass())) { + return queryable; + } + } + return null; + } + + public abstract Class solverClass(PredicateSymbol predicateSymbol); + + protected abstract void registerSymbol(PredicateSymbol predicateSymbol, ComputingTracer computingTracer); + + protected void registerSolver(PredicateSymbol constraint, Queryable queryable) { + solvers.put(constraint, queryable); + } + + private Instructible handler(Symbol symbol) { + return solver((PredicateSymbol) symbol); + } + + private void registerSymbols(ComputingTracer computingTracer, PredicateSymbol... predicateSymbols) { + for (PredicateSymbol symbol : predicateSymbols) { + registerSymbol(symbol, computingTracer); + } + } + + private Queryable solver(PredicateSymbol predicateSymbol) { + if (!(solvers.containsKey(predicateSymbol))) { + throw new IllegalStateException("no handler: " + predicateSymbol); + } + return solvers.get(predicateSymbol); + } + + private Map solvers = new HashMap(); +} diff --git a/reactor/API/src/jetbrains/mps/logic/reactor/constraint/StandardBuiltinConstraint.java b/reactor/API/src/jetbrains/mps/logic/reactor/constraint/StandardBuiltinConstraint.java deleted file mode 100644 index c4ffe626..00000000 --- a/reactor/API/src/jetbrains/mps/logic/reactor/constraint/StandardBuiltinConstraint.java +++ /dev/null @@ -1,18 +0,0 @@ -package jetbrains.mps.logic.reactor.constraint; - -/*Generated by MPS */ - - -public class StandardBuiltinConstraint { - - public static final ConstraintSymbol UNIFICATION = ConstraintSymbol.builtinSymbol("=", 2); - - public static final ConstraintSymbol EQUALS = ConstraintSymbol.builtinSymbol("==", 2); - - public static final ConstraintSymbol ASSERT = ConstraintSymbol.builtinSymbol("assert", 1); - - public static final ConstraintSymbol FREE = ConstraintSymbol.builtinSymbol("isVar", 1); - - public static final ConstraintSymbol BOUND = ConstraintSymbol.builtinSymbol("isNonVar", 1); - -} diff --git a/reactor/API/src/jetbrains/mps/logic/reactor/constraint/Symbol.java b/reactor/API/src/jetbrains/mps/logic/reactor/constraint/Symbol.java new file mode 100644 index 00000000..89a2f5a1 --- /dev/null +++ b/reactor/API/src/jetbrains/mps/logic/reactor/constraint/Symbol.java @@ -0,0 +1,51 @@ +package jetbrains.mps.logic.reactor.constraint; + +/*Generated by MPS */ + + +public abstract class Symbol { + + protected Symbol(String id, int arity) { + this.id = id; + this.arity = arity; + } + + public String id() { + return id; + } + + public int arity() { + return arity; + } + + @Override + public int hashCode() { + int result = 17; + result = 43 * result + ((id != null ? String.valueOf(id).hashCode() : 0)); + result = 31 * result + 37 * arity; + return result; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || this.getClass() != o.getClass()) { + return false; + } + + Symbol that = (Symbol) o; + if ((id != null ? !(id.equals(that.id())) : that.id != null)) { + return false; + } + if (arity != that.arity) { + return false; + } + + return true; + } + + private String id; + private int arity; +} diff --git a/reactor/API/src/jetbrains/mps/logic/reactor/constraint/occurrence/AbstractConstraintOccurrence.java b/reactor/API/src/jetbrains/mps/logic/reactor/constraint/occurrence/AbstractConstraintOccurrence.java deleted file mode 100644 index f05c4a16..00000000 --- a/reactor/API/src/jetbrains/mps/logic/reactor/constraint/occurrence/AbstractConstraintOccurrence.java +++ /dev/null @@ -1,34 +0,0 @@ -package jetbrains.mps.logic.reactor.constraint.occurrence; - -/*Generated by MPS */ - -import jetbrains.mps.logic.reactor.constraint.ConstraintSymbol; -import java.util.List; -import java.util.Collections; -import java.util.Arrays; - -public abstract class AbstractConstraintOccurrence { - - protected AbstractConstraintOccurrence(ConstraintSymbol symbol, Object... arg) { - this.symbol = symbol; - this.arg = arg; - } - - public ConstraintSymbol symbol() { - return symbol; - } - - public List arguments() { - return (arg != null ? Collections.unmodifiableList(Arrays.asList(arg)) : Collections.emptyList()); - } - - public abstract ConstraintKind kind(); - - @Override - public String toString() { - return getClass().getSimpleName() + " (" + symbol + ")" + "/" + arg.length; - } - - private final ConstraintSymbol symbol; - private Object[] arg; -} diff --git a/reactor/API/src/jetbrains/mps/logic/reactor/constraint/occurrence/BuiltinConstraintOccurrence.java b/reactor/API/src/jetbrains/mps/logic/reactor/constraint/occurrence/BuiltinConstraintOccurrence.java deleted file mode 100644 index 3234f4c3..00000000 --- a/reactor/API/src/jetbrains/mps/logic/reactor/constraint/occurrence/BuiltinConstraintOccurrence.java +++ /dev/null @@ -1,34 +0,0 @@ -package jetbrains.mps.logic.reactor.constraint.occurrence; - -/*Generated by MPS */ - -import jetbrains.mps.logic.reactor.constraint.ConstraintSymbol; - -public class BuiltinConstraintOccurrence extends AbstractConstraintOccurrence { - - public static BuiltinConstraintOccurrence unitary(ConstraintSymbol symbol, Object arg) { - if (symbol.arity() != 1) { - throw new IllegalArgumentException("arity mismatch"); - } - - return new BuiltinConstraintOccurrence(symbol, arg); - } - - public static BuiltinConstraintOccurrence binary(ConstraintSymbol symbol, Object arg1, Object arg2) { - if (symbol.arity() != 2) { - throw new IllegalArgumentException("arity mismatch"); - } - - return new BuiltinConstraintOccurrence(symbol, arg1, arg2); - } - - @Override - public ConstraintKind kind() { - return ConstraintKind.BUILTIN; - } - - private BuiltinConstraintOccurrence(ConstraintSymbol symbol, Object... arg) { - super(symbol, arg); - } - -} diff --git a/reactor/API/src/jetbrains/mps/logic/reactor/constraint/occurrence/ConstraintKind.java b/reactor/API/src/jetbrains/mps/logic/reactor/constraint/occurrence/ConstraintKind.java deleted file mode 100644 index b5af2257..00000000 --- a/reactor/API/src/jetbrains/mps/logic/reactor/constraint/occurrence/ConstraintKind.java +++ /dev/null @@ -1,13 +0,0 @@ -package jetbrains.mps.logic.reactor.constraint.occurrence; - -/*Generated by MPS */ - - -@Deprecated -public enum ConstraintKind { - BUILTIN(), - USER(), - LOGICAL(), - JAVA(); - -} diff --git a/reactor/API/src/jetbrains/mps/logic/reactor/constraint/occurrence/ConstraintOccurrence.java b/reactor/API/src/jetbrains/mps/logic/reactor/constraint/occurrence/ConstraintOccurrence.java deleted file mode 100644 index 22ecc00d..00000000 --- a/reactor/API/src/jetbrains/mps/logic/reactor/constraint/occurrence/ConstraintOccurrence.java +++ /dev/null @@ -1,38 +0,0 @@ -package jetbrains.mps.logic.reactor.constraint.occurrence; - -/*Generated by MPS */ - -import jetbrains.mps.logic.reactor.constraint.ConstraintSymbol; - -public class ConstraintOccurrence extends AbstractConstraintOccurrence { - - public static ConstraintOccurrence singleton(String id) { - return new ConstraintOccurrence(ConstraintSymbol.symbol(id, 0)); - } - - public static ConstraintOccurrence unitary(String id, Object arg) { - return new ConstraintOccurrence(ConstraintSymbol.symbol(id, 1), arg); - } - - public static ConstraintOccurrence binary(String id, Object arg1, Object arg2) { - return new ConstraintOccurrence(ConstraintSymbol.symbol(id, 2), arg1, arg2); - } - - public static ConstraintOccurrence ternary(String id, Object arg1, Object arg2, Object arg3) { - return new ConstraintOccurrence(ConstraintSymbol.symbol(id, 3), arg1, arg2, arg3); - } - - public static ConstraintOccurrence nary(String id, Object... args) { - return new ConstraintOccurrence(ConstraintSymbol.symbol(id, args.length), args); - } - - @Override - public ConstraintKind kind() { - return ConstraintKind.USER; - } - - private ConstraintOccurrence(ConstraintSymbol symbol, Object... args) { - super(symbol, args); - } - -} diff --git a/reactor/API/src/jetbrains/mps/logic/reactor/constraint/occurrence/JavaConstraintOccurrence.java b/reactor/API/src/jetbrains/mps/logic/reactor/constraint/occurrence/JavaConstraintOccurrence.java deleted file mode 100644 index d66d5f3f..00000000 --- a/reactor/API/src/jetbrains/mps/logic/reactor/constraint/occurrence/JavaConstraintOccurrence.java +++ /dev/null @@ -1,25 +0,0 @@ -package jetbrains.mps.logic.reactor.constraint.occurrence; - -/*Generated by MPS */ - -import jetbrains.mps.logic.reactor.constraint.ConstraintSymbol; - -public class JavaConstraintOccurrence extends AbstractConstraintOccurrence { - - public static JavaConstraintOccurrence nary(String template, Object... args) { - return new JavaConstraintOccurrence(template, args); - } - - private JavaConstraintOccurrence(String template, Object... args) { - super(ConstraintSymbol.symbol(template, args.length), args); - } - - public ConstraintKind kind() { - return ConstraintKind.JAVA; - } - - public String toJavaString() { - return String.valueOf(symbol()); - } - -} diff --git a/reactor/API/src/jetbrains/mps/logic/reactor/constraint/occurrence/LogicalConstraintOccurence.java b/reactor/API/src/jetbrains/mps/logic/reactor/constraint/occurrence/LogicalConstraintOccurence.java deleted file mode 100644 index d2451385..00000000 --- a/reactor/API/src/jetbrains/mps/logic/reactor/constraint/occurrence/LogicalConstraintOccurence.java +++ /dev/null @@ -1,26 +0,0 @@ -package jetbrains.mps.logic.reactor.constraint.occurrence; - -/*Generated by MPS */ - -import jetbrains.mps.logic.reactor.constraint.StandardBuiltinConstraint; -import jetbrains.mps.logic.reactor.constraint.ConstraintSymbol; - -public class LogicalConstraintOccurence extends AbstractConstraintOccurrence { - - public static LogicalConstraintOccurence bound(Object logical) { - return new LogicalConstraintOccurence(StandardBuiltinConstraint.BOUND, logical); - } - - public static LogicalConstraintOccurence free(Object logical) { - return new LogicalConstraintOccurence(StandardBuiltinConstraint.FREE, logical); - } - - private LogicalConstraintOccurence(ConstraintSymbol symbol, Object logical) { - super(symbol, logical); - } - - public ConstraintKind kind() { - return ConstraintKind.LOGICAL; - } - -} diff --git a/reactor/API/src/jetbrains/mps/logic/reactor/constraint/occurrence/trace.info b/reactor/API/src/jetbrains/mps/logic/reactor/constraint/occurrence/trace.info deleted file mode 100644 index cb96c730..00000000 --- a/reactor/API/src/jetbrains/mps/logic/reactor/constraint/occurrence/trace.info +++ /dev/null @@ -1,213 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/reactor/API/src/jetbrains/mps/logic/reactor/constraint/trace.info b/reactor/API/src/jetbrains/mps/logic/reactor/constraint/trace.info index df2c3046..f56bf2c6 100644 --- a/reactor/API/src/jetbrains/mps/logic/reactor/constraint/trace.info +++ b/reactor/API/src/jetbrains/mps/logic/reactor/constraint/trace.info @@ -9,413 +9,375 @@ - + - - + + + - + - + - - - - - - - - - - - + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + - - - - - - - - - - - - - + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + - - + + + + + + - - + + + - - - - - - - + - - + + - - - - + + - - + + + + - + + + + + + + + + + + + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - + + - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - + + + - - - - - - - - - - - + + + + - + - + - - - - - - - - - - - + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + diff --git a/reactor/API/src/jetbrains/mps/logic/reactor/program/EvaluationSession.java b/reactor/API/src/jetbrains/mps/logic/reactor/program/EvaluationSession.java new file mode 100644 index 00000000..78f16968 --- /dev/null +++ b/reactor/API/src/jetbrains/mps/logic/reactor/program/EvaluationSession.java @@ -0,0 +1,73 @@ +package jetbrains.mps.logic.reactor.program; + +/*Generated by MPS */ + +import jetbrains.mps.logic.reactor.constraint.PredicateSymbol; +import jetbrains.mps.logic.reactor.constraint.ComputingTracer; +import jetbrains.mps.logic.reactor.constraint.SessionSolver; +import jetbrains.mps.logic.reactor.constraint.ConstraintSymbol; +import jetbrains.mps.logic.reactor.constraint.ConstraintOccurrence; + +/** + * AKA "Handler" + */ +public abstract class EvaluationSession { + + public static EvaluationSession current() { + if (ourBackend == null) { + throw new IllegalStateException("no backend"); + } + return ourBackend.current(); + } + + public static EvaluationSession.Config newSession() { + if (ourBackend == null) { + throw new IllegalStateException("no backend"); + } + return ourBackend.createConfig(); + } + + public static abstract class Config { + + public abstract EvaluationSession.Config withPredicates(PredicateSymbol... predicateSymbols); + + public abstract EvaluationSession.Config withTrace(ComputingTracer computingTracer); + + public abstract EvaluationSession.Config withParam(String key, Object param); + + public abstract EvaluationSession start(); + } + + public abstract SessionSolver sessionSolver(); + + public abstract Iterable constraintSymbols(); + + public abstract Iterable constraintOccurrences(); + + public abstract Iterable constraintOccurrences(ConstraintSymbol symbol); + + protected static void setBackend(EvaluationSession.Backend backend) { + if (ourBackend != null) { + throw new IllegalStateException("backend already assigned"); + } + ourBackend = backend; + } + + protected static void clearBackend(EvaluationSession.Backend backend) { + if (ourBackend != backend) { + throw new IllegalStateException("illegal access"); + } + ourBackend = null; + } + + protected static interface Backend { + + public EvaluationSession current(); + + public EvaluationSession.Config createConfig(); + + } + + private static EvaluationSession.Backend ourBackend; + +} diff --git a/reactor/API/src/jetbrains/mps/logic/reactor/program/PlanningSession.java b/reactor/API/src/jetbrains/mps/logic/reactor/program/PlanningSession.java new file mode 100644 index 00000000..c3a39d78 --- /dev/null +++ b/reactor/API/src/jetbrains/mps/logic/reactor/program/PlanningSession.java @@ -0,0 +1,60 @@ +package jetbrains.mps.logic.reactor.program; + +/*Generated by MPS */ + +import jetbrains.mps.logic.reactor.constraint.SessionSolver; +import jetbrains.mps.logic.reactor.constraint.ConstraintSymbol; +import java.util.List; +import jetbrains.mps.logic.reactor.constraint.PredicateSymbol; +import jetbrains.mps.logic.reactor.constraint.Queryable; +import jetbrains.mps.logic.reactor.rule.Rule; +import jetbrains.mps.logic.reactor.rule.InvalidRuleException; +import java.util.Collection; + +public abstract class PlanningSession { + + public static PlanningSession newSession(String name, SessionSolver sessionSolver) { + if (ourFactory == null) { + throw new IllegalStateException("factory not set"); + } + return ourFactory.create(name, sessionSolver); + } + + public abstract String name(); + + public abstract Iterable constraintSymbols(); + + public abstract List> constraintArgumentTypes(ConstraintSymbol constraintSymbol); + + public abstract Iterable predicateSymbols(); + + public abstract Class solverClass(PredicateSymbol predicateSymbol); + + public abstract Iterable rules(); + + public abstract void addRule(Rule rule) throws InvalidRuleException; + + public abstract void addRules(Collection rules) throws InvalidRuleException; + + protected static void setFactory(PlanningSession.Factory factory) { + if (ourFactory != null) { + throw new IllegalStateException("factory already set"); + } + ourFactory = factory; + } + + protected static void clearFactory(PlanningSession.Factory factory) { + if (ourFactory != factory) { + throw new IllegalStateException("illegal access"); + } + ourFactory = null; + } + + protected static interface Factory { + + public PlanningSession create(String name, SessionSolver sessionSolver); + + } + + private static PlanningSession.Factory ourFactory; +} diff --git a/reactor/API/src/jetbrains/mps/logic/reactor/program/trace.info b/reactor/API/src/jetbrains/mps/logic/reactor/program/trace.info new file mode 100644 index 00000000..486969c6 --- /dev/null +++ b/reactor/API/src/jetbrains/mps/logic/reactor/program/trace.info @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/reactor/API/src/jetbrains/mps/logic/reactor/rule/ConstraintRegistry.java b/reactor/API/src/jetbrains/mps/logic/reactor/rule/ConstraintRegistry.java deleted file mode 100644 index 26a5d746..00000000 --- a/reactor/API/src/jetbrains/mps/logic/reactor/rule/ConstraintRegistry.java +++ /dev/null @@ -1,106 +0,0 @@ -package jetbrains.mps.logic.reactor.rule; - -/*Generated by MPS */ - -import jetbrains.mps.logic.reactor.constraint.BuiltinConstraint; -import jetbrains.mps.logic.reactor.constraint.ConstraintSymbol; -import jetbrains.mps.logic.reactor.constraint.occurrence.AbstractConstraintOccurrence; -import jetbrains.mps.logic.reactor.constraint.occurrence.InvalidConstraintException; -import java.util.Arrays; -import java.util.Set; -import java.util.Collections; -import java.util.HashSet; -import java.util.Map; -import java.util.HashMap; - -public abstract class ConstraintRegistry { - - public abstract BuiltinConstraint findBuiltinConstraint(ConstraintSymbol symbol); - - public void checkValidConstraint(AbstractConstraintOccurrence cst) throws InvalidConstraintException { - switch (cst.kind()) { - case USER: - boolean matches = cst.symbol().arity() == cst.arguments().size(); - if (!(matches)) { - throw new InvalidConstraintException("arity mismatch for " + String.valueOf(cst.symbol())); - } - - if (userConstraintArgTypes.containsKey(cst.symbol())) { - if (!(Arrays.equals(argType(cst), userConstraintArgTypes.get(cst.symbol())))) { - throw new InvalidConstraintException("argument type mismatch for " + String.valueOf(cst.symbol())); - } - } - break; - - case BUILTIN: - if (cst.arguments().size() != cst.symbol().arity()) { - throw new InvalidConstraintException("arity mismatch for " + String.valueOf(cst.symbol())); - } - break; - - case JAVA: - // FIXME: implement me - break; - - default: - } - - for (Object arg : cst.arguments()) { - if (arg == null) { - throw new InvalidConstraintException("argument is null in " + String.valueOf(cst.symbol())); - } - } - } - - public Set constraintSymbols() { - return Collections.unmodifiableSet(userConstraintArgTypes.keySet()); - } - - public Set builtinConstraintSymbols() { - return Collections.unmodifiableSet(builtinSymbols); - } - - public Class[] getUserConstraintArgTypes(Object id) { - if (!(userConstraintArgTypes.containsKey(id))) { - throw new IllegalArgumentException("no such ID: " + id); - } - return userConstraintArgTypes.get(id); - } - - public void introduceConstraint(AbstractConstraintOccurrence cst) throws InvalidConstraintException { - checkValidConstraint(cst); - switch (cst.kind()) { - case USER: - userConstraintArgTypes.put(cst.symbol(), argType(cst)); - break; - - case LOGICAL: - // fall through - case BUILTIN: - builtinSymbols.add(cst.symbol()); - break; - - case JAVA: - // FIXME implement me - break; - - default: - throw new IllegalArgumentException("unknown constraint kind '" + cst.kind() + "'"); - } - } - - private Class[] argType(AbstractConstraintOccurrence cst) { - Class[] argType = new Class[cst.arguments().size()]; - int i = 0; - for (Object arg : cst.arguments()) { - if (arg != null) { - argType[i++] = arg.getClass(); - } - } - return argType; - } - - private Set builtinSymbols = new HashSet(); - - private Map[]> userConstraintArgTypes = new HashMap[]>(); -} diff --git a/reactor/API/src/jetbrains/mps/logic/reactor/constraint/occurrence/InvalidConstraintException.java b/reactor/API/src/jetbrains/mps/logic/reactor/rule/InvalidConstraintException.java similarity index 81% rename from reactor/API/src/jetbrains/mps/logic/reactor/constraint/occurrence/InvalidConstraintException.java rename to reactor/API/src/jetbrains/mps/logic/reactor/rule/InvalidConstraintException.java index d6888d1e..3c683e4d 100644 --- a/reactor/API/src/jetbrains/mps/logic/reactor/constraint/occurrence/InvalidConstraintException.java +++ b/reactor/API/src/jetbrains/mps/logic/reactor/rule/InvalidConstraintException.java @@ -1,4 +1,4 @@ -package jetbrains.mps.logic.reactor.constraint.occurrence; +package jetbrains.mps.logic.reactor.rule; /*Generated by MPS */ diff --git a/reactor/API/src/jetbrains/mps/logic/reactor/rule/Rule.java b/reactor/API/src/jetbrains/mps/logic/reactor/rule/Rule.java index 33a9eda2..ef05805b 100644 --- a/reactor/API/src/jetbrains/mps/logic/reactor/rule/Rule.java +++ b/reactor/API/src/jetbrains/mps/logic/reactor/rule/Rule.java @@ -2,8 +2,9 @@ package jetbrains.mps.logic.reactor.rule; /*Generated by MPS */ -import jetbrains.mps.logic.reactor.constraint.occurrence.ConstraintOccurrence; -import jetbrains.mps.logic.reactor.constraint.occurrence.AbstractConstraintOccurrence; +import jetbrains.mps.logic.reactor.constraint.Constraint; +import jetbrains.mps.logic.reactor.constraint.Predicate; +import jetbrains.mps.logic.reactor.constraint.AndItem; public abstract class Rule { @@ -11,15 +12,15 @@ public abstract class Rule { public abstract String tag(); - public abstract Iterable headKept(); + public abstract Iterable headKept(); - public abstract Iterable headReplaced(); + public abstract Iterable headReplaced(); - public abstract Iterable guard(); + public abstract Iterable guard(); - public abstract Iterable body(); + public abstract Iterable body(); - public abstract Iterable all(); + public abstract Iterable all(); public static enum Kind { SIMPLIFICATION(), diff --git a/reactor/API/src/jetbrains/mps/logic/reactor/rule/RuleBuilder.java b/reactor/API/src/jetbrains/mps/logic/reactor/rule/RuleBuilder.java index bc4fe5d0..5e73e3d0 100644 --- a/reactor/API/src/jetbrains/mps/logic/reactor/rule/RuleBuilder.java +++ b/reactor/API/src/jetbrains/mps/logic/reactor/rule/RuleBuilder.java @@ -2,8 +2,9 @@ package jetbrains.mps.logic.reactor.rule; /*Generated by MPS */ -import jetbrains.mps.logic.reactor.constraint.occurrence.AbstractConstraintOccurrence; -import jetbrains.mps.logic.reactor.constraint.occurrence.ConstraintOccurrence; +import jetbrains.mps.logic.reactor.constraint.AndItem; +import jetbrains.mps.logic.reactor.constraint.Predicate; +import jetbrains.mps.logic.reactor.constraint.Constraint; import java.util.Collections; import com.google.common.collect.Iterables; import java.util.List; @@ -15,30 +16,30 @@ public class RuleBuilder { this.tag = tag; } - public RuleBuilder appendBody(AbstractConstraintOccurrence... c) { - for (int i = 0; i < c.length; i++) { - body.add(c[i]); + public RuleBuilder appendBody(AndItem... item) { + for (int i = 0; i < item.length; i++) { + body.add(item[i]); } return this; } - public RuleBuilder appendGuard(AbstractConstraintOccurrence... c) { - for (int i = 0; i < c.length; i++) { - guard.add(c[i]); + public RuleBuilder appendGuard(Predicate... pred) { + for (int i = 0; i < pred.length; i++) { + guard.add(pred[i]); } return this; } - public RuleBuilder appendHeadReplaced(ConstraintOccurrence... uc) { - for (int i = 0; i < uc.length; i++) { - headReplaced.add(uc[i]); + public RuleBuilder appendHeadReplaced(Constraint... cst) { + for (int i = 0; i < cst.length; i++) { + headReplaced.add(cst[i]); } return this; } - public RuleBuilder appendHeadKept(ConstraintOccurrence... uc) { - for (int i = 0; i < uc.length; i++) { - headKept.add(uc[i]); + public RuleBuilder appendHeadKept(Constraint... cst) { + for (int i = 0; i < cst.length; i++) { + headKept.add(cst[i]); } return this; } @@ -120,27 +121,27 @@ public class RuleBuilder { } @Override - public Iterable headKept() { + public Iterable headKept() { return headKept; } @Override - public Iterable headReplaced() { + public Iterable headReplaced() { return headReplaced; } @Override - public Iterable guard() { + public Iterable guard() { return guard; } @Override - public Iterable body() { + public Iterable body() { return body; } @Override - public Iterable all() { + public Iterable all() { return Iterables.concat(headKept, headReplaced, guard, body); } @@ -149,8 +150,8 @@ public class RuleBuilder { } private String tag; - private List headKept = new ArrayList(4); - private List headReplaced = new ArrayList(4); - private List guard = new ArrayList(4); - private List body = new ArrayList(4); + private List headKept = new ArrayList(4); + private List headReplaced = new ArrayList(4); + private List guard = new ArrayList(4); + private List body = new ArrayList(4); } diff --git a/reactor/API/src/jetbrains/mps/logic/reactor/rule/trace.info b/reactor/API/src/jetbrains/mps/logic/reactor/rule/trace.info index 4f634ec4..d986208e 100644 --- a/reactor/API/src/jetbrains/mps/logic/reactor/rule/trace.info +++ b/reactor/API/src/jetbrains/mps/logic/reactor/rule/trace.info @@ -1,332 +1,217 @@ - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - - - - - - - - - + + + + + + + + + - - + + - - - - - - - - + + + + + + + + - - + + - - + + - - + + - + - - + + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + - - - - + + + + @@ -339,5 +224,23 @@ + + + + + + + + + + + + + + + + + + diff --git a/reactor/Test/test/Rules.kt b/reactor/Test/test/Rules.kt index d8933796..b588d954 100644 --- a/reactor/Test/test/Rules.kt +++ b/reactor/Test/test/Rules.kt @@ -1,5 +1,4 @@ -import jetbrains.mps.logic.reactor.constraint.occurrence.AbstractConstraintOccurrence -import jetbrains.mps.logic.reactor.constraint.occurrence.ConstraintOccurrence +import jetbrains.mps.logic.reactor.constraint.* import jetbrains.mps.logic.reactor.rule.Rule import jetbrains.mps.logic.reactor.rule.RuleBuilder import java.util.* @@ -18,56 +17,56 @@ fun rule(tag: String, vararg component:RB.() -> Unit): Rule { } fun headKept(vararg content : ConjBuilder.() -> Unit): RB.() -> Unit = { - appendHeadKept( * buildConjunction(ConstraintOccurrence::class.java, content).toArray()) + appendHeadKept( * buildConjunction(Constraint::class.java, content).toArray()) } fun headReplaced(vararg content : ConjBuilder.() -> Unit): RB.() -> Unit = { - appendHeadKept( * buildConjunction(ConstraintOccurrence::class.java, content).toArray()) + appendHeadKept( * buildConjunction(Constraint::class.java, content).toArray()) } fun guard(vararg content : ConjBuilder.() -> Unit): RB.() -> Unit = { - appendGuard( * buildConjunction(AbstractConstraintOccurrence::class.java, content).toArray()) + appendGuard( * buildConjunction(AndItem::class.java, content).toArray()) } fun body(vararg content : ConjBuilder.() -> Unit): RB.() -> Unit = { - appendBody( * buildConjunction(AbstractConstraintOccurrence::class.java, content).toArray()) + appendBody( * buildConjunction(AndItem::class.java, content).toArray()) } fun constraint(id: String): ConjBuilder.() -> Unit = { - add(ConstraintOccurrence.singleton(id)) + add(AbstractConstraint(ConstraintSymbol.symbol(id, 0))) } fun constraint(id: String, arg: Any): ConjBuilder.() -> Unit = { - add(ConstraintOccurrence.unitary(id, arg)) + add(AbstractConstraint(ConstraintSymbol.symbol(id, 1), arg)) } fun constraint(id: String, arg1: Any, arg2: Any): ConjBuilder.() -> Unit = { - add(ConstraintOccurrence.binary(id, arg1, arg2)) + add(AbstractConstraint(ConstraintSymbol.symbol(id, 2), arg1, arg2)) } fun constraint(id: String, arg1: Any, arg2: Any, arg3: Any): ConjBuilder.() -> Unit = { - add(ConstraintOccurrence.ternary(id, arg1, arg2, arg3)) + add(AbstractConstraint(ConstraintSymbol.symbol(id, 3), arg1, arg2, arg3)) } fun constraint(id: String, args: Array): ConjBuilder.() -> Unit = { - add(ConstraintOccurrence.nary(id, * args)) + add(AbstractConstraint(ConstraintSymbol.symbol(id, args.size), * args)) } class RB(tag: String) : RuleBuilder(tag) {} -class ConjBuilder (val type: Class) { - val constraints = ArrayList() - fun add(constraint: AbstractConstraintOccurrence): Unit { +class ConjBuilder (val type: Class) { + val constraints = ArrayList() + fun add(constraint: AndItem): Unit { if (!type.isAssignableFrom(constraint.javaClass)) throw IllegalArgumentException("unexpected constraint class '${constraint.javaClass}'") constraints.add(constraint) } - fun toArray(): Array = - if (ConstraintOccurrence::class.java.isAssignableFrom(type)) - Array(constraints.size) { - constraints.get(it) as ConstraintOccurrence + fun toArray(): Array = + if (Constraint::class.java.isAssignableFrom(type)) + Array(constraints.size) { + constraints.get(it) as Constraint } as Array else - Array(constraints.size) { + Array(constraints.size) { constraints.get(it) } as Array } -private fun - buildConjunction(type: Class, content: Array Unit>): ConjBuilder +private fun buildConjunction(type: Class, + content: Array Unit>): ConjBuilder { var conjBuilder = ConjBuilder(type) for (c in content) {