package expr;
import stack.MyStack;
import java.util.ArrayList;
import java.util.List;
/**
* Created by gongxun on 2017/4/22.
* 遇到数组直接放入集合等待输出
* 遇到运算符入栈,如果栈顶元素的优先级较待入栈运算符的优先级高,将栈顶元素取出放入集合等待输出,否则直接入栈
*/
public class InfixToPostfix {
public static List<Token> convert(String expr) {
List<Token> result = new ArrayList<Token>();
TokenParser tokenParser = new TokenParser();
List<Token> tokens = tokenParser.parse(expr);
MyStack<Token> stack = new MyStack<Token>();
if (tokens != null) {
for (Token token : tokens) {
if (token.isNumber())
result.add(token);
else {
while (!stack.isEmpty()) {
Token prevOper = stack.peek();
if (token.hasHigherPriority(prevOper)) {
stack.push(token);
break;
} else {
result.add(stack.pop());
}
}
//和+或者-同优先级或者更高优先级的都已经弹栈,只剩空栈
if (stack.isEmpty()) stack.push(token);
}
}
}
//将剩余的所有符号出栈
while (!stack.isEmpty())
result.add(stack.pop());
return result;
}
}