private void handleFunction(final Token<?> token) throws ExpressionExecuteException,
            NotEnoughParametersException {
        final FunctionToken functionToken = (FunctionToken)token;
        while (!functions.isEmpty() && shouldExecute(functions.peek(), functionToken.getValue())) {
            final Function function = functions.pop();
            function.apply(values);
        }
        functions.push(functionToken.getValue());
    }