xo-reader: refactor: simplify expect_expr_xs api
This commit is contained in:
parent
2b6b15480e
commit
9a42f02f0c
5 changed files with 15 additions and 9 deletions
|
|
@ -17,7 +17,7 @@ namespace xo {
|
|||
public:
|
||||
expect_expr_xs();
|
||||
|
||||
static std::unique_ptr<expect_expr_xs> expect_rhs_expression();
|
||||
static void start(exprstatestack * p_stack);
|
||||
|
||||
virtual void on_lambda_token(const token_type & tk,
|
||||
exprstatestack * p_stack,
|
||||
|
|
@ -40,6 +40,7 @@ namespace xo {
|
|||
rp<Expression> * p_emit_expr) override;
|
||||
|
||||
private:
|
||||
static std::unique_ptr<expect_expr_xs> make();
|
||||
};
|
||||
|
||||
} /*namespace scm*/
|
||||
|
|
|
|||
|
|
@ -174,7 +174,7 @@ namespace xo {
|
|||
{
|
||||
this->defxs_type_ = defexprstatetype::def_5;
|
||||
|
||||
p_stack->push_exprstate(expect_expr_xs::expect_rhs_expression());
|
||||
expect_expr_xs::start(p_stack);
|
||||
} else {
|
||||
this->illegal_input_error(self_name, tk);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,11 +16,16 @@ namespace xo {
|
|||
namespace scm {
|
||||
|
||||
std::unique_ptr<expect_expr_xs>
|
||||
expect_expr_xs::expect_rhs_expression() {
|
||||
expect_expr_xs::make() {
|
||||
return std::make_unique<expect_expr_xs>(expect_expr_xs());
|
||||
|
||||
}
|
||||
|
||||
void
|
||||
expect_expr_xs::start(exprstatestack * p_stack) {
|
||||
p_stack->push_exprstate(expect_expr_xs::make());
|
||||
}
|
||||
|
||||
expect_expr_xs::expect_expr_xs()
|
||||
: exprstate(exprstatetype::expect_rhs_expression)
|
||||
{}
|
||||
|
|
@ -53,7 +58,7 @@ namespace xo {
|
|||
|
||||
/* 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());
|
||||
expect_expr_xs::start(p_stack);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@ namespace xo {
|
|||
if (lmxs_type_ == lambdastatetype::lm_1) {
|
||||
this->lmxs_type_ = lambdastatetype::lm_2;
|
||||
this->argl_ = argl;
|
||||
p_stack->push_exprstate(expect_expr_xs::expect_rhs_expression());
|
||||
expect_expr_xs::start(p_stack);
|
||||
} else {
|
||||
exprstate::on_formal_arglist(argl, p_stack, p_emit_expr);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -312,7 +312,7 @@ namespace xo {
|
|||
this->op_type_ = tk2op(tk.tk_type());
|
||||
|
||||
/* infix operator must be followed by non-empty expression */
|
||||
p_stack->push_exprstate(expect_expr_xs::expect_rhs_expression());
|
||||
expect_expr_xs::start(p_stack);
|
||||
} else if (rhs_) {
|
||||
/* already have complete expression stashed.
|
||||
* behavior depends on operator precedence for tk with stored operator
|
||||
|
|
@ -341,7 +341,7 @@ namespace xo {
|
|||
p_stack->push_exprstate(progress_xs::make(expr, op2));
|
||||
|
||||
/* infix operator must be followed by non-empty expression */
|
||||
p_stack->push_exprstate(expect_expr_xs::expect_rhs_expression());
|
||||
expect_expr_xs::start(p_stack);
|
||||
} else {
|
||||
/* e.g.
|
||||
* 6.2 + 4.9 * ...
|
||||
|
|
@ -360,9 +360,9 @@ namespace xo {
|
|||
|
||||
/* 1. replace with nested incomplete infix exprs */
|
||||
p_stack->push_exprstate(progress_xs::make(lhs_, op_type_));
|
||||
p_stack->push_exprstate(expect_expr_xs::expect_rhs_expression());
|
||||
expect_expr_xs::start(p_stack);
|
||||
p_stack->push_exprstate(progress_xs::make(rhs_, op2));
|
||||
p_stack->push_exprstate(expect_expr_xs::expect_rhs_expression());
|
||||
expect_expr_xs::start(p_stack);
|
||||
}
|
||||
|
||||
} else {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue