package com.ecust.jvm4;
import java.util.List;
import java.util.Stack;
public class InfixToPostfix2 {
private static TokenParser tokenParser = new TokenParser();
public static String toPostFixExpr(String expr){
List<Token> tokens = tokenParser.parse(expr);
Stack<Token> s1 = new Stack<Token>();
Stack<Token> s2 = new Stack<Token>();
for (Token token : tokens) {
if (token.isNumber()) {
s2.push(token);
} else {
while (token.isOperator() && !s1.isEmpty()) {
if (!token.hasHigherPriority(s1.peek())) {
s2.push(s1.pop());
continue;
}
break;
}
s1.push(token);
}
}
while (!s1.isEmpty()) {
s2.push(s1.pop());
}
StringBuilder stringBuilder = new StringBuilder();
while (!s2.isEmpty()) {
Token token = s2.pop();
s1.push(token);
}
while (!s1.isEmpty()) {
Token token = s1.pop();
stringBuilder.append(token.toString()).append(" ");
}
return stringBuilder.substring(0,stringBuilder.length() - 1);
}
}