code: def _reduce(self):
          
  
          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()
docs: 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.