package com.ralf.stack.expr;
import java.util.ArrayList;
import java.util.List;
import com.ralf.stack.MyStack;
import com.ralf.stack.StackUtil;
public class InfixToPostExpr {
public static List<Token> convert(String infixString){
TokenParser parser = new TokenParser();
List<Token> tokens = parser.parse(infixString);
MyStack<Token> S1 = new MyStack<Token>();
MyStack<Token> S2 = new MyStack<>();
for(Token token : tokens){
if (token.isNumber()) {
S2.push(token);
}
else{
while(!S1.isEmpty() && !token.hasHigherPriority(S1.peek())) {
S2.push(S1.pop());
}
S1.push(token);
}
}
while(!S1.isEmpty()){
S2.push(S1.pop());
}
ArrayList<Token> list = new ArrayList<>();
StackUtil.reverse(S2);
while(!S2.isEmpty()){
list.add(S2.pop());
}
return list;
}
}