Mega Code Archive

 
Categories / Java / Collections Data Structure
 

Parse postfix arithmetic expressions

import java.io.IOException; public class ParsePost {   private Stack theStack;   private String input;   public ParsePost(String s) {     input = s;   }   public int doParse() {     theStack = new Stack(20);     char ch;     int j;     int num1, num2, interAns;     for (j = 0; j < input.length(); j++) {       ch = input.charAt(j);        theStack.displayStack("" + ch + " ");       if (ch >= '0' && ch <= '9') // if a number push it         theStack.push((int) (ch - '0'));          else // it's an operator       {         num2 = theStack.pop();         num1 = theStack.pop();         switch (ch) {         case '+':           interAns = num1 + num2;           break;         case '-':           interAns = num1 - num2;           break;         case '*':           interAns = num1 * num2;           break;         case '/':           interAns = num1 / num2;           break;         default:           interAns = 0;         }         theStack.push(interAns);       }     }     interAns = theStack.pop();     return interAns;   }   public static void main(String[] args) throws IOException {     String input = "1-2+3*4+5/6-7+8*9";     int output;     ParsePost aParser = new ParsePost(input);     output = aParser.doParse();     System.out.println("Evaluates to " + output);   }   class Stack {     private int maxSize;        private int[] stackArray;        private int top;        public Stack(int size) {       maxSize = size;       stackArray = new int[maxSize];       top = -1;     }        public void push(int j) {       stackArray[++top] = j;     }        public int pop() {       return stackArray[top--];     }        public int peek() {       return stackArray[top];     }        public boolean isEmpty() {       return (top == -1);     }        public boolean isFull() {       return (top == maxSize - 1);     }        public int size() {       return top + 1;     }        public int peekN(int n) {       return stackArray[n];     }        public void displayStack(String s) {       System.out.print(s);       System.out.print("Stack (bottom>top): ");       for (int j = 0; j < size(); j++) {         System.out.print(peekN(j));         System.out.print(' ');       }       System.out.println("");     }   } }