public class Calculate implements ASTVisitor {

    public Object VisitIntegerLiteral(ASTIntegerLiteral literal) { 
        return new Integer(literal.value());
    }
    
    public Object VisitOperatorExpression(ASTOperatorExpression opexpr) {
        Integer left = (Integer) opexpr.left().accept(this);
        int leftval = left.intValue();
        Integer right = (Integer) opexpr.right().accept(this);
        int rightval = right.intValue();
        switch(opexpr.operator()) {
        case ASTOperatorExpression.PLUS:
            return new Integer(leftval + rightval);
        case ASTOperatorExpression.MINUS:
            return new Integer(leftval - rightval);
        case ASTOperatorExpression.MULTIPLY:
            return new Integer(leftval * rightval);
        case ASTOperatorExpression.DIVIDE:
            return new Integer(leftval / rightval);
        }

        return null;
    }
}