| 1155 | common_peg_parser_builder::common_peg_parser_builder() {} |
| 1156 | |
| 1157 | common_peg_parser common_peg_parser_builder::sequence(const std::vector<common_peg_parser_id> & parsers) { |
| 1158 | // Flatten nested sequences |
| 1159 | std::vector<common_peg_parser_id> flattened; |
| 1160 | for (const auto & p : parsers) { |
| 1161 | const auto & parser = arena_.get(p); |
| 1162 | if (auto seq = std::get_if<common_peg_sequence_parser>(&parser)) { |
| 1163 | flattened.insert(flattened.end(), seq->children.begin(), seq->children.end()); |
| 1164 | } else { |
| 1165 | flattened.push_back(p); |
| 1166 | } |
| 1167 | } |
| 1168 | return wrap(arena_.add_parser(common_peg_sequence_parser{flattened})); |
| 1169 | } |
| 1170 | |
| 1171 | common_peg_parser common_peg_parser_builder::sequence(const std::vector<common_peg_parser> & parsers) { |
| 1172 | std::vector<common_peg_parser_id> ids; |