From 924588bb6985416413db34c9ba9ddc4709b79f5c Mon Sep 17 00:00:00 2001 From: yhirose Date: Sat, 25 Jun 2022 16:05:23 -0400 Subject: [PATCH] Added `[...]i` and `[^...]i` (Fix #220) --- README.md | 2 ++ docs/native.wasm | Bin 417166 -> 423155 bytes grammar/cpp-peglib.peg | 4 +++ peglib.h | 74 ++++++++++++++++++++++++++++------------- test/test1.cc | 29 ++++++++++++---- 5 files changed, 80 insertions(+), 29 deletions(-) diff --git a/README.md b/README.md index f92d9f2..c0abb30 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,9 @@ You can also try the online version, PEG Playground at https://yhirose.github.io The PEG syntax is well described on page 2 in the [document](http://www.brynosaurus.com/pub/lang/peg.pdf) by Bryan Ford. *cpp-peglib* also supports the following additional syntax for now: * `'...'i` (Case-insensitive literal operator) + * `[...]i` (Case-insensitive character class operator) * `[^...]` (Negated character class operator) + * `[^...]i` (Case-insensitive negated character class operator) * `{2,5}` (Regex-like repetition operator) * `<` ... `>` (Token boundary operator) * `~` (Ignore operator) diff --git a/docs/native.wasm b/docs/native.wasm index 84f4e4801eb2f2f9e0c20df1fcea9ae27561902a..9cbaa0e450db947a5123883a3ffeda980cdac27f 100755 GIT binary patch delta 100325 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 delta 92709 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 M^~%XI*NXUm0NgoeQvd(} diff --git a/grammar/cpp-peglib.peg b/grammar/cpp-peglib.peg index 060e1d6..b37dd03 100644 --- a/grammar/cpp-peglib.peg +++ b/grammar/cpp-peglib.peg @@ -28,7 +28,9 @@ Primary <- / LiteralI / Dictionary / Literal + / NegatedClassI / NegatedClass + / ClassI / Class / DOT @@ -56,7 +58,9 @@ LiteralI <- # NOTE: The original Brian Ford's paper uses 'zom' instead of 'oom'. Class <- '[' !'^' <(!']' Range)+> ']' Spacing +ClassI <- '[' !'^' <(!']' Range)+> ']i' Spacing NegatedClass <- "[^" <(!']' Range)+> ']' Spacing +NegatedClassI <- "[^" <(!']' Range)+> ']i' Spacing Range <- (Char '-' ! ']' Char) / Char diff --git a/peglib.h b/peglib.h index 52eb303..c61dc17 100644 --- a/peglib.h +++ b/peglib.h @@ -1265,7 +1265,8 @@ public: class CharacterClass : public Ope, public std::enable_shared_from_this { public: - CharacterClass(const std::string &s, bool negated) : negated_(negated) { + CharacterClass(const std::string &s, bool negated, bool ignore_case) + : negated_(negated), ignore_case_(ignore_case) { auto chars = decode(s.data(), s.length()); auto i = 0u; while (i < chars.size()) { @@ -1284,8 +1285,8 @@ public: } CharacterClass(const std::vector> &ranges, - bool negated) - : ranges_(ranges), negated_(negated) { + bool negated, bool ignore_case) + : ranges_(ranges), negated_(negated), ignore_case_(ignore_case) { assert(!ranges_.empty()); } @@ -1300,7 +1301,7 @@ public: auto len = decode_codepoint(s, n, cp); for (const auto &range : ranges_) { - if (range.first <= cp && cp <= range.second) { + if (in_range(range, cp)) { if (negated_) { c.set_error_pos(s); return static_cast(-1); @@ -1320,8 +1321,20 @@ public: void accept(Visitor &v) override; +private: + bool in_range(const std::pair &range, char32_t cp) const { + if (ignore_case_) { + auto cpl = std::tolower(cp); + return std::tolower(range.first) <= cpl && + cpl <= std::tolower(range.second); + } else { + return range.first <= cp && cp <= range.second; + } + } + std::vector> ranges_; bool negated_; + bool ignore_case_; }; class Character : public Ope, public std::enable_shared_from_this { @@ -1646,21 +1659,23 @@ inline std::shared_ptr liti(std::string &&s) { } inline std::shared_ptr cls(const std::string &s) { - return std::make_shared(s, false); + return std::make_shared(s, false, false); } inline std::shared_ptr -cls(const std::vector> &ranges) { - return std::make_shared(ranges, false); +cls(const std::vector> &ranges, + bool ignore_case = false) { + return std::make_shared(ranges, false, ignore_case); } inline std::shared_ptr ncls(const std::string &s) { - return std::make_shared(s, true); + return std::make_shared(s, true, false); } inline std::shared_ptr -ncls(const std::vector> &ranges) { - return std::make_shared(ranges, true); +ncls(const std::vector> &ranges, + bool ignore_case = false) { + return std::make_shared(ranges, true, ignore_case); } inline std::shared_ptr chr(char dt) { @@ -2934,9 +2949,7 @@ inline size_t Recovery::parse_core(const char *s, size_t n, len = rule.parse(s, n, dummy_vs, c, dummy_dt); } - if (success(len)) { - c.recovered = true; - } + if (success(len)) { c.recovered = true; } // Cut if (!c.cut_stack.empty()) { @@ -3241,16 +3254,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"]), - g["CapScope"], - 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["NegatedClassI"], + g["NegatedClass"], g["ClassI"], g["Class"], g["DOT"]); g["Identifier"] <= seq(g["IdentCont"], g["Spacing"]); g["IdentCont"] <= seq(g["IdentStart"], zom(g["IdentRest"])); @@ -3281,9 +3294,16 @@ private: g["Class"] <= seq(chr('['), npd(chr('^')), tok(oom(seq(npd(chr(']')), g["Range"]))), chr(']'), g["Spacing"]); + g["ClassI"] <= seq(chr('['), npd(chr('^')), + tok(oom(seq(npd(chr(']')), g["Range"]))), lit("]i"), + g["Spacing"]); + g["NegatedClass"] <= seq(lit("[^"), tok(oom(seq(npd(chr(']')), g["Range"]))), chr(']'), g["Spacing"]); + g["NegatedClassI"] <= seq(lit("[^"), + tok(oom(seq(npd(chr(']')), g["Range"]))), + lit("]i"), g["Spacing"]); // NOTE: This is different from The original Brian Ford's paper, and this // modification allows us to specify `[+-]` as a valid char class. @@ -3634,10 +3654,18 @@ private: auto ranges = vs.transform>(); return cls(ranges); }; + g["ClassI"] = [](const SemanticValues &vs) { + auto ranges = vs.transform>(); + return cls(ranges, true); + }; g["NegatedClass"] = [](const SemanticValues &vs) { auto ranges = vs.transform>(); return ncls(ranges); }; + g["NegatedClassI"] = [](const SemanticValues &vs) { + auto ranges = vs.transform>(); + return ncls(ranges, true); + }; g["Range"] = [](const SemanticValues &vs) { switch (vs.choice()) { case 0: { diff --git a/test/test1.cc b/test/test1.cc index 748b6f6..f3f1ef9 100644 --- a/test/test1.cc +++ b/test/test1.cc @@ -431,13 +431,13 @@ TEST(GeneralTest, Octal_Hex_Unicode_value_test) { EXPECT_TRUE(ret); } -TEST(GeneralTest, Ignore_case_test) { +TEST(GeneralTest, Ignore_case_literal_test) { parser parser(R"( - ROOT <- HELLO WORLD - HELLO <- 'hello'i - WORLD <- 'world'i - %whitespace <- [ \t\r\n]* - )"); + ROOT <- HELLO WORLD + HELLO <- 'hello'i + WORLD <- 'world'i + %whitespace <- [ \t\r\n]* + )"); parser["HELLO"] = [](const SemanticValues &vs) { EXPECT_EQ("Hello", vs.token()); @@ -451,6 +451,23 @@ TEST(GeneralTest, Ignore_case_test) { EXPECT_TRUE(ret); } +TEST(GeneralTest, Ignore_case_character_class_test) { + parser parser(R"(ROOT <- [a-z]i+)"); + + EXPECT_TRUE(parser.parse("abc")); + EXPECT_TRUE(parser.parse("ABC")); + EXPECT_TRUE(parser.parse("Abc")); + EXPECT_TRUE(parser.parse("Abc")); + EXPECT_FALSE(parser.parse("123")); +} + +TEST(GeneralTest, Ignore_case_negate_character_class_test) { + parser parser(R"(ROOT <- [^a-z]i+)"); + + EXPECT_TRUE(parser.parse("123")); + EXPECT_FALSE(parser.parse("ABC")); +} + TEST(GeneralTest, mutable_lambda_test) { std::vector vec;