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());