diff --git a/src/main/java/printer/ExpressionPrinter.java b/src/main/java/printer/ExpressionPrinter.java index 2ed5997..38e9c41 100644 --- a/src/main/java/printer/ExpressionPrinter.java +++ b/src/main/java/printer/ExpressionPrinter.java @@ -1,15 +1,24 @@ +/*!! Printer */ + +/*! +ExpressionPrinter +================= + +The `ExpressionPrinter` is used for string serialization of a given `Expression`. +*/ + +/*!- Header */ package printer; import expression.*; import interpreter.Visitor; +/*! +The `ExpressionPrinter` implements the string serialization with the help of the +[Visitor](${basePath}/src/main/java/interpreter/Visitor.java.html). +*/ public class ExpressionPrinter extends Visitor { - private final String value; - - public ExpressionPrinter(Expression expression) { - value = visit(expression); - } - + /*!- Visit functions */ public String visitAddition(Addition addition) { return visit(addition.leftHandSide) + " + " + visit(addition.rightHandSide); } @@ -26,7 +35,11 @@ public class ExpressionPrinter extends Visitor { return visit(subtraction.leftHandSide) + " - " + visit(subtraction.rightHandSide); } - public String getValue() { - return value; + /*! + The `getValue` function takes an `Expression` instance as an argument and returns + the string serialisation of the given expression. + */ + public String getValue(Expression expression) { + return visit(expression); } } diff --git a/src/main/java/printer/ProgramPrinter.java b/src/main/java/printer/ProgramPrinter.java index 32bf00b..d8529e4 100644 --- a/src/main/java/printer/ProgramPrinter.java +++ b/src/main/java/printer/ProgramPrinter.java @@ -1,19 +1,27 @@ +/*!! Printer */ + +/*! +ProgramPrinter +============== + +The `ProgramPrinter` is used for string serialization of a given `Program`. +*/ + +/*!- Header */ package printer; import interpreter.Visitor; import program.*; +/*! +The `ProgramPrinter` implements the string serialization with the help of the +[Visitor](${basePath}/src/main/java/interpreter/Visitor.java.html). +*/ public class ProgramPrinter extends Visitor { - private final String value; - - public ProgramPrinter(Program program) { - value = visit(program); - } - + /*!- Visit functions */ public String visitAssignment(Assignment assignment) { - ExpressionPrinter identifierPrinter = new ExpressionPrinter(assignment.identifier); - ExpressionPrinter expressionPrinter = new ExpressionPrinter(assignment.expression); - return identifierPrinter.getValue() + " := " + expressionPrinter.getValue(); + ExpressionPrinter printer = new ExpressionPrinter(); + return printer.getValue(assignment.identifier) + " := " + printer.getValue(assignment.expression); } public String visitComposition(Composition composition) { @@ -21,16 +29,20 @@ public class ProgramPrinter extends Visitor { } public String visitConditional(Conditional conditional) { - ExpressionPrinter conditionPrinter = new ExpressionPrinter(conditional.condition); - return "if (" + conditionPrinter.getValue() + ") then { " + visit(conditional.thenCase) + " } else { " + visit(conditional.elseCase) + " }"; + ExpressionPrinter printer = new ExpressionPrinter(); + return "if (" + printer.getValue(conditional.condition) + ") then { " + visit(conditional.thenCase) + " } else { " + visit(conditional.elseCase) + " }"; } public String visitLoop(Loop loop) { - ExpressionPrinter conditionPrinter = new ExpressionPrinter(loop.condition); - return "while (" + conditionPrinter.getValue() + ") { " + visit(loop.program) + " }"; + ExpressionPrinter printer = new ExpressionPrinter(); + return "while (" + printer.getValue(loop.condition) + ") { " + visit(loop.program) + " }"; } - public String getValue() { - return value; + /*! + The `getValue` function takes a `Program` instance as an argument and returns + the string serialisation of the given program. + */ + public String getValue(Program program) { + return visit(program); } } diff --git a/src/test/java/printer/ExpressionPrinterTest.java b/src/test/java/printer/ExpressionPrinterTest.java index a639995..d4bfa2d 100644 --- a/src/test/java/printer/ExpressionPrinterTest.java +++ b/src/test/java/printer/ExpressionPrinterTest.java @@ -5,9 +5,6 @@ import org.junit.Test; import static org.junit.Assert.*; -/** - * Created by nils on 15.01.2017. - */ public class ExpressionPrinterTest { final String identifierCode = "a"; final Identifier identifier = new Identifier(identifierCode); @@ -24,26 +21,26 @@ public class ExpressionPrinterTest { @Test public void testVisitAddition() { - ExpressionPrinter printer = new ExpressionPrinter(addition); - assertEquals(additionCode, printer.getValue()); + ExpressionPrinter printer = new ExpressionPrinter(); + assertEquals(additionCode, printer.getValue(addition)); } @Test public void testVisitIdentifier() { - ExpressionPrinter printer = new ExpressionPrinter(identifier); - assertEquals(identifierCode, printer.getValue()); + ExpressionPrinter printer = new ExpressionPrinter(); + assertEquals(identifierCode, printer.getValue(identifier)); } @Test public void testVisitInt() { - ExpressionPrinter printer = new ExpressionPrinter(integer); - assertEquals(integerCode, printer.getValue()); + ExpressionPrinter printer = new ExpressionPrinter(); + assertEquals(integerCode, printer.getValue(integer)); } @Test public void testVisitSubtraction() { - ExpressionPrinter printer = new ExpressionPrinter(subtraction); - assertEquals(subtractionCode, printer.getValue()); + ExpressionPrinter printer = new ExpressionPrinter(); + assertEquals(subtractionCode, printer.getValue(subtraction)); } } \ No newline at end of file diff --git a/src/test/java/printer/ProgramPrinterTest.java b/src/test/java/printer/ProgramPrinterTest.java index 9a3c4c9..107f5e2 100644 --- a/src/test/java/printer/ProgramPrinterTest.java +++ b/src/test/java/printer/ProgramPrinterTest.java @@ -27,32 +27,32 @@ public class ProgramPrinterTest { @Test public void testVisitAssignment() { - ProgramPrinter printer = new ProgramPrinter(assignment); - assertEquals(assignmentCode, printer.getValue()); + ProgramPrinter printer = new ProgramPrinter(); + assertEquals(assignmentCode, printer.getValue(assignment)); } @Test public void testVisitComposition() { - ProgramPrinter printer = new ProgramPrinter(composition); - assertEquals(compositionCode, printer.getValue()); + ProgramPrinter printer = new ProgramPrinter(); + assertEquals(compositionCode, printer.getValue(composition)); } @Test public void testVisitConditional() { - ProgramPrinter printer = new ProgramPrinter(conditional); - assertEquals(conditionalCode, printer.getValue()); + ProgramPrinter printer = new ProgramPrinter(); + assertEquals(conditionalCode, printer.getValue(conditional)); } @Test public void testVisitLoop() { - ProgramPrinter printer = new ProgramPrinter(loop); - assertEquals(loopCode, printer.getValue()); + ProgramPrinter printer = new ProgramPrinter(); + assertEquals(loopCode, printer.getValue(loop)); } @Test public void testVisitProgram() { - ProgramPrinter printer = new ProgramPrinter(program); - assertEquals(programCode, printer.getValue()); + ProgramPrinter printer = new ProgramPrinter(); + assertEquals(programCode, printer.getValue(program)); } } \ No newline at end of file