rendered paste body boolean postfixExpression()
{
stk.clear();
Scanner scan = new Scanner(expression);
char current;
// The algorithm for doing the conversion.... Follow the bullets
while (scan.hasNext())
{
String token = scan.next();
if (isNumber(token)) // Bullet # 1
postfix += token + " ";
else
{
current = token.charAt(0);
if (isParentheses(current)) // Bullet # 2 begins
{
if(stk.empty() || current == Constants.LEFT_NORMAL)
{
// push this element on the stack;
stk.push(new Character(current));
}
else if (current == Constants.RIGHT_NORMAL)
{
try
{
Character ch = (Character)stk.pop();
char top = ch.charValue();
while (top != Constants.LEFT_NORMAL)
{
postfix += top + " ";
ch = (Character)stk.pop();
top = ch.charValue();
}
}
catch(EmptyStackException e)
{
return false;
}
}
}// Bullet # 2 ends
else if (isOperator(current))// Bullet # 3 begins
{
if(stk.empty())
stk.push(new Character(current));
else
{
try
{
char top = (Character)stk.peek();
boolean higher = hasHigherPrecedence(top, current);
while(top != Constants.LEFT_NORMAL && higher)
{
postfix = postfix + stk.pop() + " ";
top = (Character)stk.peek();
}
stk.push(new Character(current));
}
catch(EmptyStackException e)
{
stk.push(new Character(current));
}
}
}// Bullet # 3 ends
}
} // Outer loop ends
try
{
while(!stk.empty()) // Bullet # 4
{
postfix += stk.pop() + " ";
}
}
catch(EmptyStackException e)
{
}
return true;
}