public class ReversePolishEvaluator implements ExpressionEvaluator { public int evaluate(ExpressionTokenizer et) throws TokenException { int first = 0; int second = 0; if(et.nextTokenType() != ExpressionTokenizer.TokenType.OP) { // label... // call evaluate on label // grabs first integer first = et.nextInteger(); if(et.nextTokenType() == ExpressionTokenizer.TokenType.OP) return first; while(et.hasNextToken()) { // gets results of computation second = evaluate(et); switch(et.nextOperator()) { case '+': first += second; break; case '-': first -= second; break; case '*': first *= second; break; case '/': first /= second; break; } if(et.nextTokenType() == ExpressionTokenizer.TokenType.OP) return first; } } return first; } }