From 84e6d3f347b23c0f109a06c74b6503d6d75312bf Mon Sep 17 00:00:00 2001 From: Roland Conybeare Date: Wed, 28 Aug 2024 09:34:30 -0400 Subject: [PATCH] xo-reader: ++ logging --- include/xo/reader/exprstatestack.hpp | 5 ++++- include/xo/reader/lambda_xs.hpp | 11 +++++++++++ src/reader/define_xs.cpp | 24 ++++++++++++++---------- src/reader/expect_expr_xs.cpp | 5 +++-- src/reader/lambda_xs.cpp | 24 ++++++++++++++++++++++++ src/reader/paren_xs.cpp | 1 + src/reader/parserstatemachine.cpp | 13 +++++++++++++ src/reader/progress_xs.cpp | 10 ++++------ 8 files changed, 74 insertions(+), 19 deletions(-) diff --git a/include/xo/reader/exprstatestack.hpp b/include/xo/reader/exprstatestack.hpp index 36fe15b4..b4e57449 100644 --- a/include/xo/reader/exprstatestack.hpp +++ b/include/xo/reader/exprstatestack.hpp @@ -57,7 +57,10 @@ namespace xo { inline std::ostream & operator<< (std::ostream & os, const exprstatestack * x) { - x->print(os); + if (x) + x->print(os); + else + os << "nullptr"; return os; } } /*namespace scm*/ diff --git a/include/xo/reader/lambda_xs.hpp b/include/xo/reader/lambda_xs.hpp index 830135a3..728bc9e3 100644 --- a/include/xo/reader/lambda_xs.hpp +++ b/include/xo/reader/lambda_xs.hpp @@ -32,6 +32,15 @@ namespace xo { n_lambdastatetype }; + extern const char * + lambdastatetype_descr(lambdastatetype x); + + inline std::ostream & + operator<< (std::ostream & os, lambdastatetype x) { + os << lambdastatetype_descr(x); + return os; + } + /** @class lambda_xs * @brief parsing state-machine for a lambda-expression * @@ -53,6 +62,8 @@ namespace xo { virtual void on_semicolon_token(const token_type & tk, parserstatemachine * p_psm) override; + virtual void print(std::ostream & os) const override; + private: static std::unique_ptr make(); diff --git a/src/reader/define_xs.cpp b/src/reader/define_xs.cpp index d251652a..19f6d83d 100644 --- a/src/reader/define_xs.cpp +++ b/src/reader/define_xs.cpp @@ -64,7 +64,7 @@ namespace xo { constexpr bool c_debug_flag = true; scope log(XO_DEBUG(c_debug_flag)); - log && log("defxs_type", defxs_type_); + log && log(xtag("defxs_type", defxs_type_)); if (this->defxs_type_ == defexprstatetype::def_5) { /* have all the ingredients to create an expression @@ -84,10 +84,11 @@ namespace xo { rp def_expr = this->def_expr_; this->defxs_type_ = defexprstatetype::def_6; - return; + } else { + exprstate::on_expr(expr, p_psm); } + } - exprstate::on_expr(expr, p_psm); void define_xs::on_expr_with_semicolon(ref::brw expr, parserstatemachine * p_psm) @@ -177,6 +178,8 @@ namespace xo { define_xs::on_semicolon_token(const token_type & tk, parserstatemachine * p_psm) { + /* def expr consumes semicolon */ + constexpr bool c_debug_flag = true; scope log(XO_DEBUG(c_debug_flag)); @@ -200,7 +203,7 @@ namespace xo { constexpr bool c_debug_flag = true; scope log(XO_DEBUG(c_debug_flag)); - constexpr const char * self_name = "exprstate::on_singleassign"; + constexpr const char * self_name = "define_xs::on_singleassign_token"; log && log("defxs_type", defxs_type_); @@ -237,7 +240,7 @@ namespace xo { constexpr bool c_debug_flag = true; scope log(XO_DEBUG(c_debug_flag)); - constexpr const char * self_name = "exprstate::on_rightparen"; + constexpr const char * self_name = "define_xs::on_rightparen"; this->illegal_input_error(self_name, tk); } @@ -249,7 +252,7 @@ namespace xo { constexpr bool c_debug_flag = true; scope log(XO_DEBUG(c_debug_flag)); - constexpr const char * self_name = "exprstate::on_f64"; + constexpr const char * self_name = "define_xs::on_f64"; this->illegal_input_error(self_name, tk); } @@ -257,13 +260,14 @@ namespace xo { void define_xs::print(std::ostream & os) const { os << ""; } } /*namespace scm*/ diff --git a/src/reader/expect_expr_xs.cpp b/src/reader/expect_expr_xs.cpp index af27d720..3d238ede 100644 --- a/src/reader/expect_expr_xs.cpp +++ b/src/reader/expect_expr_xs.cpp @@ -31,7 +31,8 @@ namespace xo { void expect_expr_xs::start(bool allow_defs, bool cxl_on_rightbrace, - parserstatemachine * p_psm) { + parserstatemachine * p_psm) + { p_psm->push_exprstate(expect_expr_xs::make(allow_defs, cxl_on_rightbrace)); } @@ -192,7 +193,7 @@ namespace xo { std::unique_ptr self = p_psm->pop_exprstate(); - p_psm->top_exprstate().on_expr(expr, p_psm); + p_psm->on_expr(expr); } /*on_expr*/ void diff --git a/src/reader/lambda_xs.cpp b/src/reader/lambda_xs.cpp index 8aed4511..ab9b73d8 100644 --- a/src/reader/lambda_xs.cpp +++ b/src/reader/lambda_xs.cpp @@ -11,6 +11,22 @@ namespace xo { using xo::ast::Lambda; namespace scm { + const char * + lambdastatetype_descr(lambdastatetype x) { + switch(x) { + case lambdastatetype::invalid: return "invalid"; + case lambdastatetype::lm_0: return "lm_0"; + case lambdastatetype::lm_1: return "lm_1"; + case lambdastatetype::lm_2: return "lm_2"; + case lambdastatetype::lm_3: return "lm_3"; + default: break; + } + + return "???lambdastatetype"; + } + + // ----- lambda_xs - ---- + std::unique_ptr lambda_xs::make() { return std::make_unique(lambda_xs()); @@ -97,6 +113,14 @@ namespace xo { exprstate::on_semicolon_token(tk, p_psm); } + + void + lambda_xs::print(std::ostream & os) const { + os << ""; + } + } /*namespace scm*/ } /*namespace xo*/ diff --git a/src/reader/paren_xs.cpp b/src/reader/paren_xs.cpp index 25af9ee2..2c4ca484 100644 --- a/src/reader/paren_xs.cpp +++ b/src/reader/paren_xs.cpp @@ -235,6 +235,7 @@ namespace xo { void paren_xs::print(std::ostream & os) const { os << "top_exprstate().on_symbol(x, this); } + void + parserstatemachine::on_semicolon_token(const token_type & tk) + { + constexpr bool c_debug_flag = true; + scope log(XO_DEBUG(c_debug_flag)); + + log && log(xtag("tk", tk), + xtag("psm", *this)); + + this->p_stack_ + ->top_exprstate().on_semicolon_token(tk, this); + } + void parserstatemachine::on_leftbrace_token(const token_type & tk) { diff --git a/src/reader/progress_xs.cpp b/src/reader/progress_xs.cpp index d716bd0c..47bf2c04 100644 --- a/src/reader/progress_xs.cpp +++ b/src/reader/progress_xs.cpp @@ -237,14 +237,11 @@ namespace xo { * b. 1.234 pushes (in case operators) [lparen_0:expect_rhs_expression:expr_progress] * (see exprstate::on_f64()) * c. semicolon completes expr_progress [lparen_0:expect_rhs_expression] - * deliver expresssion to expect_rhs_expression.on_expr() - * (see exprstate::on_expr()) + * deliver expresssion to expect_rhs_expression.on_expr_with_semicolon() + * (see exprstate::on_expr_with_semicolon()) * d. expr_rhs_expression forwards expression to [lparen_0] - * e. lparen_0 advances to [lparen_1] - * f. now deliver semicolon; [lparen_1] rejects + * e. lparen_0 would advance to [lparen_1], but rejects semicolon */ - - p_psm->top_exprstate().on_semicolon_token(tk, p_psm); } void @@ -420,6 +417,7 @@ namespace xo { void progress_xs::print(std::ostream & os) const { os << "