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