From 538c9d90e5f69435882c836d86e3d1cfa7d89210 Mon Sep 17 00:00:00 2001 From: Roland Conybeare Date: Fri, 9 Aug 2024 20:40:37 -0400 Subject: [PATCH] xo-reader: simplify paren handling logic --- include/xo/reader/define_xs.hpp | 6 ++++-- include/xo/reader/exprstate.hpp | 2 ++ include/xo/reader/paren_xs.hpp | 2 ++ include/xo/reader/progress_xs.hpp | 2 ++ src/reader/define_xs.cpp | 9 +++++---- src/reader/exprstate.cpp | 19 +++++-------------- src/reader/paren_xs.cpp | 7 ++----- src/reader/progress_xs.cpp | 9 --------- 8 files changed, 22 insertions(+), 34 deletions(-) diff --git a/include/xo/reader/define_xs.hpp b/include/xo/reader/define_xs.hpp index dafafed4..34670230 100644 --- a/include/xo/reader/define_xs.hpp +++ b/include/xo/reader/define_xs.hpp @@ -43,13 +43,13 @@ namespace xo { defexprstatetype defxs_type() const { return defxs_type_; } #ifdef OBSOLETE - virtual bool admits_definition() const override; + bool admits_leftparen() const; #endif + virtual bool admits_symbol() const override; virtual bool admits_colon() const override; virtual bool admits_semicolon() const override; virtual bool admits_singleassign() const override; - virtual bool admits_leftparen() const override; virtual bool admits_rightparen() const override; // virtual void on_f64(..) override @@ -69,9 +69,11 @@ namespace xo { rp * /*p_emit_expr*/) override; virtual void on_singleassign_token(const token_type & tk, exprstatestack * p_stack) override; +#ifdef OBSOLETE virtual void on_leftparen_token(const token_type & tk, exprstatestack * p_stack, rp * /*p_emit_expr*/) override; +#endif virtual void on_rightparen_token(const token_type & tk, exprstatestack * p_stack, rp * /*p_emit_expr*/) override; diff --git a/include/xo/reader/exprstate.hpp b/include/xo/reader/exprstate.hpp index 0997792e..28ba4694 100644 --- a/include/xo/reader/exprstate.hpp +++ b/include/xo/reader/exprstate.hpp @@ -87,8 +87,10 @@ namespace xo { virtual bool admits_semicolon() const; /** true iff this parsing state admits a singleassign '=' as next token **/ virtual bool admits_singleassign() const; +#ifdef OBSOLETE /** true iff this parsing state admits a leftparen '(' as next token **/ virtual bool admits_leftparen() const; +#endif /** truee iff this parsing state admits a rightparen ')' as next token **/ virtual bool admits_rightparen() const; diff --git a/include/xo/reader/paren_xs.hpp b/include/xo/reader/paren_xs.hpp index 31e3e45c..22b72f8b 100644 --- a/include/xo/reader/paren_xs.hpp +++ b/include/xo/reader/paren_xs.hpp @@ -37,7 +37,9 @@ namespace xo { virtual bool admits_colon() const override; virtual bool admits_semicolon() const override; virtual bool admits_singleassign() const override; +#ifdef OBSOLETE virtual bool admits_leftparen() const override; +#endif virtual bool admits_rightparen() const override; virtual void on_expr(ref::brw expr, diff --git a/include/xo/reader/progress_xs.hpp b/include/xo/reader/progress_xs.hpp index 9131b048..83a2ce65 100644 --- a/include/xo/reader/progress_xs.hpp +++ b/include/xo/reader/progress_xs.hpp @@ -28,7 +28,9 @@ namespace xo { virtual bool admits_colon() const override; virtual bool admits_semicolon() const override; virtual bool admits_singleassign() const override; +#ifdef OBSOLETE virtual bool admits_leftparen() const override; +#endif virtual bool admits_rightparen() const override; virtual void on_expr(ref::brw expr, diff --git a/src/reader/define_xs.cpp b/src/reader/define_xs.cpp index ad6c994f..ffa8a094 100644 --- a/src/reader/define_xs.cpp +++ b/src/reader/define_xs.cpp @@ -131,6 +131,7 @@ namespace xo { return false; } +#ifdef OBSOLETE bool define_xs::admits_leftparen() const { switch (defxs_type_) { @@ -163,6 +164,7 @@ namespace xo { return false; } +#endif bool define_xs::admits_rightparen() const { @@ -379,6 +381,7 @@ namespace xo { } } +#ifdef OBSOLETE void define_xs::on_leftparen_token(const token_type & tk, exprstatestack * /*p_stack*/, @@ -389,13 +392,11 @@ namespace xo { constexpr const char * self_name = "exprstate::on_leftparen"; - if (!this->admits_leftparen()) - { - this->illegal_input_error(self_name, tk); - } + this->illegal_input_error(self_name, tk); assert(false); /* inserting this during refactor...? */ } +#endif void define_xs::on_rightparen_token(const token_type & tk, diff --git a/src/reader/exprstate.cpp b/src/reader/exprstate.cpp index b013feb1..1fd4d08a 100644 --- a/src/reader/exprstate.cpp +++ b/src/reader/exprstate.cpp @@ -179,6 +179,7 @@ namespace xo { return false; } +#ifdef OBSOLETE bool exprstate::admits_leftparen() const { switch (exs_type_) { @@ -221,6 +222,7 @@ namespace xo { return false; } +#endif bool exprstate::admits_rightparen() const { @@ -439,8 +441,8 @@ namespace xo { } void - exprstate::on_leftparen_token(const token_type & /*tk*/, - exprstatestack * p_stack, + exprstate::on_leftparen_token(const token_type & tk, + exprstatestack * /*p_stack*/, rp * /*p_emit_expr*/) { constexpr bool c_debug_flag = true; @@ -448,18 +450,7 @@ namespace xo { constexpr const char * self_name = "exprstate::on_leftparen"; - if (!this->admits_leftparen()) - { - throw std::runtime_error(tostr(self_name, - ": unexpected leftparen '(' for parsing state", - xtag("state", *this))); - } - - if (this->exs_type_ == exprstatetype::expect_rhs_expression) { - /* push lparen_0 to remember to look for subsequent rightparen. */ - p_stack->push_exprstate(paren_xs::lparen_0()); - p_stack->push_exprstate(expect_expr_xs::expect_rhs_expression()); - } + this->illegal_input_error(self_name, tk); } void diff --git a/src/reader/paren_xs.cpp b/src/reader/paren_xs.cpp index 0911928d..2fcf427b 100644 --- a/src/reader/paren_xs.cpp +++ b/src/reader/paren_xs.cpp @@ -14,11 +14,6 @@ namespace xo { return std::make_unique(paren_xs()); } -#ifdef OBSOLETE - bool - paren_xs::admits_definition() const { return false; } -#endif - bool paren_xs::admits_symbol() const { return true; } @@ -31,8 +26,10 @@ namespace xo { bool paren_xs::admits_singleassign() const { return false; } +#ifdef OBSOLETE bool paren_xs::admits_leftparen() const { /*unreachable*/ return false; } +#endif bool paren_xs::admits_rightparen() const { diff --git a/src/reader/progress_xs.cpp b/src/reader/progress_xs.cpp index baf4df55..f5ba36ee 100644 --- a/src/reader/progress_xs.cpp +++ b/src/reader/progress_xs.cpp @@ -14,11 +14,6 @@ namespace xo { gen_expr_{std::move(valex)} {} -#ifdef OBSOLETE - bool - progress_xs::admits_definition() const { return false; } -#endif - bool progress_xs::admits_symbol() const { return false; } @@ -31,10 +26,6 @@ namespace xo { bool progress_xs::admits_singleassign() const { return false; } - /* todo: will parse as function call */ - bool - progress_xs::admits_leftparen() const { return false; } - bool progress_xs::admits_rightparen() const { /* satisfies expression form */