package stack.expr; import java.util.List; import java.util.Stack; public class InfixToPostfix { public static List<Token> convert(String expr) { TokenParser parser = new TokenParser(); List<Token> tokens = parser.parse(expr); List<Token> pTokens = new Stack<>(); Stack<Token> opStack = new Stack<>(); for (Token token : tokens) { if (token.isNumber()) { pTokens.add(token); } else { if (token.isLeftSquare()) { opStack.push(token); } else if (token.isRightSquare()) { while (!opStack.peek().isLeftSquare()) { pTokens.add(opStack.pop()); } opStack.pop(); } else { if (opStack.isEmpty() || token.hasHigherPriority(opStack.peek())) { opStack.add(token); } else { while (!opStack.isEmpty() && !token.hasHigherPriority(opStack.peek())) { pTokens.add(opStack.pop()); } opStack.add(token); } } } } while(!opStack.isEmpty()) { pTokens.add(opStack.pop()); } System.out.println(pTokens); return pTokens; } public static void main(String[] args) { convert("10-2*3+50"); } }