@@ -4569,19 +4569,19 @@ class parser {
4569
4569
return load_grammar (sv.data (), sv.size ());
4570
4570
}
4571
4571
4572
- bool parse_n (const char *s, size_t n, const char *path = nullptr ) const {
4572
+ bool parse_n (const char *s, size_t n, const char *path = nullptr , std::string_view start = " " ) const {
4573
4573
if (grammar_ != nullptr ) {
4574
- const auto &rule = (*grammar_)[start_];
4574
+ const auto &rule = (*grammar_)[!start. empty () ? std::string (start) : start_];
4575
4575
auto result = rule.parse (s, n, path, log_);
4576
4576
return post_process (s, n, result);
4577
4577
}
4578
4578
return false ;
4579
4579
}
4580
4580
4581
4581
bool parse_n (const char *s, size_t n, std::any &dt,
4582
- const char *path = nullptr ) const {
4582
+ const char *path = nullptr , std::string_view start = " " ) const {
4583
4583
if (grammar_ != nullptr ) {
4584
- const auto &rule = (*grammar_)[start_];
4584
+ const auto &rule = (*grammar_)[!start. empty () ? std::string (start) : start_];
4585
4585
auto result = rule.parse (s, n, dt, path, log_);
4586
4586
return post_process (s, n, result);
4587
4587
}
@@ -4590,9 +4590,9 @@ class parser {
4590
4590
4591
4591
template <typename T>
4592
4592
bool parse_n (const char *s, size_t n, T &val,
4593
- const char *path = nullptr ) const {
4593
+ const char *path = nullptr , std::string_view start = " " ) const {
4594
4594
if (grammar_ != nullptr ) {
4595
- const auto &rule = (*grammar_)[start_];
4595
+ const auto &rule = (*grammar_)[!start. empty () ? std::string (start) : start_];
4596
4596
auto result = rule.parse_and_get_value (s, n, val, path, log_);
4597
4597
return post_process (s, n, result);
4598
4598
}
@@ -4601,57 +4601,57 @@ class parser {
4601
4601
4602
4602
template <typename T>
4603
4603
bool parse_n (const char *s, size_t n, std::any &dt, T &val,
4604
- const char *path = nullptr ) const {
4604
+ const char *path = nullptr , std::string_view start = " " ) const {
4605
4605
if (grammar_ != nullptr ) {
4606
- const auto &rule = (*grammar_)[start_];
4606
+ const auto &rule = (*grammar_)[!start. empty () ? std::string (start) : start_];
4607
4607
auto result = rule.parse_and_get_value (s, n, dt, val, path, log_);
4608
4608
return post_process (s, n, result);
4609
4609
}
4610
4610
return false ;
4611
4611
}
4612
4612
4613
- bool parse (std::string_view sv, const char *path = nullptr ) const {
4613
+ bool parse (std::string_view sv, const char *path = nullptr , std::string_view start = " " ) const {
4614
4614
return parse_n (sv.data (), sv.size (), path);
4615
4615
}
4616
4616
4617
4617
bool parse (std::string_view sv, std::any &dt,
4618
- const char *path = nullptr ) const {
4619
- return parse_n (sv.data (), sv.size (), dt, path);
4618
+ const char *path = nullptr , std::string_view start = " " ) const {
4619
+ return parse_n (sv.data (), sv.size (), dt, path, start );
4620
4620
}
4621
4621
4622
4622
template <typename T>
4623
- bool parse (std::string_view sv, T &val, const char *path = nullptr ) const {
4624
- return parse_n (sv.data (), sv.size (), val, path);
4623
+ bool parse (std::string_view sv, T &val, const char *path = nullptr , std::string_view start = " " ) const {
4624
+ return parse_n (sv.data (), sv.size (), val, path, start );
4625
4625
}
4626
4626
4627
4627
template <typename T>
4628
4628
bool parse (std::string_view sv, std::any &dt, T &val,
4629
- const char *path = nullptr ) const {
4630
- return parse_n (sv.data (), sv.size (), dt, val, path);
4629
+ const char *path = nullptr , std::string_view start = " " ) const {
4630
+ return parse_n (sv.data (), sv.size (), dt, val, path, start );
4631
4631
}
4632
4632
4633
4633
#if defined(__cpp_lib_char8_t)
4634
- bool parse (std::u8string_view sv, const char *path = nullptr ) const {
4635
- return parse_n (reinterpret_cast <const char *>(sv.data ()), sv.size (), path);
4634
+ bool parse (std::u8string_view sv, const char *path = nullptr , std::string_view start = " " ) const {
4635
+ return parse_n (reinterpret_cast <const char *>(sv.data ()), sv.size (), path, start );
4636
4636
}
4637
4637
4638
4638
bool parse (std::u8string_view sv, std::any &dt,
4639
- const char *path = nullptr ) const {
4639
+ const char *path = nullptr , std::string_view start = " " ) const {
4640
4640
return parse_n (reinterpret_cast <const char *>(sv.data ()), sv.size (), dt,
4641
4641
path);
4642
4642
}
4643
4643
4644
4644
template <typename T>
4645
- bool parse (std::u8string_view sv, T &val, const char *path = nullptr ) const {
4645
+ bool parse (std::u8string_view sv, T &val, const char *path = nullptr , std::string_view start = " " ) const {
4646
4646
return parse_n (reinterpret_cast <const char *>(sv.data ()), sv.size (), val,
4647
- path);
4647
+ path, start );
4648
4648
}
4649
4649
4650
4650
template <typename T>
4651
4651
bool parse (std::u8string_view sv, std::any &dt, T &val,
4652
- const char *path = nullptr ) const {
4652
+ const char *path = nullptr , std::string_view start = " " ) const {
4653
4653
return parse_n (reinterpret_cast <const char *>(sv.data ()), sv.size (), dt,
4654
- val, path);
4654
+ val, path, start );
4655
4655
}
4656
4656
#endif
4657
4657
0 commit comments