package com.coding.basic.stack.myself;
import java.util.ArrayList;
import java.util.List;
import java.util.Stack;
import com.coding.basic.stack.myself.Token;
public class InfixToPostfix {
public static List<Token> convert(String expr) {
/*List<Token> infixPost = new TokenParser().parse(expr);
List<Token> postFixTokens = new ArrayList<>();
Stack<Token> opStack = new Stack<Token>();
//2-3*4+5
for (Token token:infixPost){
if(token.isOperator()){
while(!opStack.isEmpty()
&& !token.hasHigherPriority(opStack.peek())){
System.out.println("满足条件的token"+token);
postFixTokens.add(opStack.pop());//
}
opStack.push(token);//-
}
if(token.isNumber()){
postFixTokens.add(token);//2 3
}
}
while (!opStack.isEmpty()){
postFixTokens.add(opStack.pop());
}
return postFixTokens;*/
List<Token> infixPost = new TokenParser().parse(expr);
List<Token> postFixTokens = new ArrayList<Token>();
Stack<Token> openStack = new Stack<Token>();
for (Token token:infixPost){
if (token.isOperator()){
while (!openStack.isEmpty()
&& !token.hasHigherPriority(openStack.peek())){
postFixTokens.add(openStack.pop());
}
openStack.push(token);
}
if (token.isNumber()){
postFixTokens.add(token);
}
}
while (!openStack.isEmpty()){
postFixTokens.add(openStack.pop());
}
return postFixTokens;
}
}