docs: def _split(rule):
      """Splits a rule whose len(rhs) > 2 into shorter rules."""
      rule_str = str(rule.lhs) + '__' + '_'.join(str(x) for x in rule.rhs)
      rule_name = '__SP_%s' % (rule_str) + '_%d'
      yield Rule(rule.lhs, [rule.rhs[0], NT(rule_name % 1)], weight=rule.weight, alias=rule.alias)
      for i in xrange(1, len(rule.rhs) - 2):
          yield Rule(NT(rule_name % i), [rule.rhs[i], NT(rule_name % (i + 1))], weight=0, alias='Split')
      yield Rule(NT(rule_name % (len(rule.rhs) - 2)), rule.rhs[-2:], weight=0, alias='Split')