expr ::= seq ( '|' seq )* ;
(tokens, options)
| 377 | |
| 378 | |
| 379 | def parse_expr(tokens, options): |
| 380 | """expr ::= seq ( '|' seq )* ;""" |
| 381 | seq = parse_seq(tokens, options) |
| 382 | if tokens.current() != '|': |
| 383 | return seq |
| 384 | result = [Required(*seq)] if len(seq) > 1 else seq |
| 385 | while tokens.current() == '|': |
| 386 | tokens.move() |
| 387 | seq = parse_seq(tokens, options) |
| 388 | result += [Required(*seq)] if len(seq) > 1 else seq |
| 389 | return [Either(*result)] if len(result) > 1 else result |
| 390 | |
| 391 | |
| 392 | def parse_seq(tokens, options): |