diff --git a/expressions.txt b/expressions.txt index 775252b7366d4532a1869ec5c5e2a908f93f41ac..956089d3b8d3ba88c9d22f8958713a1d48b6d3a6 100644 --- a/expressions.txt +++ b/expressions.txt @@ -1,10 +1,2 @@ -5 -x -4+2 -3+(2^3) -2*2*2+3 -(23+2*(2*3))-5 -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)) \ No newline at end of file +1+(x^2)-(3*x) +2*x+0.5*(x^2)-1 \ No newline at end of file diff --git a/lib/JChart.jar b/lib/JChart.jar new file mode 100644 index 0000000000000000000000000000000000000000..720f3fe02bcb1a5a9abc66553589b150c10770ec Binary files /dev/null and b/lib/JChart.jar differ diff --git a/src/ASTPrinter.java b/src/ASTPrinter.java index a057d9a4f785a696f8f54321a09256f3e8d2ca83..8983653899e5b1c2c6fe66545fb25a77a9a60614 100644 --- a/src/ASTPrinter.java +++ b/src/ASTPrinter.java @@ -5,9 +5,19 @@ public class ASTPrinter implements Visitor<String>{ if(binaryOP.capsuled) { sb.append("("); } - sb.append(binaryOP.leftExpression.accept(this)); - sb.append(binaryOP.operator); - sb.append(binaryOP.rightExpression.accept(this)); + if(binaryOP.operator.contains("^")) { + sb.append("Pow("); + 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) { sb.append(")"); } diff --git a/src/Application.java b/src/Application.java index 096051b99b3a5c4a4cfc0d1b82f2acabaf3d8ab4..b25cd9ffc6a1585f394ddb33f6508b39db69ceef 100644 --- a/src/Application.java +++ b/src/Application.java @@ -1,14 +1,11 @@ import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; -import java.util.Arrays; import java.util.LinkedList; import java.util.List; public class Application { public static void main(String[] args) { - //LinkedList<String> expressions = new LinkedList<>() - //LinkedList<String> expressions = new List<>(); List<String> expressions = new LinkedList<>(); //Reads the file "expressions.txt" and adds its values to a list BufferedReader reader; @@ -43,7 +40,9 @@ public class Application { ASTPrinter printer = new ASTPrinter(); Evaluator evaluator = new Evaluator(); 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) { System.out.println(e.getMessage()); diff --git a/src/Evaluator.java b/src/Evaluator.java index 2c65e1b3215c13fd68f65a2f7277af197c1efc4f..b9979c778266a973dd424cf79e7eea1769dfcd1b 100644 --- a/src/Evaluator.java +++ b/src/Evaluator.java @@ -3,7 +3,11 @@ 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); + Double rOperand = binaryOP.rightExpression.accept(this); + if(rOperand==null) { + + + } switch (binaryOP.operator.charAt(0)) { case '+': result += rOperand; diff --git a/src/SwingFunctionPlotter.java b/src/SwingFunctionPlotter.java new file mode 100644 index 0000000000000000000000000000000000000000..110dc614322009d5b95b85ec38246c21fa8c4aba --- /dev/null +++ b/src/SwingFunctionPlotter.java @@ -0,0 +1,44 @@ +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