xo-reader: simplify paren handling logic
This commit is contained in:
parent
6b9503ef76
commit
538c9d90e5
8 changed files with 22 additions and 34 deletions
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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 */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue