From e4cfb57beff1b071eb9771fb6a5cfab1730daf5c Mon Sep 17 00:00:00 2001 From: Roland Conybeare Date: Fri, 23 Jan 2026 19:01:12 -0500 Subject: [PATCH] xo-reader2: refactor: push token dispatch to satellite SSMs --- xo-reader2/idl/SyntaxStateMachine.json5 | 85 +--------- xo-reader2/include/xo/reader2/DDefineSsm.hpp | 6 + .../include/xo/reader2/DExpectExprSsm.hpp | 6 + .../include/xo/reader2/DExpectSymbolSsm.hpp | 6 + .../include/xo/reader2/DExpectTypeSsm.hpp | 6 + .../include/xo/reader2/DExprSeqState.hpp | 6 + .../include/xo/reader2/DProgressSsm.hpp | 6 + .../include/xo/reader2/ParserStateMachine.hpp | 30 ---- .../xo/reader2/ssm/ASyntaxStateMachine.hpp | 22 +-- .../reader2/ssm/ISyntaxStateMachine_Any.hpp | 11 +- .../ssm/ISyntaxStateMachine_DDefineSsm.hpp | 22 +-- .../ISyntaxStateMachine_DExpectExprSsm.hpp | 22 +-- .../ISyntaxStateMachine_DExpectSymbolSsm.hpp | 22 +-- .../ISyntaxStateMachine_DExpectTypeSsm.hpp | 22 +-- .../ssm/ISyntaxStateMachine_DExprSeqState.hpp | 22 +-- .../ssm/ISyntaxStateMachine_DProgressSsm.hpp | 22 +-- .../reader2/ssm/ISyntaxStateMachine_Xfer.hpp | 31 +--- .../xo/reader2/ssm/RSyntaxStateMachine.hpp | 31 +--- xo-reader2/src/reader2/DDefineSsm.cpp | 90 +++++++++- xo-reader2/src/reader2/DExpectExprSsm.cpp | 86 ++++++++++ xo-reader2/src/reader2/DExpectSymbolSsm.cpp | 86 ++++++++++ xo-reader2/src/reader2/DExpectTypeSsm.cpp | 86 ++++++++++ xo-reader2/src/reader2/DExprSeqState.cpp | 86 ++++++++++ xo-reader2/src/reader2/DProgressSsm.cpp | 86 ++++++++++ .../src/reader2/ISyntaxStateMachine_Any.cpp | 56 +------ .../ISyntaxStateMachine_DDefineSsm.cpp | 49 +----- .../ISyntaxStateMachine_DExpectExprSsm.cpp | 49 +----- .../ISyntaxStateMachine_DExpectSymbolSsm.cpp | 49 +----- .../ISyntaxStateMachine_DExpectTypeSsm.cpp | 49 +----- .../ISyntaxStateMachine_DExprSeqState.cpp | 49 +----- .../ISyntaxStateMachine_DProgressSsm.cpp | 49 +----- xo-reader2/src/reader2/ParserStateMachine.cpp | 158 +----------------- 32 files changed, 590 insertions(+), 816 deletions(-) diff --git a/xo-reader2/idl/SyntaxStateMachine.json5 b/xo-reader2/idl/SyntaxStateMachine.json5 index 72dbbf13..15a36f12 100644 --- a/xo-reader2/idl/SyntaxStateMachine.json5 +++ b/xo-reader2/idl/SyntaxStateMachine.json5 @@ -46,89 +46,8 @@ ], nonconst_methods: [ { - name: "on_symbol_token", - doc: ["operate state machine for incoming symbol-token @p tk"], - return_type: "void", - args: [ - {type: "const Token &", name: "tk"}, - {type: "ParserStateMachine *", name: "p_psm"}, - ], - }, - { - name: "on_def_token", - doc: ["update state machine for incoming define-keyword-token @p tk"], - return_type: "void", - args: [ - {type: "const Token &", name: "tk"}, - {type: "ParserStateMachine *", name: "p_psm"}, - ], - }, - { - name: "on_if_token", - doc: ["update state machine for incoming if-keyword-token @p tk"], - return_type: "void", - args: [ - {type: "const Token &", name: "tk"}, - {type: "ParserStateMachine *", name: "p_psm"}, - ], - }, - { - name: "on_colon_token", - doc: ["update state machine for incoming colon-token @p tk"], - return_type: "void", - args: [ - {type: "const Token &", name: "tk"}, - {type: "ParserStateMachine *", name: "p_psm"}, - ], - }, - { - name: "on_singleassign_token", - doc: ["update state machine for incoming singleassign-token @p tk"], - return_type: "void", - args: [ - {type: "const Token &", name: "tk"}, - {type: "ParserStateMachine *", name: "p_psm"}, - ], - }, - { - name: "on_f64_token", - doc: ["update state machine for incoming f64-token @p tk"], - return_type: "void", - args: [ - {type: "const Token &", name: "tk"}, - {type: "ParserStateMachine *", name: "p_psm"}, - ], - }, - { - name: "on_i64_token", - doc: ["update state machine for incoming i64-token @p tk"], - return_type: "void", - args: [ - {type: "const Token &", name: "tk"}, - {type: "ParserStateMachine *", name: "p_psm"}, - ], - }, - { - name: "on_bool_token", - doc: ["update state machine for incoming bool-token @p tk"], - return_type: "void", - args: [ - {type: "const Token &", name: "tk"}, - {type: "ParserStateMachine *", name: "p_psm"}, - ], - }, - { - name: "on_string_token", - doc: ["update state machine for incoming string-token @p tk"], - return_type: "void", - args: [ - {type: "const Token &", name: "tk"}, - {type: "ParserStateMachine *", name: "p_psm"}, - ], - }, - { - name: "on_semicolon_token", - doc: ["update state machine for incoming semicolon-token @p tk"], + name: "on_token", + doc: ["operate state machine for incoming token @p tk"], return_type: "void", args: [ {type: "const Token &", name: "tk"}, diff --git a/xo-reader2/include/xo/reader2/DDefineSsm.hpp b/xo-reader2/include/xo/reader2/DDefineSsm.hpp index d0af630d..9f707fca 100644 --- a/xo-reader2/include/xo/reader2/DDefineSsm.hpp +++ b/xo-reader2/include/xo/reader2/DDefineSsm.hpp @@ -117,6 +117,12 @@ namespace xo { **/ std::string_view get_expect_str() const noexcept; + /** operate state machine for this syntax on incoming token @p tk + * with overall parser state in @p p_psm + **/ + void on_token(const Token & tk, + ParserStateMachine * p_psm); + /** operate state machine for this syntax on incoming symbol-token @p tk * with overall parser state in @p p_psm **/ diff --git a/xo-reader2/include/xo/reader2/DExpectExprSsm.hpp b/xo-reader2/include/xo/reader2/DExpectExprSsm.hpp index c1c9ede7..85d4e5e1 100644 --- a/xo-reader2/include/xo/reader2/DExpectExprSsm.hpp +++ b/xo-reader2/include/xo/reader2/DExpectExprSsm.hpp @@ -53,6 +53,12 @@ namespace xo { **/ std::string_view get_expect_str() const noexcept; + /** operate state machine for this syntax on incoming token @p tk + * with overall parser state in @p p_psm + **/ + void on_token(const Token & tk, + ParserStateMachine * p_psm); + /** operate state machine for this syntax on incoming symbol-token @p tk * with overall parser state in @p p_psm **/ diff --git a/xo-reader2/include/xo/reader2/DExpectSymbolSsm.hpp b/xo-reader2/include/xo/reader2/DExpectSymbolSsm.hpp index 03dd8408..4cb04019 100644 --- a/xo-reader2/include/xo/reader2/DExpectSymbolSsm.hpp +++ b/xo-reader2/include/xo/reader2/DExpectSymbolSsm.hpp @@ -93,6 +93,12 @@ namespace xo { void on_parsed_expression_with_semicolon(obj expr, ParserStateMachine * p_psm); + /** operate state machine for this syntax on incoming token @p tk + * with overall parser state in @p p_psm + **/ + void on_token(const Token & tk, + ParserStateMachine * p_psm); + /** update state for this syntax on incoming token @p tk, * overall parser state in @p p_psm. **/ diff --git a/xo-reader2/include/xo/reader2/DExpectTypeSsm.hpp b/xo-reader2/include/xo/reader2/DExpectTypeSsm.hpp index 8290225f..346a6d6c 100644 --- a/xo-reader2/include/xo/reader2/DExpectTypeSsm.hpp +++ b/xo-reader2/include/xo/reader2/DExpectTypeSsm.hpp @@ -47,6 +47,12 @@ namespace xo { **/ std::string_view get_expect_str() const noexcept; + /** operate state machine for this syntax on incoming token @p tk + * with overall parser state in @p p_psm + **/ + void on_token(const Token & tk, + ParserStateMachine * p_psm); + /** operate state machien for this syntax on incoming symbol-token @p tk * with overall parser state in @p p_psm **/ diff --git a/xo-reader2/include/xo/reader2/DExprSeqState.hpp b/xo-reader2/include/xo/reader2/DExprSeqState.hpp index acfcba64..72566004 100644 --- a/xo-reader2/include/xo/reader2/DExprSeqState.hpp +++ b/xo-reader2/include/xo/reader2/DExprSeqState.hpp @@ -65,6 +65,12 @@ namespace xo { **/ std::string_view get_expect_str() const noexcept; + /** operate state machine for this syntax on incoming token @p tk + * with overall parser state in @p p_psm + **/ + void on_token(const Token & tk, + ParserStateMachine * p_psm); + /** operate state machine for this syntax on incoming symbol token @p tk * with overall parser state in @p p_psm **/ diff --git a/xo-reader2/include/xo/reader2/DProgressSsm.hpp b/xo-reader2/include/xo/reader2/DProgressSsm.hpp index 33981d76..7258731c 100644 --- a/xo-reader2/include/xo/reader2/DProgressSsm.hpp +++ b/xo-reader2/include/xo/reader2/DProgressSsm.hpp @@ -131,6 +131,12 @@ namespace xo { /** @defgroup scm-progressssm-ssm-facet syntaxstatemachine facet methods **/ /// @{ + /** operate state machine for this syntax on incoming token @p tk + * with overall parser state in @p p_psm + **/ + void on_token(const Token & tk, + ParserStateMachine * p_psm); + void on_symbol_token(const Token & tk, ParserStateMachine * p_psm); void on_def_token(const Token & tk, diff --git a/xo-reader2/include/xo/reader2/ParserStateMachine.hpp b/xo-reader2/include/xo/reader2/ParserStateMachine.hpp index eae4d663..a674e7e2 100644 --- a/xo-reader2/include/xo/reader2/ParserStateMachine.hpp +++ b/xo-reader2/include/xo/reader2/ParserStateMachine.hpp @@ -123,36 +123,6 @@ namespace xo { **/ void on_token(const Token & tk); - /** operate state machine for incoming symbol-token @p tk **/ - void on_symbol_token(const Token & tk); - - /** operate state machine for incoming define-token @p tk **/ - void on_def_token(const Token & tk); - - /** operate state machine for incoming if-token @p tk **/ - void on_if_token(const Token & tk); - - /** operate state machine for incoming colon-token @p tk **/ - void on_colon_token(const Token & tk); - - /** operate state machine for incoming singleassign-token @p tk **/ - void on_singleassign_token(const Token & tk); - - /** operate state machine for incoming string-otoken @p tk **/ - void on_string_token(const Token & tk); - - /** operate state machine for incoming f64-token @p tk **/ - void on_f64_token(const Token & tk); - - /** operate state machine for incoming i64-token @p tk **/ - void on_i64_token(const Token & tk); - - /** operate state machine for incoming bool-token @p tk **/ - void on_bool_token(const Token & tk); - - /** operate state machine for incoming semicolon-token @p tk **/ - void on_semicolon_token(const Token & tk); - ///@} /** @defgroup scm-parserstatemachine-error-entrypoints error entry points **/ ///@{ diff --git a/xo-reader2/include/xo/reader2/ssm/ASyntaxStateMachine.hpp b/xo-reader2/include/xo/reader2/ssm/ASyntaxStateMachine.hpp index d501232f..3115d692 100644 --- a/xo-reader2/include/xo/reader2/ssm/ASyntaxStateMachine.hpp +++ b/xo-reader2/include/xo/reader2/ssm/ASyntaxStateMachine.hpp @@ -57,26 +57,8 @@ public: virtual std::string_view get_expect_str(Copaque data) const noexcept = 0; // nonconst methods - /** operate state machine for incoming symbol-token @p tk **/ - virtual void on_symbol_token(Opaque data, const Token & tk, ParserStateMachine * p_psm) = 0; - /** update state machine for incoming define-keyword-token @p tk **/ - virtual void on_def_token(Opaque data, const Token & tk, ParserStateMachine * p_psm) = 0; - /** update state machine for incoming if-keyword-token @p tk **/ - virtual void on_if_token(Opaque data, const Token & tk, ParserStateMachine * p_psm) = 0; - /** update state machine for incoming colon-token @p tk **/ - virtual void on_colon_token(Opaque data, const Token & tk, ParserStateMachine * p_psm) = 0; - /** update state machine for incoming singleassign-token @p tk **/ - virtual void on_singleassign_token(Opaque data, const Token & tk, ParserStateMachine * p_psm) = 0; - /** update state machine for incoming f64-token @p tk **/ - virtual void on_f64_token(Opaque data, const Token & tk, ParserStateMachine * p_psm) = 0; - /** update state machine for incoming i64-token @p tk **/ - virtual void on_i64_token(Opaque data, const Token & tk, ParserStateMachine * p_psm) = 0; - /** update state machine for incoming bool-token @p tk **/ - virtual void on_bool_token(Opaque data, const Token & tk, ParserStateMachine * p_psm) = 0; - /** update state machine for incoming string-token @p tk **/ - virtual void on_string_token(Opaque data, const Token & tk, ParserStateMachine * p_psm) = 0; - /** update state machine for incoming semicolon-token @p tk **/ - virtual void on_semicolon_token(Opaque data, const Token & tk, ParserStateMachine * p_psm) = 0; + /** operate state machine for incoming token @p tk **/ + virtual void on_token(Opaque data, const Token & tk, ParserStateMachine * p_psm) = 0; /** update stat machine for incoming parsed symbol @p sym **/ virtual void on_parsed_symbol(Opaque data, std::string_view sym, ParserStateMachine * p_psm) = 0; /** operate state machine for incoming type description @p td **/ diff --git a/xo-reader2/include/xo/reader2/ssm/ISyntaxStateMachine_Any.hpp b/xo-reader2/include/xo/reader2/ssm/ISyntaxStateMachine_Any.hpp index 351f6a8c..45be148e 100644 --- a/xo-reader2/include/xo/reader2/ssm/ISyntaxStateMachine_Any.hpp +++ b/xo-reader2/include/xo/reader2/ssm/ISyntaxStateMachine_Any.hpp @@ -60,16 +60,7 @@ namespace scm { [[noreturn]] std::string_view get_expect_str(Copaque) const noexcept override { _fatal(); } // nonconst methods - [[noreturn]] void on_symbol_token(Opaque, const Token &, ParserStateMachine *) override; - [[noreturn]] void on_def_token(Opaque, const Token &, ParserStateMachine *) override; - [[noreturn]] void on_if_token(Opaque, const Token &, ParserStateMachine *) override; - [[noreturn]] void on_colon_token(Opaque, const Token &, ParserStateMachine *) override; - [[noreturn]] void on_singleassign_token(Opaque, const Token &, ParserStateMachine *) override; - [[noreturn]] void on_f64_token(Opaque, const Token &, ParserStateMachine *) override; - [[noreturn]] void on_i64_token(Opaque, const Token &, ParserStateMachine *) override; - [[noreturn]] void on_bool_token(Opaque, const Token &, ParserStateMachine *) override; - [[noreturn]] void on_string_token(Opaque, const Token &, ParserStateMachine *) override; - [[noreturn]] void on_semicolon_token(Opaque, const Token &, ParserStateMachine *) override; + [[noreturn]] void on_token(Opaque, const Token &, ParserStateMachine *) override; [[noreturn]] void on_parsed_symbol(Opaque, std::string_view, ParserStateMachine *) override; [[noreturn]] void on_parsed_typedescr(Opaque, TypeDescr, ParserStateMachine *) override; [[noreturn]] void on_parsed_expression(Opaque, obj, ParserStateMachine *) override; diff --git a/xo-reader2/include/xo/reader2/ssm/ISyntaxStateMachine_DDefineSsm.hpp b/xo-reader2/include/xo/reader2/ssm/ISyntaxStateMachine_DDefineSsm.hpp index 432b6fac..dad8ff29 100644 --- a/xo-reader2/include/xo/reader2/ssm/ISyntaxStateMachine_DDefineSsm.hpp +++ b/xo-reader2/include/xo/reader2/ssm/ISyntaxStateMachine_DDefineSsm.hpp @@ -54,26 +54,8 @@ namespace xo { static std::string_view get_expect_str(const DDefineSsm & self) noexcept; // non-const methods - /** operate state machine for incoming symbol-token @p tk **/ - static void on_symbol_token(DDefineSsm & self, const Token & tk, ParserStateMachine * p_psm); - /** update state machine for incoming define-keyword-token @p tk **/ - static void on_def_token(DDefineSsm & self, const Token & tk, ParserStateMachine * p_psm); - /** update state machine for incoming if-keyword-token @p tk **/ - static void on_if_token(DDefineSsm & self, const Token & tk, ParserStateMachine * p_psm); - /** update state machine for incoming colon-token @p tk **/ - static void on_colon_token(DDefineSsm & self, const Token & tk, ParserStateMachine * p_psm); - /** update state machine for incoming singleassign-token @p tk **/ - static void on_singleassign_token(DDefineSsm & self, const Token & tk, ParserStateMachine * p_psm); - /** update state machine for incoming f64-token @p tk **/ - static void on_f64_token(DDefineSsm & self, const Token & tk, ParserStateMachine * p_psm); - /** update state machine for incoming i64-token @p tk **/ - static void on_i64_token(DDefineSsm & self, const Token & tk, ParserStateMachine * p_psm); - /** update state machine for incoming bool-token @p tk **/ - static void on_bool_token(DDefineSsm & self, const Token & tk, ParserStateMachine * p_psm); - /** update state machine for incoming string-token @p tk **/ - static void on_string_token(DDefineSsm & self, const Token & tk, ParserStateMachine * p_psm); - /** update state machine for incoming semicolon-token @p tk **/ - static void on_semicolon_token(DDefineSsm & self, const Token & tk, ParserStateMachine * p_psm); + /** operate state machine for incoming token @p tk **/ + static void on_token(DDefineSsm & self, const Token & tk, ParserStateMachine * p_psm); /** update stat machine for incoming parsed symbol @p sym **/ static void on_parsed_symbol(DDefineSsm & self, std::string_view sym, ParserStateMachine * p_psm); /** operate state machine for incoming type description @p td **/ diff --git a/xo-reader2/include/xo/reader2/ssm/ISyntaxStateMachine_DExpectExprSsm.hpp b/xo-reader2/include/xo/reader2/ssm/ISyntaxStateMachine_DExpectExprSsm.hpp index aa1d082e..7250cec7 100644 --- a/xo-reader2/include/xo/reader2/ssm/ISyntaxStateMachine_DExpectExprSsm.hpp +++ b/xo-reader2/include/xo/reader2/ssm/ISyntaxStateMachine_DExpectExprSsm.hpp @@ -54,26 +54,8 @@ namespace xo { static std::string_view get_expect_str(const DExpectExprSsm & self) noexcept; // non-const methods - /** operate state machine for incoming symbol-token @p tk **/ - static void on_symbol_token(DExpectExprSsm & self, const Token & tk, ParserStateMachine * p_psm); - /** update state machine for incoming define-keyword-token @p tk **/ - static void on_def_token(DExpectExprSsm & self, const Token & tk, ParserStateMachine * p_psm); - /** update state machine for incoming if-keyword-token @p tk **/ - static void on_if_token(DExpectExprSsm & self, const Token & tk, ParserStateMachine * p_psm); - /** update state machine for incoming colon-token @p tk **/ - static void on_colon_token(DExpectExprSsm & self, const Token & tk, ParserStateMachine * p_psm); - /** update state machine for incoming singleassign-token @p tk **/ - static void on_singleassign_token(DExpectExprSsm & self, const Token & tk, ParserStateMachine * p_psm); - /** update state machine for incoming f64-token @p tk **/ - static void on_f64_token(DExpectExprSsm & self, const Token & tk, ParserStateMachine * p_psm); - /** update state machine for incoming i64-token @p tk **/ - static void on_i64_token(DExpectExprSsm & self, const Token & tk, ParserStateMachine * p_psm); - /** update state machine for incoming bool-token @p tk **/ - static void on_bool_token(DExpectExprSsm & self, const Token & tk, ParserStateMachine * p_psm); - /** update state machine for incoming string-token @p tk **/ - static void on_string_token(DExpectExprSsm & self, const Token & tk, ParserStateMachine * p_psm); - /** update state machine for incoming semicolon-token @p tk **/ - static void on_semicolon_token(DExpectExprSsm & self, const Token & tk, ParserStateMachine * p_psm); + /** operate state machine for incoming token @p tk **/ + static void on_token(DExpectExprSsm & self, const Token & tk, ParserStateMachine * p_psm); /** update stat machine for incoming parsed symbol @p sym **/ static void on_parsed_symbol(DExpectExprSsm & self, std::string_view sym, ParserStateMachine * p_psm); /** operate state machine for incoming type description @p td **/ diff --git a/xo-reader2/include/xo/reader2/ssm/ISyntaxStateMachine_DExpectSymbolSsm.hpp b/xo-reader2/include/xo/reader2/ssm/ISyntaxStateMachine_DExpectSymbolSsm.hpp index 039fcae2..7e83d0e4 100644 --- a/xo-reader2/include/xo/reader2/ssm/ISyntaxStateMachine_DExpectSymbolSsm.hpp +++ b/xo-reader2/include/xo/reader2/ssm/ISyntaxStateMachine_DExpectSymbolSsm.hpp @@ -54,26 +54,8 @@ namespace xo { static std::string_view get_expect_str(const DExpectSymbolSsm & self) noexcept; // non-const methods - /** operate state machine for incoming symbol-token @p tk **/ - static void on_symbol_token(DExpectSymbolSsm & self, const Token & tk, ParserStateMachine * p_psm); - /** update state machine for incoming define-keyword-token @p tk **/ - static void on_def_token(DExpectSymbolSsm & self, const Token & tk, ParserStateMachine * p_psm); - /** update state machine for incoming if-keyword-token @p tk **/ - static void on_if_token(DExpectSymbolSsm & self, const Token & tk, ParserStateMachine * p_psm); - /** update state machine for incoming colon-token @p tk **/ - static void on_colon_token(DExpectSymbolSsm & self, const Token & tk, ParserStateMachine * p_psm); - /** update state machine for incoming singleassign-token @p tk **/ - static void on_singleassign_token(DExpectSymbolSsm & self, const Token & tk, ParserStateMachine * p_psm); - /** update state machine for incoming f64-token @p tk **/ - static void on_f64_token(DExpectSymbolSsm & self, const Token & tk, ParserStateMachine * p_psm); - /** update state machine for incoming i64-token @p tk **/ - static void on_i64_token(DExpectSymbolSsm & self, const Token & tk, ParserStateMachine * p_psm); - /** update state machine for incoming bool-token @p tk **/ - static void on_bool_token(DExpectSymbolSsm & self, const Token & tk, ParserStateMachine * p_psm); - /** update state machine for incoming string-token @p tk **/ - static void on_string_token(DExpectSymbolSsm & self, const Token & tk, ParserStateMachine * p_psm); - /** update state machine for incoming semicolon-token @p tk **/ - static void on_semicolon_token(DExpectSymbolSsm & self, const Token & tk, ParserStateMachine * p_psm); + /** operate state machine for incoming token @p tk **/ + static void on_token(DExpectSymbolSsm & self, const Token & tk, ParserStateMachine * p_psm); /** update stat machine for incoming parsed symbol @p sym **/ static void on_parsed_symbol(DExpectSymbolSsm & self, std::string_view sym, ParserStateMachine * p_psm); /** operate state machine for incoming type description @p td **/ diff --git a/xo-reader2/include/xo/reader2/ssm/ISyntaxStateMachine_DExpectTypeSsm.hpp b/xo-reader2/include/xo/reader2/ssm/ISyntaxStateMachine_DExpectTypeSsm.hpp index 64106cfb..c8c4cc9f 100644 --- a/xo-reader2/include/xo/reader2/ssm/ISyntaxStateMachine_DExpectTypeSsm.hpp +++ b/xo-reader2/include/xo/reader2/ssm/ISyntaxStateMachine_DExpectTypeSsm.hpp @@ -54,26 +54,8 @@ namespace xo { static std::string_view get_expect_str(const DExpectTypeSsm & self) noexcept; // non-const methods - /** operate state machine for incoming symbol-token @p tk **/ - static void on_symbol_token(DExpectTypeSsm & self, const Token & tk, ParserStateMachine * p_psm); - /** update state machine for incoming define-keyword-token @p tk **/ - static void on_def_token(DExpectTypeSsm & self, const Token & tk, ParserStateMachine * p_psm); - /** update state machine for incoming if-keyword-token @p tk **/ - static void on_if_token(DExpectTypeSsm & self, const Token & tk, ParserStateMachine * p_psm); - /** update state machine for incoming colon-token @p tk **/ - static void on_colon_token(DExpectTypeSsm & self, const Token & tk, ParserStateMachine * p_psm); - /** update state machine for incoming singleassign-token @p tk **/ - static void on_singleassign_token(DExpectTypeSsm & self, const Token & tk, ParserStateMachine * p_psm); - /** update state machine for incoming f64-token @p tk **/ - static void on_f64_token(DExpectTypeSsm & self, const Token & tk, ParserStateMachine * p_psm); - /** update state machine for incoming i64-token @p tk **/ - static void on_i64_token(DExpectTypeSsm & self, const Token & tk, ParserStateMachine * p_psm); - /** update state machine for incoming bool-token @p tk **/ - static void on_bool_token(DExpectTypeSsm & self, const Token & tk, ParserStateMachine * p_psm); - /** update state machine for incoming string-token @p tk **/ - static void on_string_token(DExpectTypeSsm & self, const Token & tk, ParserStateMachine * p_psm); - /** update state machine for incoming semicolon-token @p tk **/ - static void on_semicolon_token(DExpectTypeSsm & self, const Token & tk, ParserStateMachine * p_psm); + /** operate state machine for incoming token @p tk **/ + static void on_token(DExpectTypeSsm & self, const Token & tk, ParserStateMachine * p_psm); /** update stat machine for incoming parsed symbol @p sym **/ static void on_parsed_symbol(DExpectTypeSsm & self, std::string_view sym, ParserStateMachine * p_psm); /** operate state machine for incoming type description @p td **/ diff --git a/xo-reader2/include/xo/reader2/ssm/ISyntaxStateMachine_DExprSeqState.hpp b/xo-reader2/include/xo/reader2/ssm/ISyntaxStateMachine_DExprSeqState.hpp index fbf1f317..2a86db05 100644 --- a/xo-reader2/include/xo/reader2/ssm/ISyntaxStateMachine_DExprSeqState.hpp +++ b/xo-reader2/include/xo/reader2/ssm/ISyntaxStateMachine_DExprSeqState.hpp @@ -54,26 +54,8 @@ namespace xo { static std::string_view get_expect_str(const DExprSeqState & self) noexcept; // non-const methods - /** operate state machine for incoming symbol-token @p tk **/ - static void on_symbol_token(DExprSeqState & self, const Token & tk, ParserStateMachine * p_psm); - /** update state machine for incoming define-keyword-token @p tk **/ - static void on_def_token(DExprSeqState & self, const Token & tk, ParserStateMachine * p_psm); - /** update state machine for incoming if-keyword-token @p tk **/ - static void on_if_token(DExprSeqState & self, const Token & tk, ParserStateMachine * p_psm); - /** update state machine for incoming colon-token @p tk **/ - static void on_colon_token(DExprSeqState & self, const Token & tk, ParserStateMachine * p_psm); - /** update state machine for incoming singleassign-token @p tk **/ - static void on_singleassign_token(DExprSeqState & self, const Token & tk, ParserStateMachine * p_psm); - /** update state machine for incoming f64-token @p tk **/ - static void on_f64_token(DExprSeqState & self, const Token & tk, ParserStateMachine * p_psm); - /** update state machine for incoming i64-token @p tk **/ - static void on_i64_token(DExprSeqState & self, const Token & tk, ParserStateMachine * p_psm); - /** update state machine for incoming bool-token @p tk **/ - static void on_bool_token(DExprSeqState & self, const Token & tk, ParserStateMachine * p_psm); - /** update state machine for incoming string-token @p tk **/ - static void on_string_token(DExprSeqState & self, const Token & tk, ParserStateMachine * p_psm); - /** update state machine for incoming semicolon-token @p tk **/ - static void on_semicolon_token(DExprSeqState & self, const Token & tk, ParserStateMachine * p_psm); + /** operate state machine for incoming token @p tk **/ + static void on_token(DExprSeqState & self, const Token & tk, ParserStateMachine * p_psm); /** update stat machine for incoming parsed symbol @p sym **/ static void on_parsed_symbol(DExprSeqState & self, std::string_view sym, ParserStateMachine * p_psm); /** operate state machine for incoming type description @p td **/ diff --git a/xo-reader2/include/xo/reader2/ssm/ISyntaxStateMachine_DProgressSsm.hpp b/xo-reader2/include/xo/reader2/ssm/ISyntaxStateMachine_DProgressSsm.hpp index 0277e1ba..3d70afed 100644 --- a/xo-reader2/include/xo/reader2/ssm/ISyntaxStateMachine_DProgressSsm.hpp +++ b/xo-reader2/include/xo/reader2/ssm/ISyntaxStateMachine_DProgressSsm.hpp @@ -54,26 +54,8 @@ namespace xo { static std::string_view get_expect_str(const DProgressSsm & self) noexcept; // non-const methods - /** operate state machine for incoming symbol-token @p tk **/ - static void on_symbol_token(DProgressSsm & self, const Token & tk, ParserStateMachine * p_psm); - /** update state machine for incoming define-keyword-token @p tk **/ - static void on_def_token(DProgressSsm & self, const Token & tk, ParserStateMachine * p_psm); - /** update state machine for incoming if-keyword-token @p tk **/ - static void on_if_token(DProgressSsm & self, const Token & tk, ParserStateMachine * p_psm); - /** update state machine for incoming colon-token @p tk **/ - static void on_colon_token(DProgressSsm & self, const Token & tk, ParserStateMachine * p_psm); - /** update state machine for incoming singleassign-token @p tk **/ - static void on_singleassign_token(DProgressSsm & self, const Token & tk, ParserStateMachine * p_psm); - /** update state machine for incoming f64-token @p tk **/ - static void on_f64_token(DProgressSsm & self, const Token & tk, ParserStateMachine * p_psm); - /** update state machine for incoming i64-token @p tk **/ - static void on_i64_token(DProgressSsm & self, const Token & tk, ParserStateMachine * p_psm); - /** update state machine for incoming bool-token @p tk **/ - static void on_bool_token(DProgressSsm & self, const Token & tk, ParserStateMachine * p_psm); - /** update state machine for incoming string-token @p tk **/ - static void on_string_token(DProgressSsm & self, const Token & tk, ParserStateMachine * p_psm); - /** update state machine for incoming semicolon-token @p tk **/ - static void on_semicolon_token(DProgressSsm & self, const Token & tk, ParserStateMachine * p_psm); + /** operate state machine for incoming token @p tk **/ + static void on_token(DProgressSsm & self, const Token & tk, ParserStateMachine * p_psm); /** update stat machine for incoming parsed symbol @p sym **/ static void on_parsed_symbol(DProgressSsm & self, std::string_view sym, ParserStateMachine * p_psm); /** operate state machine for incoming type description @p td **/ diff --git a/xo-reader2/include/xo/reader2/ssm/ISyntaxStateMachine_Xfer.hpp b/xo-reader2/include/xo/reader2/ssm/ISyntaxStateMachine_Xfer.hpp index fccd523e..36c2ff83 100644 --- a/xo-reader2/include/xo/reader2/ssm/ISyntaxStateMachine_Xfer.hpp +++ b/xo-reader2/include/xo/reader2/ssm/ISyntaxStateMachine_Xfer.hpp @@ -52,35 +52,8 @@ namespace scm { } // non-const methods - void on_symbol_token(Opaque data, const Token & tk, ParserStateMachine * p_psm) override { - return I::on_symbol_token(_dcast(data), tk, p_psm); - } - void on_def_token(Opaque data, const Token & tk, ParserStateMachine * p_psm) override { - return I::on_def_token(_dcast(data), tk, p_psm); - } - void on_if_token(Opaque data, const Token & tk, ParserStateMachine * p_psm) override { - return I::on_if_token(_dcast(data), tk, p_psm); - } - void on_colon_token(Opaque data, const Token & tk, ParserStateMachine * p_psm) override { - return I::on_colon_token(_dcast(data), tk, p_psm); - } - void on_singleassign_token(Opaque data, const Token & tk, ParserStateMachine * p_psm) override { - return I::on_singleassign_token(_dcast(data), tk, p_psm); - } - void on_f64_token(Opaque data, const Token & tk, ParserStateMachine * p_psm) override { - return I::on_f64_token(_dcast(data), tk, p_psm); - } - void on_i64_token(Opaque data, const Token & tk, ParserStateMachine * p_psm) override { - return I::on_i64_token(_dcast(data), tk, p_psm); - } - void on_bool_token(Opaque data, const Token & tk, ParserStateMachine * p_psm) override { - return I::on_bool_token(_dcast(data), tk, p_psm); - } - void on_string_token(Opaque data, const Token & tk, ParserStateMachine * p_psm) override { - return I::on_string_token(_dcast(data), tk, p_psm); - } - void on_semicolon_token(Opaque data, const Token & tk, ParserStateMachine * p_psm) override { - return I::on_semicolon_token(_dcast(data), tk, p_psm); + void on_token(Opaque data, const Token & tk, ParserStateMachine * p_psm) override { + return I::on_token(_dcast(data), tk, p_psm); } void on_parsed_symbol(Opaque data, std::string_view sym, ParserStateMachine * p_psm) override { return I::on_parsed_symbol(_dcast(data), sym, p_psm); diff --git a/xo-reader2/include/xo/reader2/ssm/RSyntaxStateMachine.hpp b/xo-reader2/include/xo/reader2/ssm/RSyntaxStateMachine.hpp index b91381d0..fb1fb496 100644 --- a/xo-reader2/include/xo/reader2/ssm/RSyntaxStateMachine.hpp +++ b/xo-reader2/include/xo/reader2/ssm/RSyntaxStateMachine.hpp @@ -56,35 +56,8 @@ public: } // non-const methods (still const in router!) - void on_symbol_token(const Token & tk, ParserStateMachine * p_psm) { - return O::iface()->on_symbol_token(O::data(), tk, p_psm); - } - void on_def_token(const Token & tk, ParserStateMachine * p_psm) { - return O::iface()->on_def_token(O::data(), tk, p_psm); - } - void on_if_token(const Token & tk, ParserStateMachine * p_psm) { - return O::iface()->on_if_token(O::data(), tk, p_psm); - } - void on_colon_token(const Token & tk, ParserStateMachine * p_psm) { - return O::iface()->on_colon_token(O::data(), tk, p_psm); - } - void on_singleassign_token(const Token & tk, ParserStateMachine * p_psm) { - return O::iface()->on_singleassign_token(O::data(), tk, p_psm); - } - void on_f64_token(const Token & tk, ParserStateMachine * p_psm) { - return O::iface()->on_f64_token(O::data(), tk, p_psm); - } - void on_i64_token(const Token & tk, ParserStateMachine * p_psm) { - return O::iface()->on_i64_token(O::data(), tk, p_psm); - } - void on_bool_token(const Token & tk, ParserStateMachine * p_psm) { - return O::iface()->on_bool_token(O::data(), tk, p_psm); - } - void on_string_token(const Token & tk, ParserStateMachine * p_psm) { - return O::iface()->on_string_token(O::data(), tk, p_psm); - } - void on_semicolon_token(const Token & tk, ParserStateMachine * p_psm) { - return O::iface()->on_semicolon_token(O::data(), tk, p_psm); + void on_token(const Token & tk, ParserStateMachine * p_psm) { + return O::iface()->on_token(O::data(), tk, p_psm); } void on_parsed_symbol(std::string_view sym, ParserStateMachine * p_psm) { return O::iface()->on_parsed_symbol(O::data(), sym, p_psm); diff --git a/xo-reader2/src/reader2/DDefineSsm.cpp b/xo-reader2/src/reader2/DDefineSsm.cpp index 0f4ac7e1..b8c5b0ae 100644 --- a/xo-reader2/src/reader2/DDefineSsm.cpp +++ b/xo-reader2/src/reader2/DDefineSsm.cpp @@ -369,7 +369,9 @@ namespace xo { = with_facet::mkobj(define_ssm); p_psm->push_ssm(ssm); - p_psm->on_def_token(Token::def_token()); + + // note: triggers poly dispatch + p_psm->on_token(Token::def_token()); } syntaxstatetype @@ -489,6 +491,92 @@ namespace xo { this->get_expect_str()); } + void + DDefineSsm::on_token(const Token & tk, + ParserStateMachine * p_psm) + { + scope log(XO_DEBUG(p_psm->debug_flag()), xtag("tk", tk)); + + switch (tk.tk_type()) { + case tokentype::tk_symbol: + this->on_symbol_token(tk, p_psm); + break; + + case tokentype::tk_def: + this->on_def_token(tk, p_psm); + break; + + case tokentype::tk_if: + this->on_if_token(tk, p_psm); + break; + + case tokentype::tk_colon: + this->on_colon_token(tk, p_psm); + break; + + case tokentype::tk_singleassign: + this->on_singleassign_token(tk, p_psm); + break; + + case tokentype::tk_string: + this->on_string_token(tk, p_psm); + break; + + case tokentype::tk_f64: + this->on_f64_token(tk, p_psm); + break; + + case tokentype::tk_i64: + this->on_i64_token(tk, p_psm); + break; + + case tokentype::tk_bool: + this->on_bool_token(tk, p_psm); + break; + + case tokentype::tk_semicolon: + this->on_semicolon_token(tk, p_psm); + break; + + // all the not-yet handled cases + case tokentype::tk_invalid: + case tokentype::tk_leftparen: + case tokentype::tk_rightparen: + case tokentype::tk_leftbracket: + case tokentype::tk_rightbracket: + case tokentype::tk_leftbrace: + case tokentype::tk_rightbrace: + case tokentype::tk_leftangle: + case tokentype::tk_rightangle: + case tokentype::tk_lessequal: + case tokentype::tk_greatequal: + case tokentype::tk_dot: + case tokentype::tk_comma: + case tokentype::tk_doublecolon: + case tokentype::tk_assign: + case tokentype::tk_yields: + case tokentype::tk_plus: + case tokentype::tk_minus: + case tokentype::tk_star: + case tokentype::tk_slash: + case tokentype::tk_cmpeq: + case tokentype::tk_cmpne: + case tokentype::tk_type: + case tokentype::tk_lambda: + case tokentype::tk_then: + case tokentype::tk_else: + case tokentype::tk_let: + case tokentype::tk_in: + case tokentype::tk_end: + case tokentype::N: + break; + } + + p_psm->illegal_input_on_token("DDefineSsm::on_token", + tk, + this->get_expect_str()); + } + void DDefineSsm::on_symbol_token(const Token & tk, ParserStateMachine * p_psm) diff --git a/xo-reader2/src/reader2/DExpectExprSsm.cpp b/xo-reader2/src/reader2/DExpectExprSsm.cpp index a5d46052..fc5dbe08 100644 --- a/xo-reader2/src/reader2/DExpectExprSsm.cpp +++ b/xo-reader2/src/reader2/DExpectExprSsm.cpp @@ -102,6 +102,92 @@ namespace xo { } } + void + DExpectExprSsm::on_token(const Token & tk, + ParserStateMachine * p_psm) + { + scope log(XO_DEBUG(p_psm->debug_flag()), xtag("tk", tk)); + + switch (tk.tk_type()) { + case tokentype::tk_symbol: + this->on_symbol_token(tk, p_psm); + break; + + case tokentype::tk_def: + this->on_def_token(tk, p_psm); + break; + + case tokentype::tk_if: + this->on_if_token(tk, p_psm); + break; + + case tokentype::tk_colon: + this->on_colon_token(tk, p_psm); + break; + + case tokentype::tk_singleassign: + this->on_singleassign_token(tk, p_psm); + break; + + case tokentype::tk_string: + this->on_string_token(tk, p_psm); + break; + + case tokentype::tk_f64: + this->on_f64_token(tk, p_psm); + break; + + case tokentype::tk_i64: + this->on_i64_token(tk, p_psm); + break; + + case tokentype::tk_bool: + this->on_bool_token(tk, p_psm); + break; + + case tokentype::tk_semicolon: + this->on_semicolon_token(tk, p_psm); + break; + + // all the not-yet handled cases + case tokentype::tk_invalid: + case tokentype::tk_leftparen: + case tokentype::tk_rightparen: + case tokentype::tk_leftbracket: + case tokentype::tk_rightbracket: + case tokentype::tk_leftbrace: + case tokentype::tk_rightbrace: + case tokentype::tk_leftangle: + case tokentype::tk_rightangle: + case tokentype::tk_lessequal: + case tokentype::tk_greatequal: + case tokentype::tk_dot: + case tokentype::tk_comma: + case tokentype::tk_doublecolon: + case tokentype::tk_assign: + case tokentype::tk_yields: + case tokentype::tk_plus: + case tokentype::tk_minus: + case tokentype::tk_star: + case tokentype::tk_slash: + case tokentype::tk_cmpeq: + case tokentype::tk_cmpne: + case tokentype::tk_type: + case tokentype::tk_lambda: + case tokentype::tk_then: + case tokentype::tk_else: + case tokentype::tk_let: + case tokentype::tk_in: + case tokentype::tk_end: + case tokentype::N: + break; + } + + p_psm->illegal_input_on_token("DExpectExprSsm::on_token", + tk, + this->get_expect_str()); + } + void DExpectExprSsm::on_symbol_token(const Token & tk, ParserStateMachine * p_psm) diff --git a/xo-reader2/src/reader2/DExpectSymbolSsm.cpp b/xo-reader2/src/reader2/DExpectSymbolSsm.cpp index d41f08da..cbfb1c91 100644 --- a/xo-reader2/src/reader2/DExpectSymbolSsm.cpp +++ b/xo-reader2/src/reader2/DExpectSymbolSsm.cpp @@ -92,6 +92,92 @@ namespace xo { this->get_expect_str()); } + void + DExpectSymbolSsm::on_token(const Token & tk, + ParserStateMachine * p_psm) + { + scope log(XO_DEBUG(p_psm->debug_flag()), xtag("tk", tk)); + + switch (tk.tk_type()) { + case tokentype::tk_symbol: + this->on_symbol_token(tk, p_psm); + break; + + case tokentype::tk_def: + this->on_def_token(tk, p_psm); + break; + + case tokentype::tk_if: + this->on_if_token(tk, p_psm); + break; + + case tokentype::tk_colon: + this->on_colon_token(tk, p_psm); + break; + + case tokentype::tk_singleassign: + this->on_singleassign_token(tk, p_psm); + break; + + case tokentype::tk_string: + this->on_string_token(tk, p_psm); + break; + + case tokentype::tk_f64: + this->on_f64_token(tk, p_psm); + break; + + case tokentype::tk_i64: + this->on_i64_token(tk, p_psm); + break; + + case tokentype::tk_bool: + this->on_bool_token(tk, p_psm); + break; + + case tokentype::tk_semicolon: + this->on_semicolon_token(tk, p_psm); + break; + + // all the not-yet handled cases + case tokentype::tk_invalid: + case tokentype::tk_leftparen: + case tokentype::tk_rightparen: + case tokentype::tk_leftbracket: + case tokentype::tk_rightbracket: + case tokentype::tk_leftbrace: + case tokentype::tk_rightbrace: + case tokentype::tk_leftangle: + case tokentype::tk_rightangle: + case tokentype::tk_lessequal: + case tokentype::tk_greatequal: + case tokentype::tk_dot: + case tokentype::tk_comma: + case tokentype::tk_doublecolon: + case tokentype::tk_assign: + case tokentype::tk_yields: + case tokentype::tk_plus: + case tokentype::tk_minus: + case tokentype::tk_star: + case tokentype::tk_slash: + case tokentype::tk_cmpeq: + case tokentype::tk_cmpne: + case tokentype::tk_type: + case tokentype::tk_lambda: + case tokentype::tk_then: + case tokentype::tk_else: + case tokentype::tk_let: + case tokentype::tk_in: + case tokentype::tk_end: + case tokentype::N: + break; + } + + p_psm->illegal_input_on_token("DExpectSymbolSsm::on_token", + tk, + this->get_expect_str()); + } + void DExpectSymbolSsm::on_symbol_token(const Token & tk, ParserStateMachine * p_psm) diff --git a/xo-reader2/src/reader2/DExpectTypeSsm.cpp b/xo-reader2/src/reader2/DExpectTypeSsm.cpp index b8be164c..2feaee26 100644 --- a/xo-reader2/src/reader2/DExpectTypeSsm.cpp +++ b/xo-reader2/src/reader2/DExpectTypeSsm.cpp @@ -56,6 +56,92 @@ namespace xo { return "typename"; } + void + DExpectTypeSsm::on_token(const Token & tk, + ParserStateMachine * p_psm) + { + scope log(XO_DEBUG(p_psm->debug_flag()), xtag("tk", tk)); + + switch (tk.tk_type()) { + case tokentype::tk_symbol: + this->on_symbol_token(tk, p_psm); + break; + + case tokentype::tk_def: + this->on_def_token(tk, p_psm); + break; + + case tokentype::tk_if: + this->on_if_token(tk, p_psm); + break; + + case tokentype::tk_colon: + this->on_colon_token(tk, p_psm); + break; + + case tokentype::tk_singleassign: + this->on_singleassign_token(tk, p_psm); + break; + + case tokentype::tk_string: + this->on_string_token(tk, p_psm); + break; + + case tokentype::tk_f64: + this->on_f64_token(tk, p_psm); + break; + + case tokentype::tk_i64: + this->on_i64_token(tk, p_psm); + break; + + case tokentype::tk_bool: + this->on_bool_token(tk, p_psm); + break; + + case tokentype::tk_semicolon: + this->on_semicolon_token(tk, p_psm); + break; + + // all the not-yet handled cases + case tokentype::tk_invalid: + case tokentype::tk_leftparen: + case tokentype::tk_rightparen: + case tokentype::tk_leftbracket: + case tokentype::tk_rightbracket: + case tokentype::tk_leftbrace: + case tokentype::tk_rightbrace: + case tokentype::tk_leftangle: + case tokentype::tk_rightangle: + case tokentype::tk_lessequal: + case tokentype::tk_greatequal: + case tokentype::tk_dot: + case tokentype::tk_comma: + case tokentype::tk_doublecolon: + case tokentype::tk_assign: + case tokentype::tk_yields: + case tokentype::tk_plus: + case tokentype::tk_minus: + case tokentype::tk_star: + case tokentype::tk_slash: + case tokentype::tk_cmpeq: + case tokentype::tk_cmpne: + case tokentype::tk_type: + case tokentype::tk_lambda: + case tokentype::tk_then: + case tokentype::tk_else: + case tokentype::tk_let: + case tokentype::tk_in: + case tokentype::tk_end: + case tokentype::N: + break; + } + + p_psm->illegal_input_on_token("DExpectTypeSsm::on_token", + tk, + this->get_expect_str()); + } + void DExpectTypeSsm::on_def_token(const Token & tk, ParserStateMachine * p_psm) diff --git a/xo-reader2/src/reader2/DExprSeqState.cpp b/xo-reader2/src/reader2/DExprSeqState.cpp index 90b9824b..9691d665 100644 --- a/xo-reader2/src/reader2/DExprSeqState.cpp +++ b/xo-reader2/src/reader2/DExprSeqState.cpp @@ -105,6 +105,92 @@ namespace xo { return "impossible-DExprSeqState::get_expr_str"; } + void + DExprSeqState::on_token(const Token & tk, + ParserStateMachine * p_psm) + { + scope log(XO_DEBUG(p_psm->debug_flag()), xtag("tk", tk)); + + switch (tk.tk_type()) { + case tokentype::tk_symbol: + this->on_symbol_token(tk, p_psm); + break; + + case tokentype::tk_def: + this->on_def_token(tk, p_psm); + break; + + case tokentype::tk_if: + this->on_if_token(tk, p_psm); + break; + + case tokentype::tk_colon: + this->on_colon_token(tk, p_psm); + break; + + case tokentype::tk_singleassign: + this->on_singleassign_token(tk, p_psm); + break; + + case tokentype::tk_string: + this->on_string_token(tk, p_psm); + break; + + case tokentype::tk_f64: + this->on_f64_token(tk, p_psm); + break; + + case tokentype::tk_i64: + this->on_i64_token(tk, p_psm); + break; + + case tokentype::tk_bool: + this->on_bool_token(tk, p_psm); + break; + + case tokentype::tk_semicolon: + this->on_semicolon_token(tk, p_psm); + break; + + // all the not-yet handled cases + case tokentype::tk_invalid: + case tokentype::tk_leftparen: + case tokentype::tk_rightparen: + case tokentype::tk_leftbracket: + case tokentype::tk_rightbracket: + case tokentype::tk_leftbrace: + case tokentype::tk_rightbrace: + case tokentype::tk_leftangle: + case tokentype::tk_rightangle: + case tokentype::tk_lessequal: + case tokentype::tk_greatequal: + case tokentype::tk_dot: + case tokentype::tk_comma: + case tokentype::tk_doublecolon: + case tokentype::tk_assign: + case tokentype::tk_yields: + case tokentype::tk_plus: + case tokentype::tk_minus: + case tokentype::tk_star: + case tokentype::tk_slash: + case tokentype::tk_cmpeq: + case tokentype::tk_cmpne: + case tokentype::tk_type: + case tokentype::tk_lambda: + case tokentype::tk_then: + case tokentype::tk_else: + case tokentype::tk_let: + case tokentype::tk_in: + case tokentype::tk_end: + case tokentype::N: + break; + } + + p_psm->illegal_input_on_token("DExprSeqState::on_token", + tk, + this->get_expect_str()); + } + void DExprSeqState::on_symbol_token(const Token & tk, ParserStateMachine * p_psm) diff --git a/xo-reader2/src/reader2/DProgressSsm.cpp b/xo-reader2/src/reader2/DProgressSsm.cpp index 50ec2fbe..a40b6f59 100644 --- a/xo-reader2/src/reader2/DProgressSsm.cpp +++ b/xo-reader2/src/reader2/DProgressSsm.cpp @@ -158,6 +158,92 @@ namespace xo { } } + void + DProgressSsm::on_token(const Token & tk, + ParserStateMachine * p_psm) + { + scope log(XO_DEBUG(p_psm->debug_flag()), xtag("tk", tk)); + + switch (tk.tk_type()) { + case tokentype::tk_symbol: + this->on_symbol_token(tk, p_psm); + break; + + case tokentype::tk_def: + this->on_def_token(tk, p_psm); + break; + + case tokentype::tk_if: + this->on_if_token(tk, p_psm); + break; + + case tokentype::tk_colon: + this->on_colon_token(tk, p_psm); + break; + + case tokentype::tk_singleassign: + this->on_singleassign_token(tk, p_psm); + break; + + case tokentype::tk_string: + this->on_string_token(tk, p_psm); + break; + + case tokentype::tk_f64: + this->on_f64_token(tk, p_psm); + break; + + case tokentype::tk_i64: + this->on_i64_token(tk, p_psm); + break; + + case tokentype::tk_bool: + this->on_bool_token(tk, p_psm); + break; + + case tokentype::tk_semicolon: + this->on_semicolon_token(tk, p_psm); + break; + + // all the not-yet handled cases + case tokentype::tk_invalid: + case tokentype::tk_leftparen: + case tokentype::tk_rightparen: + case tokentype::tk_leftbracket: + case tokentype::tk_rightbracket: + case tokentype::tk_leftbrace: + case tokentype::tk_rightbrace: + case tokentype::tk_leftangle: + case tokentype::tk_rightangle: + case tokentype::tk_lessequal: + case tokentype::tk_greatequal: + case tokentype::tk_dot: + case tokentype::tk_comma: + case tokentype::tk_doublecolon: + case tokentype::tk_assign: + case tokentype::tk_yields: + case tokentype::tk_plus: + case tokentype::tk_minus: + case tokentype::tk_star: + case tokentype::tk_slash: + case tokentype::tk_cmpeq: + case tokentype::tk_cmpne: + case tokentype::tk_type: + case tokentype::tk_lambda: + case tokentype::tk_then: + case tokentype::tk_else: + case tokentype::tk_let: + case tokentype::tk_in: + case tokentype::tk_end: + case tokentype::N: + break; + } + + p_psm->illegal_input_on_token("DProgressSsm::on_token", + tk, + this->get_expect_str()); + } + void DProgressSsm::on_symbol_token(const Token & tk, ParserStateMachine * p_psm) diff --git a/xo-reader2/src/reader2/ISyntaxStateMachine_Any.cpp b/xo-reader2/src/reader2/ISyntaxStateMachine_Any.cpp index f270c352..4cfb72a7 100644 --- a/xo-reader2/src/reader2/ISyntaxStateMachine_Any.cpp +++ b/xo-reader2/src/reader2/ISyntaxStateMachine_Any.cpp @@ -35,61 +35,7 @@ ISyntaxStateMachine_Any::_valid // nonconst methods auto -ISyntaxStateMachine_Any::on_symbol_token(Opaque, const Token &, ParserStateMachine *) -> void -{ - _fatal(); -} - -auto -ISyntaxStateMachine_Any::on_def_token(Opaque, const Token &, ParserStateMachine *) -> void -{ - _fatal(); -} - -auto -ISyntaxStateMachine_Any::on_if_token(Opaque, const Token &, ParserStateMachine *) -> void -{ - _fatal(); -} - -auto -ISyntaxStateMachine_Any::on_colon_token(Opaque, const Token &, ParserStateMachine *) -> void -{ - _fatal(); -} - -auto -ISyntaxStateMachine_Any::on_singleassign_token(Opaque, const Token &, ParserStateMachine *) -> void -{ - _fatal(); -} - -auto -ISyntaxStateMachine_Any::on_f64_token(Opaque, const Token &, ParserStateMachine *) -> void -{ - _fatal(); -} - -auto -ISyntaxStateMachine_Any::on_i64_token(Opaque, const Token &, ParserStateMachine *) -> void -{ - _fatal(); -} - -auto -ISyntaxStateMachine_Any::on_bool_token(Opaque, const Token &, ParserStateMachine *) -> void -{ - _fatal(); -} - -auto -ISyntaxStateMachine_Any::on_string_token(Opaque, const Token &, ParserStateMachine *) -> void -{ - _fatal(); -} - -auto -ISyntaxStateMachine_Any::on_semicolon_token(Opaque, const Token &, ParserStateMachine *) -> void +ISyntaxStateMachine_Any::on_token(Opaque, const Token &, ParserStateMachine *) -> void { _fatal(); } diff --git a/xo-reader2/src/reader2/ISyntaxStateMachine_DDefineSsm.cpp b/xo-reader2/src/reader2/ISyntaxStateMachine_DDefineSsm.cpp index c39c51b2..85c2a8f0 100644 --- a/xo-reader2/src/reader2/ISyntaxStateMachine_DDefineSsm.cpp +++ b/xo-reader2/src/reader2/ISyntaxStateMachine_DDefineSsm.cpp @@ -28,54 +28,9 @@ namespace xo { } auto - ISyntaxStateMachine_DDefineSsm::on_symbol_token(DDefineSsm & self, const Token & tk, ParserStateMachine * p_psm) -> void + ISyntaxStateMachine_DDefineSsm::on_token(DDefineSsm & self, const Token & tk, ParserStateMachine * p_psm) -> void { - self.on_symbol_token(tk, p_psm); - } - auto - ISyntaxStateMachine_DDefineSsm::on_def_token(DDefineSsm & self, const Token & tk, ParserStateMachine * p_psm) -> void - { - self.on_def_token(tk, p_psm); - } - auto - ISyntaxStateMachine_DDefineSsm::on_if_token(DDefineSsm & self, const Token & tk, ParserStateMachine * p_psm) -> void - { - self.on_if_token(tk, p_psm); - } - auto - ISyntaxStateMachine_DDefineSsm::on_colon_token(DDefineSsm & self, const Token & tk, ParserStateMachine * p_psm) -> void - { - self.on_colon_token(tk, p_psm); - } - auto - ISyntaxStateMachine_DDefineSsm::on_singleassign_token(DDefineSsm & self, const Token & tk, ParserStateMachine * p_psm) -> void - { - self.on_singleassign_token(tk, p_psm); - } - auto - ISyntaxStateMachine_DDefineSsm::on_f64_token(DDefineSsm & self, const Token & tk, ParserStateMachine * p_psm) -> void - { - self.on_f64_token(tk, p_psm); - } - auto - ISyntaxStateMachine_DDefineSsm::on_i64_token(DDefineSsm & self, const Token & tk, ParserStateMachine * p_psm) -> void - { - self.on_i64_token(tk, p_psm); - } - auto - ISyntaxStateMachine_DDefineSsm::on_bool_token(DDefineSsm & self, const Token & tk, ParserStateMachine * p_psm) -> void - { - self.on_bool_token(tk, p_psm); - } - auto - ISyntaxStateMachine_DDefineSsm::on_string_token(DDefineSsm & self, const Token & tk, ParserStateMachine * p_psm) -> void - { - self.on_string_token(tk, p_psm); - } - auto - ISyntaxStateMachine_DDefineSsm::on_semicolon_token(DDefineSsm & self, const Token & tk, ParserStateMachine * p_psm) -> void - { - self.on_semicolon_token(tk, p_psm); + self.on_token(tk, p_psm); } auto ISyntaxStateMachine_DDefineSsm::on_parsed_symbol(DDefineSsm & self, std::string_view sym, ParserStateMachine * p_psm) -> void diff --git a/xo-reader2/src/reader2/ISyntaxStateMachine_DExpectExprSsm.cpp b/xo-reader2/src/reader2/ISyntaxStateMachine_DExpectExprSsm.cpp index 0e5efa5d..e545eedd 100644 --- a/xo-reader2/src/reader2/ISyntaxStateMachine_DExpectExprSsm.cpp +++ b/xo-reader2/src/reader2/ISyntaxStateMachine_DExpectExprSsm.cpp @@ -28,54 +28,9 @@ namespace xo { } auto - ISyntaxStateMachine_DExpectExprSsm::on_symbol_token(DExpectExprSsm & self, const Token & tk, ParserStateMachine * p_psm) -> void + ISyntaxStateMachine_DExpectExprSsm::on_token(DExpectExprSsm & self, const Token & tk, ParserStateMachine * p_psm) -> void { - self.on_symbol_token(tk, p_psm); - } - auto - ISyntaxStateMachine_DExpectExprSsm::on_def_token(DExpectExprSsm & self, const Token & tk, ParserStateMachine * p_psm) -> void - { - self.on_def_token(tk, p_psm); - } - auto - ISyntaxStateMachine_DExpectExprSsm::on_if_token(DExpectExprSsm & self, const Token & tk, ParserStateMachine * p_psm) -> void - { - self.on_if_token(tk, p_psm); - } - auto - ISyntaxStateMachine_DExpectExprSsm::on_colon_token(DExpectExprSsm & self, const Token & tk, ParserStateMachine * p_psm) -> void - { - self.on_colon_token(tk, p_psm); - } - auto - ISyntaxStateMachine_DExpectExprSsm::on_singleassign_token(DExpectExprSsm & self, const Token & tk, ParserStateMachine * p_psm) -> void - { - self.on_singleassign_token(tk, p_psm); - } - auto - ISyntaxStateMachine_DExpectExprSsm::on_f64_token(DExpectExprSsm & self, const Token & tk, ParserStateMachine * p_psm) -> void - { - self.on_f64_token(tk, p_psm); - } - auto - ISyntaxStateMachine_DExpectExprSsm::on_i64_token(DExpectExprSsm & self, const Token & tk, ParserStateMachine * p_psm) -> void - { - self.on_i64_token(tk, p_psm); - } - auto - ISyntaxStateMachine_DExpectExprSsm::on_bool_token(DExpectExprSsm & self, const Token & tk, ParserStateMachine * p_psm) -> void - { - self.on_bool_token(tk, p_psm); - } - auto - ISyntaxStateMachine_DExpectExprSsm::on_string_token(DExpectExprSsm & self, const Token & tk, ParserStateMachine * p_psm) -> void - { - self.on_string_token(tk, p_psm); - } - auto - ISyntaxStateMachine_DExpectExprSsm::on_semicolon_token(DExpectExprSsm & self, const Token & tk, ParserStateMachine * p_psm) -> void - { - self.on_semicolon_token(tk, p_psm); + self.on_token(tk, p_psm); } auto ISyntaxStateMachine_DExpectExprSsm::on_parsed_symbol(DExpectExprSsm & self, std::string_view sym, ParserStateMachine * p_psm) -> void diff --git a/xo-reader2/src/reader2/ISyntaxStateMachine_DExpectSymbolSsm.cpp b/xo-reader2/src/reader2/ISyntaxStateMachine_DExpectSymbolSsm.cpp index 0b47c31a..0a35bb71 100644 --- a/xo-reader2/src/reader2/ISyntaxStateMachine_DExpectSymbolSsm.cpp +++ b/xo-reader2/src/reader2/ISyntaxStateMachine_DExpectSymbolSsm.cpp @@ -28,54 +28,9 @@ namespace xo { } auto - ISyntaxStateMachine_DExpectSymbolSsm::on_symbol_token(DExpectSymbolSsm & self, const Token & tk, ParserStateMachine * p_psm) -> void + ISyntaxStateMachine_DExpectSymbolSsm::on_token(DExpectSymbolSsm & self, const Token & tk, ParserStateMachine * p_psm) -> void { - self.on_symbol_token(tk, p_psm); - } - auto - ISyntaxStateMachine_DExpectSymbolSsm::on_def_token(DExpectSymbolSsm & self, const Token & tk, ParserStateMachine * p_psm) -> void - { - self.on_def_token(tk, p_psm); - } - auto - ISyntaxStateMachine_DExpectSymbolSsm::on_if_token(DExpectSymbolSsm & self, const Token & tk, ParserStateMachine * p_psm) -> void - { - self.on_if_token(tk, p_psm); - } - auto - ISyntaxStateMachine_DExpectSymbolSsm::on_colon_token(DExpectSymbolSsm & self, const Token & tk, ParserStateMachine * p_psm) -> void - { - self.on_colon_token(tk, p_psm); - } - auto - ISyntaxStateMachine_DExpectSymbolSsm::on_singleassign_token(DExpectSymbolSsm & self, const Token & tk, ParserStateMachine * p_psm) -> void - { - self.on_singleassign_token(tk, p_psm); - } - auto - ISyntaxStateMachine_DExpectSymbolSsm::on_f64_token(DExpectSymbolSsm & self, const Token & tk, ParserStateMachine * p_psm) -> void - { - self.on_f64_token(tk, p_psm); - } - auto - ISyntaxStateMachine_DExpectSymbolSsm::on_i64_token(DExpectSymbolSsm & self, const Token & tk, ParserStateMachine * p_psm) -> void - { - self.on_i64_token(tk, p_psm); - } - auto - ISyntaxStateMachine_DExpectSymbolSsm::on_bool_token(DExpectSymbolSsm & self, const Token & tk, ParserStateMachine * p_psm) -> void - { - self.on_bool_token(tk, p_psm); - } - auto - ISyntaxStateMachine_DExpectSymbolSsm::on_string_token(DExpectSymbolSsm & self, const Token & tk, ParserStateMachine * p_psm) -> void - { - self.on_string_token(tk, p_psm); - } - auto - ISyntaxStateMachine_DExpectSymbolSsm::on_semicolon_token(DExpectSymbolSsm & self, const Token & tk, ParserStateMachine * p_psm) -> void - { - self.on_semicolon_token(tk, p_psm); + self.on_token(tk, p_psm); } auto ISyntaxStateMachine_DExpectSymbolSsm::on_parsed_symbol(DExpectSymbolSsm & self, std::string_view sym, ParserStateMachine * p_psm) -> void diff --git a/xo-reader2/src/reader2/ISyntaxStateMachine_DExpectTypeSsm.cpp b/xo-reader2/src/reader2/ISyntaxStateMachine_DExpectTypeSsm.cpp index 515b81a8..4b6950ab 100644 --- a/xo-reader2/src/reader2/ISyntaxStateMachine_DExpectTypeSsm.cpp +++ b/xo-reader2/src/reader2/ISyntaxStateMachine_DExpectTypeSsm.cpp @@ -28,54 +28,9 @@ namespace xo { } auto - ISyntaxStateMachine_DExpectTypeSsm::on_symbol_token(DExpectTypeSsm & self, const Token & tk, ParserStateMachine * p_psm) -> void + ISyntaxStateMachine_DExpectTypeSsm::on_token(DExpectTypeSsm & self, const Token & tk, ParserStateMachine * p_psm) -> void { - self.on_symbol_token(tk, p_psm); - } - auto - ISyntaxStateMachine_DExpectTypeSsm::on_def_token(DExpectTypeSsm & self, const Token & tk, ParserStateMachine * p_psm) -> void - { - self.on_def_token(tk, p_psm); - } - auto - ISyntaxStateMachine_DExpectTypeSsm::on_if_token(DExpectTypeSsm & self, const Token & tk, ParserStateMachine * p_psm) -> void - { - self.on_if_token(tk, p_psm); - } - auto - ISyntaxStateMachine_DExpectTypeSsm::on_colon_token(DExpectTypeSsm & self, const Token & tk, ParserStateMachine * p_psm) -> void - { - self.on_colon_token(tk, p_psm); - } - auto - ISyntaxStateMachine_DExpectTypeSsm::on_singleassign_token(DExpectTypeSsm & self, const Token & tk, ParserStateMachine * p_psm) -> void - { - self.on_singleassign_token(tk, p_psm); - } - auto - ISyntaxStateMachine_DExpectTypeSsm::on_f64_token(DExpectTypeSsm & self, const Token & tk, ParserStateMachine * p_psm) -> void - { - self.on_f64_token(tk, p_psm); - } - auto - ISyntaxStateMachine_DExpectTypeSsm::on_i64_token(DExpectTypeSsm & self, const Token & tk, ParserStateMachine * p_psm) -> void - { - self.on_i64_token(tk, p_psm); - } - auto - ISyntaxStateMachine_DExpectTypeSsm::on_bool_token(DExpectTypeSsm & self, const Token & tk, ParserStateMachine * p_psm) -> void - { - self.on_bool_token(tk, p_psm); - } - auto - ISyntaxStateMachine_DExpectTypeSsm::on_string_token(DExpectTypeSsm & self, const Token & tk, ParserStateMachine * p_psm) -> void - { - self.on_string_token(tk, p_psm); - } - auto - ISyntaxStateMachine_DExpectTypeSsm::on_semicolon_token(DExpectTypeSsm & self, const Token & tk, ParserStateMachine * p_psm) -> void - { - self.on_semicolon_token(tk, p_psm); + self.on_token(tk, p_psm); } auto ISyntaxStateMachine_DExpectTypeSsm::on_parsed_symbol(DExpectTypeSsm & self, std::string_view sym, ParserStateMachine * p_psm) -> void diff --git a/xo-reader2/src/reader2/ISyntaxStateMachine_DExprSeqState.cpp b/xo-reader2/src/reader2/ISyntaxStateMachine_DExprSeqState.cpp index 04cc4516..af5d3cc9 100644 --- a/xo-reader2/src/reader2/ISyntaxStateMachine_DExprSeqState.cpp +++ b/xo-reader2/src/reader2/ISyntaxStateMachine_DExprSeqState.cpp @@ -28,54 +28,9 @@ namespace xo { } auto - ISyntaxStateMachine_DExprSeqState::on_symbol_token(DExprSeqState & self, const Token & tk, ParserStateMachine * p_psm) -> void + ISyntaxStateMachine_DExprSeqState::on_token(DExprSeqState & self, const Token & tk, ParserStateMachine * p_psm) -> void { - self.on_symbol_token(tk, p_psm); - } - auto - ISyntaxStateMachine_DExprSeqState::on_def_token(DExprSeqState & self, const Token & tk, ParserStateMachine * p_psm) -> void - { - self.on_def_token(tk, p_psm); - } - auto - ISyntaxStateMachine_DExprSeqState::on_if_token(DExprSeqState & self, const Token & tk, ParserStateMachine * p_psm) -> void - { - self.on_if_token(tk, p_psm); - } - auto - ISyntaxStateMachine_DExprSeqState::on_colon_token(DExprSeqState & self, const Token & tk, ParserStateMachine * p_psm) -> void - { - self.on_colon_token(tk, p_psm); - } - auto - ISyntaxStateMachine_DExprSeqState::on_singleassign_token(DExprSeqState & self, const Token & tk, ParserStateMachine * p_psm) -> void - { - self.on_singleassign_token(tk, p_psm); - } - auto - ISyntaxStateMachine_DExprSeqState::on_f64_token(DExprSeqState & self, const Token & tk, ParserStateMachine * p_psm) -> void - { - self.on_f64_token(tk, p_psm); - } - auto - ISyntaxStateMachine_DExprSeqState::on_i64_token(DExprSeqState & self, const Token & tk, ParserStateMachine * p_psm) -> void - { - self.on_i64_token(tk, p_psm); - } - auto - ISyntaxStateMachine_DExprSeqState::on_bool_token(DExprSeqState & self, const Token & tk, ParserStateMachine * p_psm) -> void - { - self.on_bool_token(tk, p_psm); - } - auto - ISyntaxStateMachine_DExprSeqState::on_string_token(DExprSeqState & self, const Token & tk, ParserStateMachine * p_psm) -> void - { - self.on_string_token(tk, p_psm); - } - auto - ISyntaxStateMachine_DExprSeqState::on_semicolon_token(DExprSeqState & self, const Token & tk, ParserStateMachine * p_psm) -> void - { - self.on_semicolon_token(tk, p_psm); + self.on_token(tk, p_psm); } auto ISyntaxStateMachine_DExprSeqState::on_parsed_symbol(DExprSeqState & self, std::string_view sym, ParserStateMachine * p_psm) -> void diff --git a/xo-reader2/src/reader2/ISyntaxStateMachine_DProgressSsm.cpp b/xo-reader2/src/reader2/ISyntaxStateMachine_DProgressSsm.cpp index 28b69cfb..1fdd6c90 100644 --- a/xo-reader2/src/reader2/ISyntaxStateMachine_DProgressSsm.cpp +++ b/xo-reader2/src/reader2/ISyntaxStateMachine_DProgressSsm.cpp @@ -28,54 +28,9 @@ namespace xo { } auto - ISyntaxStateMachine_DProgressSsm::on_symbol_token(DProgressSsm & self, const Token & tk, ParserStateMachine * p_psm) -> void + ISyntaxStateMachine_DProgressSsm::on_token(DProgressSsm & self, const Token & tk, ParserStateMachine * p_psm) -> void { - self.on_symbol_token(tk, p_psm); - } - auto - ISyntaxStateMachine_DProgressSsm::on_def_token(DProgressSsm & self, const Token & tk, ParserStateMachine * p_psm) -> void - { - self.on_def_token(tk, p_psm); - } - auto - ISyntaxStateMachine_DProgressSsm::on_if_token(DProgressSsm & self, const Token & tk, ParserStateMachine * p_psm) -> void - { - self.on_if_token(tk, p_psm); - } - auto - ISyntaxStateMachine_DProgressSsm::on_colon_token(DProgressSsm & self, const Token & tk, ParserStateMachine * p_psm) -> void - { - self.on_colon_token(tk, p_psm); - } - auto - ISyntaxStateMachine_DProgressSsm::on_singleassign_token(DProgressSsm & self, const Token & tk, ParserStateMachine * p_psm) -> void - { - self.on_singleassign_token(tk, p_psm); - } - auto - ISyntaxStateMachine_DProgressSsm::on_f64_token(DProgressSsm & self, const Token & tk, ParserStateMachine * p_psm) -> void - { - self.on_f64_token(tk, p_psm); - } - auto - ISyntaxStateMachine_DProgressSsm::on_i64_token(DProgressSsm & self, const Token & tk, ParserStateMachine * p_psm) -> void - { - self.on_i64_token(tk, p_psm); - } - auto - ISyntaxStateMachine_DProgressSsm::on_bool_token(DProgressSsm & self, const Token & tk, ParserStateMachine * p_psm) -> void - { - self.on_bool_token(tk, p_psm); - } - auto - ISyntaxStateMachine_DProgressSsm::on_string_token(DProgressSsm & self, const Token & tk, ParserStateMachine * p_psm) -> void - { - self.on_string_token(tk, p_psm); - } - auto - ISyntaxStateMachine_DProgressSsm::on_semicolon_token(DProgressSsm & self, const Token & tk, ParserStateMachine * p_psm) -> void - { - self.on_semicolon_token(tk, p_psm); + self.on_token(tk, p_psm); } auto ISyntaxStateMachine_DProgressSsm::on_parsed_symbol(DProgressSsm & self, std::string_view sym, ParserStateMachine * p_psm) -> void diff --git a/xo-reader2/src/reader2/ParserStateMachine.cpp b/xo-reader2/src/reader2/ParserStateMachine.cpp index adc14f1b..2d9e4970 100644 --- a/xo-reader2/src/reader2/ParserStateMachine.cpp +++ b/xo-reader2/src/reader2/ParserStateMachine.cpp @@ -162,163 +162,7 @@ namespace xo { )); } - switch (tk.tk_type()) { - case tokentype::tk_symbol: - this->on_symbol_token(tk); - break; - - case tokentype::tk_def: - this->on_def_token(tk); - break; - - case tokentype::tk_if: - this->on_if_token(tk); - break; - - case tokentype::tk_colon: - this->on_colon_token(tk); - break; - - case tokentype::tk_singleassign: - this->on_singleassign_token(tk); - break; - - case tokentype::tk_string: - this->on_string_token(tk); - break; - - case tokentype::tk_f64: - this->on_f64_token(tk); - break; - - case tokentype::tk_i64: - this->on_i64_token(tk); - break; - - case tokentype::tk_bool: - this->on_bool_token(tk); - break; - - case tokentype::tk_semicolon: - this->on_semicolon_token(tk); - break; - - // all the not-yet handled cases - case tokentype::tk_invalid: - case tokentype::tk_leftparen: - case tokentype::tk_rightparen: - case tokentype::tk_leftbracket: - case tokentype::tk_rightbracket: - case tokentype::tk_leftbrace: - case tokentype::tk_rightbrace: - case tokentype::tk_leftangle: - case tokentype::tk_rightangle: - case tokentype::tk_lessequal: - case tokentype::tk_greatequal: - case tokentype::tk_dot: - case tokentype::tk_comma: - case tokentype::tk_doublecolon: - case tokentype::tk_assign: - case tokentype::tk_yields: - case tokentype::tk_plus: - case tokentype::tk_minus: - case tokentype::tk_star: - case tokentype::tk_slash: - case tokentype::tk_cmpeq: - case tokentype::tk_cmpne: - case tokentype::tk_type: - case tokentype::tk_lambda: - case tokentype::tk_then: - case tokentype::tk_else: - case tokentype::tk_let: - case tokentype::tk_in: - case tokentype::tk_end: - case tokentype::N: - throw std::runtime_error(tostr("ParserStateMachin::on_token:", - "NOT IMPLEMENTED", - xtag("token", tk))); - - } - } - - void - ParserStateMachine::on_symbol_token(const Token & tk) - { - scope log(XO_DEBUG(debug_flag_), xtag("tk", tk)); - - stack_->top().on_symbol_token(tk, this); - } - - void - ParserStateMachine::on_def_token(const Token & tk) - { - scope log(XO_DEBUG(debug_flag_), xtag("tk", tk)); - - stack_->top().on_def_token(tk, this); - } - - void - ParserStateMachine::on_if_token(const Token & tk) - { - scope log(XO_DEBUG(debug_flag_), xtag("tk", tk)); - - stack_->top().on_if_token(tk, this); - } - - void - ParserStateMachine::on_colon_token(const Token & tk) - { - scope log(XO_DEBUG(debug_flag_), xtag("tk", tk)); - - stack_->top().on_colon_token(tk, this); - } - - void - ParserStateMachine::on_singleassign_token(const Token & tk) - { - scope log(XO_DEBUG(debug_flag_), xtag("tk", tk)); - - stack_->top().on_singleassign_token(tk, this); - } - - void - ParserStateMachine::on_string_token(const Token & tk) - { - scope log(XO_DEBUG(debug_flag_), xtag("tk", tk)); - - stack_->top().on_string_token(tk, this); - } - - void - ParserStateMachine::on_f64_token(const Token & tk) - { - scope log(XO_DEBUG(debug_flag_), xtag("tk", tk)); - - stack_->top().on_f64_token(tk, this); - } - - void - ParserStateMachine::on_i64_token(const Token & tk) - { - scope log(XO_DEBUG(debug_flag_), xtag("tk", tk)); - - stack_->top().on_i64_token(tk, this); - } - - void - ParserStateMachine::on_bool_token(const Token & tk) - { - scope log(XO_DEBUG(debug_flag_), xtag("tk", tk)); - - stack_->top().on_bool_token(tk, this); - } - - void - ParserStateMachine::on_semicolon_token(const Token & tk) - { - scope log(XO_DEBUG(debug_flag_), xtag("tk", tk)); - - stack_->top().on_semicolon_token(tk, this); + stack_->top().on_token(tk, this); } void