From bd99157bb5b21bf88a342b75feb2e330442867c0 Mon Sep 17 00:00:00 2001 From: yhirose Date: Thu, 2 Jun 2022 15:42:03 -0400 Subject: [PATCH] Fix #206 --- docs/native.wasm | Bin 401614 -> 405687 bytes peglib.h | 134 +++++++++++++++++++++++++++++++++-------------- test/test2.cc | 28 ++++++---- 3 files changed, 113 insertions(+), 49 deletions(-) diff --git a/docs/native.wasm b/docs/native.wasm index a53b8d704d39915b11ab12a8d6b19d564595b647..03951e2d06d5c7c5fd5d206a9ad887933894abba 100755 GIT binary patch delta 92378 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 W4n(8D(eSrkar;#3s|&0LBmN6|+#XT@ delta 92365 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 diff --git a/peglib.h b/peglib.h index 82a719f..f344202 100644 --- a/peglib.h +++ b/peglib.h @@ -2811,7 +2811,10 @@ inline size_t BackReference::parse_core(const char *s, size_t n, return parse_literal(s, n, vs, c, dt, lit, init_is_word, is_word, false); } } - throw std::runtime_error("Invalid back reference..."); + + c.error_info.message_pos = s; + c.error_info.message = "undefined back reference '$" + name_ + "'..."; + return static_cast(-1); } inline Definition & @@ -3176,10 +3179,16 @@ private: std::shared_ptr grammar; std::string start; const char *start_pos = nullptr; + std::vector> duplicates_of_definition; + std::vector> duplicates_of_instruction; std::map> instructions; - std::set captures; + + std::vector> undefined_back_references; + std::vector> captures_stack{{}}; + + std::set captures_in_current_definition; bool enablePackratParsing = true; Data() : grammar(std::make_shared()) {} @@ -3200,17 +3209,16 @@ private: seq(g["Suffix"], opt(seq(g["LABEL"], g["Identifier"]))); g["Suffix"] <= seq(g["Primary"], opt(g["Loop"])); g["Loop"] <= cho(g["QUESTION"], g["STAR"], g["PLUS"], g["Repetition"]); - g["Primary"] <= - cho(seq(g["Ignore"], g["IdentCont"], g["Arguments"], - npd(g["LEFTARROW"])), - seq(g["Ignore"], g["Identifier"], - npd(seq(opt(g["Parameters"]), g["LEFTARROW"]))), - seq(g["OPEN"], g["Expression"], g["CLOSE"]), - seq(g["BeginTok"], g["Expression"], g["EndTok"]), - seq(g["BeginCapScope"], g["Expression"], g["EndCapScope"]), - seq(g["BeginCap"], g["Expression"], g["EndCap"]), g["BackRef"], - g["LiteralI"], g["Dictionary"], g["Literal"], g["NegatedClass"], - g["Class"], g["DOT"]); + g["Primary"] <= cho(seq(g["Ignore"], g["IdentCont"], g["Arguments"], + npd(g["LEFTARROW"])), + seq(g["Ignore"], g["Identifier"], + npd(seq(opt(g["Parameters"]), g["LEFTARROW"]))), + seq(g["OPEN"], g["Expression"], g["CLOSE"]), + seq(g["BeginTok"], g["Expression"], g["EndTok"]), + g["CapScope"], + seq(g["BeginCap"], g["Expression"], g["EndCap"]), + g["BackRef"], g["LiteralI"], g["Dictionary"], + g["Literal"], g["NegatedClass"], g["Class"], g["DOT"]); g["Identifier"] <= seq(g["IdentCont"], g["Spacing"]); g["IdentCont"] <= seq(g["IdentStart"], zom(g["IdentRest"])); @@ -3268,6 +3276,8 @@ private: seq(g["COMMA"], g["Number"])); g["Number"] <= seq(oom(cls("0-9")), g["Spacing"]); + g["CapScope"] <= seq(g["BeginCapScope"], g["Expression"], g["EndCapScope"]); + g["LEFTARROW"] <= seq(cho(lit("<-"), lit(u8(u8"←"))), g["Spacing"]); ~g["SLASH"] <= seq(chr('/'), g["Spacing"]); ~g["PIPE"] <= seq(chr('|'), g["Spacing"]); @@ -3416,7 +3426,7 @@ private: g["Definition"].enter = [](const char * /*s*/, size_t /*n*/, std::any &dt) { auto &data = *std::any_cast(dt); - data.captures.clear(); + data.captures_in_current_definition.clear(); }; g["Expression"] = [&](const SemanticValues &vs) { @@ -3517,29 +3527,6 @@ private: } }; - g["RepetitionRange"] = [&](const SemanticValues &vs) { - switch (vs.choice()) { - case 0: { // Number COMMA Number - auto min = std::any_cast(vs[0]); - auto max = std::any_cast(vs[1]); - return std::pair(min, max); - } - case 1: // Number COMMA - return std::pair(std::any_cast(vs[0]), - std::numeric_limits::max()); - case 2: { // Number - auto n = std::any_cast(vs[0]); - return std::pair(n, n); - } - default: // COMMA Number - return std::pair(std::numeric_limits::min(), - std::any_cast(vs[0])); - } - }; - g["Number"] = [&](const SemanticValues &vs) { - return vs.token_to_number(); - }; - g["Primary"] = [&](const SemanticValues &vs, std::any &dt) { auto &data = *std::any_cast(dt); @@ -3577,7 +3564,8 @@ private: const auto &name = std::any_cast(vs[0]); auto ope = std::any_cast>(vs[1]); - data.captures.insert(name); + data.captures_stack.back().insert(name); + data.captures_in_current_definition.insert(name); return cap(ope, [name](const char *a_s, size_t a_n, Context &c) { auto &cs = c.capture_scope_stack[c.capture_scope_stack_size - 1]; @@ -3641,6 +3629,40 @@ private: return resolve_escape_sequence(vs.sv().data(), vs.sv().length()); }; + g["RepetitionRange"] = [&](const SemanticValues &vs) { + switch (vs.choice()) { + case 0: { // Number COMMA Number + auto min = std::any_cast(vs[0]); + auto max = std::any_cast(vs[1]); + return std::pair(min, max); + } + case 1: // Number COMMA + return std::pair(std::any_cast(vs[0]), + std::numeric_limits::max()); + case 2: { // Number + auto n = std::any_cast(vs[0]); + return std::pair(n, n); + } + default: // COMMA Number + return std::pair(std::numeric_limits::min(), + std::any_cast(vs[0])); + } + }; + g["Number"] = [&](const SemanticValues &vs) { + return vs.token_to_number(); + }; + + g["CapScope"].enter = [](const char * /*s*/, size_t /*n*/, std::any &dt) { + auto &data = *std::any_cast(dt); + data.captures_stack.emplace_back(); + }; + g["CapScope"].leave = [](const char * /*s*/, size_t /*n*/, + size_t /*matchlen*/, std::any & /*value*/, + std::any &dt) { + auto &data = *std::any_cast(dt); + data.captures_stack.pop_back(); + }; + g["AND"] = [](const SemanticValues &vs) { return *vs.sv().data(); }; g["NOT"] = [](const SemanticValues &vs) { return *vs.sv().data(); }; g["QUESTION"] = [](const SemanticValues &vs) { return *vs.sv().data(); }; @@ -3655,9 +3677,31 @@ private: g["BackRef"] = [&](const SemanticValues &vs, std::any &dt) { auto &data = *std::any_cast(dt); - if (data.captures.find(vs.token()) == data.captures.end()) { + + // Undefined back reference check + { + auto found = false; + auto it = data.captures_stack.rbegin(); + while (it != data.captures_stack.rend()) { + if (it->find(vs.token()) != it->end()) { + found = true; + break; + } + ++it; + } + if (!found) { + auto ptr = vs.token().data() - 1; // include '$' symbol + data.undefined_back_references.emplace_back(vs.token(), ptr); + } + } + + // NOTE: Disable packrat parsing if a back reference is not defined in + // captures in the current definition rule. + if (data.captures_in_current_definition.find(vs.token()) == + data.captures_in_current_definition.end()) { data.enablePackratParsing = false; } + return bkr(vs.token_to_string()); }; @@ -3831,6 +3875,18 @@ private: ret = false; } + // Check undefined back references + if (!data.undefined_back_references.empty()) { + for (const auto &[name, ptr] : data.undefined_back_references) { + if (log) { + auto line = line_info(s, ptr); + log(line.first, line.second, + "The back reference '" + name + "' is undefined."); + } + } + ret = false; + } + // Set root definition auto &start_rule = grammar[data.start]; diff --git a/test/test2.cc b/test/test2.cc index a471a7b..fdf8a7c 100644 --- a/test/test2.cc +++ b/test/test2.cc @@ -569,6 +569,11 @@ TEST(BackreferenceTest, Backreference_test) { } } +TEST(BackreferenceTest, Undefined_backreference_test) { + parser parser("S <- $bref"); + EXPECT_FALSE(parser); +} + TEST(BackreferenceTest, Invalid_backreference_test) { parser parser(R"( START <- _ LQUOTE (!RQUOTE .)* RQUOTE _ @@ -577,10 +582,10 @@ TEST(BackreferenceTest, Invalid_backreference_test) { ~_ <- [ \t\r\n]* )"); - EXPECT_THROW(parser.parse(R"delm( + EXPECT_FALSE(parser); + EXPECT_FALSE(parser.parse(R"delm( R"foo("(hello world)")foo" - )delm"), - std::runtime_error); + )delm")); } TEST(BackreferenceTest, Nested_capture_test) { @@ -595,6 +600,7 @@ TEST(BackreferenceTest, Nested_capture_test) { TEXT_DATA <- ![<] . )"); + EXPECT_TRUE(!!parser); EXPECT_TRUE(parser.parse("This is a test text.")); EXPECT_FALSE(parser.parse("This is a test text.")); EXPECT_FALSE(parser.parse("This is a test text.")); @@ -614,7 +620,8 @@ TEST(BackreferenceTest, Backreference_with_Prioritized_Choice_test) { CORRECT <- 'correct' )"); - EXPECT_THROW(parser.parse("branchthatiscorrect"), std::runtime_error); + EXPECT_TRUE(!!parser); + EXPECT_FALSE(parser.parse("branchthatiscorrect")); } TEST(BackreferenceTest, Backreference_with_Zero_or_More_test) { @@ -630,15 +637,15 @@ TEST(BackreferenceTest, Backreference_with_Zero_or_More_test) { CORRECT <- 'correct' )"); + EXPECT_TRUE(!!parser); EXPECT_TRUE(parser.parse("branchthatiswrongbranchthatiscorrect")); EXPECT_FALSE(parser.parse("branchthatiswrongbranchthatIscorrect")); EXPECT_FALSE( parser.parse("branchthatiswrongbranchthatIswrongbranchthatiscorrect")); EXPECT_TRUE( parser.parse("branchthatiswrongbranchthatIswrongbranchthatIscorrect")); - EXPECT_THROW(parser.parse("branchthatiscorrect"), std::runtime_error); - EXPECT_THROW(parser.parse("branchthatiswron_branchthatiscorrect"), - std::runtime_error); + EXPECT_FALSE(parser.parse("branchthatiscorrect")); + EXPECT_FALSE(parser.parse("branchthatiswron_branchthatiscorrect")); } TEST(BackreferenceTest, Backreference_with_One_or_More_test) { @@ -654,6 +661,7 @@ TEST(BackreferenceTest, Backreference_with_One_or_More_test) { CORRECT <- 'correct' )"); + EXPECT_TRUE(!!parser); EXPECT_TRUE(parser.parse("branchthatiswrongbranchthatiscorrect")); EXPECT_FALSE(parser.parse("branchthatiswrongbranchthatIscorrect")); EXPECT_FALSE( @@ -677,15 +685,15 @@ TEST(BackreferenceTest, Backreference_with_Option_test) { CORRECT <- 'correct' )"); + EXPECT_TRUE(!!parser); EXPECT_TRUE(parser.parse("branchthatiswrongbranchthatiscorrect")); EXPECT_FALSE(parser.parse("branchthatiswrongbranchthatIscorrect")); EXPECT_FALSE( parser.parse("branchthatiswrongbranchthatIswrongbranchthatiscorrect")); EXPECT_FALSE( parser.parse("branchthatiswrongbranchthatIswrongbranchthatIscorrect")); - EXPECT_THROW(parser.parse("branchthatiscorrect"), std::runtime_error); - EXPECT_THROW(parser.parse("branchthatiswron_branchthatiscorrect"), - std::runtime_error); + EXPECT_FALSE(parser.parse("branchthatiscorrect")); + EXPECT_FALSE(parser.parse("branchthatiswron_branchthatiscorrect")); } TEST(RepetitionTest, Repetition_0) {