Skip to content
Snippets Groups Projects
Commit 3163eeb1 authored by Dominic Daniel Krämer's avatar Dominic Daniel Krämer
Browse files

Merge branch 'dominicsbranch' into 'main'

Dominicsbranch

See merge request !10
parents 6eda657f f4eda906
No related branches found
No related tags found
1 merge request!10Dominicsbranch
1 + x*y^2 - (31 * x)-y
1 + x^2 - (3 * x)
2-x + 0.5*x^2 - 1
(5*2-(5^2)+3*(201.01-15)) (5*2-(5^2)+3*(201.01-15))
\ No newline at end of file
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);
}
}
...@@ -40,7 +40,8 @@ public class Application { ...@@ -40,7 +40,8 @@ public class Application {
Parser parser = new Parser(); Parser parser = new Parser();
try { try {
Parser.Expression exp = parser.parse(tokens); 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) { catch (ParserException e) {
System.out.println(e.getMessage()); System.out.println(e.getMessage());
......
public class Evaluator {
}
...@@ -3,14 +3,11 @@ import java.util.List; ...@@ -3,14 +3,11 @@ import java.util.List;
public class Parser { public class Parser {
public static class Expression { public abstract class Expression {
@Override public abstract <T> T accept(Visitor<T> visitor);
public String toString() {
return "";
}
} }
private class BinaryOperation extends Expression { public class BinaryOperation extends Expression {
Expression leftExpression; Expression leftExpression;
String operator; String operator;
Expression rightExpression; Expression rightExpression;
...@@ -21,23 +18,18 @@ public class Parser { ...@@ -21,23 +18,18 @@ public class Parser {
this.rightExpression = rightExpression; this.rightExpression = rightExpression;
this.capsuled = capsuled; this.capsuled = capsuled;
} }
@Override public <T> T accept(Visitor<T> visitor) {
public String toString() { return visitor.visit(this);
if(capsuled) {
return "("+ leftExpression.toString() + operator + rightExpression.toString() + ")";
}
return leftExpression.toString() + operator + rightExpression.toString();
} }
} }
private class Variable extends Expression { public class Variable extends Expression {
String variableName; String variableName;
public Variable(String i, Boolean capsuled) { public Variable(String i, Boolean capsuled) {
this.variableName = i; this.variableName = i;
} }
@Override public <T> T accept(Visitor<T> visitor) {
public String toString() { return visitor.visit(this);
return variableName;
} }
} }
...@@ -45,18 +37,17 @@ public class Parser { ...@@ -45,18 +37,17 @@ public class Parser {
} }
private class Number extends Value { public class Number extends Value {
public String digits; public String digits;
public Number(String i) { public Number(String i) {
this.digits = i; this.digits = i;
} }
@Override public <T> T accept(Visitor<T> visitor) {
public String toString() { return visitor.visit(this);
return digits;
} }
} }
private class Decimal extends Value { public class Decimal extends Value {
public Number beforeDot; public Number beforeDot;
public Number afterDot; public Number afterDot;
...@@ -64,9 +55,8 @@ public class Parser { ...@@ -64,9 +55,8 @@ public class Parser {
this.beforeDot = i1; this.beforeDot = i1;
this.afterDot = i2; this.afterDot = i2;
} }
@Override public <T> T accept(Visitor<T> visitor) {
public String toString() { return visitor.visit(this);
return beforeDot.toString() + "." + afterDot.toString();
} }
} }
......
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);
}
2. Testklassen
3. Visitor pattern
4. plot function
5. Überarbeiten
-> Dokumentation
-> Exceptions
-> Kommentare
-> Code strukturieren
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment