diff --git a/AlgebraicDataflowArchitectureModel/src/code/ast/Block.java b/AlgebraicDataflowArchitectureModel/src/code/ast/Block.java index b140af9..844691d 100644 --- a/AlgebraicDataflowArchitectureModel/src/code/ast/Block.java +++ b/AlgebraicDataflowArchitectureModel/src/code/ast/Block.java @@ -23,6 +23,14 @@ statements.add(statement); } + public void addFirstStatements(List statements) { + this.statements.addAll(0, statements); + } + + public void addStatements(List statements) { + this.statements.addAll(statements); + } + //==================================================== //TODO: CodeGenerator修正後削除 @@ -60,15 +68,21 @@ public String toString() { StringBuilder sb = new StringBuilder(); sb.append("{\n"); + for (Statement statement : statements) { if (statement != null) { String content = statement.toString(); - String indentedContent = content.lines() - .map(line -> "\t" + line) - .collect(java.util.stream.Collectors.joining("\n")); - sb.append(indentedContent).append("\n"); + + // split statement + String[] lines = content.split("\n"); + + // Tab + for (String line : lines) { + sb.append("\t").append(line).append("\n"); + } } } + sb.append("}"); return sb.toString(); } diff --git a/AlgebraicDataflowArchitectureModel/src/code/ast/EnhancedForStatement.java b/AlgebraicDataflowArchitectureModel/src/code/ast/EnhancedForStatement.java index 71a7f37..e1d1b42 100644 --- a/AlgebraicDataflowArchitectureModel/src/code/ast/EnhancedForStatement.java +++ b/AlgebraicDataflowArchitectureModel/src/code/ast/EnhancedForStatement.java @@ -2,12 +2,12 @@ public class EnhancedForStatement extends Statement { - private Statement singleVariableDeclaration; + private VariableDeclaration singleVariableDeclaration; private Statement expression; private Statement body; - public Statement getParameter() { return singleVariableDeclaration; } - public void setParameter(Statement parameter) { this.singleVariableDeclaration = parameter; } + public VariableDeclaration getParameter() { return singleVariableDeclaration; } + public void setParameter(VariableDeclaration parameter) { this.singleVariableDeclaration = parameter; } public Statement getExpression() { return expression; } public void setExpression(Statement expression) { this.expression = expression; } diff --git a/AlgebraicDataflowArchitectureModel/src/code/ast/Statement.java b/AlgebraicDataflowArchitectureModel/src/code/ast/Statement.java index f5a3d06..96d1af1 100644 --- a/AlgebraicDataflowArchitectureModel/src/code/ast/Statement.java +++ b/AlgebraicDataflowArchitectureModel/src/code/ast/Statement.java @@ -1,6 +1,6 @@ package code.ast; -public abstract class Statement extends ASTNode{ +public abstract class Statement extends ASTNode { @Override public abstract String toString(); diff --git a/AlgebraicDataflowArchitectureModel/src/code/ast/VariableDeclarationStatement.java b/AlgebraicDataflowArchitectureModel/src/code/ast/VariableDeclarationStatement.java index 2055b3d..0348fce 100644 --- a/AlgebraicDataflowArchitectureModel/src/code/ast/VariableDeclarationStatement.java +++ b/AlgebraicDataflowArchitectureModel/src/code/ast/VariableDeclarationStatement.java @@ -7,7 +7,7 @@ private List modifiers = new ArrayList<>(); private Type type; - private List fragments = new ArrayList<>(); + private List fragments = new ArrayList<>(); public List getModifiers() { return modifiers; @@ -25,24 +25,31 @@ this.type = type; } - public List getFragments() { + public List getFragments() { return fragments; } - public void setFragments(List fragments) { + public void setFragments(List fragments) { this.fragments = fragments; } @Override public String toString() { StringBuilder sb = new StringBuilder(); + + for (Statement mod : modifiers) { + sb.append(mod.toString()).append(" "); + } + if (type != null) { sb.append(type.toString()).append(" "); } + for (int i = 0; i < fragments.size(); i++) { - sb.append(fragments.get(i)); + sb.append(fragments.get(i).getName()); if (i < fragments.size() - 1) sb.append(", "); } + sb.append(";"); return sb.toString(); } diff --git a/AlgebraicDataflowArchitectureModel/src/tests/ASTTest.java b/AlgebraicDataflowArchitectureModel/src/tests/ASTTest.java index 974ac83..c29320f 100644 --- a/AlgebraicDataflowArchitectureModel/src/tests/ASTTest.java +++ b/AlgebraicDataflowArchitectureModel/src/tests/ASTTest.java @@ -1,17 +1,24 @@ package tests; import code.ast.*; +import models.dataConstraintModel.DataConstraintModel; + import java.util.Arrays; +import java.util.List; public class ASTTest { public static void main(String[] args) { + MethodDeclaration method = new MethodDeclaration("Test", false); Block methodBody = new Block(); VariableDeclarationStatement varStmt = new VariableDeclarationStatement(); - - varStmt.getFragments().add(new PlainStatement("i = 0")); - varStmt.getFragments().add(new PlainStatement("sum = 0")); + varStmt.setModifiers(List.of(new PlainStatement("private"))); + varStmt.setType(new PrimitiveType(new SimpleName("int"))); + varStmt.setFragments(List.of( + new VariableDeclaration(DataConstraintModel.typeInt, "x"), + new VariableDeclaration(DataConstraintModel.typeInt, "sum") + )); methodBody.addStatement(varStmt); ForStatement forStmt = new ForStatement(); @@ -24,7 +31,7 @@ methodBody.addStatement(forStmt); EnhancedForStatement enhancedFor = new EnhancedForStatement(); - enhancedFor.setParameter(new PlainStatement("String s")); + enhancedFor.setParameter(new VariableDeclaration(DataConstraintModel.typeString, "s")); enhancedFor.setExpression(new PlainStatement("list")); Block eForBody = new Block(); eForBody.addStatement("System.out.println(s);");