package com.dudy.learn01.data_structure.queue.expr;
import java.util.*;
public class InfixToPostfix {
public static List<Token> convert(String expr) {
List<Token> tokens = new ArrayList<>();
Stack<Token> optStack = new Stack<>();
TokenParser parser = new TokenParser();
List<Token> list = parser.parse(expr);
for (int i = 0;i < list.size(); i++){
Token token = list.get(i);
if(token.isNumber()){
tokens.add(token);continue;
}
if (token.isOperator()){
if (optStack.isEmpty()){
optStack.push(token);continue;
}
if (token.hasHigherPriority(optStack.peek())){
tokens.add(list.get(++i));
tokens.add(token);
} else {
tokens.add(optStack.pop());
optStack.push(token);
}
}
}
while (!optStack.isEmpty()){
tokens.add(optStack.pop());
}
return tokens;
}
}