diff --git a/expressions.txt b/expressions.txt
index 363a03381b4f19350cef0b406d947b32de2b5c79..55a3a7cdea25a3ba43c49de00c3db8a30cb5d121 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 0000000000000000000000000000000000000000..a057d9a4f785a696f8f54321a09256f3e8d2ca83
--- /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 a4c744fcf4d30465f3709796e7ba4eae0af8acde..f185a6a8f6ba5b39558371e3fefc57df22e5a822 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());