Advertisement
elltyl325

precedence calc

Oct 10th, 2020
993
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.33 KB | None | 0 0
  1. package calculator;
  2.  
  3. import java.util.Stack;
  4. import util.TokenDispenser;
  5.  
  6.  
  7. public class PrecedenceCalculator extends NoPrecedenceCalculator {
  8.    
  9.     public PrecedenceCalculator(String title) {
  10.         super(title);
  11.         tempStack = new Stack<>();
  12.     }
  13.    
  14.     public PrecedenceCalculator() {
  15.         this("Calculator With Operator Precedence");
  16.     }
  17.    
  18.     @Override
  19.     public void reduce() {
  20.     dispenser = getDispenser();
  21.         Stack<Object> stack = getStack();
  22.         double operand1, operand2;
  23.         char operator = (Character)getStack().get(getStack().size()-2);
  24.         if(dispenser.tokenIsEOF()){
  25.             System.out.println("tokenIsEOF, tempStack.size() =" + tempStack.size());
  26.             for(int i = 0; i < tempStack.size(); i++){
  27.                 System.out.println("Pushing from tempStack: " + tempStack.get(tempStack.size()));
  28.                 stack.push(tempStack.pop());
  29.             }
  30.             System.out.println("tokenIsEOF2");
  31.             while(numOpNumOnStack()){
  32.                 reduceNumOpNum();
  33.             }
  34.          
  35.         }
  36.         else if (numOpNumOnStack()) {
  37.            
  38.             //If operator of a numOp Num is + or -,
  39.             //pop second num onto temp variable, pop and push first num
  40.             //and op onto tempstack, and then push second num back onto originial stack
  41.             if(operator == '+' || operator == '-'){
  42.                 operand1 = (double)stack.pop();
  43.                 System.out.println("Popping from stack: " + operand1);
  44.                 operator = (Character)stack.pop();
  45.                 System.out.println("Popping from stack: " + operator);
  46.                 operand2 = (double)stack.pop();
  47.                 System.out.println("Popping from stack: " + operand2);
  48.                 tempStack.push(operand2);
  49.                 System.out.println("Pushing to tempStack: " + operand2);
  50.                 tempStack.push(operator);
  51.                 System.out.println("Pushing to tempStack: " + operator);
  52.                 stack.push(operand1);
  53.                 System.out.println("Pushing to stack: " + operand1);
  54.             }  
  55.             else if(operator == '*' || operator == '/'){
  56.                 reduceNumOpNum();
  57.             }
  58.         }
  59.        
  60.     }
  61.    
  62.    
  63.  
  64.     private TokenDispenser dispenser;
  65.     private final Stack<Object> tempStack;
  66.  
  67. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement