diff --git a/AlgebraicDataflowArchitectureModel/src/code/ast/WhileStatement.java b/AlgebraicDataflowArchitectureModel/src/code/ast/WhileStatement.java index be37a35..6d22d84 100644 --- a/AlgebraicDataflowArchitectureModel/src/code/ast/WhileStatement.java +++ b/AlgebraicDataflowArchitectureModel/src/code/ast/WhileStatement.java @@ -2,14 +2,14 @@ public class WhileStatement extends Statement { - private Statement expression; + private Expression expression; private Statement body; - public Statement getExpression() { + public Expression getExpression() { return expression; } - public void setExpression(Statement expression) { + public void setExpression(Expression expression) { this.expression = expression; } diff --git a/AlgebraicDataflowArchitectureModel/src/generators/ILanguageSpecific.java b/AlgebraicDataflowArchitectureModel/src/generators/ILanguageSpecific.java index bce2707..2c89884 100644 --- a/AlgebraicDataflowArchitectureModel/src/generators/ILanguageSpecific.java +++ b/AlgebraicDataflowArchitectureModel/src/generators/ILanguageSpecific.java @@ -3,14 +3,11 @@ import java.util.ArrayList; import java.util.List; -import code.ast.CompilationUnit; -import code.ast.FieldDeclaration; -import code.ast.MethodDeclaration; -import code.ast.TypeDeclaration; -import code.ast.VariableDeclaration; +import code.ast.*; import models.algebra.Expression; import models.algebra.Term; import models.algebra.Type; +import models.algebra.Variable; import models.dataFlowModel.DataTransferChannel.IResourceStateAccessor; public interface ILanguageSpecific { @@ -24,7 +21,7 @@ Type newListType(String compTypeName); Type newMapType(Type keyType, String compTypeName); Type newTupleType(List compTypes); - String getVariableDeclaration(String typeName, String varName); + VariableDeclaration getVariableDeclaration(Type typeName, String varName); boolean declareField(); String getSelfExp(); String getFieldAccessor(String fieldName); @@ -33,11 +30,11 @@ String getMethodInvocation(String receiverName, String methodName); String getMethodInvocation(String receiverName, String methodName, List parameters); String getConstructorInvocation(String componentName, List parameters); - String getReturnStatement(String returnValue); - String getIfStatement(Term condition, String block); - String getForStatementForList(String varName, String list); - String getForStatementForCollection(String varName, String varType, String collection); - String getForStatementForMap(String varName, String varType, String map); + ReturnStatement getReturnStatement(String returnValue); + IfStatement getIfStatement(Term condition, Statement block); + ForStatement getForStatementForList(Variable varName, Expression list); + EnhancedForStatement getForStatementForCollection(String varName, String varType, String collection); + EnhancedForStatement getForStatementForMap(String varName, String varType, String map); String getEndForStatement(); String getEndForStatement(String varName); String toComponentName(String name); diff --git a/AlgebraicDataflowArchitectureModel/src/generators/JavaSpecific.java b/AlgebraicDataflowArchitectureModel/src/generators/JavaSpecific.java index e40f789..35bc2d5 100644 --- a/AlgebraicDataflowArchitectureModel/src/generators/JavaSpecific.java +++ b/AlgebraicDataflowArchitectureModel/src/generators/JavaSpecific.java @@ -3,12 +3,7 @@ import java.util.ArrayList; import java.util.List; -import code.ast.CompilationUnit; -import code.ast.FieldDeclaration; -import code.ast.ImportDeclaration; -import code.ast.MethodDeclaration; -import code.ast.TypeDeclaration; -import code.ast.VariableDeclaration; +import code.ast.*; import models.algebra.Expression; import models.algebra.Parameter; import models.algebra.Term; @@ -96,8 +91,8 @@ } @Override - public String getVariableDeclaration(String typeName, String varName) { - return typeName + " " + varName; + public VariableDeclaration getVariableDeclaration(Type typeName, String varName) { + return new VariableDeclaration(typeName, varName); } @Override @@ -176,28 +171,49 @@ } @Override - public String getReturnStatement(String returnValue) { - return "return " + returnValue; + public ReturnStatement getReturnStatement(String returnValue) { + ReturnStatement returnStatement = new ReturnStatement(); + returnStatement.setExpression(new Expression(returnValue) { + }); + return returnStatement; } @Override - public String getIfStatement(Term condition, String block) { - return "if (" + condition.toImplementation(new String[] {""})+ ") {\n" + "\t" + block.replace("\n", "\n\t") + "\n}"; + public IfStatement getIfStatement(Term condition, Statement block) { + IfStatement ifStatement = new IfStatement(); + String condStr = condition.toImplementation(new String[] {""}); + ifStatement.setExpression(new Expression(condStr) { + }); + ifStatement.setThenStatement(block); + return ifStatement; } @Override - public String getForStatementForList(String varName, String list) { - return "for (int " + varName + getAssignment() + "0; " + varName + " < " + list + ".size(); " + varName + "++) {"; + public ForStatement getForStatementForList(Variable varName, Expression list) { + ForStatement forStatement = new ForStatement(); + forStatement.getInitializers().add(new PlainStatement("int " + varName.getName() + " = 0")); + String condition = varName.getName() + " < " + list.toString() + ".size()"; + forStatement.setExpression(new Expression(condition)); + forStatement.getUpdaters().add(new PlainStatement(varName.getName() + "++")); + return forStatement; } @Override - public String getForStatementForCollection(String varName, String varType, String collection) { - return "for (" + varType + " " + varName + ": " + collection + ") {"; + public EnhancedForStatement getForStatementForCollection(String varName, String varType, String collection) { + EnhancedForStatement enhancedForStatement = new EnhancedForStatement(); + VariableDeclaration varDeclaration = new VariableDeclaration(new Type(varType), varName); + enhancedForStatement.setParameter(varDeclaration); + enhancedForStatement.setExpression(new Expression(collection)); + return enhancedForStatement; } @Override - public String getForStatementForMap(String varName, String varType, String map) { - return "for (" + varType + " " + varName + ": " + map + ".keySet()) {"; + public EnhancedForStatement getForStatementForMap(String varName, String varType, String map) { + EnhancedForStatement enhancedForStatement = new EnhancedForStatement(); + VariableDeclaration varDeclaration = new VariableDeclaration(new Type(varDeclaration), varName); + enhancedForStatement.setParameter(varDeclaration); + enhancedForStatement.setExpression(new Expression(map + ".keySet()")); + return enhancedForStatement; } @Override @@ -311,11 +327,11 @@ @Override public String getDecomposedTuple(String tupleExp, VariableDeclaration tupleVar, List vars) { String statements = ""; - statements += getVariableDeclaration(tupleVar.getType().getInterfaceTypeName(), tupleVar.getName()) + statements += getVariableDeclaration(tupleVar.getType(), tupleVar.getName()) + getAssignment() + tupleExp + getStatementDelimiter(); for (int i = 0; i < vars.size(); i++) { VariableDeclaration var = vars.get(i); - statements += "\n" + getVariableDeclaration(var.getType().getInterfaceTypeName(), var.getName()) + statements += "\n" + getVariableDeclaration(var.getType(), var.getName()) + getAssignment() + getTupleGet(tupleVar.getName(), i, vars.size()) + getStatementDelimiter(); diff --git a/AlgebraicDataflowArchitectureModel/src/tests/ASTTest.java b/AlgebraicDataflowArchitectureModel/src/tests/ASTTest.java index 90905dd..70ab4c3 100644 --- a/AlgebraicDataflowArchitectureModel/src/tests/ASTTest.java +++ b/AlgebraicDataflowArchitectureModel/src/tests/ASTTest.java @@ -23,8 +23,8 @@ // // ForStatement forStmt = new ForStatement(); // forStmt.setInitializers(Arrays.asList(new PlainStatement("int j = 0"))); -// forStmt.setExpression(new PlainStatement("j < 5")); -// forStmt.setUpdaters(Arrays.asList(new PlainStatement("j++"))); +// forStmt.setExpression(new PlainExpression("j < 5")); +// forStmt.setUpdaters(Arrays.asList(new Statement("j++"))); // Block forBody = new Block(); // forBody.addStatement("sum += j;"); // forStmt.setBody(forBody); @@ -32,22 +32,22 @@ // // EnhancedForStatement enhancedFor = new EnhancedForStatement(); // enhancedFor.setParameter(new VariableDeclaration(DataConstraintModel.typeString, "s")); -// enhancedFor.setExpression(new PlainStatement("list")); +// enhancedFor.setExpression(new PlainExpression("list")); // Block eForBody = new Block(); // eForBody.addStatement("System.out.println(s);"); // enhancedFor.setBody(eForBody); // methodBody.addStatement(enhancedFor); // // WhileStatement whileStmt = new WhileStatement(); -// whileStmt.setExpression(new PlainStatement("sum < 100")); +// whileStmt.setExpression(new PlainExpression("sum < 100")); // // Block whileBody = new Block(); // IfStatement ifStmt = new IfStatement(); -// ifStmt.setExpression(new PlainStatement("sum % 2 == 0")); +// ifStmt.setExpression(new PlainExpression("sum % 2 == 0")); // // Block thenBlock = new Block(); // ExpressionStatement exprStmt = new ExpressionStatement(); -// exprStmt.setExpression(new Expression("sum += 10")); +// exprStmt.setExpression(new PlainExpression("sum += 10")); // thenBlock.addStatement(exprStmt); // // Block elseBlock = new Block(); @@ -61,7 +61,7 @@ // methodBody.addStatement(whileStmt); // // ReturnStatement returnStmt = new ReturnStatement(); -// returnStmt.setExpression(new PlainStatement("sum")); +// returnStmt.setExpression(new PlainExpression("sum")); // methodBody.addStatement(returnStmt); // // method.setBody(methodBody);