From d2cc050cb1d1d202a7305c068a1fe5c24ec0d358 Mon Sep 17 00:00:00 2001 From: nils Date: Sun, 15 Jan 2017 16:51:27 +0100 Subject: [PATCH 1/6] Use visitor for printing program --- src/main/java/printer/ExpressionPrinter.java | 32 +++++++++++++++++++++++++ src/main/java/printer/ProgramPrinter.java | 36 ++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+) create mode 100644 src/main/java/printer/ExpressionPrinter.java create mode 100644 src/main/java/printer/ProgramPrinter.java diff --git a/src/main/java/printer/ExpressionPrinter.java b/src/main/java/printer/ExpressionPrinter.java new file mode 100644 index 0000000..4c0f649 --- /dev/null +++ b/src/main/java/printer/ExpressionPrinter.java @@ -0,0 +1,32 @@ +package printer; + +import expression.*; +import interpreter.Visitor; + +public class ExpressionPrinter extends Visitor { + private final String value; + + public ExpressionPrinter(Expression expression) { + value = visit(expression); + } + + public String visitAddition(Addition addition) { + return "(" + visit(addition.leftHandSide) + " + " + visit(addition.rightHandSide) + ")"; + } + + public String visitIdentifier(Identifier identifier) { + return identifier.name; + } + + public String visitInt(Int integer) { + return Integer.toString(integer.value); + } + + public String visitSubtraction(Subtraction subtraction) { + return "(" + visit(subtraction.leftHandSide) + " - " + visit(subtraction.rightHandSide) + ")"; + } + + public String getValue() { + return value; + } +} diff --git a/src/main/java/printer/ProgramPrinter.java b/src/main/java/printer/ProgramPrinter.java new file mode 100644 index 0000000..32bf00b --- /dev/null +++ b/src/main/java/printer/ProgramPrinter.java @@ -0,0 +1,36 @@ +package printer; + +import interpreter.Visitor; +import program.*; + +public class ProgramPrinter extends Visitor { + private final String value; + + public ProgramPrinter(Program program) { + value = visit(program); + } + + public String visitAssignment(Assignment assignment) { + ExpressionPrinter identifierPrinter = new ExpressionPrinter(assignment.identifier); + ExpressionPrinter expressionPrinter = new ExpressionPrinter(assignment.expression); + return identifierPrinter.getValue() + " := " + expressionPrinter.getValue(); + } + + public String visitComposition(Composition composition) { + return visit(composition.first) + " ; " + visit(composition.second); + } + + public String visitConditional(Conditional conditional) { + ExpressionPrinter conditionPrinter = new ExpressionPrinter(conditional.condition); + return "if (" + conditionPrinter.getValue() + ") 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) + " }"; + } + + public String getValue() { + return value; + } +} From abba5450d785bd4f2cf6ab0eb56c7ce8a05bbb40 Mon Sep 17 00:00:00 2001 From: nils Date: Sun, 15 Jan 2017 16:54:10 +0100 Subject: [PATCH 2/6] Removed toString methods --- src/main/java/expression/Addition.java | 6 ------ src/main/java/expression/Identifier.java | 6 ------ src/main/java/expression/Int.java | 6 ------ src/main/java/expression/Subtraction.java | 6 ------ src/main/java/program/Assignment.java | 6 ------ src/main/java/program/Composition.java | 6 ------ src/main/java/program/Conditional.java | 6 ------ src/main/java/program/Loop.java | 6 ------ 8 files changed, 48 deletions(-) diff --git a/src/main/java/expression/Addition.java b/src/main/java/expression/Addition.java index 0cefcd4..d0d4237 100644 --- a/src/main/java/expression/Addition.java +++ b/src/main/java/expression/Addition.java @@ -28,12 +28,6 @@ public class Addition extends Expression { this.rightHandSide = rightHandSide; } - /*!- String serialization */ - @Override - public String toString() { - return "(" + leftHandSide + " + " + rightHandSide + ")"; - } - /*!- Generated equals implementation */ @Override public boolean equals(Object o) { diff --git a/src/main/java/expression/Identifier.java b/src/main/java/expression/Identifier.java index c175498..7b2f85b 100644 --- a/src/main/java/expression/Identifier.java +++ b/src/main/java/expression/Identifier.java @@ -17,12 +17,6 @@ public class Identifier extends Expression { this.name = name; } - /*!- String serialization */ - @Override - public String toString() { - return name; - } - /*!- generated equals implementation */ @Override public boolean equals(Object o) { diff --git a/src/main/java/expression/Int.java b/src/main/java/expression/Int.java index 942a014..7f38973 100644 --- a/src/main/java/expression/Int.java +++ b/src/main/java/expression/Int.java @@ -22,12 +22,6 @@ public class Int extends Expression { this.value = value; } - /*!- String serialization */ - @Override - public String toString() { - return Integer.toString(value); - } - /*!- generated equals implementation */ @Override public boolean equals(Object o) { diff --git a/src/main/java/expression/Subtraction.java b/src/main/java/expression/Subtraction.java index 8de951a..4493577 100644 --- a/src/main/java/expression/Subtraction.java +++ b/src/main/java/expression/Subtraction.java @@ -28,12 +28,6 @@ public class Subtraction extends Expression { this.rightHandSide = rightHandSide; } - /*!- String serialization */ - @Override - public String toString() { - return "(" + leftHandSide + " - " + rightHandSide + ")"; - } - /*!- generated equals implementation */ @Override public boolean equals(Object o) { diff --git a/src/main/java/program/Assignment.java b/src/main/java/program/Assignment.java index 81d9915..7b22ee0 100644 --- a/src/main/java/program/Assignment.java +++ b/src/main/java/program/Assignment.java @@ -32,12 +32,6 @@ public class Assignment extends Program { this.expression = expression; } - /*!- String serialization */ - @Override - public String toString() { - return identifier + " := " + expression; - } - /*!- generated equals method */ @Override public boolean equals(Object o) { diff --git a/src/main/java/program/Composition.java b/src/main/java/program/Composition.java index fae9d75..4da49dc 100644 --- a/src/main/java/program/Composition.java +++ b/src/main/java/program/Composition.java @@ -19,12 +19,6 @@ public class Composition extends Program { this.second = second; } - /*!- String serialization */ - @Override - public String toString() { - return first + " ; " + second; - } - /*!- generated equals implementation */ @Override public boolean equals(Object o) { diff --git a/src/main/java/program/Conditional.java b/src/main/java/program/Conditional.java index edfd477..5ea732e 100644 --- a/src/main/java/program/Conditional.java +++ b/src/main/java/program/Conditional.java @@ -36,10 +36,4 @@ public class Conditional extends Program { return elseCase.equals(that.elseCase); } - - /*!- String serialization */ - @Override - public String toString() { - return "if (" + condition + ") then { " + thenCase + " } else { " + elseCase + " }"; - } } diff --git a/src/main/java/program/Loop.java b/src/main/java/program/Loop.java index e3ae27d..2826a7a 100644 --- a/src/main/java/program/Loop.java +++ b/src/main/java/program/Loop.java @@ -21,12 +21,6 @@ public class Loop extends Program { this.program = program; } - /*!- String serialization */ - @Override - public String toString() { - return "while (" + condition + ") { " + program + " }"; - } - /*!- generated equals implementation */ @Override public boolean equals(Object o) { From 0dfd7b7271bad5797bee7c077f42ec7dca9ab0b0 Mon Sep 17 00:00:00 2001 From: nils Date: Sun, 15 Jan 2017 17:20:30 +0100 Subject: [PATCH 3/6] Added tests, fixed brackets issue --- src/main/java/printer/ExpressionPrinter.java | 4 +- src/test/java/printer/ExpressionPrinterTest.java | 49 ++++++++++++++++++++ src/test/java/printer/ProgramPrinterTest.java | 58 ++++++++++++++++++++++++ 3 files changed, 109 insertions(+), 2 deletions(-) create mode 100644 src/test/java/printer/ExpressionPrinterTest.java create mode 100644 src/test/java/printer/ProgramPrinterTest.java diff --git a/src/main/java/printer/ExpressionPrinter.java b/src/main/java/printer/ExpressionPrinter.java index 4c0f649..2ed5997 100644 --- a/src/main/java/printer/ExpressionPrinter.java +++ b/src/main/java/printer/ExpressionPrinter.java @@ -11,7 +11,7 @@ public class ExpressionPrinter extends Visitor { } public String visitAddition(Addition addition) { - return "(" + visit(addition.leftHandSide) + " + " + visit(addition.rightHandSide) + ")"; + return visit(addition.leftHandSide) + " + " + visit(addition.rightHandSide); } public String visitIdentifier(Identifier identifier) { @@ -23,7 +23,7 @@ public class ExpressionPrinter extends Visitor { } public String visitSubtraction(Subtraction subtraction) { - return "(" + visit(subtraction.leftHandSide) + " - " + visit(subtraction.rightHandSide) + ")"; + return visit(subtraction.leftHandSide) + " - " + visit(subtraction.rightHandSide); } public String getValue() { diff --git a/src/test/java/printer/ExpressionPrinterTest.java b/src/test/java/printer/ExpressionPrinterTest.java new file mode 100644 index 0000000..a639995 --- /dev/null +++ b/src/test/java/printer/ExpressionPrinterTest.java @@ -0,0 +1,49 @@ +package printer; + +import expression.*; +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); + + final String integerCode = "42"; + final Int integer = new Int(42); + + final String additionCode = "a + 42"; + final Addition addition = new Addition(new Identifier("a"), new Int(42)); + + final String subtractionCode = "1 - a"; + final Subtraction subtraction = new Subtraction(new Int(1), new Identifier("a")); + + + @Test + public void testVisitAddition() { + ExpressionPrinter printer = new ExpressionPrinter(addition); + assertEquals(additionCode, printer.getValue()); + } + + @Test + public void testVisitIdentifier() { + ExpressionPrinter printer = new ExpressionPrinter(identifier); + assertEquals(identifierCode, printer.getValue()); + } + + @Test + public void testVisitInt() { + ExpressionPrinter printer = new ExpressionPrinter(integer); + assertEquals(integerCode, printer.getValue()); + } + + @Test + public void testVisitSubtraction() { + ExpressionPrinter printer = new ExpressionPrinter(subtraction); + assertEquals(subtractionCode, printer.getValue()); + } + +} \ No newline at end of file diff --git a/src/test/java/printer/ProgramPrinterTest.java b/src/test/java/printer/ProgramPrinterTest.java new file mode 100644 index 0000000..9a3c4c9 --- /dev/null +++ b/src/test/java/printer/ProgramPrinterTest.java @@ -0,0 +1,58 @@ +package printer; + +import expression.Addition; +import expression.Identifier; +import expression.Int; +import expression.Subtraction; +import org.junit.Test; +import program.*; + +import static org.junit.Assert.*; + +public class ProgramPrinterTest { + final String loopCode = "while (a) { r := r + b ; a := a - 1 }"; + final Loop loop = new Loop(new Identifier("a"), new Composition(new Assignment(new Identifier("r"), new Addition(new Identifier("r"), new Identifier("b"))), new Assignment(new Identifier("a"), new Subtraction(new Identifier("a"), new Int(1))))); + + final String assignmentCode = "a := 2"; + final Assignment assignment = new Assignment(new Identifier("a"), new Int(2)); + + final String compositionCode = assignmentCode + " ; b := bar"; + final Composition composition = new Composition(assignment, new Assignment(new Identifier("b"), new Identifier("bar"))); + + final String conditionalCode = "if (foo - bar) then { x := 5 } else { x := x }"; + final Conditional conditional = new Conditional(new Subtraction(new Identifier("foo"), new Identifier("bar")), new Assignment(new Identifier("x"), new Int(5)), new Assignment(new Identifier("x"), new Identifier("x"))); + + final String programCode = compositionCode + " ; " + loopCode + " ; " + conditionalCode; + final Program program = new Composition(new Composition(composition, loop), conditional); + + @Test + public void testVisitAssignment() { + ProgramPrinter printer = new ProgramPrinter(assignment); + assertEquals(assignmentCode, printer.getValue()); + } + + @Test + public void testVisitComposition() { + ProgramPrinter printer = new ProgramPrinter(composition); + assertEquals(compositionCode, printer.getValue()); + } + + @Test + public void testVisitConditional() { + ProgramPrinter printer = new ProgramPrinter(conditional); + assertEquals(conditionalCode, printer.getValue()); + } + + @Test + public void testVisitLoop() { + ProgramPrinter printer = new ProgramPrinter(loop); + assertEquals(loopCode, printer.getValue()); + } + + @Test + public void testVisitProgram() { + ProgramPrinter printer = new ProgramPrinter(program); + assertEquals(programCode, printer.getValue()); + } + +} \ No newline at end of file From bb996551918ce4b90db231cae2989fa946c4137d Mon Sep 17 00:00:00 2001 From: nils Date: Sun, 15 Jan 2017 23:56:21 +0100 Subject: [PATCH 4/6] Removed program/expression variable from printer, adjusted tests, added a bit of docco --- src/main/java/printer/ExpressionPrinter.java | 29 +++++++++++----- src/main/java/printer/ProgramPrinter.java | 42 +++++++++++++++--------- src/test/java/printer/ExpressionPrinterTest.java | 19 +++++------ src/test/java/printer/ProgramPrinterTest.java | 20 +++++------ 4 files changed, 66 insertions(+), 44 deletions(-) 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 From ca4bbab971f67ce290586fd71a398862965c867a Mon Sep 17 00:00:00 2001 From: Malte Schmitz Date: Mon, 16 Jan 2017 17:54:49 +0100 Subject: [PATCH 5/6] Minor simplifications --- src/main/java/printer/ExpressionPrinter.java | 7 +++---- src/main/java/printer/ProgramPrinter.java | 18 ++++++++---------- src/test/java/printer/ExpressionPrinterTest.java | 13 +++++-------- src/test/java/printer/ProgramPrinterTest.java | 17 +++++++---------- 4 files changed, 23 insertions(+), 32 deletions(-) diff --git a/src/main/java/printer/ExpressionPrinter.java b/src/main/java/printer/ExpressionPrinter.java index 38e9c41..1801a2a 100644 --- a/src/main/java/printer/ExpressionPrinter.java +++ b/src/main/java/printer/ExpressionPrinter.java @@ -18,7 +18,6 @@ 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 { - /*!- Visit functions */ public String visitAddition(Addition addition) { return visit(addition.leftHandSide) + " + " + visit(addition.rightHandSide); } @@ -36,10 +35,10 @@ public class ExpressionPrinter extends Visitor { } /*! - The `getValue` function takes an `Expression` instance as an argument and returns - the string serialisation of the given expression. + The `print` function takes an `Expression` instance as an argument and returns + the string serialization of the given expression. */ - public String getValue(Expression expression) { + public String print(Expression expression) { return visit(expression); } } diff --git a/src/main/java/printer/ProgramPrinter.java b/src/main/java/printer/ProgramPrinter.java index d8529e4..33a4ad9 100644 --- a/src/main/java/printer/ProgramPrinter.java +++ b/src/main/java/printer/ProgramPrinter.java @@ -18,10 +18,10 @@ 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 { - /*!- Visit functions */ + private final ExpressionPrinter printer = new ExpressionPrinter(); + public String visitAssignment(Assignment assignment) { - ExpressionPrinter printer = new ExpressionPrinter(); - return printer.getValue(assignment.identifier) + " := " + printer.getValue(assignment.expression); + return printer.print(assignment.identifier) + " := " + printer.print(assignment.expression); } public String visitComposition(Composition composition) { @@ -29,20 +29,18 @@ public class ProgramPrinter extends Visitor { } public String visitConditional(Conditional conditional) { - ExpressionPrinter printer = new ExpressionPrinter(); - return "if (" + printer.getValue(conditional.condition) + ") then { " + visit(conditional.thenCase) + " } else { " + visit(conditional.elseCase) + " }"; + return "if (" + printer.print(conditional.condition) + ") then { " + visit(conditional.thenCase) + " } else { " + visit(conditional.elseCase) + " }"; } public String visitLoop(Loop loop) { - ExpressionPrinter printer = new ExpressionPrinter(); - return "while (" + printer.getValue(loop.condition) + ") { " + visit(loop.program) + " }"; + return "while (" + printer.print(loop.condition) + ") { " + visit(loop.program) + " }"; } /*! - The `getValue` function takes a `Program` instance as an argument and returns - the string serialisation of the given program. + The `print` function takes a `Program` instance as an argument and returns + the string serialization of the given program. */ - public String getValue(Program program) { + public String print(Program program) { return visit(program); } } diff --git a/src/test/java/printer/ExpressionPrinterTest.java b/src/test/java/printer/ExpressionPrinterTest.java index d4bfa2d..b457766 100644 --- a/src/test/java/printer/ExpressionPrinterTest.java +++ b/src/test/java/printer/ExpressionPrinterTest.java @@ -18,29 +18,26 @@ public class ExpressionPrinterTest { final String subtractionCode = "1 - a"; final Subtraction subtraction = new Subtraction(new Int(1), new Identifier("a")); + final ExpressionPrinter printer = new ExpressionPrinter(); @Test public void testVisitAddition() { - ExpressionPrinter printer = new ExpressionPrinter(); - assertEquals(additionCode, printer.getValue(addition)); + assertEquals(additionCode, printer.print(addition)); } @Test public void testVisitIdentifier() { - ExpressionPrinter printer = new ExpressionPrinter(); - assertEquals(identifierCode, printer.getValue(identifier)); + assertEquals(identifierCode, printer.print(identifier)); } @Test public void testVisitInt() { - ExpressionPrinter printer = new ExpressionPrinter(); - assertEquals(integerCode, printer.getValue(integer)); + assertEquals(integerCode, printer.print(integer)); } @Test public void testVisitSubtraction() { - ExpressionPrinter printer = new ExpressionPrinter(); - assertEquals(subtractionCode, printer.getValue(subtraction)); + assertEquals(subtractionCode, printer.print(subtraction)); } } \ No newline at end of file diff --git a/src/test/java/printer/ProgramPrinterTest.java b/src/test/java/printer/ProgramPrinterTest.java index 107f5e2..866c6a8 100644 --- a/src/test/java/printer/ProgramPrinterTest.java +++ b/src/test/java/printer/ProgramPrinterTest.java @@ -25,34 +25,31 @@ public class ProgramPrinterTest { final String programCode = compositionCode + " ; " + loopCode + " ; " + conditionalCode; final Program program = new Composition(new Composition(composition, loop), conditional); + final ProgramPrinter printer = new ProgramPrinter(); + @Test public void testVisitAssignment() { - ProgramPrinter printer = new ProgramPrinter(); - assertEquals(assignmentCode, printer.getValue(assignment)); + assertEquals(assignmentCode, printer.print(assignment)); } @Test public void testVisitComposition() { - ProgramPrinter printer = new ProgramPrinter(); - assertEquals(compositionCode, printer.getValue(composition)); + assertEquals(compositionCode, printer.print(composition)); } @Test public void testVisitConditional() { - ProgramPrinter printer = new ProgramPrinter(); - assertEquals(conditionalCode, printer.getValue(conditional)); + assertEquals(conditionalCode, printer.print(conditional)); } @Test public void testVisitLoop() { - ProgramPrinter printer = new ProgramPrinter(); - assertEquals(loopCode, printer.getValue(loop)); + assertEquals(loopCode, printer.print(loop)); } @Test public void testVisitProgram() { - ProgramPrinter printer = new ProgramPrinter(); - assertEquals(programCode, printer.getValue(program)); + assertEquals(programCode, printer.print(program)); } } \ No newline at end of file From 271a93f6df0f2d031303a438bf2f2b2b8c942c96 Mon Sep 17 00:00:00 2001 From: Malte Schmitz Date: Mon, 16 Jan 2017 18:12:20 +0100 Subject: [PATCH 6/6] Add option --print to CLI --- src/main/java/Main.java | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/src/main/java/Main.java b/src/main/java/Main.java index 4dfd0e5..6cb9697 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -3,6 +3,7 @@ import interpreter.InterpreterException; import parser.Parser; import parser.SyntaxException; import program.Program; +import printer.ProgramPrinter; import java.io.IOException; import java.nio.charset.StandardCharsets; @@ -14,12 +15,20 @@ public class Main { public static void main(String[] args) { if (args.length == 0) { System.err.println("No file given"); - } else if (args.length > 1) { - System.err.println("Too many arguments"); } else { try { String code = readFile(args[0]); - run(code); + if (args.length == 2) { + if ("--print".equals(args[1])) { + print(code); + } else { + System.err.println("Invalid argument " + args[1]); + } + } else if (args.length == 1) { + run(code); + } else { + System.err.println("Too many arguments"); + } } catch (IOException e) { e.printStackTrace(); } @@ -31,6 +40,17 @@ public class Main { return new String(encoded, StandardCharsets.UTF_8); } + private static void print(String code) { + try { + Parser parser = new Parser(code); + Program program = parser.parse(); + ProgramPrinter printer = new ProgramPrinter(); + System.out.println(printer.print(program)); + } catch (SyntaxException se) { + System.err.println(se); + } + } + private static void run(String code) { try { Parser parser = new Parser(code);