diff --git a/AlgebraicDataflowArchitectureModel/src/models/algebra/Constant.java b/AlgebraicDataflowArchitectureModel/src/models/algebra/Constant.java new file mode 100644 index 0000000..0c283a5 --- /dev/null +++ b/AlgebraicDataflowArchitectureModel/src/models/algebra/Constant.java @@ -0,0 +1,25 @@ +package models.algebra; + +import java.util.ArrayList; + +public class Constant extends Term { + + public Constant(String value) { + super(new Symbol(value, 0), new ArrayList()); + } + + @Override + public boolean equals(Object another) { + if (!(another instanceof Constant)) return false; + return symbol.equals(((Constant) another).symbol); + } + + @Override + public Object clone() { + return new Constant(symbol.getName()); + } + + public String toString() { + return symbol.getName(); + } +} diff --git a/AlgebraicDataflowArchitectureModel/src/models/algebra/Expression.java b/AlgebraicDataflowArchitectureModel/src/models/algebra/Expression.java new file mode 100644 index 0000000..6e0c9e2 --- /dev/null +++ b/AlgebraicDataflowArchitectureModel/src/models/algebra/Expression.java @@ -0,0 +1,12 @@ +package models.algebra; + +import java.util.HashMap; + +public abstract class Expression implements Cloneable { + public abstract HashMap getVariables(); + public abstract Expression getSubTerm(Position pos); + public abstract Expression unify(Expression another); + public abstract Expression getInverseMap(Expression outputValue, Position targetPos); + public abstract boolean contains(Expression exp); + public abstract Object clone(); +} diff --git a/AlgebraicDataflowArchitectureModel/src/models/algebra/FutureWorkException.java b/AlgebraicDataflowArchitectureModel/src/models/algebra/FutureWorkException.java new file mode 100644 index 0000000..ce01dc7 --- /dev/null +++ b/AlgebraicDataflowArchitectureModel/src/models/algebra/FutureWorkException.java @@ -0,0 +1,5 @@ +package models.algebra; + +public class FutureWorkException extends Exception { + +} diff --git a/AlgebraicDataflowArchitectureModel/src/models/algebra/InvalidMessage.java b/AlgebraicDataflowArchitectureModel/src/models/algebra/InvalidMessage.java new file mode 100644 index 0000000..c250f2f --- /dev/null +++ b/AlgebraicDataflowArchitectureModel/src/models/algebra/InvalidMessage.java @@ -0,0 +1,5 @@ +package models.algebra; + +public class InvalidMessage extends Exception { + +} diff --git a/AlgebraicDataflowArchitectureModel/src/models/algebra/ParameterizedIdentifierIsFutureWork.java b/AlgebraicDataflowArchitectureModel/src/models/algebra/ParameterizedIdentifierIsFutureWork.java new file mode 100644 index 0000000..f37087b --- /dev/null +++ b/AlgebraicDataflowArchitectureModel/src/models/algebra/ParameterizedIdentifierIsFutureWork.java @@ -0,0 +1,5 @@ +package models.algebra; + +public class ParameterizedIdentifierIsFutureWork extends FutureWorkException { + +} diff --git a/AlgebraicDataflowArchitectureModel/src/models/algebra/Position.java b/AlgebraicDataflowArchitectureModel/src/models/algebra/Position.java new file mode 100644 index 0000000..1708506 --- /dev/null +++ b/AlgebraicDataflowArchitectureModel/src/models/algebra/Position.java @@ -0,0 +1,35 @@ +package models.algebra; + +import java.util.ArrayList; +import java.util.List; + +public class Position implements Cloneable { + private ArrayList orders = new ArrayList(); + + public Position() { + } + + public Position(ArrayList orders) { + this.orders = orders; + } + + public void addHeadOrder(int order) { + orders.add(0, order); + } + + public int removeHeadOrder() { + return orders.remove(0); + } + + public List getOrders() { + return orders; + } + + public boolean isEmpty() { + return (orders == null || orders.size() == 0); + } + + public Object clone() { + return new Position((ArrayList) orders.clone()); + } +} diff --git a/AlgebraicDataflowArchitectureModel/src/models/algebra/Symbol.java b/AlgebraicDataflowArchitectureModel/src/models/algebra/Symbol.java new file mode 100644 index 0000000..f4f29ce --- /dev/null +++ b/AlgebraicDataflowArchitectureModel/src/models/algebra/Symbol.java @@ -0,0 +1,72 @@ +package models.algebra; + +public class Symbol { + private String name; + private int arity = 0; + private Type operatorType = Type.PREFIX; + private Symbol inverses[] = null; + + public Symbol(String name) { + this.name = name; + this.arity = 0; + } + + public Symbol(String name, int arity) { + this.name = name; + this.arity = arity; + } + + public Symbol(String name, int arity, Type operatorType) { + this.name = name; + this.arity = arity; + this.operatorType = operatorType; + } + + public void setArity(int arity) { + this.arity = arity; + } + + public int getArity() { + return arity; + } + + public String getName() { + return name; + } + + public boolean isInfix() { + return (operatorType == Type.INFIX); + } + + public boolean isMethod() { + return (operatorType == Type.METHOD); + } + + public Symbol[] getInverses() { + return inverses; + } + + public void setInverses(Symbol[] inverses) { + this.inverses = inverses; + } + + public boolean equals(Object another) { + if (!(another instanceof Symbol)) return false; + return name.equals(((Symbol) another).name) && arity == ((Symbol) another).arity; + } + + @Override + public int hashCode() { + return name.hashCode(); + } + + public String toString() { + return name; + } + + public enum Type { + PREFIX, + INFIX, + METHOD + } +} diff --git a/AlgebraicDataflowArchitectureModel/src/models/algebra/Term.java b/AlgebraicDataflowArchitectureModel/src/models/algebra/Term.java new file mode 100644 index 0000000..023f5f8 --- /dev/null +++ b/AlgebraicDataflowArchitectureModel/src/models/algebra/Term.java @@ -0,0 +1,186 @@ +package models.algebra; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map.Entry; + +public class Term extends Expression { + protected Symbol symbol = null; + protected ArrayList children = new ArrayList<>(); + + public Term(Symbol symbol) { + super(); + this.symbol = symbol; + } + + public Term(Symbol symbol, ArrayList children) { + super(); + this.symbol = symbol; + this.children = children; + } + + public Symbol getSymbol() { + return symbol; + } + + public int getArity() { + return symbol.getArity(); + } + + public boolean addChild(Expression child) { + if (children.size() >= getArity()) return false; + children.add(child); + return true; + } + + public void addChild(Expression child, boolean bForced) { + if (!bForced && children.size() >= getArity()) return; + children.add(child); + } + + public Expression getChild(int n) { + return children.get(n); + } + + public HashMap getVariables() { + HashMap variables = new HashMap<>(); + for (int i = 0; i < children.size(); i++) { + HashMap vars = children.get(i).getVariables(); + for (Entry var: vars.entrySet()) { + Position pos = var.getKey(); + pos.addHeadOrder(i); + variables.put(pos, var.getValue()); + } + } + return variables; + } + + public Expression getSubTerm(Position pos) { + if (pos.isEmpty()) return this; + pos = (Position) pos.clone(); + int i = pos.removeHeadOrder(); + if (i >= children.size()) return null; + return children.get(i).getSubTerm(pos); + } + + public Term substitute(Variable variable, Expression value) { + Term newTerm = (Term) this.clone(); + HashMap variables = getVariables(); + for (Entry varEnt: variables.entrySet()) { + if (varEnt.getValue().equals(variable)) { + newTerm.replaceSubTerm(varEnt.getKey(), value); + } + } + return newTerm; + } + + public void replaceSubTerm(Position pos, Expression newSubTerm) { + if (pos.isEmpty()) return; + pos = (Position) pos.clone(); + int i = pos.removeHeadOrder(); + if (pos.isEmpty()) { + children.set(i, newSubTerm); + } else { + if (!(children.get(i) instanceof Term)) return; + ((Term) children.get(i)).replaceSubTerm(pos, newSubTerm); + } + } + + @Override + public Expression unify(Expression another) { + if (another instanceof Variable) return (Expression) this.clone(); + if (another instanceof Term) { + Term anotherTerm = (Term) another; + if (!symbol.equals(anotherTerm.symbol)) return null; + if (children.size() != anotherTerm.children.size()) return null; + Term unifiedTerm = new Term(symbol); + for (int i = 0; i < children.size(); i++) { + unifiedTerm.addChild(children.get(i).unify(anotherTerm.children.get(i))); + } + return unifiedTerm; + } else { + return null; + } + } + + @Override + public Expression getInverseMap(Expression outputValue, Position targetPos) { + if (targetPos.isEmpty()) return outputValue; + targetPos = (Position) targetPos.clone(); + int i = targetPos.removeHeadOrder(); + Symbol[] inverseSymbols = symbol.getInverses(); + if (inverseSymbols == null || i >= inverseSymbols.length || inverseSymbols[i] == null) return null; + Term inverseMap = new Term(inverseSymbols[i]); + inverseMap.addChild(outputValue); + for (int n = 0; n < inverseSymbols[i].getArity(); n++) { + if (n != i) { + inverseMap.addChild(children.get(n)); + } + } + return children.get(i).getInverseMap(inverseMap, targetPos); + } + + @Override + public boolean contains(Expression exp) { + if (equals(exp)) return true; + for (Expression e: children) { + if (e.contains(exp)) return true; + } + return false; + } + + @Override + public boolean equals(Object another) { + if (!(another instanceof Term)) return false; + if (this == another) return true; + Term anotherTerm = (Term) another; + if (!symbol.equals(anotherTerm.symbol)) return false; + if (children.size() != anotherTerm.children.size()) return false; + for (int i = 0; i < children.size(); i++) { + Expression e = children.get(i); + Expression e2 = anotherTerm.children.get(i); + if (!e.equals(e2)) return false; + } + return true; + } + + @Override + public int hashCode() { + return symbol.hashCode(); + } + + + @Override + public Object clone() { + Term newTerm = new Term(symbol); + for (Expression e: children) { + newTerm.addChild((Expression) e.clone()); + } + return newTerm; + } + + public String toString() { + if (getArity() == 2 && symbol.isInfix()) { + return "(" + children.get(0) + symbol.toString() + children.get(1) + ")"; + } + if (getArity() >= 1 && symbol.isMethod()) { + String exp = children.get(0).toString() + "." + symbol.toString() + "("; + String delimiter = ""; + for (int i = 1; i < children.size(); i++) { + Expression e = children.get(i); + exp += (delimiter + e.toString()); + delimiter = ","; + } + return exp + ")"; + } else { + String exp = symbol.toString() + "("; + String delimiter = ""; + for (Expression e: children) { + exp += (delimiter + e.toString()); + delimiter = ","; + } + return exp + ")"; + } + } + +} diff --git a/AlgebraicDataflowArchitectureModel/src/models/algebra/UnificationFailed.java b/AlgebraicDataflowArchitectureModel/src/models/algebra/UnificationFailed.java new file mode 100644 index 0000000..b0de344 --- /dev/null +++ b/AlgebraicDataflowArchitectureModel/src/models/algebra/UnificationFailed.java @@ -0,0 +1,5 @@ +package models.algebra; + +public class UnificationFailed extends Exception { + +} diff --git a/AlgebraicDataflowArchitectureModel/src/models/algebra/ValueUndefined.java b/AlgebraicDataflowArchitectureModel/src/models/algebra/ValueUndefined.java new file mode 100644 index 0000000..4c6de4c --- /dev/null +++ b/AlgebraicDataflowArchitectureModel/src/models/algebra/ValueUndefined.java @@ -0,0 +1,5 @@ +package models.algebra; + +public class ValueUndefined extends Exception { + +} diff --git a/AlgebraicDataflowArchitectureModel/src/models/algebra/Variable.java b/AlgebraicDataflowArchitectureModel/src/models/algebra/Variable.java new file mode 100644 index 0000000..14bda66 --- /dev/null +++ b/AlgebraicDataflowArchitectureModel/src/models/algebra/Variable.java @@ -0,0 +1,65 @@ +package models.algebra; + +import java.util.HashMap; + +public class Variable extends Expression { + private String name; + + public Variable(String name) { + super(); + this.name = name; + } + + public String getName() { + return name; + } + + @Override + public HashMap getVariables() { + HashMap variables = new HashMap<>(); + variables.put(new Position(), this); + return variables; + } + + @Override + public Expression getSubTerm(Position pos) { + if (pos.isEmpty()) return this; + return null; + } + + @Override + public Expression unify(Expression another) { + return (Expression) another.clone(); + } + + @Override + public Expression getInverseMap(Expression outputValue, Position targetPos) { + if (targetPos.isEmpty()) return outputValue; + return null; + } + + @Override + public boolean contains(Expression exp) { + return equals(exp); + } + + @Override + public boolean equals(Object another) { + if (!(another instanceof Variable)) return false; + return name.equals(((Variable) another).name); + } + + @Override + public int hashCode() { + return name.hashCode(); + } + + @Override + public Object clone() { + return new Variable(name); + } + + public String toString() { + return name; + } +} diff --git a/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/Constant.java b/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/Constant.java deleted file mode 100644 index 8d84927..0000000 --- a/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/Constant.java +++ /dev/null @@ -1,25 +0,0 @@ -package models.dataConstraintModel; - -import java.util.ArrayList; - -public class Constant extends Term { - - public Constant(String value) { - super(new Symbol(value, 0), new ArrayList()); - } - - @Override - public boolean equals(Object another) { - if (!(another instanceof Constant)) return false; - return symbol.equals(((Constant) another).symbol); - } - - @Override - public Object clone() { - return new Constant(symbol.getName()); - } - - public String toString() { - return symbol.getName(); - } -} diff --git a/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/DataConstraintModel.java b/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/DataConstraintModel.java index 82a98ab..aaa3d6f 100644 --- a/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/DataConstraintModel.java +++ b/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/DataConstraintModel.java @@ -5,6 +5,7 @@ import java.util.HashSet; import java.util.Set; +import models.algebra.Symbol; import parser.Parser; public class DataConstraintModel { diff --git a/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/Expression.java b/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/Expression.java deleted file mode 100644 index d4886ba..0000000 --- a/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/Expression.java +++ /dev/null @@ -1,12 +0,0 @@ -package models.dataConstraintModel; - -import java.util.HashMap; - -public abstract class Expression implements Cloneable { - public abstract HashMap getVariables(); - public abstract Expression getSubTerm(Position pos); - public abstract Expression unify(Expression another); - public abstract Expression getInverseMap(Expression outputValue, Position targetPos); - public abstract boolean contains(Expression exp); - public abstract Object clone(); -} diff --git a/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/FutureWorkException.java b/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/FutureWorkException.java deleted file mode 100644 index c5a3da8..0000000 --- a/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/FutureWorkException.java +++ /dev/null @@ -1,5 +0,0 @@ -package models.dataConstraintModel; - -public class FutureWorkException extends Exception { - -} diff --git a/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/InvalidMessage.java b/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/InvalidMessage.java deleted file mode 100644 index 4596165..0000000 --- a/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/InvalidMessage.java +++ /dev/null @@ -1,5 +0,0 @@ -package models.dataConstraintModel; - -public class InvalidMessage extends Exception { - -} diff --git a/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/ParameterizedIdentifierIsFutureWork.java b/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/ParameterizedIdentifierIsFutureWork.java deleted file mode 100644 index becba3b..0000000 --- a/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/ParameterizedIdentifierIsFutureWork.java +++ /dev/null @@ -1,5 +0,0 @@ -package models.dataConstraintModel; - -public class ParameterizedIdentifierIsFutureWork extends FutureWorkException { - -} diff --git a/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/Position.java b/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/Position.java deleted file mode 100644 index 308599a..0000000 --- a/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/Position.java +++ /dev/null @@ -1,35 +0,0 @@ -package models.dataConstraintModel; - -import java.util.ArrayList; -import java.util.List; - -public class Position implements Cloneable { - private ArrayList orders = new ArrayList(); - - public Position() { - } - - public Position(ArrayList orders) { - this.orders = orders; - } - - public void addHeadOrder(int order) { - orders.add(0, order); - } - - public int removeHeadOrder() { - return orders.remove(0); - } - - public List getOrders() { - return orders; - } - - public boolean isEmpty() { - return (orders == null || orders.size() == 0); - } - - public Object clone() { - return new Position((ArrayList) orders.clone()); - } -} diff --git a/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/StateTransition.java b/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/StateTransition.java index 2fcead2..250a560 100644 --- a/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/StateTransition.java +++ b/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/StateTransition.java @@ -4,6 +4,12 @@ import java.util.HashMap; import java.util.Map.Entry; +import models.algebra.Expression; +import models.algebra.InvalidMessage; +import models.algebra.Position; +import models.algebra.Term; +import models.algebra.ValueUndefined; +import models.algebra.Variable; import models.dataFlowModel.ResolvingMultipleDefinitionIsFutureWork; public class StateTransition { diff --git a/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/Symbol.java b/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/Symbol.java deleted file mode 100644 index c31e465..0000000 --- a/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/Symbol.java +++ /dev/null @@ -1,72 +0,0 @@ -package models.dataConstraintModel; - -public class Symbol { - private String name; - private int arity = 0; - private Type operatorType = Type.PREFIX; - private Symbol inverses[] = null; - - public Symbol(String name) { - this.name = name; - this.arity = 0; - } - - public Symbol(String name, int arity) { - this.name = name; - this.arity = arity; - } - - public Symbol(String name, int arity, Type operatorType) { - this.name = name; - this.arity = arity; - this.operatorType = operatorType; - } - - public void setArity(int arity) { - this.arity = arity; - } - - public int getArity() { - return arity; - } - - public String getName() { - return name; - } - - public boolean isInfix() { - return (operatorType == Type.INFIX); - } - - public boolean isMethod() { - return (operatorType == Type.METHOD); - } - - public Symbol[] getInverses() { - return inverses; - } - - public void setInverses(Symbol[] inverses) { - this.inverses = inverses; - } - - public boolean equals(Object another) { - if (!(another instanceof Symbol)) return false; - return name.equals(((Symbol) another).name) && arity == ((Symbol) another).arity; - } - - @Override - public int hashCode() { - return name.hashCode(); - } - - public String toString() { - return name; - } - - public enum Type { - PREFIX, - INFIX, - METHOD - } -} diff --git a/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/Term.java b/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/Term.java deleted file mode 100644 index 892f521..0000000 --- a/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/Term.java +++ /dev/null @@ -1,186 +0,0 @@ -package models.dataConstraintModel; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Map.Entry; - -public class Term extends Expression { - protected Symbol symbol = null; - protected ArrayList children = new ArrayList<>(); - - public Term(Symbol symbol) { - super(); - this.symbol = symbol; - } - - public Term(Symbol symbol, ArrayList children) { - super(); - this.symbol = symbol; - this.children = children; - } - - public Symbol getSymbol() { - return symbol; - } - - public int getArity() { - return symbol.getArity(); - } - - public boolean addChild(Expression child) { - if (children.size() >= getArity()) return false; - children.add(child); - return true; - } - - public void addChild(Expression child, boolean bForced) { - if (!bForced && children.size() >= getArity()) return; - children.add(child); - } - - public Expression getChild(int n) { - return children.get(n); - } - - public HashMap getVariables() { - HashMap variables = new HashMap<>(); - for (int i = 0; i < children.size(); i++) { - HashMap vars = children.get(i).getVariables(); - for (Entry var: vars.entrySet()) { - Position pos = var.getKey(); - pos.addHeadOrder(i); - variables.put(pos, var.getValue()); - } - } - return variables; - } - - public Expression getSubTerm(Position pos) { - if (pos.isEmpty()) return this; - pos = (Position) pos.clone(); - int i = pos.removeHeadOrder(); - if (i >= children.size()) return null; - return children.get(i).getSubTerm(pos); - } - - public Term substitute(Variable variable, Expression value) { - Term newTerm = (Term) this.clone(); - HashMap variables = getVariables(); - for (Entry varEnt: variables.entrySet()) { - if (varEnt.getValue().equals(variable)) { - newTerm.replaceSubTerm(varEnt.getKey(), value); - } - } - return newTerm; - } - - public void replaceSubTerm(Position pos, Expression newSubTerm) { - if (pos.isEmpty()) return; - pos = (Position) pos.clone(); - int i = pos.removeHeadOrder(); - if (pos.isEmpty()) { - children.set(i, newSubTerm); - } else { - if (!(children.get(i) instanceof Term)) return; - ((Term) children.get(i)).replaceSubTerm(pos, newSubTerm); - } - } - - @Override - public Expression unify(Expression another) { - if (another instanceof Variable) return (Expression) this.clone(); - if (another instanceof Term) { - Term anotherTerm = (Term) another; - if (!symbol.equals(anotherTerm.symbol)) return null; - if (children.size() != anotherTerm.children.size()) return null; - Term unifiedTerm = new Term(symbol); - for (int i = 0; i < children.size(); i++) { - unifiedTerm.addChild(children.get(i).unify(anotherTerm.children.get(i))); - } - return unifiedTerm; - } else { - return null; - } - } - - @Override - public Expression getInverseMap(Expression outputValue, Position targetPos) { - if (targetPos.isEmpty()) return outputValue; - targetPos = (Position) targetPos.clone(); - int i = targetPos.removeHeadOrder(); - Symbol[] inverseSymbols = symbol.getInverses(); - if (inverseSymbols == null || i >= inverseSymbols.length || inverseSymbols[i] == null) return null; - Term inverseMap = new Term(inverseSymbols[i]); - inverseMap.addChild(outputValue); - for (int n = 0; n < inverseSymbols[i].getArity(); n++) { - if (n != i) { - inverseMap.addChild(children.get(n)); - } - } - return children.get(i).getInverseMap(inverseMap, targetPos); - } - - @Override - public boolean contains(Expression exp) { - if (equals(exp)) return true; - for (Expression e: children) { - if (e.contains(exp)) return true; - } - return false; - } - - @Override - public boolean equals(Object another) { - if (!(another instanceof Term)) return false; - if (this == another) return true; - Term anotherTerm = (Term) another; - if (!symbol.equals(anotherTerm.symbol)) return false; - if (children.size() != anotherTerm.children.size()) return false; - for (int i = 0; i < children.size(); i++) { - Expression e = children.get(i); - Expression e2 = anotherTerm.children.get(i); - if (!e.equals(e2)) return false; - } - return true; - } - - @Override - public int hashCode() { - return symbol.hashCode(); - } - - - @Override - public Object clone() { - Term newTerm = new Term(symbol); - for (Expression e: children) { - newTerm.addChild((Expression) e.clone()); - } - return newTerm; - } - - public String toString() { - if (getArity() == 2 && symbol.isInfix()) { - return "(" + children.get(0) + symbol.toString() + children.get(1) + ")"; - } - if (getArity() >= 1 && symbol.isMethod()) { - String exp = children.get(0).toString() + "." + symbol.toString() + "("; - String delimiter = ""; - for (int i = 1; i < children.size(); i++) { - Expression e = children.get(i); - exp += (delimiter + e.toString()); - delimiter = ","; - } - return exp + ")"; - } else { - String exp = symbol.toString() + "("; - String delimiter = ""; - for (Expression e: children) { - exp += (delimiter + e.toString()); - delimiter = ","; - } - return exp + ")"; - } - } - -} diff --git a/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/UnificationFailed.java b/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/UnificationFailed.java deleted file mode 100644 index c855a70..0000000 --- a/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/UnificationFailed.java +++ /dev/null @@ -1,5 +0,0 @@ -package models.dataConstraintModel; - -public class UnificationFailed extends Exception { - -} diff --git a/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/ValueUndefined.java b/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/ValueUndefined.java deleted file mode 100644 index 131f5d0..0000000 --- a/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/ValueUndefined.java +++ /dev/null @@ -1,5 +0,0 @@ -package models.dataConstraintModel; - -public class ValueUndefined extends Exception { - -} diff --git a/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/Variable.java b/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/Variable.java deleted file mode 100644 index 667c8ef..0000000 --- a/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/Variable.java +++ /dev/null @@ -1,65 +0,0 @@ -package models.dataConstraintModel; - -import java.util.HashMap; - -public class Variable extends Expression { - private String name; - - public Variable(String name) { - super(); - this.name = name; - } - - public String getName() { - return name; - } - - @Override - public HashMap getVariables() { - HashMap variables = new HashMap<>(); - variables.put(new Position(), this); - return variables; - } - - @Override - public Expression getSubTerm(Position pos) { - if (pos.isEmpty()) return this; - return null; - } - - @Override - public Expression unify(Expression another) { - return (Expression) another.clone(); - } - - @Override - public Expression getInverseMap(Expression outputValue, Position targetPos) { - if (targetPos.isEmpty()) return outputValue; - return null; - } - - @Override - public boolean contains(Expression exp) { - return equals(exp); - } - - @Override - public boolean equals(Object another) { - if (!(another instanceof Variable)) return false; - return name.equals(((Variable) another).name); - } - - @Override - public int hashCode() { - return name.hashCode(); - } - - @Override - public Object clone() { - return new Variable(name); - } - - public String toString() { - return name; - } -} diff --git a/AlgebraicDataflowArchitectureModel/src/models/dataFlowModel/DataflowChannelGenerator.java b/AlgebraicDataflowArchitectureModel/src/models/dataFlowModel/DataflowChannelGenerator.java index 12f9657..46f6ade 100644 --- a/AlgebraicDataflowArchitectureModel/src/models/dataFlowModel/DataflowChannelGenerator.java +++ b/AlgebraicDataflowArchitectureModel/src/models/dataFlowModel/DataflowChannelGenerator.java @@ -4,6 +4,13 @@ import java.util.HashSet; import java.util.Set; +import models.algebra.Expression; +import models.algebra.InvalidMessage; +import models.algebra.ParameterizedIdentifierIsFutureWork; +import models.algebra.Term; +import models.algebra.UnificationFailed; +import models.algebra.ValueUndefined; +import models.algebra.Variable; import models.dataConstraintModel.*; public class DataflowChannelGenerator extends ChannelGenerator { diff --git a/AlgebraicDataflowArchitectureModel/src/models/dataFlowModel/ResolvingMultipleDefinitionIsFutureWork.java b/AlgebraicDataflowArchitectureModel/src/models/dataFlowModel/ResolvingMultipleDefinitionIsFutureWork.java index 952570c..9444ee3 100644 --- a/AlgebraicDataflowArchitectureModel/src/models/dataFlowModel/ResolvingMultipleDefinitionIsFutureWork.java +++ b/AlgebraicDataflowArchitectureModel/src/models/dataFlowModel/ResolvingMultipleDefinitionIsFutureWork.java @@ -1,6 +1,6 @@ package models.dataFlowModel; -import models.dataConstraintModel.FutureWorkException; +import models.algebra.FutureWorkException; public class ResolvingMultipleDefinitionIsFutureWork extends FutureWorkException { diff --git a/AlgebraicDataflowArchitectureModel/src/parser/Parser.java b/AlgebraicDataflowArchitectureModel/src/parser/Parser.java index a03d29e..8df86b4 100644 --- a/AlgebraicDataflowArchitectureModel/src/parser/Parser.java +++ b/AlgebraicDataflowArchitectureModel/src/parser/Parser.java @@ -6,14 +6,14 @@ import java.util.Arrays; import java.util.List; +import models.algebra.Constant; +import models.algebra.Expression; +import models.algebra.Symbol; +import models.algebra.Term; +import models.algebra.Variable; import models.dataConstraintModel.ChannelMember; -import models.dataConstraintModel.Constant; -import models.dataConstraintModel.Expression; import models.dataConstraintModel.IdentifierTemplate; import models.dataConstraintModel.StateTransition; -import models.dataConstraintModel.Symbol; -import models.dataConstraintModel.Term; -import models.dataConstraintModel.Variable; import models.dataFlowModel.DataFlowModel; import models.dataFlowModel.DataflowChannelGenerator; diff --git a/AlgebraicDataflowArchitectureModel/src/tests/InverseTest.java b/AlgebraicDataflowArchitectureModel/src/tests/InverseTest.java index 9e2e627..5196688 100644 --- a/AlgebraicDataflowArchitectureModel/src/tests/InverseTest.java +++ b/AlgebraicDataflowArchitectureModel/src/tests/InverseTest.java @@ -8,9 +8,9 @@ import org.junit.Test; -import models.dataConstraintModel.Expression; -import models.dataConstraintModel.Position; -import models.dataConstraintModel.Variable; +import models.algebra.Expression; +import models.algebra.Position; +import models.algebra.Variable; import models.dataFlowModel.DataFlowModel; import parser.ExpectedRightBracket; import parser.Parser; diff --git a/AlgebraicDataflowArchitectureModel/src/tests/ParseTest.java b/AlgebraicDataflowArchitectureModel/src/tests/ParseTest.java index 8164bde..2af9ed1 100644 --- a/AlgebraicDataflowArchitectureModel/src/tests/ParseTest.java +++ b/AlgebraicDataflowArchitectureModel/src/tests/ParseTest.java @@ -8,12 +8,12 @@ import java.io.FileReader; import models.Edge; +import models.algebra.InvalidMessage; +import models.algebra.ParameterizedIdentifierIsFutureWork; +import models.algebra.UnificationFailed; +import models.algebra.ValueUndefined; import models.dataConstraintModel.ChannelGenerator; import models.dataConstraintModel.ChannelMember; -import models.dataConstraintModel.InvalidMessage; -import models.dataConstraintModel.ParameterizedIdentifierIsFutureWork; -import models.dataConstraintModel.UnificationFailed; -import models.dataConstraintModel.ValueUndefined; import models.dataFlowModel.DataFlowModel; import models.dataFlowModel.DataflowChannelGenerator; import models.dataFlowModel.ResolvingMultipleDefinitionIsFutureWork; diff --git a/AlgebraicDataflowArchitectureModel/src/tests/TermTest.java b/AlgebraicDataflowArchitectureModel/src/tests/TermTest.java index 16f90c5..9ae2ec0 100644 --- a/AlgebraicDataflowArchitectureModel/src/tests/TermTest.java +++ b/AlgebraicDataflowArchitectureModel/src/tests/TermTest.java @@ -4,10 +4,10 @@ import static org.junit.Assert.assertFalse; import org.junit.Test; -import models.dataConstraintModel.Constant; -import models.dataConstraintModel.Symbol; -import models.dataConstraintModel.Term; -import models.dataConstraintModel.Variable; +import models.algebra.Constant; +import models.algebra.Symbol; +import models.algebra.Term; +import models.algebra.Variable; public class TermTest { diff --git a/AlgebraicDataflowArchitectureModel/src/tests/UpdateCodeGenerationTest.java b/AlgebraicDataflowArchitectureModel/src/tests/UpdateCodeGenerationTest.java index 2ea669b..7e60de3 100644 --- a/AlgebraicDataflowArchitectureModel/src/tests/UpdateCodeGenerationTest.java +++ b/AlgebraicDataflowArchitectureModel/src/tests/UpdateCodeGenerationTest.java @@ -4,21 +4,21 @@ import org.junit.Test; +import models.algebra.Constant; +import models.algebra.Expression; +import models.algebra.InvalidMessage; +import models.algebra.ParameterizedIdentifierIsFutureWork; +import models.algebra.Symbol; +import models.algebra.Term; +import models.algebra.UnificationFailed; +import models.algebra.ValueUndefined; +import models.algebra.Variable; import models.dataConstraintModel.ChannelMember; import models.dataConstraintModel.ChannelSelector; -import models.dataConstraintModel.Constant; import models.dataConstraintModel.DataConstraintModel; -import models.dataConstraintModel.Expression; import models.dataConstraintModel.GroupSelector; import models.dataConstraintModel.IdentifierTemplate; -import models.dataConstraintModel.InvalidMessage; -import models.dataConstraintModel.ParameterizedIdentifierIsFutureWork; import models.dataConstraintModel.StateTransition; -import models.dataConstraintModel.Symbol; -import models.dataConstraintModel.Term; -import models.dataConstraintModel.UnificationFailed; -import models.dataConstraintModel.ValueUndefined; -import models.dataConstraintModel.Variable; import models.dataFlowModel.DataFlowModel; import models.dataFlowModel.DataflowChannelGenerator; import models.dataFlowModel.DataflowChannelGenerator.IResourceStateAccessor;