| 435 | } |
| 436 | |
| 437 | PatternList parse_expr(Tokens& tokens, std::vector<Option>& options) |
| 438 | { |
| 439 | // expr ::= seq ( '|' seq )* ; |
| 440 | |
| 441 | auto seq = parse_seq(tokens, options); |
| 442 | |
| 443 | if (tokens.current() != "|") |
| 444 | return seq; |
| 445 | |
| 446 | PatternList ret; |
| 447 | ret.emplace_back(maybe_collapse_to_required(std::move(seq))); |
| 448 | |
| 449 | while (tokens.current() == "|") { |
| 450 | tokens.pop(); |
| 451 | seq = parse_seq(tokens, options); |
| 452 | ret.emplace_back(maybe_collapse_to_required(std::move(seq))); |
| 453 | } |
| 454 | |
| 455 | return { maybe_collapse_to_either(std::move(ret)) }; |
| 456 | } |
| 457 | |
| 458 | static Required parse_pattern(std::string const& source, std::vector<Option>& options) |
| 459 | { |
no test coverage detected