'Perform a single parsing operation.  If a reduction is
possible, then perform that reduction, and return the
production that it is based on.  Otherwise, if a shift is
possible, then perform it, and return True.  Otherwise,
return False.
:return: False if no operation was performed; True if a shift was
performed; and the CFG production used to reduce if a
reduction was performed.
:rtype: Production or bool'

def step(self):

    return (self.reduce() or self.shift())
