parameters: (tokens, options)
return_statement: return [Either(*result)] if len(result) > 1 else result
docstring: expr ::= seq ( '|' seq )* ;
docstring_summary: expr ::= seq ( '|' seq )* ;
docstring_tokens: expr :: = seq ( | seq ) * ;
function: def parse_expr(tokens, options):
      """expr ::= seq ( '|' seq )* ;"""
      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
function_tokens: 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