'Use ``production`` to combine the rightmost stack elements into
a single Tree.  If ``production`` does not match the
rightmost stack elements, then do nothing.
:return: The production used to reduce the stack, if a
reduction was performed.  If no reduction was performed,
return None.
:rtype: Production or None'

def reduce(self, production=None):

    self._history.append((self._stack[:], self._remaining_text[:]))
    return_val = self._reduce(self._stack, self._remaining_text, production)
    if (not return_val):
        self._history.pop()
    return return_val
