Perform a greedy reduction of token stream.

        If a reducer method matches, it will be executed, then the
        :meth:`reduce` method will be called recursively to search
        for any more possible reductions.

def _reduce(self):
        """Perform a greedy reduction of token stream.

        If a reducer method matches, it will be executed, then the
        :meth:`reduce` method will be called recursively to search
        for any more possible reductions.
        """

        for reduction, methname in self.reducers:
            token_num = len(reduction)
            if (len(self.tokens) >= token_num and
                    self.tokens[-token_num:] == reduction):
                # Get the reduction method
                meth = getattr(self, methname)

                # Reduce the token stream
                results = meth(*self.values[-token_num:])

                self.tokens[-token_num:] = [r[0] for r in results]
                self.values[-token_num:] = [r[1] for r in results]

                # Check for any more reductions
                return self._reduce()