xo-reader: simplify paren handling logic

This commit is contained in:
Roland Conybeare 2024-08-09 20:40:37 -04:00
commit 538c9d90e5
8 changed files with 22 additions and 34 deletions

View file

@ -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<Expression> * /*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<Expression> * /*p_emit_expr*/) override;
#endif
virtual void on_rightparen_token(const token_type & tk,
exprstatestack * p_stack,
rp<Expression> * /*p_emit_expr*/) override;

View file

@ -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;

View file

@ -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<Expression> expr,

View file

@ -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<Expression> expr,

View file

@ -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,

View file

@ -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<Expression> * /*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

View file

@ -14,11 +14,6 @@ namespace xo {
return std::make_unique<paren_xs>(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 {

View file

@ -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 */