package com.coding.basic.stack.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> inFixTokens = new TokenParser().parse(expr);
List<Token> postFixTokens = new ArrayList<>();
Stack<Token> opStack = new Stack<Token>();
for(Token token : inFixTokens){
if(token.isOperator()){
while(!opStack.isEmpty()
&& !token.hasHigherPriority(opStack.peek())){
postFixTokens.add(opStack.pop());
}
opStack.push(token);
}
if(token.isNumber()){
postFixTokens.add(token);
}
}
while(!opStack.isEmpty()){
postFixTokens.add(opStack.pop());
}
return postFixTokens;
}
}