diff --git a/AlgebraicDataflowArchitectureModel/src/code/ast/IExpressionVisitor.java b/AlgebraicDataflowArchitectureModel/src/code/ast/IExpressionVisitor.java new file mode 100644 index 0000000..bf2b64b --- /dev/null +++ b/AlgebraicDataflowArchitectureModel/src/code/ast/IExpressionVisitor.java @@ -0,0 +1,22 @@ +package code.ast; + +import models.algebra.Constant; +import models.algebra.Field; +import models.algebra.Term; +import models.algebra.Variable; +import models.dataConstraintModel.JsonAccessor; +import models.dataConstraintModel.JsonTerm; + +public interface IExpressionVisitor { + void visit(Term term); + + void visit(Field field); + + void visit(Constant constant); + + void visit(Variable variable); + + void visit(JsonTerm jsonTerm); + + void visit(JsonAccessor jsonAccessor); +} diff --git a/AlgebraicDataflowArchitectureModel/src/generators/JavaImplementationVisitor.java b/AlgebraicDataflowArchitectureModel/src/generators/JavaImplementationVisitor.java index c9e1ced..e55f7e6 100644 --- a/AlgebraicDataflowArchitectureModel/src/generators/JavaImplementationVisitor.java +++ b/AlgebraicDataflowArchitectureModel/src/generators/JavaImplementationVisitor.java @@ -1,12 +1,11 @@ package generators; +import code.ast.IExpressionVisitor; import models.algebra.*; import models.dataConstraintModel.DataConstraintModel; import models.dataConstraintModel.JsonAccessor; import models.dataConstraintModel.JsonTerm; -import java.util.List; - /** * This class is a Java implementation of {@link IExpressionVisitor} * which holds and manages the actual method of implementation code generation @@ -16,8 +15,10 @@ public class JavaImplementationVisitor implements IExpressionVisitor { private static int jsonCount = 0; + private final String[] sideEffects = {}; + @Override - public code.ast.Expression visit(Term term, String[] sideEffects) { + public void visit(Term term) { int[] implParamOrder = term.getSymbol().getImplParamOrder(); if (term.getSymbol().isImplLambda()) { String[] components = term.getSymbol().getImplName().split("->"); @@ -154,12 +155,12 @@ } @Override - public code.ast.Expression visit(Field field, String[] sideEffects) { + public void visit(Field field) { return new code.ast.FieldAccess(new code.ast.ThisExpression(), visit((Constant) field, sideEffects).toString()); } @Override - public code.ast.Expression visit(Constant constant, String[] sideEffects) { + public void visit(Constant constant) { if (constant.getSymbol().isImplGenerative()) { String exp = constant.getSymbol().generate(constant.getType(), new Type[]{}, new String[]{}, new String[]{}, sideEffects); return exp; @@ -169,23 +170,22 @@ } @Override - public code.ast.Expression visit(Variable variable, String[] sideEffects) { + public void visit(Variable variable) { return new code.ast.Variable(variable.getName()); } @Override - public code.ast.Expression visit(JsonTerm jsonTerm, String[] sideEffects) { + public void visit(JsonTerm jsonTerm) { String temp = "temp_json" + jsonCount; jsonCount++; - - code.ast.Type mapType = new code.ast.SimpleType("Map"); - code.ast.Type stringType = new code.ast.SimpleType("String"); - code.ast.Type objectType = new code.ast.SimpleType("Object"); - - code.ast.Type type = new code.ast.ParameterizedType(mapType, List.of(stringType, objectType)); - code.ast.VariableDeclaration fragment = new code.ast.VariableDeclaration(new Type("Map", type.toString()), temp); - - // TODO: Implement this correctly + +// code.ast.Type mapType = new code.ast.SimpleType("Map"); +// code.ast.Type stringType = new code.ast.SimpleType("String"); +// code.ast.Type objectType = new code.ast.SimpleType("Object"); +// +// code.ast.Type type = new code.ast.ParameterizedType(mapType, List.of(stringType, objectType)); +// code.ast.VariableDeclarationStatement statement = new code.ast.VariableDeclarationStatement(new Type("Map", type.toString()), temp); +// String impl = ""; impl += "Map " + temp + " = new HashMap<>();\n"; @@ -198,7 +198,7 @@ } @Override - public code.ast.Expression visit(JsonAccessor jsonAccessor, String[] sideEffects) { + public void visit(JsonAccessor jsonAccessor) { if (jsonAccessor.getSymbol().equals(DataConstraintModel.dotParam)) { return jsonAccessor.getChildren().get(0).accept(this, sideEffects) + "." + jsonAccessor.getSymbol().toImplementation() + "(" + jsonAccessor.getChildren().get(1).accept(this, sideEffects) + ")"; } diff --git a/AlgebraicDataflowArchitectureModel/src/models/algebra/Constant.java b/AlgebraicDataflowArchitectureModel/src/models/algebra/Constant.java index 78f1b37..8d68aec 100644 --- a/AlgebraicDataflowArchitectureModel/src/models/algebra/Constant.java +++ b/AlgebraicDataflowArchitectureModel/src/models/algebra/Constant.java @@ -1,5 +1,6 @@ package models.algebra; +import code.ast.IExpressionVisitor; import generators.JavaImplementationVisitor; import java.util.ArrayList; @@ -48,7 +49,7 @@ } @Override - public code.ast.Expression accept(IExpressionVisitor visitor, String[] sideEffects) { - return visitor.visit(this, sideEffects); + public void accept(IExpressionVisitor visitor) { + visitor.visit(this); } } diff --git a/AlgebraicDataflowArchitectureModel/src/models/algebra/Expression.java b/AlgebraicDataflowArchitectureModel/src/models/algebra/Expression.java index 1f79f27..b4115fe 100644 --- a/AlgebraicDataflowArchitectureModel/src/models/algebra/Expression.java +++ b/AlgebraicDataflowArchitectureModel/src/models/algebra/Expression.java @@ -1,5 +1,7 @@ package models.algebra; +import code.ast.IExpressionVisitor; + import java.util.HashMap; public abstract class Expression implements Cloneable { @@ -32,7 +34,7 @@ return getSubTerms(Variable.class); } - public abstract code.ast.Expression accept(IExpressionVisitor visitor, String[] sideEffects); + public abstract void accept(IExpressionVisitor visitor); /** * Get the implementation of this expression. diff --git a/AlgebraicDataflowArchitectureModel/src/models/algebra/Field.java b/AlgebraicDataflowArchitectureModel/src/models/algebra/Field.java index 73fd891..f988f2e 100644 --- a/AlgebraicDataflowArchitectureModel/src/models/algebra/Field.java +++ b/AlgebraicDataflowArchitectureModel/src/models/algebra/Field.java @@ -1,5 +1,6 @@ package models.algebra; +import code.ast.IExpressionVisitor; import generators.JavaImplementationVisitor; /** @@ -46,7 +47,7 @@ } @Override - public code.ast.Expression accept(IExpressionVisitor visitor, String[] sideEffects) { - return visitor.visit(this, sideEffects); + public void accept(IExpressionVisitor visitor) { + visitor.visit(this); } } diff --git a/AlgebraicDataflowArchitectureModel/src/models/algebra/IExpressionVisitor.java b/AlgebraicDataflowArchitectureModel/src/models/algebra/IExpressionVisitor.java deleted file mode 100644 index 29e5c2a..0000000 --- a/AlgebraicDataflowArchitectureModel/src/models/algebra/IExpressionVisitor.java +++ /dev/null @@ -1,18 +0,0 @@ -package models.algebra; - -import models.dataConstraintModel.JsonAccessor; -import models.dataConstraintModel.JsonTerm; - -public interface IExpressionVisitor { - code.ast.Expression visit(Term term, String[] sideEffects); - - code.ast.Expression visit(Field field, String[] sideEffects); - - code.ast.Expression visit(Constant constant, String[] sideEffects); - - code.ast.Expression visit(Variable variable, String[] sideEffects); - - code.ast.Expression visit(JsonTerm jsonTerm, String[] sideEffects); - - code.ast.Expression visit(JsonAccessor jsonAccessor, String[] sideEffects); -} diff --git a/AlgebraicDataflowArchitectureModel/src/models/algebra/Term.java b/AlgebraicDataflowArchitectureModel/src/models/algebra/Term.java index 32f97c4..e1dda9f 100644 --- a/AlgebraicDataflowArchitectureModel/src/models/algebra/Term.java +++ b/AlgebraicDataflowArchitectureModel/src/models/algebra/Term.java @@ -1,5 +1,6 @@ package models.algebra; +import code.ast.IExpressionVisitor; import generators.JavaImplementationVisitor; import java.util.ArrayList; @@ -316,7 +317,7 @@ } @Override - public code.ast.Expression accept(IExpressionVisitor visitor, String[] sideEffects) { - return visitor.visit(this, sideEffects); + public void accept(IExpressionVisitor visitor) { + visitor.visit(this); } } diff --git a/AlgebraicDataflowArchitectureModel/src/models/algebra/Variable.java b/AlgebraicDataflowArchitectureModel/src/models/algebra/Variable.java index eca4319..13cf8ab 100644 --- a/AlgebraicDataflowArchitectureModel/src/models/algebra/Variable.java +++ b/AlgebraicDataflowArchitectureModel/src/models/algebra/Variable.java @@ -1,5 +1,6 @@ package models.algebra; +import code.ast.IExpressionVisitor; import generators.JavaImplementationVisitor; import java.util.HashMap; @@ -88,7 +89,7 @@ } @Override - public code.ast.Expression accept(IExpressionVisitor visitor, String[] sideEffects) { - return visitor.visit(this, sideEffects); + public void accept(IExpressionVisitor visitor) { + visitor.visit(this); } } diff --git a/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/JsonAccessor.java b/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/JsonAccessor.java index de7eb5b..904693f 100644 --- a/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/JsonAccessor.java +++ b/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/JsonAccessor.java @@ -1,5 +1,6 @@ package models.dataConstraintModel; +import code.ast.IExpressionVisitor; import generators.JavaImplementationVisitor; import models.algebra.*; @@ -209,8 +210,8 @@ } @Override - public code.ast.Expression accept(IExpressionVisitor visitor, String[] sideEffects) { - return visitor.visit(this, sideEffects); + public void accept(IExpressionVisitor visitor) { + visitor.visit(this); } @Override diff --git a/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/JsonTerm.java b/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/JsonTerm.java index 26d796a..02f3189 100644 --- a/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/JsonTerm.java +++ b/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/JsonTerm.java @@ -1,5 +1,6 @@ package models.dataConstraintModel; +import code.ast.IExpressionVisitor; import generators.JavaImplementationVisitor; import models.algebra.*; import parser.Parser; @@ -95,7 +96,7 @@ } @Override - public code.ast.Expression accept(IExpressionVisitor visitor, String[] sideEffects) { - return visitor.visit(this, sideEffects); + public void accept(IExpressionVisitor visitor) { + visitor.visit(this); } }