code: def parse_combinator(self, sel, m, has_selector, selectors, relations, is_pseudo, index):
          
  
          combinator = m.group('relation').strip()
          if not combinator:
              combinator = WS_COMBINATOR
          if not has_selector:
              # The only way we don't fail is if we are at the root level and quirks mode is enabled,
              # and we've found no other selectors yet in this compound selector.
              if (not self.quirks or is_pseudo or combinator == COMMA_COMBINATOR or relations):
                  raise SelectorSyntaxError(
                      "The combinator '{}' at postion {}, must have a selector before it".format(combinator, index),
                      self.pattern,
                      index
                  )
              util.warn_quirks(
                  'You have attempted to use a combinator without a selector before it at position {}.'.format(index),
                  'the :scope pseudo class (or another appropriate selector) should be placed before the combinator.',
                  self.pattern,
                  index
              )
              sel.flags |= ct.SEL_SCOPE
  
          if combinator == COMMA_COMBINATOR:
              if not sel.tag and not is_pseudo:
                  # Implied `*`
                  sel.tag = ct.SelectorTag('*', None)
              sel.relations.extend(relations)
              selectors.append(sel)
              del relations[:]
          else:
              sel.relations.extend(relations)
              sel.rel_type = combinator
              del relations[:]
              relations.append(sel)
          sel = _Selector()
  
          has_selector = False
          return has_selector, sel
docs: Parse combinator tokens.