From be412cb5aef734f5ee2e4ae99f9b5fbaddd5e92b Mon Sep 17 00:00:00 2001 From: Roland Conybeare Date: Sat, 10 Aug 2024 16:20:51 -0500 Subject: [PATCH] xo-reader: refactor: + expect_symbol_xs [wip] --- include/xo/reader/expect_symbol_xs.hpp | 27 ++++++++++++++++++++++++++ include/xo/reader/exprstate.hpp | 2 ++ src/reader/CMakeLists.txt | 3 ++- src/reader/expect_symbol_xs.cpp | 23 ++++++++++++++++++++++ src/reader/exprseq_xs.cpp | 3 ++- src/reader/exprstate.cpp | 6 ------ 6 files changed, 56 insertions(+), 8 deletions(-) create mode 100644 include/xo/reader/expect_symbol_xs.hpp create mode 100644 src/reader/expect_symbol_xs.cpp diff --git a/include/xo/reader/expect_symbol_xs.hpp b/include/xo/reader/expect_symbol_xs.hpp new file mode 100644 index 00000000..103b89aa --- /dev/null +++ b/include/xo/reader/expect_symbol_xs.hpp @@ -0,0 +1,27 @@ +/* file expect_symbol_xs.hpp + * + * author: Roland Conybeare, Aug 2024 + */ + +#pragma once + +#include "exprstate.hpp" + +namespace xo { + namespace scm { + /** @class expect_symbol_xs + * @brief state machine to expect + capture a symbol + * + * For example, lhs in a define-expression + **/ + class expect_symbol_xs : public exprstate { + public: + expect_symbol_xs(); + + static std::unique_ptr expect_symbol_expression(); + }; + } /*namespace scm*/ +} /*namespace xo*/ + + +/* end expect_symbol_xs.hpp */ diff --git a/include/xo/reader/exprstate.hpp b/include/xo/reader/exprstate.hpp index 9f20dfd8..7f643921 100644 --- a/include/xo/reader/exprstate.hpp +++ b/include/xo/reader/exprstate.hpp @@ -70,9 +70,11 @@ namespace xo { {} virtual ~exprstate() = default; +#ifdef RELOCATED static std::unique_ptr expect_symbol() { return std::make_unique(exprstate(exprstatetype::expect_symbol)); } +#endif static std::unique_ptr expect_type() { return std::make_unique(exprstate(exprstatetype::expect_type)); } diff --git a/src/reader/CMakeLists.txt b/src/reader/CMakeLists.txt index 77a06a63..473c9a93 100644 --- a/src/reader/CMakeLists.txt +++ b/src/reader/CMakeLists.txt @@ -9,7 +9,8 @@ set(SELF_SRCS progress_xs.cpp paren_xs.cpp exprseq_xs.cpp - expect_expr_xs.cpp) + expect_expr_xs.cpp + expect_symbol_xs.cpp) xo_add_shared_library4(${SELF_LIB} ${PROJECT_NAME}Targets ${PROJECT_VERSION} 1 ${SELF_SRCS}) xo_dependency(${SELF_LIB} xo_expression) diff --git a/src/reader/expect_symbol_xs.cpp b/src/reader/expect_symbol_xs.cpp new file mode 100644 index 00000000..afc8bf6e --- /dev/null +++ b/src/reader/expect_symbol_xs.cpp @@ -0,0 +1,23 @@ +/* file expect_symbol_xs.cpp + * + * author: Roland Conybeare + */ + +#include "expect_symbol_xs.hpp" + +namespace xo { + namespace scm { + std::unique_ptr + expect_symbol_xs::expect_symbol_expression() { + return std::make_unique(expect_symbol_xs()); + } + + expect_symbol_xs::expect_symbol_xs() + : exprstate(exprstatetype::expect_symbol) + {} + + } /*namespace scm*/ +} /*namespace xo*/ + + +/* end expect_symbol_xs.cpp */ diff --git a/src/reader/exprseq_xs.cpp b/src/reader/exprseq_xs.cpp index 502f129f..042c5eb3 100644 --- a/src/reader/exprseq_xs.cpp +++ b/src/reader/exprseq_xs.cpp @@ -2,6 +2,7 @@ #include "exprseq_xs.hpp" #include "define_xs.hpp" +#include "expect_symbol_xs.hpp" namespace xo { namespace scm { @@ -30,7 +31,7 @@ namespace xo { /* todo: replace: * expect_symbol_or_function_signature() */ - p_stack->push_exprstate(exprstate::expect_symbol()); + p_stack->push_exprstate(expect_symbol_xs::expect_symbol_expression()); /* keyword 'def' introduces a definition: * def pi : f64 = 3.14159265 diff --git a/src/reader/exprstate.cpp b/src/reader/exprstate.cpp index 540bcaaa..9c083656 100644 --- a/src/reader/exprstate.cpp +++ b/src/reader/exprstate.cpp @@ -87,9 +87,6 @@ namespace xo { return false; case exprstatetype::expect_rhs_expression: - /* rhs-expressions (or expressions for that matter) - * may not begin with a colon - */ case exprstatetype::expect_symbol: case exprstatetype::expect_type: return false; @@ -155,9 +152,6 @@ namespace xo { return false; case exprstatetype::expect_rhs_expression: - /* rhs-expressions (or expressions for that matter) - * may not begin with singleassign '=' - */ case exprstatetype::expect_symbol: case exprstatetype::expect_type: return false;