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