package com.coding.basic.stack.expr; import java.util.List; import java.util.Stack; public class InfixToPostfix { public static Token[] convert(String expr) { TokenParser parser = new TokenParser(); List<Token> infix = parser.parse(expr); Stack<Token> postfix = new Stack<Token>(); Stack<Token> op = new Stack<Token>(); for (Token token : infix) { if (token.isDigit()) { postfix.push(token); } /*else if (token.getValue().equals("(")) { op.push(token); } else if (token.getValue().equals(")")) { while (!op.isEmpty() && !op.peek().getValue().equals("(")) { postfix.push(op.pop()); } op.pop(); }*/ else if (token.isOperator()){ if (op.isEmpty()) { op.push(token); } /*else if (op.peek().getValue().equals("(")) { op.push(token); } */else if (token.hasHigherPriority(op.peek())) { op.push(token); } else { while (!op.isEmpty()/* &&! op.peek().getValue().equals("(")*/ && !token.hasHigherPriority(op.peek())) { postfix.push(op.pop()); } op.push(token); } } } while (!op.isEmpty()) { postfix.push(op.pop()); } Token[] result = new Token[postfix.size()]; return postfix.toArray(result); } }