From 9a8c643889b67cdcba766a186ae00f246761ae37 Mon Sep 17 00:00:00 2001
From: Kraemerd <Dominic_Daniel.Kraemer@Student.Reutlingen-University.de>
Date: Mon, 9 Jan 2023 02:28:14 +0100
Subject: [PATCH] implemented basics for the visitor pattern

---
 expressions.txt    |  4 ++++
 src/Evaluator.java |  2 ++
 src/Parser.java    | 38 ++++++++++++++------------------------
 src/Visitor.java   |  6 ++++++
 to-do.txt          |  9 +++++++++
 5 files changed, 35 insertions(+), 24 deletions(-)
 create mode 100644 src/Evaluator.java
 create mode 100644 src/Visitor.java
 create mode 100644 to-do.txt

diff --git a/expressions.txt b/expressions.txt
index 8fd2860..363a033 100644
--- a/expressions.txt
+++ b/expressions.txt
@@ -1 +1,5 @@
+1 + xy^2 - (31 * x)y
+1 + x^2 - (3 * x)
+2x + 0.5x^2 - 1
+((5+2)-8)-8+12
 (5*2-(5^2)+3*(201.01-15))
\ No newline at end of file
diff --git a/src/Evaluator.java b/src/Evaluator.java
new file mode 100644
index 0000000..4599b70
--- /dev/null
+++ b/src/Evaluator.java
@@ -0,0 +1,2 @@
+public class Evaluator {
+}
diff --git a/src/Parser.java b/src/Parser.java
index e8f6331..527d628 100644
--- a/src/Parser.java
+++ b/src/Parser.java
@@ -3,14 +3,11 @@ import java.util.List;
 
 public class Parser {
 
-    public static class Expression {
-        @Override
-        public String toString() {
-            return "";
-        }
+    public abstract class Expression {
+        public abstract <T> T accept(Visitor<T> visitor);
     }
 
-    private class BinaryOperation extends Expression {
+    public class BinaryOperation extends Expression {
         Expression leftExpression;
         String operator;
         Expression rightExpression;
@@ -21,23 +18,18 @@ public class Parser {
             this.rightExpression = rightExpression;
             this.capsuled = capsuled;
         }
-        @Override
-        public String toString() {
-            if(capsuled) {
-                return "("+ leftExpression.toString() + operator + rightExpression.toString() + ")";
-            }
-            return leftExpression.toString() + operator + rightExpression.toString();
+        public <T> T accept(Visitor<T> visitor) {
+            return visitor.visit(this);
         }
     }
 
-    private class Variable extends Expression {
+    public class Variable extends Expression {
         String variableName;
         public Variable(String i, Boolean capsuled) {
             this.variableName = i;
         }
-        @Override
-        public String toString() {
-            return variableName;
+        public <T> T accept(Visitor<T> visitor) {
+            return visitor.visit(this);
         }
     }
 
@@ -45,18 +37,17 @@ public class Parser {
 
     }
 
-    private class Number extends Value {
+    public class Number extends Value {
         public String digits;
         public Number(String i) {
             this.digits = i;
         }
-        @Override
-        public String toString() {
-            return digits;
+        public <T> T accept(Visitor<T> visitor) {
+            return visitor.visit(this);
         }
     }
 
-    private class Decimal extends Value {
+    public class Decimal extends Value {
         public Number beforeDot;
         public Number afterDot;
 
@@ -64,9 +55,8 @@ public class Parser {
             this.beforeDot = i1;
             this.afterDot = i2;
         }
-        @Override
-        public String toString() {
-            return beforeDot.toString() + "." + afterDot.toString();
+        public <T> T accept(Visitor<T> visitor) {
+            return visitor.visit(this);
         }
     }
 
diff --git a/src/Visitor.java b/src/Visitor.java
new file mode 100644
index 0000000..4e925c9
--- /dev/null
+++ b/src/Visitor.java
@@ -0,0 +1,6 @@
+public interface Visitor<T>{
+    public T visit(final Parser.BinaryOperation binOp);
+    public T visit(final Parser.Variable variable);
+    public T visit(final Parser.Number number);
+    public T visit(final Parser.Decimal decimal);
+}
diff --git a/to-do.txt b/to-do.txt
new file mode 100644
index 0000000..de2bf44
--- /dev/null
+++ b/to-do.txt
@@ -0,0 +1,9 @@
+2. Testklassen
+
+3. Visitor pattern
+4. plot function
+5. Überarbeiten
+-> Dokumentation
+-> Exceptions
+-> Kommentare
+-> Code strukturieren
\ No newline at end of file
-- 
GitLab