xo-reader2: simplify DExpectFormalArgSsm using DSyntaxStateMachine

This commit is contained in:
Roland Conybeare 2026-01-30 14:27:32 -05:00
commit 06f93bf86f
2 changed files with 9 additions and 95 deletions

View file

@ -5,7 +5,7 @@
#pragma once #pragma once
#include "SyntaxStateMachine.hpp" #include "DSyntaxStateMachine.hpp"
//#include <xo/arena/DArena.hpp> //#include <xo/arena/DArena.hpp>
//#include "exprstate.hpp" //#include "exprstate.hpp"
@ -44,8 +44,9 @@ namespace xo {
/** @class expect_formal_xs /** @class expect_formal_xs
* @brief parser state-machine for a typed formal parameter * @brief parser state-machine for a typed formal parameter
**/ **/
class DExpectFormalArgSsm { class DExpectFormalArgSsm : public DSyntaxStateMachine<DExpectFormalArgSsm> {
public: public:
using Super = DSyntaxStateMachine<DExpectFormalArgSsm>;
using TypeDescr = xo::reflect::TypeDescr; using TypeDescr = xo::reflect::TypeDescr;
using DArena = xo::mm::DArena; using DArena = xo::mm::DArena;
using ppindentinfo = xo::print::ppindentinfo; using ppindentinfo = xo::print::ppindentinfo;
@ -70,6 +71,8 @@ namespace xo {
/** @defgroup scm-expectformalargssm-methods general methods **/ /** @defgroup scm-expectformalargssm-methods general methods **/
///@{ ///@{
const char * ssm_classname() const noexcept { return "DExpectFormalArgSsm"; }
/** update state on incoming colon token @p tk; /** update state on incoming colon token @p tk;
* with overall parser state in @p p_psm * with overall parser state in @p p_psm
**/ **/
@ -104,32 +107,6 @@ namespace xo {
void on_parsed_typedescr(TypeDescr td, void on_parsed_typedescr(TypeDescr td,
ParserStateMachine * p_psm); ParserStateMachine * p_psm);
/** consume parsed formal (name,type) = (@p sym, @p td) from nested ssm
* with overall parser state in @p p_psm.
* (In practice not reachable)
**/
void on_parsed_formal(const DUniqueString * sym,
TypeDescr td,
ParserStateMachine * p_psm);
/** consume formal params @p arglist from completed nested ssm,
* with overall parser state in @p p_psm.
**/
void on_parsed_formal_arglist(DArray * arglist,
ParserStateMachine * p_psm);
/** update state on parsed expression emitted by nested ssm
* with overall parser state in @p p_psm
**/
void on_parsed_expression(obj<AExpression> expr,
ParserStateMachine * p_psm);
/** update state on parsed expression, along with following semicolon,
* emitted by nested ssm with overall parser state in @p p_psm
**/
void on_parsed_expression_with_semicolon(obj<AExpression> expr,
ParserStateMachine * p_psm);
///@} ///@}
/** @defgroup scm-expectformalargssm-printable-facet printable facet methods **/ /** @defgroup scm-expectformalargssm-printable-facet printable facet methods **/
///@{ ///@{
@ -139,26 +116,12 @@ namespace xo {
///@} ///@}
#ifdef NOT_YET
virtual void on_symbol(const std::string & symbol_name,
parserstatemachine * p_psm) override;
// virtual void on_comma_token(...) override;
#ifdef PROBABLY_NOT #ifdef PROBABLY_NOT
virtual void on_rightparen_token(const token_type & tk, virtual void on_rightparen_token(const token_type & tk,
exprstatestack * p_stack, exprstatestack * p_stack,
rp<Expression> * p_emit_expr) override; rp<Expression> * p_emit_expr) override;
#endif #endif
virtual void on_typedescr(TypeDescr td,
parserstatemachine * p_psm) override;
private:
static std::unique_ptr<expect_formal_xs> make();
#endif
private: private:
/** parsing state-machine state **/ /** parsing state-machine state **/
formalstatetype fstate_ = formalstatetype::formal_0; formalstatetype fstate_ = formalstatetype::formal_0;

View file

@ -138,9 +138,7 @@ namespace xo {
break; break;
} }
p_psm->illegal_input_on_token("DExpectFormalArgSsm::on_token", Super::on_token(tk, p_psm);
tk,
this->get_expect_str());
} }
void void
@ -156,9 +154,7 @@ namespace xo {
return; return;
} }
p_psm->illegal_input_on_token("DExpectFormalArgSsm::on_colon_token", Super::on_token(tk, p_psm);
tk,
this->get_expect_str());
} }
void void
@ -175,9 +171,7 @@ namespace xo {
return; return;
} }
p_psm->illegal_input_on_symbol("DExpectFormalArgSsm::on_parsed_symbol", Super::on_parsed_symbol(sym, p_psm);
sym,
this->get_expect_str());
} }
void void
@ -193,50 +187,7 @@ namespace xo {
return; return;
} }
p_psm->illegal_input_on_typedescr("DExpectFormalArgSsm::on_parsed_typedescr", Super::on_parsed_typedescr(td, p_psm);
td,
this->get_expect_str());
}
void
DExpectFormalArgSsm::on_parsed_formal(const DUniqueString * param_name,
TypeDescr param_type,
ParserStateMachine * p_psm)
{
// NOTE: (param_name,param_type) *produced* by this SSM,
// but never *consumed*
p_psm->illegal_parsed_formal("DExpectFormalArgSsm::on_parsed_formal",
param_name,
param_type,
this->get_expect_str());
}
void
DExpectFormalArgSsm::on_parsed_formal_arglist(DArray * arglist,
ParserStateMachine * p_psm)
{
p_psm->illegal_parsed_formal_arglist("DExpectFormalArgSsm::on_parsed_formal_arglist",
arglist,
this->get_expect_str());
}
void
DExpectFormalArgSsm::on_parsed_expression(obj<AExpression> expr,
ParserStateMachine * p_psm)
{
p_psm->illegal_parsed_expression("DExpectFormalArgSsm::on_parsed_expression",
expr,
this->get_expect_str());
}
void
DExpectFormalArgSsm::on_parsed_expression_with_semicolon(obj<AExpression> expr,
ParserStateMachine * p_psm)
{
p_psm->illegal_parsed_expression("DExpectFormalArgSsm::on_parsed_expression_with_semicolon",
expr,
this->get_expect_str());
} }
#ifdef NOT_YET #ifdef NOT_YET