xo-reader2: + PSM,SSM on_parsed_formal_arglist()

This commit is contained in:
Roland Conybeare 2026-01-29 15:17:57 -05:00
commit 554c01ffad
48 changed files with 283 additions and 3 deletions

View file

@ -202,6 +202,12 @@ namespace xo {
TypeDescr param_type,
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 for this syntax after parsing an expression @p expr,
* overall parser state in @p p_psm
**/

View file

@ -142,6 +142,12 @@ namespace xo {
TypeDescr param_type,
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 for this syntax after parsing an expression @p expr,
* overall parser state in @p p_psm
**/

View file

@ -112,6 +112,12 @@ namespace xo {
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
**/

View file

@ -114,6 +114,12 @@ namespace xo {
TypeDescr param_type,
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
**/
@ -144,7 +150,7 @@ namespace xo {
private:
/** parsing state-machine state **/
formalarglstatetype fastate_ = formalarglstatetype::argl_0;
/** populate with (parmaeter-name, parameter-type) list
/** populate with (parameter-name, parameter-type) list
* as they're encountered.
*
* Not using flexible array here since we don't know size at construction time

View file

@ -85,6 +85,12 @@ namespace xo {
TypeDescr param_type,
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 for this syntax after parsing an expression @p expr
* in nested state machine.
* (provided to satisfy ASyntaxStateMachine api. not reachable)

View file

@ -136,6 +136,12 @@ namespace xo {
TypeDescr param_type,
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);
/** operate state machine for this syntax on receiving expression
* from nested parser.
* (provided to satisfy ASyntaxStateMachine api. not reachable)

View file

@ -145,6 +145,12 @@ namespace xo {
TypeDescr param_type,
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 for this syntax on parsed expression @p expr
* from nested ssm.
* overall parser state in @p p_psm

View file

@ -159,6 +159,12 @@ namespace xo {
TypeDescr param_type,
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 for this syntax after parsing an expression @p expr,
* overall parser state in @p p_psm.
**/

View file

@ -123,6 +123,12 @@ namespace xo {
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 this ssm when nested parser
* emits expression @p expr
**/

View file

@ -173,6 +173,8 @@ namespace xo {
void on_parsed_formal(const DUniqueString * param_name,
TypeDescr param_type,
ParserStateMachine * p_psm);
void on_parsed_formal_arglist(DArray * arglist,
ParserStateMachine * p_psm);
void on_parsed_expression(obj<AExpression>,
ParserStateMachine * p_psm);
void on_parsed_expression_with_semicolon(obj<AExpression> expr,

View file

@ -9,6 +9,7 @@
#include <xo/expression2/DVariable.hpp>
#include <xo/expression2/StringTable.hpp>
#include <xo/tokenizer2/Token.hpp>
#include <xo/object2/DArray.hpp>
#include <xo/alloc2/Allocator.hpp>
#include <xo/arena/DArena.hpp>
@ -103,11 +104,16 @@ namespace xo {
void on_parsed_typedescr(TypeDescr td);
/** update state to consume param (name, value) emitted by
* nested (but not popped) parsing state
* nested (expired) parsing state
**/
void on_parsed_formal(const DUniqueString * param_name,
TypeDescr param_type);
/** update state to consume formal arugment list
* emitted by nested (expired) parsing state
**/
void on_parsed_formal_arglist(DArray * arglist);
/** update state to respond to parsed expression @p expr
* (from nested parsing state)
**/
@ -178,6 +184,12 @@ namespace xo {
TypeDescr param_type,
std::string_view expect_str);
/** @p arglist stores obj<AGCObject,DVariable> pointers.
**/
void illegal_parsed_formal_arglist(std::string_view ssm_name,
DArray * arglist,
std::string_view expect_str);
/** report illegal parsed expression from nested ssm.
* Introducing as placeholder; not clear if this will be reachable
* in full parser

View file

@ -65,6 +65,8 @@ public:
virtual void on_parsed_typedescr(Opaque data, TypeDescr td, ParserStateMachine * p_psm) = 0;
/** operate state machine for formal emitted by nested ssm **/
virtual void on_parsed_formal(Opaque data, const DUniqueString * param_name, TypeDescr param_type, ParserStateMachine * p_psm) = 0;
/** consume formal arglist emitted by nested ssm **/
virtual void on_parsed_formal_arglist(Opaque data, DArray * arglist, ParserStateMachine * p_psm) = 0;
/** update state machine for incoming parsed expression @p expr **/
virtual void on_parsed_expression(Opaque data, obj<AExpression> expr, ParserStateMachine * p_psm) = 0;
/** update state machine for incoming parsed expression @p expr followed by semicolon **/

View file

@ -64,6 +64,7 @@ namespace scm {
[[noreturn]] void on_parsed_symbol(Opaque, std::string_view, ParserStateMachine *) override;
[[noreturn]] void on_parsed_typedescr(Opaque, TypeDescr, ParserStateMachine *) override;
[[noreturn]] void on_parsed_formal(Opaque, const DUniqueString *, TypeDescr, ParserStateMachine *) override;
[[noreturn]] void on_parsed_formal_arglist(Opaque, DArray *, ParserStateMachine *) override;
[[noreturn]] void on_parsed_expression(Opaque, obj<AExpression>, ParserStateMachine *) override;
[[noreturn]] void on_parsed_expression_with_semicolon(Opaque, obj<AExpression>, ParserStateMachine *) override;

View file

@ -62,6 +62,8 @@ namespace xo {
static void on_parsed_typedescr(DDefineSsm & self, TypeDescr td, ParserStateMachine * p_psm);
/** operate state machine for formal emitted by nested ssm **/
static void on_parsed_formal(DDefineSsm & self, const DUniqueString * param_name, TypeDescr param_type, ParserStateMachine * p_psm);
/** consume formal arglist emitted by nested ssm **/
static void on_parsed_formal_arglist(DDefineSsm & self, DArray * arglist, ParserStateMachine * p_psm);
/** update state machine for incoming parsed expression @p expr **/
static void on_parsed_expression(DDefineSsm & self, obj<AExpression> expr, ParserStateMachine * p_psm);
/** update state machine for incoming parsed expression @p expr followed by semicolon **/

View file

@ -62,6 +62,8 @@ namespace xo {
static void on_parsed_typedescr(DExpectExprSsm & self, TypeDescr td, ParserStateMachine * p_psm);
/** operate state machine for formal emitted by nested ssm **/
static void on_parsed_formal(DExpectExprSsm & self, const DUniqueString * param_name, TypeDescr param_type, ParserStateMachine * p_psm);
/** consume formal arglist emitted by nested ssm **/
static void on_parsed_formal_arglist(DExpectExprSsm & self, DArray * arglist, ParserStateMachine * p_psm);
/** update state machine for incoming parsed expression @p expr **/
static void on_parsed_expression(DExpectExprSsm & self, obj<AExpression> expr, ParserStateMachine * p_psm);
/** update state machine for incoming parsed expression @p expr followed by semicolon **/

View file

@ -62,6 +62,8 @@ namespace xo {
static void on_parsed_typedescr(DExpectFormalArgSsm & self, TypeDescr td, ParserStateMachine * p_psm);
/** operate state machine for formal emitted by nested ssm **/
static void on_parsed_formal(DExpectFormalArgSsm & self, const DUniqueString * param_name, TypeDescr param_type, ParserStateMachine * p_psm);
/** consume formal arglist emitted by nested ssm **/
static void on_parsed_formal_arglist(DExpectFormalArgSsm & self, DArray * arglist, ParserStateMachine * p_psm);
/** update state machine for incoming parsed expression @p expr **/
static void on_parsed_expression(DExpectFormalArgSsm & self, obj<AExpression> expr, ParserStateMachine * p_psm);
/** update state machine for incoming parsed expression @p expr followed by semicolon **/

View file

@ -62,6 +62,8 @@ namespace xo {
static void on_parsed_typedescr(DExpectFormalArglistSsm & self, TypeDescr td, ParserStateMachine * p_psm);
/** operate state machine for formal emitted by nested ssm **/
static void on_parsed_formal(DExpectFormalArglistSsm & self, const DUniqueString * param_name, TypeDescr param_type, ParserStateMachine * p_psm);
/** consume formal arglist emitted by nested ssm **/
static void on_parsed_formal_arglist(DExpectFormalArglistSsm & self, DArray * arglist, ParserStateMachine * p_psm);
/** update state machine for incoming parsed expression @p expr **/
static void on_parsed_expression(DExpectFormalArglistSsm & self, obj<AExpression> expr, ParserStateMachine * p_psm);
/** update state machine for incoming parsed expression @p expr followed by semicolon **/

View file

@ -62,6 +62,8 @@ namespace xo {
static void on_parsed_typedescr(DExpectSymbolSsm & self, TypeDescr td, ParserStateMachine * p_psm);
/** operate state machine for formal emitted by nested ssm **/
static void on_parsed_formal(DExpectSymbolSsm & self, const DUniqueString * param_name, TypeDescr param_type, ParserStateMachine * p_psm);
/** consume formal arglist emitted by nested ssm **/
static void on_parsed_formal_arglist(DExpectSymbolSsm & self, DArray * arglist, ParserStateMachine * p_psm);
/** update state machine for incoming parsed expression @p expr **/
static void on_parsed_expression(DExpectSymbolSsm & self, obj<AExpression> expr, ParserStateMachine * p_psm);
/** update state machine for incoming parsed expression @p expr followed by semicolon **/

View file

@ -62,6 +62,8 @@ namespace xo {
static void on_parsed_typedescr(DExpectTypeSsm & self, TypeDescr td, ParserStateMachine * p_psm);
/** operate state machine for formal emitted by nested ssm **/
static void on_parsed_formal(DExpectTypeSsm & self, const DUniqueString * param_name, TypeDescr param_type, ParserStateMachine * p_psm);
/** consume formal arglist emitted by nested ssm **/
static void on_parsed_formal_arglist(DExpectTypeSsm & self, DArray * arglist, ParserStateMachine * p_psm);
/** update state machine for incoming parsed expression @p expr **/
static void on_parsed_expression(DExpectTypeSsm & self, obj<AExpression> expr, ParserStateMachine * p_psm);
/** update state machine for incoming parsed expression @p expr followed by semicolon **/

View file

@ -62,6 +62,8 @@ namespace xo {
static void on_parsed_typedescr(DExprSeqState & self, TypeDescr td, ParserStateMachine * p_psm);
/** operate state machine for formal emitted by nested ssm **/
static void on_parsed_formal(DExprSeqState & self, const DUniqueString * param_name, TypeDescr param_type, ParserStateMachine * p_psm);
/** consume formal arglist emitted by nested ssm **/
static void on_parsed_formal_arglist(DExprSeqState & self, DArray * arglist, ParserStateMachine * p_psm);
/** update state machine for incoming parsed expression @p expr **/
static void on_parsed_expression(DExprSeqState & self, obj<AExpression> expr, ParserStateMachine * p_psm);
/** update state machine for incoming parsed expression @p expr followed by semicolon **/

View file

@ -62,6 +62,8 @@ namespace xo {
static void on_parsed_typedescr(DIfElseSsm & self, TypeDescr td, ParserStateMachine * p_psm);
/** operate state machine for formal emitted by nested ssm **/
static void on_parsed_formal(DIfElseSsm & self, const DUniqueString * param_name, TypeDescr param_type, ParserStateMachine * p_psm);
/** consume formal arglist emitted by nested ssm **/
static void on_parsed_formal_arglist(DIfElseSsm & self, DArray * arglist, ParserStateMachine * p_psm);
/** update state machine for incoming parsed expression @p expr **/
static void on_parsed_expression(DIfElseSsm & self, obj<AExpression> expr, ParserStateMachine * p_psm);
/** update state machine for incoming parsed expression @p expr followed by semicolon **/

View file

@ -62,6 +62,8 @@ namespace xo {
static void on_parsed_typedescr(DLambdaSsm & self, TypeDescr td, ParserStateMachine * p_psm);
/** operate state machine for formal emitted by nested ssm **/
static void on_parsed_formal(DLambdaSsm & self, const DUniqueString * param_name, TypeDescr param_type, ParserStateMachine * p_psm);
/** consume formal arglist emitted by nested ssm **/
static void on_parsed_formal_arglist(DLambdaSsm & self, DArray * arglist, ParserStateMachine * p_psm);
/** update state machine for incoming parsed expression @p expr **/
static void on_parsed_expression(DLambdaSsm & self, obj<AExpression> expr, ParserStateMachine * p_psm);
/** update state machine for incoming parsed expression @p expr followed by semicolon **/

View file

@ -62,6 +62,8 @@ namespace xo {
static void on_parsed_typedescr(DProgressSsm & self, TypeDescr td, ParserStateMachine * p_psm);
/** operate state machine for formal emitted by nested ssm **/
static void on_parsed_formal(DProgressSsm & self, const DUniqueString * param_name, TypeDescr param_type, ParserStateMachine * p_psm);
/** consume formal arglist emitted by nested ssm **/
static void on_parsed_formal_arglist(DProgressSsm & self, DArray * arglist, ParserStateMachine * p_psm);
/** update state machine for incoming parsed expression @p expr **/
static void on_parsed_expression(DProgressSsm & self, obj<AExpression> expr, ParserStateMachine * p_psm);
/** update state machine for incoming parsed expression @p expr followed by semicolon **/

View file

@ -64,6 +64,9 @@ namespace scm {
void on_parsed_formal(Opaque data, const DUniqueString * param_name, TypeDescr param_type, ParserStateMachine * p_psm) override {
return I::on_parsed_formal(_dcast(data), param_name, param_type, p_psm);
}
void on_parsed_formal_arglist(Opaque data, DArray * arglist, ParserStateMachine * p_psm) override {
return I::on_parsed_formal_arglist(_dcast(data), arglist, p_psm);
}
void on_parsed_expression(Opaque data, obj<AExpression> expr, ParserStateMachine * p_psm) override {
return I::on_parsed_expression(_dcast(data), expr, p_psm);
}

View file

@ -68,6 +68,9 @@ public:
void on_parsed_formal(const DUniqueString * param_name, TypeDescr param_type, ParserStateMachine * p_psm) {
return O::iface()->on_parsed_formal(O::data(), param_name, param_type, p_psm);
}
void on_parsed_formal_arglist(DArray * arglist, ParserStateMachine * p_psm) {
return O::iface()->on_parsed_formal_arglist(O::data(), arglist, p_psm);
}
void on_parsed_expression(obj<AExpression> expr, ParserStateMachine * p_psm) {
return O::iface()->on_parsed_expression(O::data(), expr, p_psm);
}