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