diff --git a/AlgebraicDataflowArchitectureModel/src/models/algebra/Constant.java b/AlgebraicDataflowArchitectureModel/src/models/algebra/Constant.java index f458356..2b0e579 100644 --- a/AlgebraicDataflowArchitectureModel/src/models/algebra/Constant.java +++ b/AlgebraicDataflowArchitectureModel/src/models/algebra/Constant.java @@ -1,5 +1,7 @@ package models.algebra; +import generators.JavaImplementationVisitor; + import java.util.ArrayList; public class Constant extends Term { @@ -42,11 +44,7 @@ } public String toImplementation(String[] sideEffects) { - if (symbol.isImplGenerative()) { - String exp = symbol.generate(getType(), new Type[]{}, new String[]{}, new String[]{}, sideEffects); - return exp; - } - return symbol.getImplName(); + return accept(new JavaImplementationVisitor(), sideEffects); } @Override diff --git a/AlgebraicDataflowArchitectureModel/src/models/algebra/Field.java b/AlgebraicDataflowArchitectureModel/src/models/algebra/Field.java index 75a0858..93076df 100644 --- a/AlgebraicDataflowArchitectureModel/src/models/algebra/Field.java +++ b/AlgebraicDataflowArchitectureModel/src/models/algebra/Field.java @@ -1,5 +1,7 @@ package models.algebra; +import generators.JavaImplementationVisitor; + /** * A field in the implementation (regarded as a constant in the algebraic system) * @@ -40,7 +42,7 @@ } public String toImplementation(String[] sideEffects) { - return "this." + super.toImplementation(sideEffects); + return accept(new JavaImplementationVisitor(), sideEffects); } @Override diff --git a/AlgebraicDataflowArchitectureModel/src/models/algebra/Term.java b/AlgebraicDataflowArchitectureModel/src/models/algebra/Term.java index d732dd9..72f71a8 100644 --- a/AlgebraicDataflowArchitectureModel/src/models/algebra/Term.java +++ b/AlgebraicDataflowArchitectureModel/src/models/algebra/Term.java @@ -1,5 +1,7 @@ package models.algebra; +import generators.JavaImplementationVisitor; + import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; @@ -310,139 +312,7 @@ } public String toImplementation(String[] sideEffects) { - int[] implParamOrder = symbol.getImplParamOrder(); - if (symbol.isImplLambda()) { - String[] components = symbol.getImplName().split("->"); - String component0 = components[0].replace("(", "").replace(")", ""); - String[] params = component0.split(","); - String exp = components[1]; - String receiver = ""; - if (implParamOrder == null) { - receiver = children.get(0).toImplementation(sideEffects); - exp = exp.replace(params[0], receiver); - for (int i = 1; i < params.length; i++) { - exp = exp.replace(params[i], children.get(i).toImplementation(sideEffects)); - } - } else { - receiver = children.get(implParamOrder[0]).toImplementation(sideEffects); - exp = exp.replace(params[0], receiver); - for (int i = 1; i < params.length; i++) { - exp = exp.replace(params[i], children.get(implParamOrder[i]).toImplementation(sideEffects)); - } - } - if (symbol.isImplWithSideEffect()) { - sideEffects[0] = sideEffects[0] + exp + ";\n"; - exp = receiver; - } - return exp; - } - if (symbol.isImplGenerative()) { - Type childrenTypes[] = new Type[children.size()]; - String childrenImpl[] = new String[children.size()]; - String childrenSideEffects[] = new String[children.size()]; - if (implParamOrder == null) { - for (int i = 0; i < children.size(); i++) { - Expression child = children.get(i); - if (child instanceof Variable) { - childrenTypes[i] = ((Variable) child).getType(); - } else if (child instanceof Term) { - childrenTypes[i] = ((Term) child).getType(); - } - String childSideEffect[] = new String[]{""}; - childrenImpl[i] = child.toImplementation(childSideEffect); - childrenSideEffects[i] = childSideEffect[0]; - } - String exp = symbol.generate(getType(), childrenTypes, childrenImpl, childrenSideEffects, sideEffects); - if (symbol.isImplWithSideEffect()) { - sideEffects[0] = sideEffects[0] + exp; - exp = childrenImpl[0]; // the value of this term - } - return exp; - } else { - for (int i = 0; i < children.size(); i++) { - Expression child = children.get(implParamOrder[i]); - if (child instanceof Variable) { - childrenTypes[i] = ((Variable) child).getType(); - } else if (child instanceof Term) { - childrenTypes[i] = ((Term) child).getType(); - } - String childSideEffect[] = new String[]{""}; - childrenImpl[i] = child.toImplementation(childSideEffect); - childrenSideEffects[i] = childSideEffect[0]; - } - String exp = symbol.generate(getType(), childrenTypes, childrenImpl, childrenSideEffects, sideEffects); - if (symbol.isImplWithSideEffect()) { - sideEffects[0] = sideEffects[0] + exp; - exp = childrenImpl[0]; // the value of this term - } - return exp; - } - } - if (getArity() == 2 && symbol.isImplInfix()) { - if (implParamOrder == null) { - return "(" + children.get(0).toImplementation(sideEffects) + symbol.toImplementation() + children.get(1).toImplementation(sideEffects) + ")"; - } else { - return "(" + children.get(implParamOrder[0]).toImplementation(sideEffects) + symbol.toImplementation() + children.get(implParamOrder[1]).toImplementation(sideEffects) + ")"; - } - } - if ((getArity() >= 1 || getArity() == -1) && symbol.isImplMethod()) { - if (implParamOrder == null) { - String exp = null; - String receiver = ""; - if (children.size() > 0 && children.get(0) != null) { - receiver = children.get(0).toImplementation(sideEffects); - exp = receiver + "." + symbol.toImplementation() + "("; - } else { - exp = symbol.toImplementation() + "("; - } - String delimiter = ""; - for (int i = 1; i < children.size(); i++) { - Expression e = children.get(i); - exp += (delimiter + e.toImplementation(sideEffects)); - delimiter = ","; - } - exp += ")"; - if (symbol.isImplWithSideEffect()) { - sideEffects[0] = sideEffects[0] + exp + ";\n"; - exp = receiver; - } - return exp; - } else { - String receiver = children.get(implParamOrder[0]).toImplementation(sideEffects); - String exp = receiver + "." + symbol.toImplementation() + "("; - String delimiter = ""; - for (int i = 1; i < children.size(); i++) { - Expression e = children.get(implParamOrder[i]); - exp += (delimiter + e.toImplementation(sideEffects)); - delimiter = ","; - } - exp += ")"; - if (symbol.isImplWithSideEffect()) { - sideEffects[0] = sideEffects[0] + exp + ";\n"; - exp = receiver; - } - return exp; - } - } else { - if (implParamOrder == null) { - String exp = symbol.toImplementation() + "("; - String delimiter = ""; - for (Expression e : children) { - exp += (delimiter + e.toImplementation(sideEffects)); - delimiter = ","; - } - return exp + ")"; - } else { - String exp = symbol.toImplementation() + "("; - String delimiter = ""; - for (int i = 0; i < children.size(); i++) { - Expression e = children.get(implParamOrder[i]); - exp += (delimiter + e.toImplementation(sideEffects)); - delimiter = ","; - } - return exp + ")"; - } - } + return accept(new JavaImplementationVisitor(), sideEffects); } @Override diff --git a/AlgebraicDataflowArchitectureModel/src/models/algebra/Variable.java b/AlgebraicDataflowArchitectureModel/src/models/algebra/Variable.java index 47e8c10..336a87f 100644 --- a/AlgebraicDataflowArchitectureModel/src/models/algebra/Variable.java +++ b/AlgebraicDataflowArchitectureModel/src/models/algebra/Variable.java @@ -1,5 +1,7 @@ package models.algebra; +import generators.JavaImplementationVisitor; + import java.util.HashMap; public class Variable extends Expression { @@ -82,7 +84,7 @@ } public String toImplementation(String[] sideEffects) { - return name; + return accept(new JavaImplementationVisitor(), sideEffects); } @Override diff --git a/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/JsonAccessor.java b/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/JsonAccessor.java index 8a97c99..1cf0c22 100644 --- a/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/JsonAccessor.java +++ b/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/JsonAccessor.java @@ -1,5 +1,6 @@ package models.dataConstraintModel; +import generators.JavaImplementationVisitor; import models.algebra.*; import java.util.HashMap; @@ -204,10 +205,7 @@ } public String toImplementation(String[] sideEffects) { - if (symbol.equals(DataConstraintModel.dotParam)) { - return children.get(0).toImplementation(sideEffects) + "." + symbol.toImplementation() + "(" + children.get(1).toImplementation(sideEffects) + ")"; - } - return super.toImplementation(sideEffects); + return accept(new JavaImplementationVisitor(), sideEffects); } @Override diff --git a/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/JsonTerm.java b/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/JsonTerm.java index fbbf468..608a27e 100644 --- a/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/JsonTerm.java +++ b/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/JsonTerm.java @@ -1,5 +1,6 @@ package models.dataConstraintModel; +import generators.JavaImplementationVisitor; import models.algebra.*; import parser.Parser; @@ -90,15 +91,7 @@ } public String toImplementation(String[] sideEffects) { - String temp = "temp_json" + count; - count++; - String impl = ""; - impl += "Map " + temp + " = new HashMap<>();\n"; - for (String key : keySet()) { - impl += temp + ".put(\"" + key + "\", " + get(key).toImplementation(sideEffects) + ");\n"; - } - sideEffects[0] += impl; - return temp; + return accept(new JavaImplementationVisitor(), sideEffects); } @Override