public ArrayList InputToPostfix() { Stack <Token> operatorStack = new Stack <Token>(); ArrayList postfixExpr = new ArrayList(); //loop over the tokenized infix expression from user input try { foreach (Token currToken in inputTokens) { //if current token is an operand, add to output expression if (currToken is Operand) { postfixExpr.Add(currToken); } else if (currToken is Operator) { //if current operator is a '(', add it to op stack if (currToken.getValue().Equals("(")) { operatorStack.Push(currToken); } //if current operator is a ')', pop from stack and add to output until '(' is encountered else if (currToken.getValue().Equals(")")) { Token topStackToken = operatorStack.Pop(); while (!(topStackToken.getValue().Equals("("))) { postfixExpr.Add(topStackToken); topStackToken = operatorStack.Pop(); } } //operators that are not parentheses else { Operator currOpToken = currToken as Operator; Operator currStackToken = new Operator(""); while ((!(operatorStack.Count() == 0)) && ((currStackToken = (Operator)operatorStack.Peek()).getPriority() >= currOpToken.getPriority())) { //add tokens from stack to output expression while the current token has <= priority than top of stack currStackToken = operatorStack.Pop() as Operator; postfixExpr.Add(currStackToken); } operatorStack.Push(currToken); } } } } catch (System.InvalidOperationException) { return(new ArrayList()); } //add remainder of stack to postfix expression while (!(operatorStack.Count() == 0)) { postfixExpr.Add(operatorStack.Pop()); } return(postfixExpr); }