Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package calculator;
- import java.util.Stack;
- import util.TokenDispenser;
- public class PrecedenceCalculator extends NoPrecedenceCalculator {
- public PrecedenceCalculator(String title) {
- super(title);
- tempStack = new Stack<>();
- }
- public PrecedenceCalculator() {
- this("Calculator With Operator Precedence");
- }
- @Override
- public void reduce() {
- dispenser = getDispenser();
- Stack<Object> stack = getStack();
- double operand1, operand2;
- char operator = (Character)getStack().get(getStack().size()-2);
- if(dispenser.tokenIsEOF()){
- System.out.println("tokenIsEOF, tempStack.size() =" + tempStack.size());
- for(int i = 0; i < tempStack.size(); i++){
- System.out.println("Pushing from tempStack: " + tempStack.get(tempStack.size()));
- stack.push(tempStack.pop());
- }
- System.out.println("tokenIsEOF2");
- while(numOpNumOnStack()){
- reduceNumOpNum();
- }
- }
- else if (numOpNumOnStack()) {
- //If operator of a numOp Num is + or -,
- //pop second num onto temp variable, pop and push first num
- //and op onto tempstack, and then push second num back onto originial stack
- if(operator == '+' || operator == '-'){
- operand1 = (double)stack.pop();
- System.out.println("Popping from stack: " + operand1);
- operator = (Character)stack.pop();
- System.out.println("Popping from stack: " + operator);
- operand2 = (double)stack.pop();
- System.out.println("Popping from stack: " + operand2);
- tempStack.push(operand2);
- System.out.println("Pushing to tempStack: " + operand2);
- tempStack.push(operator);
- System.out.println("Pushing to tempStack: " + operator);
- stack.push(operand1);
- System.out.println("Pushing to stack: " + operand1);
- }
- else if(operator == '*' || operator == '/'){
- reduceNumOpNum();
- }
- }
- }
- private TokenDispenser dispenser;
- private final Stack<Object> tempStack;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement