code: def generate_matches(self, nodes):
          
          if self.content is None:
              # Shortcut for special case (see __init__.__doc__)
              for count in xrange(self.min, 1 + min(len(nodes), self.max)):
                  r = {}
                  if self.name:
                      r[self.name] = nodes[:count]
                  yield count, r
          elif self.name == "bare_name":
              yield self._bare_name_matches(nodes)
          else:
              # The reason for this is that hitting the recursion limit usually
              # results in some ugly messages about how RuntimeErrors are being
              # ignored. We don't do this on non-CPython implementation because
              # they don't have this problem.
              if hasattr(sys, "getrefcount"):
                  save_stderr = sys.stderr
                  sys.stderr = StringIO()
              try:
                  for count, r in self._recursive_matches(nodes, 0):
                      if self.name:
                          r[self.name] = nodes[:count]
                      yield count, r
              except RuntimeError:
                  # We fall back to the iterative pattern matching scheme if the recursive
                  # scheme hits the recursion limit.
                  for count, r in self._iterative_matches(nodes):
                      if self.name:
                          r[self.name] = nodes[:count]
                      yield count, r
              finally:
                  if hasattr(sys, "getrefcount"):
                      sys.stderr = save_stderr
docs: Generator yielding matches for a sequence of nodes.
  
          Args:
              nodes: sequence of nodes
  
          Yields:
              (count, results) tuples where:
              count: the match comprises nodes[:count];
              results: dict containing named submatches.