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

Merge branch 'dominicsbranch' into 'main'

Dominicsbranch

See merge request !11
parents 3163eeb1 105444dc
No related branches found
No related tags found
1 merge request!11Dominicsbranch
1 + x*y^2 - (31 * x)-y 1+(x^2)-(3*x)
1 + x^2 - (3 * x) 2*x+0.5*(x^2)-1
2-x + 0.5*x^2 - 1 \ No newline at end of file
(5*2-(5^2)+3*(201.01-15))
\ No newline at end of file
File added
...@@ -5,9 +5,19 @@ public class ASTPrinter implements Visitor<String>{ ...@@ -5,9 +5,19 @@ public class ASTPrinter implements Visitor<String>{
if(binaryOP.capsuled) { if(binaryOP.capsuled) {
sb.append("("); sb.append("(");
} }
sb.append(binaryOP.leftExpression.accept(this)); if(binaryOP.operator.contains("^")) {
sb.append(binaryOP.operator); sb.append("Pow(");
sb.append(binaryOP.rightExpression.accept(this)); sb.append(binaryOP.leftExpression.accept(this));
sb.append(",");
sb.append(binaryOP.rightExpression.accept(this));
sb.append(")");
}
else {
sb.append(binaryOP.leftExpression.accept(this));
sb.append(binaryOP.operator);
sb.append(binaryOP.rightExpression.accept(this));
}
if(binaryOP.capsuled) { if(binaryOP.capsuled) {
sb.append(")"); sb.append(")");
} }
......
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.FileReader; import java.io.FileReader;
import java.io.IOException; import java.io.IOException;
import java.util.Arrays;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
public class Application { public class Application {
public static void main(String[] args) { public static void main(String[] args) {
//LinkedList<String> expressions = new LinkedList<>()
//LinkedList<String> expressions = new List<>();
List<String> expressions = new LinkedList<>(); List<String> expressions = new LinkedList<>();
//Reads the file "expressions.txt" and adds its values to a list //Reads the file "expressions.txt" and adds its values to a list
BufferedReader reader; BufferedReader reader;
...@@ -41,7 +38,11 @@ public class Application { ...@@ -41,7 +38,11 @@ public class Application {
try { try {
Parser.Expression exp = parser.parse(tokens); Parser.Expression exp = parser.parse(tokens);
ASTPrinter printer = new ASTPrinter(); ASTPrinter printer = new ASTPrinter();
Evaluator evaluator = new Evaluator();
System.out.println("Printing: '" + printer.visit(exp) + "'"); System.out.println("Printing: '" + printer.visit(exp) + "'");
String s = printer.visit(exp);
System.out.println("Evaluating: '" + evaluator.visit(exp) + "'");
SwingFunctionPlotter.plotFunction(s);
} }
catch (ParserException e) { catch (ParserException e) {
System.out.println(e.getMessage()); System.out.println(e.getMessage());
......
public class Evaluator { public class Evaluator implements Visitor<Double>{
@Override
public Double visit(final Parser.BinaryOperation binaryOP) {
double result = binaryOP.leftExpression.accept(this);
Double rOperand = binaryOP.rightExpression.accept(this);
if(rOperand==null) {
}
switch (binaryOP.operator.charAt(0)) {
case '+':
result += rOperand;
break;
case '-':
result -= rOperand;
break;
case '*':
result *= rOperand;
break;
case '/':
if (rOperand != 0) {
result /= rOperand;
}
else {
result = result;
//throw new ArithmeticException("Arithmetic Error: division by zero detected");
}
break;
case '^':
for(int i=1; i<rOperand; i++) {
result = result*result;
}
break;
default:
throw new RuntimeException("SematicError: unknown operand found in AST: "
+ binaryOP.operator);
}
return result;
}
@Override
public Double visit(final Parser.Variable variable) {
return 0.0;
}
@Override
public Double visit(final Parser.Number number) {
return Double.valueOf(number.digits);
}
@Override
public Double visit(final Parser.Decimal decimal) {
return Double.valueOf(decimal.afterDot.digits + "." + decimal.beforeDot.digits);
}
public double visit(final Parser.Expression ast) {
if(ast==null) {
return 0.0;
}
return ast.accept(this);
}
} }
import com.mindfusion.charting.FunctionSeries;
import com.mindfusion.charting.swing.LineChart;
import javax.swing.*;
import java.awt.*;
public class SwingFunctionPlotter extends JFrame {
private static final long serialVersionUID = 1L;
public static void plotFunction(String function) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
try {
new SwingFunctionPlotter(function).setVisible(true);
}
catch(Exception e) {
e.printStackTrace();
}
}
});
}
protected SwingFunctionPlotter(String function) {
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(650, 400);
setTitle("Java Swing Library for Charts and Gauges: FunctionSeries");
getContentPane().add(initializeChart(function), BorderLayout.CENTER);
}
private LineChart initializeChart(String function) {
LineChart lineChart = new LineChart();
FunctionSeries series1;
try {
series1 = new FunctionSeries(function,1000, -20, 20);
series1.setTitle("Current function");
lineChart.getSeries().add(series1);
}
catch(Exception e) {
e.printStackTrace();
}
return lineChart;
}
}
\ No newline at end of file
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.
Finish editing this message first!
Please register or to comment