xo-reader: refactor: + expect_symbol_xs [wip]

This commit is contained in:
Roland Conybeare 2024-08-10 16:20:51 -05:00
commit be412cb5ae
6 changed files with 56 additions and 8 deletions

View file

@ -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_xs> expect_symbol_expression();
};
} /*namespace scm*/
} /*namespace xo*/
/* end expect_symbol_xs.hpp */

View file

@ -70,9 +70,11 @@ namespace xo {
{}
virtual ~exprstate() = default;
#ifdef RELOCATED
static std::unique_ptr<exprstate> expect_symbol() {
return std::make_unique<exprstate>(exprstate(exprstatetype::expect_symbol));
}
#endif
static std::unique_ptr<exprstate> expect_type() {
return std::make_unique<exprstate>(exprstate(exprstatetype::expect_type));
}

View file

@ -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)

View file

@ -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_xs::expect_symbol_expression() {
return std::make_unique<expect_symbol_xs>(expect_symbol_xs());
}
expect_symbol_xs::expect_symbol_xs()
: exprstate(exprstatetype::expect_symbol)
{}
} /*namespace scm*/
} /*namespace xo*/
/* end expect_symbol_xs.cpp */

View file

@ -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

View file

@ -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;