Skip to content

Commit ea771f4

Browse files
author
Michele Renda
committed
Resolve yhirose#304: adding start node parameter
1 parent 5ef7180 commit ea771f4

File tree

1 file changed

+22
-22
lines changed

1 file changed

+22
-22
lines changed

peglib.h

+22-22
Original file line numberDiff line numberDiff line change
@@ -4569,19 +4569,19 @@ class parser {
45694569
return load_grammar(sv.data(), sv.size());
45704570
}
45714571

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 {
45734573
if (grammar_ != nullptr) {
4574-
const auto &rule = (*grammar_)[start_];
4574+
const auto &rule = (*grammar_)[!start.empty() ? std::string(start) : start_];
45754575
auto result = rule.parse(s, n, path, log_);
45764576
return post_process(s, n, result);
45774577
}
45784578
return false;
45794579
}
45804580

45814581
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 {
45834583
if (grammar_ != nullptr) {
4584-
const auto &rule = (*grammar_)[start_];
4584+
const auto &rule = (*grammar_)[!start.empty() ? std::string(start) : start_];
45854585
auto result = rule.parse(s, n, dt, path, log_);
45864586
return post_process(s, n, result);
45874587
}
@@ -4590,9 +4590,9 @@ class parser {
45904590

45914591
template <typename T>
45924592
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 {
45944594
if (grammar_ != nullptr) {
4595-
const auto &rule = (*grammar_)[start_];
4595+
const auto &rule = (*grammar_)[!start.empty() ? std::string(start) : start_];
45964596
auto result = rule.parse_and_get_value(s, n, val, path, log_);
45974597
return post_process(s, n, result);
45984598
}
@@ -4601,57 +4601,57 @@ class parser {
46014601

46024602
template <typename T>
46034603
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 {
46054605
if (grammar_ != nullptr) {
4606-
const auto &rule = (*grammar_)[start_];
4606+
const auto &rule = (*grammar_)[!start.empty() ? std::string(start) : start_];
46074607
auto result = rule.parse_and_get_value(s, n, dt, val, path, log_);
46084608
return post_process(s, n, result);
46094609
}
46104610
return false;
46114611
}
46124612

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 {
46144614
return parse_n(sv.data(), sv.size(), path);
46154615
}
46164616

46174617
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);
46204620
}
46214621

46224622
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);
46254625
}
46264626

46274627
template <typename T>
46284628
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);
46314631
}
46324632

46334633
#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);
46364636
}
46374637

46384638
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 {
46404640
return parse_n(reinterpret_cast<const char *>(sv.data()), sv.size(), dt,
46414641
path);
46424642
}
46434643

46444644
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 {
46464646
return parse_n(reinterpret_cast<const char *>(sv.data()), sv.size(), val,
4647-
path);
4647+
path, start);
46484648
}
46494649

46504650
template <typename T>
46514651
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 {
46534653
return parse_n(reinterpret_cast<const char *>(sv.data()), sv.size(), dt,
4654-
val, path);
4654+
val, path, start);
46554655
}
46564656
#endif
46574657

0 commit comments

Comments
 (0)