From 0b0c424b8422892210ec0b9d87fb2557beb586b0 Mon Sep 17 00:00:00 2001 From: Roland Conybeare Date: Mon, 19 Aug 2024 16:48:58 -0400 Subject: [PATCH] xo-reader: simplify expect_expr_xs,expect_lparen_xs using qsm --- include/xo/reader/expect_expr_xs.hpp | 2 +- include/xo/reader/paren_xs.hpp | 2 +- src/reader/define_xs.cpp | 2 +- src/reader/expect_expr_xs.cpp | 8 +++----- src/reader/lambda_xs.cpp | 4 +--- src/reader/paren_xs.cpp | 6 +++--- src/reader/progress_xs.cpp | 8 ++++---- 7 files changed, 14 insertions(+), 18 deletions(-) diff --git a/include/xo/reader/expect_expr_xs.hpp b/include/xo/reader/expect_expr_xs.hpp index 90477c72..650a3195 100644 --- a/include/xo/reader/expect_expr_xs.hpp +++ b/include/xo/reader/expect_expr_xs.hpp @@ -17,7 +17,7 @@ namespace xo { public: expect_expr_xs(); - static void start(exprstatestack * p_stack); + static void start(parserstatemachine * p_psm); virtual void on_lambda_token(const token_type & tk, parserstatemachine * p_psm) override; diff --git a/include/xo/reader/paren_xs.hpp b/include/xo/reader/paren_xs.hpp index 0fd6bf86..429a2a6e 100644 --- a/include/xo/reader/paren_xs.hpp +++ b/include/xo/reader/paren_xs.hpp @@ -29,7 +29,7 @@ namespace xo { static const paren_xs * from(const exprstate * x) { return dynamic_cast(x); } - static void start(exprstatestack * p_stack); + static void start(parserstatemachine * p_psm); bool admits_f64() const; bool admits_rightparen() const; diff --git a/src/reader/define_xs.cpp b/src/reader/define_xs.cpp index 460d98d2..4a21a0d7 100644 --- a/src/reader/define_xs.cpp +++ b/src/reader/define_xs.cpp @@ -172,7 +172,7 @@ namespace xo { { this->defxs_type_ = defexprstatetype::def_5; - expect_expr_xs::start(p_psm->p_stack_); + expect_expr_xs::start(p_psm); } else { this->illegal_input_error(self_name, tk); } diff --git a/src/reader/expect_expr_xs.cpp b/src/reader/expect_expr_xs.cpp index 2ec95272..cd4f4cf5 100644 --- a/src/reader/expect_expr_xs.cpp +++ b/src/reader/expect_expr_xs.cpp @@ -24,8 +24,8 @@ namespace xo { } void - expect_expr_xs::start(exprstatestack * p_stack) { - p_stack->push_exprstate(expect_expr_xs::make()); + expect_expr_xs::start(parserstatemachine * p_psm) { + p_psm->push_exprstate(expect_expr_xs::make()); } expect_expr_xs::expect_expr_xs() @@ -54,10 +54,8 @@ namespace xo { //constexpr const char * self_name = "exprstate::on_leftparen"; - auto p_stack = p_psm->p_stack_; - /* push lparen_0 to remember to look for subsequent rightparen. */ - paren_xs::start(p_stack); + paren_xs::start(p_psm); } void diff --git a/src/reader/lambda_xs.cpp b/src/reader/lambda_xs.cpp index 8fd2f46f..a134a23d 100644 --- a/src/reader/lambda_xs.cpp +++ b/src/reader/lambda_xs.cpp @@ -42,12 +42,10 @@ namespace xo { lambda_xs::on_formal_arglist(const std::vector> & argl, parserstatemachine * p_psm) { - auto p_stack = p_psm->p_stack_; - if (lmxs_type_ == lambdastatetype::lm_1) { this->lmxs_type_ = lambdastatetype::lm_2; this->argl_ = argl; - expect_expr_xs::start(p_stack); + expect_expr_xs::start(p_psm); } else { exprstate::on_formal_arglist(argl, p_psm); } diff --git a/src/reader/paren_xs.cpp b/src/reader/paren_xs.cpp index d1d9535c..f48d9d49 100644 --- a/src/reader/paren_xs.cpp +++ b/src/reader/paren_xs.cpp @@ -18,10 +18,10 @@ namespace xo { } void - paren_xs::start(exprstatestack * p_stack) + paren_xs::start(parserstatemachine * p_psm) { - p_stack->push_exprstate(paren_xs::make()); - expect_expr_xs::start(p_stack); + p_psm->push_exprstate(paren_xs::make()); + expect_expr_xs::start(p_psm); } bool diff --git a/src/reader/progress_xs.cpp b/src/reader/progress_xs.cpp index 6f62f853..3ad4144f 100644 --- a/src/reader/progress_xs.cpp +++ b/src/reader/progress_xs.cpp @@ -319,7 +319,7 @@ namespace xo { this->op_type_ = tk2op(tk.tk_type()); /* infix operator must be followed by non-empty expression */ - expect_expr_xs::start(p_stack); + expect_expr_xs::start(p_psm); } else if (rhs_) { /* already have complete expression stashed. * behavior depends on operator precedence for tk with stored operator @@ -348,7 +348,7 @@ namespace xo { progress_xs::start(expr, op2, p_stack); /* infix operator must be followed by non-empty expression */ - expect_expr_xs::start(p_stack); + expect_expr_xs::start(p_psm); } else { /* e.g. * 6.2 + 4.9 * ... @@ -367,9 +367,9 @@ namespace xo { /* 1. replace with nested incomplete infix exprs */ progress_xs::start(lhs_, op_type_, p_stack); - expect_expr_xs::start(p_stack); + expect_expr_xs::start(p_psm); progress_xs::start(rhs_, op2, p_stack); - expect_expr_xs::start(p_stack); + expect_expr_xs::start(p_psm); } } else {