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