xo-reader: streamline: + parserstatemachine::pop_exprstate() + use

This commit is contained in:
Roland Conybeare 2024-08-19 13:54:58 -04:00
commit 4232da4ef2
12 changed files with 36 additions and 14 deletions

View file

@ -25,6 +25,8 @@ namespace xo {
rp<Expression> * p_emit_expr)
: p_stack_{p_stack}, p_emit_expr_{p_emit_expr} {}
std::unique_ptr<exprstate> pop_exprstate();
public:
exprstatestack * p_stack_;
rp<Expression> * p_emit_expr_;

View file

@ -3,6 +3,7 @@
set(SELF_LIB xo_reader)
set(SELF_SRCS
parser.cpp
parserstatemachine.cpp
reader.cpp
exprstate.cpp
exprstatestack.cpp

View file

@ -139,7 +139,7 @@ namespace xo {
if (this->defxs_type_ == defexprstatetype::def_6) {
rp<Expression> expr = this->def_expr_;
std::unique_ptr<exprstate> self = p_stack->pop_exprstate();
std::unique_ptr<exprstate> self = p_psm->pop_exprstate();
p_stack->top_exprstate().on_expr(expr, p_psm);
} else {

View file

@ -91,7 +91,7 @@ namespace xo {
#endif
#ifdef LATER
p_stack->pop_exprstate();
p_psm->pop_exprstate();
p_stack->top_exprstate().on_symbol(tk.text(),
p_stack, p_emit_expr);
#endif
@ -129,7 +129,7 @@ namespace xo {
auto p_stack = p_psm->p_stack_;
std::unique_ptr<exprstate> self = p_stack->pop_exprstate();
std::unique_ptr<exprstate> self = p_psm->pop_exprstate();
p_stack->top_exprstate().on_expr(expr, p_psm);
} /*on_expr*/

View file

@ -96,7 +96,7 @@ namespace xo {
auto p_stack = p_psm->p_stack_;
if (farglxs_type_ == formalarglstatetype::argl_1b) {
std::unique_ptr<exprstate> self = p_stack->pop_exprstate();
std::unique_ptr<exprstate> self = p_psm->pop_exprstate();
p_stack->top_exprstate().on_formal_arglist(this->argl_, p_psm);
} else {

View file

@ -85,7 +85,7 @@ namespace xo {
if (this->formalxs_type_ == formalstatetype::formal_2) {
this->result_.assign_td(td);
std::unique_ptr<exprstate> self = p_stack->pop_exprstate();
std::unique_ptr<exprstate> self = p_psm->pop_exprstate();
rp<Variable> var = Variable::make(result_.name(),
result_.td());

View file

@ -33,7 +33,7 @@ namespace xo {
/* have to do pop first, before sending symbol to
* the o.g. symbol-requester
*/
std::unique_ptr<exprstate> self = p_stack->pop_exprstate();
std::unique_ptr<exprstate> self = p_psm->pop_exprstate();
p_stack->top_exprstate().on_symbol(tk.text(), p_psm);

View file

@ -58,7 +58,7 @@ namespace xo {
xtag("typename", tk.text())));
}
std::unique_ptr<exprstate> self = p_stack->pop_exprstate();
std::unique_ptr<exprstate> self = p_psm->pop_exprstate();
p_stack->top_exprstate().on_typedescr(td, p_psm);
}
} /*namespace scm*/

View file

@ -79,7 +79,7 @@ namespace xo {
if (lmxs_type_ == lambdastatetype::lm_3) {
/* done! */
std::unique_ptr<exprstate> self = p_stack->pop_exprstate();
std::unique_ptr<exprstate> self = p_psm->pop_exprstate();
std::string name = "fixmename";

View file

@ -154,7 +154,7 @@ namespace xo {
auto p_stack = p_psm->p_stack_;
std::unique_ptr<exprstate> self = p_stack->pop_exprstate();
std::unique_ptr<exprstate> self = p_psm->pop_exprstate();
p_stack->top_exprstate().on_expr(expr, p_psm);
}

View file

@ -0,0 +1,19 @@
/* file parserstatemachine.cpp
*
* author: Roland Conybeare
*/
#include "parserstatemachine.hpp"
#include "exprstatestack.hpp"
namespace xo {
namespace scm {
std::unique_ptr<exprstate>
parserstatemachine::pop_exprstate() {
return p_stack_->pop_exprstate();
}
} /*namespace scm*/
} /*namespace xo*/
/* end parserstatemachine.cpp */

View file

@ -154,7 +154,7 @@ namespace xo {
assert(result.get());
/* this expression complete.. */
std::unique_ptr<exprstate> self = p_stack->pop_exprstate();
std::unique_ptr<exprstate> self = p_psm->pop_exprstate();
/* ..but more operators could follow, so don't commit yet */
p_stack->push_exprstate(progress_xs::make(result));
@ -203,7 +203,7 @@ namespace xo {
rp<Expression> expr = this->assemble_expr();
std::unique_ptr<exprstate> self = p_stack->pop_exprstate();
std::unique_ptr<exprstate> self = p_psm->pop_exprstate();
p_stack->top_exprstate().on_expr(expr, p_psm);
@ -274,7 +274,7 @@ namespace xo {
/* right paren confirms stack expression */
rp<Expression> expr = this->assemble_expr();
std::unique_ptr<exprstate> self = p_stack->pop_exprstate();
std::unique_ptr<exprstate> self = p_psm->pop_exprstate();
if (p_stack->empty()) {
throw std::runtime_error(tostr(self_name,
@ -344,7 +344,7 @@ namespace xo {
auto expr = this->assemble_expr();
/* 2. remove from stack */
std::unique_ptr<exprstate> self = p_stack->pop_exprstate();
std::unique_ptr<exprstate> self = p_psm->pop_exprstate();
/* 3. replace with new progress_xs: */
progress_xs::start(expr, op2, p_stack);
@ -365,7 +365,7 @@ namespace xo {
* 4. expect_rhs_expression
*/
std::unique_ptr<exprstate> self = p_stack->pop_exprstate();
std::unique_ptr<exprstate> self = p_psm->pop_exprstate();
/* 1. replace with nested incomplete infix exprs */
progress_xs::start(lhs_, op_type_, p_stack);