code: def parse_expr(tokens, options):
      
      seq = parse_seq(tokens, options)
      if tokens.current() != '|':
          return seq
      result = [Required(*seq)] if len(seq) > 1 else seq
      while tokens.current() == '|':
          tokens.move()
          seq = parse_seq(tokens, options)
          result += [Required(*seq)] if len(seq) > 1 else seq
      return [Either(*result)] if len(result) > 1 else result
docs: expr ::= seq ( '|' seq )* ;