From 66e5412b14a0de9fc447a71f46c0cd31db92d93e Mon Sep 17 00:00:00 2001 From: yhirose Date: Sat, 3 Sep 2022 08:12:12 -0400 Subject: [PATCH] Added `set_logger` --- README.md | 16 ++++++++-- docs/native.cpp | 9 +++--- docs/native.wasm | Bin 422966 -> 423678 bytes lint/peglint.cc | 10 +++--- peglib.h | 30 +++++++++++------- test/test1.cc | 9 +++--- test/test2.cc | 81 +++++++++++++++++++---------------------------- 7 files changed, 77 insertions(+), 78 deletions(-) diff --git a/README.md b/README.md index b779b73..3c24156 100644 --- a/README.md +++ b/README.md @@ -115,9 +115,9 @@ auto grammar = R"( parser parser; -parser.log = [](size_t line, size_t col, const string& msg, const string &rule) { +parser.set_logger([](size_t line, size_t col, const string& msg, const string &rule) { cerr << line << ":" << col << ": " << msg << "\n"; -}; +}); auto ok = parser.load_grammar(grammar); assert(ok); @@ -260,6 +260,18 @@ parser["RULE"].leave = [](const char* s, size_t n, size_t matchlen, any& value, }; ``` +You can receive error information via a logger: + +```cpp +parser.set_logger([](size_t line, size_t col, const string& msg) { + ... +}); + +parser.set_logger([](size_t line, size_t col, const string& msg, const string &rule) { + ... +}); +``` + Ignoring Whitespaces -------------------- diff --git a/docs/native.cpp b/docs/native.cpp index b36fbd1..4777274 100644 --- a/docs/native.cpp +++ b/docs/native.cpp @@ -18,11 +18,10 @@ std::string escape_json(const std::string &s) { return o.str(); } -std::function +std::function makeJSONFormatter(std::string &json, bool &init) { init = true; - return [&](size_t ln, size_t col, const std::string &msg, - const std::string &) mutable { + return [&](size_t ln, size_t col, const std::string &msg) mutable { if (!init) { json += ","; } json += "{"; json += R"("ln":)" + std::to_string(ln) + ","; @@ -37,7 +36,7 @@ makeJSONFormatter(std::string &json, bool &init) { bool parse_grammar(const std::string &text, peg::parser &peg, std::string &json) { bool init; - peg.log = makeJSONFormatter(json, init); + peg.set_logger(makeJSONFormatter(json, init)); json += "["; auto ret = peg.load_grammar(text.data(), text.size()); json += "]"; @@ -48,7 +47,7 @@ bool parse_code(const std::string &text, peg::parser &peg, std::string &json, std::shared_ptr &ast) { peg.enable_ast(); bool init; - peg.log = makeJSONFormatter(json, init); + peg.set_logger(makeJSONFormatter(json, init)); json += "["; auto ret = peg.parse_n(text.data(), text.size(), ast); json += "]"; diff --git a/docs/native.wasm b/docs/native.wasm index 026a48a52de3ae8a6d5f680227ceb6d56cecb1be..c11f203879a09b40dda618d2e3b26055d2a836f3 100755 GIT binary patch delta 60449 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 LtM`xc%?$h>{DM#n delta 59891 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 SemanticValues::line_info() const { return c_->line_info(sv_.data()); } -inline void ErrorInfo::output_log(const Log &log, const char *s, - size_t n) { +inline void ErrorInfo::output_log(const Log &log, const char *s, size_t n) { if (message_pos) { if (message_pos > last_output_pos) { last_output_pos = message_pos; @@ -4443,8 +4442,8 @@ public: operator bool() { return grammar_ != nullptr; } bool load_grammar(const char *s, size_t n, const Rules &rules) { - grammar_ = - ParserGenerator::parse(s, n, rules, start_, enablePackratParsing_, log); + grammar_ = ParserGenerator::parse(s, n, rules, start_, + enablePackratParsing_, log_); return grammar_ != nullptr; } @@ -4463,7 +4462,7 @@ public: bool parse_n(const char *s, size_t n, const char *path = nullptr) const { if (grammar_ != nullptr) { const auto &rule = (*grammar_)[start_]; - auto result = rule.parse(s, n, path, log); + auto result = rule.parse(s, n, path, log_); return post_process(s, n, result); } return false; @@ -4473,7 +4472,7 @@ public: const char *path = nullptr) const { if (grammar_ != nullptr) { const auto &rule = (*grammar_)[start_]; - auto result = rule.parse(s, n, dt, path, log); + auto result = rule.parse(s, n, dt, path, log_); return post_process(s, n, result); } return false; @@ -4484,7 +4483,7 @@ public: const char *path = nullptr) const { if (grammar_ != nullptr) { const auto &rule = (*grammar_)[start_]; - auto result = rule.parse_and_get_value(s, n, val, path, log); + auto result = rule.parse_and_get_value(s, n, val, path, log_); return post_process(s, n, result); } return false; @@ -4496,7 +4495,7 @@ public: if (grammar_ != nullptr) { const auto &rule = (*grammar_)[start_]; return post_process(s, n, - rule.parse_and_get_value(s, n, dt, val, path, log)); + rule.parse_and_get_value(s, n, dt, val, path, log_)); } return false; } @@ -4612,12 +4611,18 @@ public: return AstOptimizer(opt_mode, get_no_ast_opt_rules()).optimize(ast); } - Log log; + void set_logger(Log log) { log_ = log; } + + void set_logger( + std::function + log) { + log_ = [&](size_t line, size_t col, const std::string &msg, + const std::string & /*rule*/) { log(line, col, msg); }; + } private: - bool post_process(const char *s, size_t n, - Definition::Result &r) const { - if (log && !r.ret) { r.error_info.output_log(log, s, n); } + bool post_process(const char *s, size_t n, Definition::Result &r) const { + if (log_ && !r.ret) { r.error_info.output_log(log_, s, n); } return r.ret && !r.recovered; } @@ -4632,6 +4637,7 @@ private: std::shared_ptr grammar_; std::string start_; bool enablePackratParsing_ = false; + Log log_; }; /*----------------------------------------------------------------------------- diff --git a/test/test1.cc b/test/test1.cc index a3e4303..3139dda 100644 --- a/test/test1.cc +++ b/test/test1.cc @@ -247,12 +247,11 @@ TEST(GeneralTest, enter_leave_handlers_test) { EXPECT_TRUE(parser.parse("hello=WORLD", dt)); EXPECT_TRUE(parser.parse("HELLO=WORLD", dt)); - parser.log = [&](size_t ln, size_t col, const std::string &msg, - const std::string & /*rule*/) { + parser.set_logger([&](size_t ln, size_t col, const std::string &msg) { EXPECT_EQ(1, ln); EXPECT_EQ(7, col); EXPECT_EQ(message, msg); - }; + }); parser.parse("hello=world", dt); } @@ -1091,13 +1090,13 @@ TEST(GeneralTest, HeuristicErrorTokenTest) { untyped_enum <- '' { message "invalid/missing enum type, expected one of 'sequence' or 'bitmask', got '%t'"} )"); - parser.log = [&](size_t ln, size_t col, const std::string &msg, const std::string & /*rule*/) { + parser.set_logger([&](size_t ln, size_t col, const std::string &msg) { EXPECT_EQ(1, ln); EXPECT_EQ(6, col); EXPECT_EQ("invalid/missing enum type, expected one of 'sequence' or " "'bitmask', got 'sequencer'", msg); - }; + }); auto ret = parser.parse("enum sequencer"); EXPECT_FALSE(ret); diff --git a/test/test2.cc b/test/test2.cc index c0fc84e..57bd7cd 100644 --- a/test/test2.cc +++ b/test/test2.cc @@ -853,12 +853,11 @@ TEST(PredicateTest, Semantic_predicate_test) { EXPECT_TRUE(parser.parse("100", val)); EXPECT_EQ(100, val); - parser.log = [](size_t line, size_t col, const std::string &msg, - const std::string & /*rule*/) { + parser.set_logger([](size_t line, size_t col, const std::string &msg) { EXPECT_EQ(1, line); EXPECT_EQ(1, col); EXPECT_EQ("value error!!", msg); - }; + }); EXPECT_FALSE(parser.parse("200", val)); } @@ -879,12 +878,11 @@ is_symbol <- Name { check_symbol var_table } ref aaa ref bbb )"; - parser.log = [](size_t line, size_t col, const std::string &msg, - const std::string & /*rule*/) { + parser.set_logger([](size_t line, size_t col, const std::string &msg) { EXPECT_EQ(3, line); EXPECT_EQ(5, col); EXPECT_EQ("'bbb' doesn't exist.", msg); - }; + }); EXPECT_FALSE(parser.parse(source)); } @@ -893,12 +891,11 @@ ref bbb ref aaa decl aaa )"; - parser.log = [](size_t line, size_t col, const std::string &msg, - const std::string & /*rule*/) { + parser.set_logger([](size_t line, size_t col, const std::string &msg) { EXPECT_EQ(3, line); EXPECT_EQ(6, col); EXPECT_EQ("'aaa' already exists.", msg); - }; + }); EXPECT_FALSE(parser.parse(source)); } } @@ -966,12 +963,11 @@ typedef __off64_t __loff_t; typedef long __off64_t; typedef __off64_T __loff_t; )"; - parser.log = [](size_t line, size_t col, const std::string &msg, - const std::string & /*rule*/) { + parser.set_logger([](size_t line, size_t col, const std::string &msg) { EXPECT_EQ(3, line); EXPECT_EQ(9, col); EXPECT_EQ("'__off64_T' doesn't exist.", msg); - }; + }); EXPECT_FALSE(parser.parse(source)); } @@ -981,12 +977,11 @@ typedef long __off64_t; typedef __off64_t __loff_t; typedef __off64_t __loff_t; )"; - parser.log = [](size_t line, size_t col, const std::string &msg, - const std::string & /*rule*/) { + parser.set_logger([](size_t line, size_t col, const std::string &msg) { EXPECT_EQ(4, line); EXPECT_EQ(19, col); EXPECT_EQ("'__loff_t' already exists.", msg); - }; + }); EXPECT_FALSE(parser.parse(source)); } } @@ -1034,12 +1029,11 @@ is_symbol <- < Name > ref aaa ref bbb )"; - parser.log = [](size_t line, size_t col, const std::string &msg, - const std::string & /*rule*/) { + parser.set_logger([](size_t line, size_t col, const std::string &msg) { EXPECT_EQ(3, line); EXPECT_EQ(5, col); EXPECT_EQ("'bbb' doesn't exist.", msg); - }; + }); std::shared_ptr ast; dic.clear(); EXPECT_FALSE(parser.parse(source, ast)); @@ -1050,13 +1044,12 @@ ref bbb ref aaa decl aaa )"; - parser.log = [](size_t line, size_t col, const std::string &msg, - const std::string & /*rule*/) { + parser.set_logger([](size_t line, size_t col, const std::string &msg) { std::cerr << line << ":" << col << ": " << msg << "\n"; EXPECT_EQ(3, line); EXPECT_EQ(6, col); EXPECT_EQ("'aaa' already exists.", msg); - }; + }); std::shared_ptr ast; dic.clear(); EXPECT_FALSE(parser.parse(source, ast)); @@ -1452,12 +1445,11 @@ TEST(ErrorTest, Default_error_handling_1) { }; size_t i = 0; - pg.log = [&](size_t ln, size_t col, const std::string &msg, - const std::string & /*rule*/) { + pg.set_logger([&](size_t ln, size_t col, const std::string &msg) { std::stringstream ss; ss << ln << ":" << col << ": " << msg; EXPECT_EQ(errors[i++], ss.str()); - }; + }); EXPECT_FALSE(pg.parse(" @ aaa typo ")); EXPECT_EQ(i, errors.size()); @@ -1479,12 +1471,11 @@ TEST(ErrorTest, Default_error_handling_2) { }; size_t i = 0; - pg.log = [&](size_t ln, size_t col, const std::string &msg, - const std::string & /*rule*/) { + pg.set_logger([&](size_t ln, size_t col, const std::string &msg) { std::stringstream ss; ss << ln << ":" << col << ": " << msg; EXPECT_EQ(errors[i++], ss.str()); - }; + }); EXPECT_FALSE(pg.parse(" @ aaa typo ")); EXPECT_EQ(i, errors.size()); @@ -1524,12 +1515,11 @@ TEST(ErrorTest, Default_error_handling_fiblang) { }; size_t i = 0; - pg.log = [&](size_t ln, size_t col, const std::string &msg, - const std::string & /*rule*/) { + pg.set_logger([&](size_t ln, size_t col, const std::string &msg) { std::stringstream ss; ss << ln << ":" << col << ": " << msg; EXPECT_EQ(errors[i++], ss.str()); - }; + }); EXPECT_FALSE(pg.parse(R"(def fib(x) x < 2 ? 1 : fib(x - 2) + fib(x - 1) @@ -1582,12 +1572,11 @@ entry <- (!(__ / HEADER) .)+ { error_message "invalid entry." } }; size_t i = 0; - pg.log = [&](size_t ln, size_t col, const std::string &msg, - const std::string & /*rule*/) { + pg.set_logger([&](size_t ln, size_t col, const std::string &msg) { std::stringstream ss; ss << ln << ":" << col << ": " << msg; EXPECT_EQ(errors[i++], ss.str()); - }; + }); pg.enable_ast(); @@ -1647,12 +1636,11 @@ TEST(ErrorTest, Error_recovery_2) { }; size_t i = 0; - pg.log = [&](size_t ln, size_t col, const std::string &msg, - const std::string & /*rule*/) { + pg.set_logger([&](size_t ln, size_t col, const std::string &msg) { std::stringstream ss; ss << ln << ":" << col << ": " << msg; EXPECT_EQ(errors[i++], ss.str()); - }; + }); pg.enable_ast(); @@ -1735,12 +1723,11 @@ skip_puncs <- [|=]* _ }; size_t i = 0; - pg.log = [&](size_t ln, size_t col, const std::string &msg, - const std::string & /*rule*/) { + pg.set_logger([&](size_t ln, size_t col, const std::string &msg) { std::stringstream ss; ss << ln << ":" << col << ": " << msg; EXPECT_EQ(errors[i++], ss.str()); - }; + }); pg.enable_ast(); @@ -1849,12 +1836,11 @@ SkipToRCUR ← (!RCUR (LCUR SkipToRCUR / .))* RCUR }; size_t i = 0; - pg.log = [&](size_t ln, size_t col, const std::string &msg, - const std::string & /*rule*/) { + pg.set_logger([&](size_t ln, size_t col, const std::string &msg) { std::stringstream ss; ss << ln << ":" << col << ": " << msg; EXPECT_EQ(errors[i++], ss.str()); - }; + }); pg.enable_ast(); @@ -1899,12 +1885,11 @@ STR <- < [a-z0-9]+ > }; size_t i = 0; - pg.log = [&](size_t ln, size_t col, const std::string &msg, - const std::string & /*rule*/) { + pg.set_logger([&](size_t ln, size_t col, const std::string &msg) { std::stringstream ss; ss << ln << ":" << col << ": " << msg; EXPECT_EQ(errors[i++], ss.str()); - }; + }); EXPECT_FALSE(pg.parse(R"(1 = ah 2 = b @@ -2019,12 +2004,12 @@ expr <- 'hello' }; size_t i = 0; - pg.log = [&](size_t ln, size_t col, const std::string &msg, - const std::string & /*rule*/) { + pg.set_logger([&](size_t ln, size_t col, const std::string &msg, const std::string &rule) { std::stringstream ss; ss << ln << ":" << col << ": " << msg; EXPECT_EQ(errors[i++], ss.str()); + EXPECT_EQ("unterminated_comment", rule); EXPECT_EQ(4, locations.size()); EXPECT_EQ(1, locations[0].first); EXPECT_EQ(1, locations[0].second); @@ -2034,7 +2019,7 @@ expr <- 'hello' EXPECT_EQ(3, locations[2].second); EXPECT_EQ(4, locations[3].first); EXPECT_EQ(4, locations[3].second); - }; + }); EXPECT_FALSE(pg.parse(R"(/* line 1:1 is the first comment open /* line 2:2 is the second