From f4eda906e729c118cc577139c8a0f5fa1af43f88 Mon Sep 17 00:00:00 2001
From: Kraemerd <Dominic_Daniel.Kraemer@Student.Reutlingen-University.de>
Date: Mon, 9 Jan 2023 02:54:38 +0100
Subject: [PATCH] implemented ASTPrinter to test the visitor pattern

---
 expressions.txt      |  5 ++---
 src/ASTPrinter.java  | 38 ++++++++++++++++++++++++++++++++++++++
 src/Application.java |  3 ++-
 3 files changed, 42 insertions(+), 4 deletions(-)
 create mode 100644 src/ASTPrinter.java

diff --git a/expressions.txt b/expressions.txt
index 363a033..55a3a7c 100644
--- a/expressions.txt
+++ b/expressions.txt
@@ -1,5 +1,4 @@
-1 + xy^2 - (31 * x)y
+1 + x*y^2 - (31 * x)-y
 1 + x^2 - (3 * x)
-2x + 0.5x^2 - 1
-((5+2)-8)-8+12
+2-x + 0.5*x^2 - 1
 (5*2-(5^2)+3*(201.01-15))
\ No newline at end of file
diff --git a/src/ASTPrinter.java b/src/ASTPrinter.java
new file mode 100644
index 0000000..a057d9a
--- /dev/null
+++ b/src/ASTPrinter.java
@@ -0,0 +1,38 @@
+public class ASTPrinter implements  Visitor<String>{
+    @Override
+    public String visit(final Parser.BinaryOperation binaryOP) {
+        StringBuffer sb = new StringBuffer();
+        if(binaryOP.capsuled) {
+            sb.append("(");
+        }
+        sb.append(binaryOP.leftExpression.accept(this));
+        sb.append(binaryOP.operator);
+        sb.append(binaryOP.rightExpression.accept(this));
+        if(binaryOP.capsuled) {
+            sb.append(")");
+        }
+        return sb.toString();
+    }
+
+    @Override
+    public String visit(Parser.Variable variable) {
+        return variable.variableName;
+    }
+
+    @Override
+    public String visit(Parser.Number number) {
+        return number.digits;
+    }
+
+    @Override
+    public String visit(Parser.Decimal decimal) {
+        return decimal.beforeDot.digits + "." + decimal.afterDot.digits;
+    }
+
+    public String visit(final Parser.Expression ast) {
+        if(ast==null) {
+            throw new RuntimeException("AST is null");
+        }
+        return ast.accept(this);
+    }
+}
diff --git a/src/Application.java b/src/Application.java
index a4c744f..f185a6a 100644
--- a/src/Application.java
+++ b/src/Application.java
@@ -40,7 +40,8 @@ public class Application {
             Parser parser = new Parser();
             try {
                 Parser.Expression exp = parser.parse(tokens);
-                System.out.println(exp.toString());
+                ASTPrinter printer = new ASTPrinter();
+                System.out.println("Printing: '" + printer.visit(exp) + "'");
             }
             catch (ParserException e) {
                 System.out.println(e.getMessage());
-- 
GitLab