xo-reader: refactor: use parsestatemachine w/ on_symbol_token()
This commit is contained in:
parent
8cae38817b
commit
bda115037b
14 changed files with 30 additions and 31 deletions
|
|
@ -26,8 +26,7 @@ namespace xo {
|
|||
rp<Expression> * p_emit_expr) override;
|
||||
|
||||
virtual void on_symbol_token(const token_type & tk,
|
||||
exprstatestack * p_stack,
|
||||
rp<Expression> * p_emit_expr) override;
|
||||
parserstatemachine * p_psm) override;
|
||||
|
||||
virtual void on_f64_token(const token_type & tk,
|
||||
exprstatestack * p_stack,
|
||||
|
|
|
|||
|
|
@ -23,8 +23,7 @@ namespace xo {
|
|||
static void start(exprstatestack * p_stack);
|
||||
|
||||
virtual void on_symbol_token(const token_type & tk,
|
||||
exprstatestack * p_stack,
|
||||
rp<Expression> * p_emit_expr) override;
|
||||
parserstatemachine * p_psm) override;
|
||||
};
|
||||
} /*namespace scm*/
|
||||
} /*namespace xo*/
|
||||
|
|
|
|||
|
|
@ -19,8 +19,7 @@ namespace xo {
|
|||
static void start(exprstatestack * p_stack);
|
||||
|
||||
virtual void on_symbol_token(const token_type & tk,
|
||||
exprstatestack * p_stack,
|
||||
rp<Expression> * p_emit_expr) override;
|
||||
parserstatemachine * p_psm) override;
|
||||
|
||||
private:
|
||||
static std::unique_ptr<expect_type_xs> make();
|
||||
|
|
|
|||
|
|
@ -26,8 +26,7 @@ namespace xo {
|
|||
virtual void on_def_token(const token_type & tk,
|
||||
parserstatemachine * p_psm) override;
|
||||
virtual void on_symbol_token(const token_type & tk,
|
||||
exprstatestack * p_stack,
|
||||
rp<Expression> * p_emit_expr) override;
|
||||
parserstatemachine * p_psm) override;
|
||||
|
||||
// ----- victory methods -----
|
||||
|
||||
|
|
|
|||
|
|
@ -126,8 +126,7 @@ namespace xo {
|
|||
parserstatemachine * p_psm);
|
||||
/** handle incoming symbol token **/
|
||||
virtual void on_symbol_token(const token_type & tk,
|
||||
exprstatestack * p_stack,
|
||||
rp<Expression> * p_emit_expr);
|
||||
parserstatemachine * p_psm);
|
||||
/** handle incoming ',' token **/
|
||||
virtual void on_comma_token(const token_type & tk,
|
||||
exprstatestack * p_stack,
|
||||
|
|
|
|||
|
|
@ -47,8 +47,7 @@ namespace xo {
|
|||
virtual void on_def_token(const token_type & tk,
|
||||
parserstatemachine * p_psm) override;
|
||||
virtual void on_symbol_token(const token_type & tk,
|
||||
exprstatestack * p_stack,
|
||||
rp<Expression> * p_emit_expr) override;
|
||||
parserstatemachine * p_psm) override;
|
||||
virtual void on_colon_token(const token_type & tk,
|
||||
exprstatestack * p_stack) override;
|
||||
virtual void on_semicolon_token(const token_type & tk,
|
||||
|
|
|
|||
|
|
@ -59,8 +59,7 @@ namespace xo {
|
|||
exprstatestack * p_stack,
|
||||
rp<Expression> * p_emit_expr) override;
|
||||
virtual void on_symbol_token(const token_type & tk,
|
||||
exprstatestack * p_stack,
|
||||
rp<Expression> * p_emit_expr) override;
|
||||
parserstatemachine * p_psm) override;
|
||||
virtual void on_typedescr(TypeDescr td,
|
||||
exprstatestack * /*p_stack*/,
|
||||
rp<Expression> * /*p_emit_expr*/) override;
|
||||
|
|
|
|||
|
|
@ -65,8 +65,7 @@ namespace xo {
|
|||
|
||||
void
|
||||
expect_expr_xs::on_symbol_token(const token_type & /*tk*/,
|
||||
exprstatestack * /*p_stack*/,
|
||||
rp<Expression> * /*p_emit_expr*/)
|
||||
parserstatemachine * /*p_psm*/)
|
||||
{
|
||||
/* todo: treat symbol as variable name */
|
||||
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@
|
|||
*/
|
||||
|
||||
#include "expect_symbol_xs.hpp"
|
||||
#include "parserstatemachine.hpp"
|
||||
|
||||
namespace xo {
|
||||
namespace scm {
|
||||
|
|
@ -24,14 +25,17 @@ namespace xo {
|
|||
|
||||
void
|
||||
expect_symbol_xs::on_symbol_token(const token_type & tk,
|
||||
exprstatestack * p_stack,
|
||||
rp<Expression> * p_emit_expr)
|
||||
parserstatemachine * p_psm)
|
||||
{
|
||||
auto p_stack = p_psm->p_stack_;
|
||||
auto p_emit_expr = p_psm->p_emit_expr_;
|
||||
|
||||
/* have to do pop first, before sending symbol to
|
||||
* the o.g. symbol-requester
|
||||
*/
|
||||
std::unique_ptr<exprstate> self = p_stack->pop_exprstate();
|
||||
|
||||
|
||||
p_stack->top_exprstate().on_symbol(tk.text(),
|
||||
p_stack, p_emit_expr);
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
*/
|
||||
|
||||
#include "expect_type_xs.hpp"
|
||||
#include "exprstate.hpp"
|
||||
#include "parserstatemachine.hpp"
|
||||
#include "xo/reflect/Reflect.hpp"
|
||||
|
||||
namespace xo {
|
||||
|
|
@ -28,11 +28,13 @@ namespace xo {
|
|||
|
||||
void
|
||||
expect_type_xs::on_symbol_token(const token_type & tk,
|
||||
exprstatestack * p_stack,
|
||||
rp<Expression> * p_emit_expr)
|
||||
parserstatemachine * p_psm)
|
||||
{
|
||||
const char * c_self_name = "expect_type_xs::on_symbol_token";
|
||||
|
||||
auto p_stack = p_psm->p_stack_;
|
||||
auto p_emit_expr = p_psm->p_emit_expr_;
|
||||
|
||||
TypeDescr td = nullptr;
|
||||
|
||||
/* TODO: replace with typetable lookup */
|
||||
|
|
|
|||
|
|
@ -42,8 +42,7 @@ namespace xo {
|
|||
|
||||
void
|
||||
exprseq_xs::on_symbol_token(const token_type & tk,
|
||||
exprstatestack * /*p_stack*/,
|
||||
rp<Expression> * /*p_emit_expr*/)
|
||||
parserstatemachine * /*p_psm*/)
|
||||
{
|
||||
constexpr const char * c_self_name = "exprseq_xs::on_symbol_token";
|
||||
|
||||
|
|
|
|||
|
|
@ -67,12 +67,13 @@ namespace xo {
|
|||
|
||||
void
|
||||
exprstate::on_symbol_token(const token_type & tk,
|
||||
exprstatestack * p_stack,
|
||||
rp<Expression> * /*p_emit_expr*/)
|
||||
parserstatemachine * p_psm)
|
||||
{
|
||||
constexpr bool c_debug_flag = true;
|
||||
scope log(XO_DEBUG(c_debug_flag));
|
||||
|
||||
auto p_stack = p_psm->p_stack_;
|
||||
|
||||
log && log(xtag("exstype", p_stack->top_exprstate().exs_type()));
|
||||
|
||||
constexpr const char * c_self_name = "exprstate::on_symbol_token";
|
||||
|
|
@ -279,7 +280,7 @@ namespace xo {
|
|||
return;
|
||||
|
||||
case tokentype::tk_symbol:
|
||||
this->on_symbol_token(tk, p_stack, p_emit_expr);
|
||||
this->on_symbol_token(tk, p_psm);
|
||||
return;
|
||||
|
||||
case tokentype::tk_leftparen:
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
/* @file paren_xs.cpp */
|
||||
|
||||
#include "paren_xs.hpp"
|
||||
#include "parserstatemachine.hpp"
|
||||
#include "progress_xs.hpp"
|
||||
#include "expect_expr_xs.hpp"
|
||||
|
||||
|
|
@ -64,7 +65,7 @@ namespace xo {
|
|||
|
||||
void
|
||||
paren_xs::on_def_token(const token_type & tk,
|
||||
parserstatemachine * /*p_stack*/)
|
||||
parserstatemachine * /*p_psm*/)
|
||||
{
|
||||
constexpr const char * c_self_name = "paren_xs::on_def";
|
||||
|
||||
|
|
@ -73,12 +74,13 @@ namespace xo {
|
|||
|
||||
void
|
||||
paren_xs::on_symbol_token(const token_type & /*tk*/,
|
||||
exprstatestack * p_stack,
|
||||
rp<Expression> * /*p_emit_expr*/)
|
||||
parserstatemachine * p_psm)
|
||||
{
|
||||
constexpr bool c_debug_flag = true;
|
||||
scope log(XO_DEBUG(c_debug_flag));
|
||||
|
||||
auto p_stack = p_psm->p_stack_;
|
||||
|
||||
log && log(xtag("exstype", p_stack->top_exprstate().exs_type()));
|
||||
|
||||
//constexpr const char * self_name = "paren_xs::on_symbol";
|
||||
|
|
|
|||
|
|
@ -164,8 +164,7 @@ namespace xo {
|
|||
|
||||
void
|
||||
progress_xs::on_symbol_token(const token_type & /*tk*/,
|
||||
exprstatestack * /*p_stack*/,
|
||||
rp<Expression> * /*p_emit_expr*/)
|
||||
parserstatemachine * /*p_psm*/)
|
||||
{
|
||||
/* illegal input, e.g.
|
||||
* foo bar
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue