| 945 | common_peg_parser_builder::common_peg_parser_builder() {} |
| 946 | |
| 947 | common_peg_parser common_peg_parser_builder::sequence(const std::vector<common_peg_parser_id> & parsers) { |
| 948 | // Flatten nested sequences |
| 949 | std::vector<common_peg_parser_id> flattened; |
| 950 | for (const auto & p : parsers) { |
| 951 | const auto & parser = arena_.get(p); |
| 952 | if (auto seq = std::get_if<common_peg_sequence_parser>(&parser)) { |
| 953 | flattened.insert(flattened.end(), seq->children.begin(), seq->children.end()); |
| 954 | } else { |
| 955 | flattened.push_back(p); |
| 956 | } |
| 957 | } |
| 958 | return wrap(arena_.add_parser(common_peg_sequence_parser{flattened})); |
| 959 | } |
| 960 | |
| 961 | common_peg_parser common_peg_parser_builder::sequence(const std::vector<common_peg_parser> & parsers) { |
| 962 | std::vector<common_peg_parser_id> ids; |