From 29eeb5191923e2f1e590b9ad28683f7458e736b5 Mon Sep 17 00:00:00 2001 From: krolxon Date: Fri, 16 Feb 2024 00:09:35 +0530 Subject: [PATCH] change how your interact with Parser --- Calculator.java | 6 ++--- GFrame.java | 54 +++++++++++++++++++++++++++++++++++++++++++ Parser.java | 18 ++++++++++----- bin/Calculator.class | Bin 0 -> 1173 bytes bin/GFrame$1.class | Bin 0 -> 1021 bytes bin/GFrame$2.class | Bin 0 -> 653 bytes bin/GFrame.class | Bin 0 -> 1444 bytes bin/Parser.class | Bin 0 -> 3181 bytes 8 files changed, 69 insertions(+), 9 deletions(-) create mode 100644 GFrame.java create mode 100644 bin/Calculator.class create mode 100644 bin/GFrame$1.class create mode 100644 bin/GFrame$2.class create mode 100644 bin/GFrame.class create mode 100644 bin/Parser.class diff --git a/Calculator.java b/Calculator.java index 43804c3..7070c87 100644 --- a/Calculator.java +++ b/Calculator.java @@ -1,5 +1,6 @@ public class Calculator { public static void main(String[] args) { + GFrame frame = new GFrame("Calculator"); String expr = "(84 / 4 * 3 - 9) * 2 + 1 / 5"; // 108.2 Parser p; if (args.length == 0) { @@ -7,8 +8,7 @@ public class Calculator { } else { p = new Parser(args[0]); } - String postfix = p.toPostFix(); - // System.out.println("pfix => \t " + postfix); - System.out.println(p.evalExpr(postfix)); + System.out.println("postfix => \t " + p.getPostfix()); + System.out.println(p.eval()); } } diff --git a/GFrame.java b/GFrame.java new file mode 100644 index 0000000..b8ef7ed --- /dev/null +++ b/GFrame.java @@ -0,0 +1,54 @@ +import javax.swing.*; +import java.awt.Color; +import java.awt.Dimension; +import java.awt.event.*; + +public class GFrame extends JFrame { + Parser p; + + GFrame(String title) { + this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + this.setTitle(title); + this.getContentPane().setBackground(Color.decode("#4E586e")); + JButton b = new JButton(); + b.setBounds(130, 100, 100, 40); + b.setBackground(Color.decode("#F78361")); + b.setText("Evaluate"); + + JTextField tf = new JTextField(); + tf.setBounds(130, 50, 220, 40); + + JButton bClear = new JButton(); + bClear.setBounds(250, 100, 100, 40); + bClear.setBackground(Color.decode("#F78361")); + bClear.setText("Clear"); + + this.add(b); + this.add(bClear); + this.add(tf); + this.setSize(400, 500); + this.setLayout(null); + this.setVisible(true); + + JLabel label = new JLabel("Enter Expression: "); + label.setBounds(130, 20, 150, 40); + this.add(label); + + b.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + if (tf.getText().length() != 0) { + p = new Parser(tf.getText()); + tf.setText(Double.toString(p.eval())); + } else { + tf.setText("No input"); + } + } + }); + + bClear.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + tf.setText(""); + } + }); + } +} diff --git a/Parser.java b/Parser.java index 074a6e0..bd2cde9 100644 --- a/Parser.java +++ b/Parser.java @@ -8,13 +8,15 @@ import java.util.StringJoiner; public class Parser { private String expr; + private String postfix; private Stack operatorStack; public Parser(String infixExpr) { expr = infixExpr.trim().replaceAll("\\s", ""); // remove whitespaces + postfix = toPostFix(); } - public static boolean isOperand(char c) { + private boolean isOperand(char c) { switch (c) { case '0': case '1': @@ -32,11 +34,11 @@ public class Parser { } } - public static boolean isOperand(String c) { + private boolean isOperand(String c) { return isOperand(c.charAt(0)); } - public int getPresedence(char c) { + private int getPresedence(char c) { switch (c) { case '^': return 3; @@ -53,7 +55,7 @@ public class Parser { } } - public boolean hasLeftAssociativity(char c) { + private boolean hasLeftAssociativity(char c) { if (c == '^') { return false; } else { @@ -61,7 +63,7 @@ public class Parser { } } - public String toPostFix() { + private String toPostFix() { operatorStack = new Stack<>(); StringJoiner output = new StringJoiner(" "); StringBuilder operand = new StringBuilder(); @@ -136,7 +138,7 @@ public class Parser { } } - public double evalExpr(String postfix) { + public double eval() { Stack stack = new Stack(); for (String c : postfix.split(" ")) { if (isOperand(c)) { @@ -149,4 +151,8 @@ public class Parser { } return stack.pop(); } + + public String getPostfix() { + return postfix; + } } diff --git a/bin/Calculator.class b/bin/Calculator.class new file mode 100644 index 0000000000000000000000000000000000000000..e358d742c0a105ea38a9b7a1d82884d5609dddb3 GIT binary patch literal 1173 zcmaJ=T~8B16g|@xwp|tq5|Z<#BREC=kDEe&OLkQ*Wb%)0PD!<2q35-WS|Z04BaREl&5X( z9HrkMoQR@iXkW1$ORg~l6UjXdVamM8Re4#2p)=@NZWn7dmu^*u21DU=GV~|%w@3w9 zwVb0&axaW1!*F70!AzSAX3Cs5r_JRg1#{-4IZMe!4LyXv!>gVkylxl~^r2tFfPq2W zYtmOZ^Q0(~EVo7~`+YvkP45tyBuc@{83l3Qzyl1E(jy^vTu*+oJ~Q+slC1(`WJ%n> zBbW?>WnL0l*C}%O!IH-md6GNQW0<(BwN@}4qj;=g%)q!Zq_=KIvpfc^qQu&c()q+d z0!fCDIOTTT?M;O-sQ{)Zo!C_NljWhTdng#9dCL*oweo?e?(zehGNCfJ9EO3!$5uJX zJ%-ML=^2A&=cdFN|e| zu8Qxhxw>XXOcreidB1{H4QtBKmkeXK^I$orZb_v5vG6_4@ghyo8N=5`cW(-PqPN^R zw1qd8cimF0l4)(RA=C8Y?pa0LQQl~hKkJ#snYe+V{_TP#MTWt6=QyI8wYldBPs0Yo zcuP-rN!75)5dVKE4ZYtNMlelBQvCv8>QK^shIS8WWwf@XF2H_Jz>uc9daU9Io?@0( zRr&=Xx`6BzwEbA*0v-8S*H-HK8=_a}-k-WaZ2LR9RGbRVsohWXPM>4wl2~w#5q~>z zj+7z_)QLtBrZ@d}@gQj8rH*}3AJBYW9Xs1)Ojx1hd=pSWA8_ECx literal 0 HcmV?d00001 diff --git a/bin/GFrame$1.class b/bin/GFrame$1.class new file mode 100644 index 0000000000000000000000000000000000000000..dcdfd79dbe1df44e33c95027ca1d751fb8793065 GIT binary patch literal 1021 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 literal 0 HcmV?d00001