diff --git a/expressions.txt b/expressions.txt
index 8fd2860c05d82f1195d3ce9a1e1827eb4a9a1419..363a03381b4f19350cef0b406d947b32de2b5c79 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 0000000000000000000000000000000000000000..4599b7036ea36fd5a8825cca321eded9e1a01089
--- /dev/null
+++ b/src/Evaluator.java
@@ -0,0 +1,2 @@
+public class Evaluator {
+}
diff --git a/src/Parser.java b/src/Parser.java
index e8f6331d43ef4b14d1ccaeb6ea16547206150b75..527d6285b6fe88121e22c4938e0a8bde271f04c0 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 0000000000000000000000000000000000000000..4e925c965f413d5d38a2b05dfbbbe37962cff874
--- /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 0000000000000000000000000000000000000000..de2bf44168c2d6f4afc24050f19d24d651e510e4
--- /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