package algorithm.expression; import datastructure.basic.Stack; import java.util.ArrayList; import java.util.List; public class InfixToPostfix { public static List<Token> convert(String expr) { List<Token> infix = TokenParser.parse(expr); List<Token> postfix = new ArrayList<>(); Stack op = new Stack(); for (Token token : infix) { if (token.isNumber()) { postfix.add(token); } else if (token.equals(Token.R_BRACKET)) { while (!op.peek().equals(Token.L_BRACKET)) { postfix.add((Token) op.pop()); } op.pop(); } else { while (!op.isEmpty() && Token.compare(token, (Token) op.peek()) < 0) { postfix.add((Token) op.pop()); } op.push(token); } } while (!op.isEmpty()) { postfix.add((Token) op.pop()); } return postfix; } }