package expr; import java.util.ArrayList; import java.util.List; import java.util.Stack; public class InfixToPostfix { public static List<Token> convert(String expr) { List<Token> inList = TokenParser.parse(expr); List<Token> postList = new ArrayList<Token>(); Stack<Token> operatorStack = new Stack<Token>(); for(int i = 0; i < inList.size(); i++){ Token token = inList.get(i); if(token.isOperator()){ while(!operatorStack.isEmpty() && !token.hasHigherPriority(operatorStack.peek())){ postList.add(operatorStack.pop()); } operatorStack.add(token); }else{ postList.add(token); } } while(!operatorStack.isEmpty()){ postList.add(operatorStack.pop()); } return postList; } public static String toString(List<Token> tokenList){ StringBuilder sb = new StringBuilder(); for(int i = 0; i < tokenList.size(); i++){ sb.append(tokenList.get(i).getValue()); if(i < tokenList.size()-1){ sb.append(" "); } } return sb.toString(); } }