package week07.basic;
import java.util.ArrayList;
import java.util.List;
import java.util.Stack;
public class InfixToPostfix {
public static List<Token> convert(String expr) {
TokenParser tokenParser = new TokenParser();
List<Token> tokens = tokenParser.parse(expr);
List<Token> rsTokens = new ArrayList<>();
Stack<Token> operatorStack = new Stack<>();
for(int i=0 ; i < tokens.size(); i++){
Token token = tokens.get(i);
if(token.isNumber()){
rsTokens.add(token);
continue;
}
if(token.isOperator()){
if(operatorStack.isEmpty()){
operatorStack.push(token);
continue;
}
Token curStack = operatorStack.peek();
if(token.hasHigherPriority(curStack)){
operatorStack.push(token);
}else{
while(!operatorStack.isEmpty() && (curStack = operatorStack.peek()).hasHigherPriority(token)){
rsTokens.add(curStack);
operatorStack.pop();
}
operatorStack.push(token);
}
}
}
while(!operatorStack.isEmpty()){
rsTokens.add(operatorStack.pop());
}
return rsTokens;
}
}