xo-reader: refactor: + expect_symbol_xs [wip]
This commit is contained in:
parent
d1d72f9fc9
commit
be412cb5ae
6 changed files with 56 additions and 8 deletions
27
include/xo/reader/expect_symbol_xs.hpp
Normal file
27
include/xo/reader/expect_symbol_xs.hpp
Normal 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 */
|
||||||
|
|
@ -70,9 +70,11 @@ namespace xo {
|
||||||
{}
|
{}
|
||||||
virtual ~exprstate() = default;
|
virtual ~exprstate() = default;
|
||||||
|
|
||||||
|
#ifdef RELOCATED
|
||||||
static std::unique_ptr<exprstate> expect_symbol() {
|
static std::unique_ptr<exprstate> expect_symbol() {
|
||||||
return std::make_unique<exprstate>(exprstate(exprstatetype::expect_symbol));
|
return std::make_unique<exprstate>(exprstate(exprstatetype::expect_symbol));
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
static std::unique_ptr<exprstate> expect_type() {
|
static std::unique_ptr<exprstate> expect_type() {
|
||||||
return std::make_unique<exprstate>(exprstate(exprstatetype::expect_type));
|
return std::make_unique<exprstate>(exprstate(exprstatetype::expect_type));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,8 @@ set(SELF_SRCS
|
||||||
progress_xs.cpp
|
progress_xs.cpp
|
||||||
paren_xs.cpp
|
paren_xs.cpp
|
||||||
exprseq_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_add_shared_library4(${SELF_LIB} ${PROJECT_NAME}Targets ${PROJECT_VERSION} 1 ${SELF_SRCS})
|
||||||
xo_dependency(${SELF_LIB} xo_expression)
|
xo_dependency(${SELF_LIB} xo_expression)
|
||||||
|
|
|
||||||
23
src/reader/expect_symbol_xs.cpp
Normal file
23
src/reader/expect_symbol_xs.cpp
Normal 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 */
|
||||||
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
#include "exprseq_xs.hpp"
|
#include "exprseq_xs.hpp"
|
||||||
#include "define_xs.hpp"
|
#include "define_xs.hpp"
|
||||||
|
#include "expect_symbol_xs.hpp"
|
||||||
|
|
||||||
namespace xo {
|
namespace xo {
|
||||||
namespace scm {
|
namespace scm {
|
||||||
|
|
@ -30,7 +31,7 @@ namespace xo {
|
||||||
/* todo: replace:
|
/* todo: replace:
|
||||||
* expect_symbol_or_function_signature()
|
* 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:
|
/* keyword 'def' introduces a definition:
|
||||||
* def pi : f64 = 3.14159265
|
* def pi : f64 = 3.14159265
|
||||||
|
|
|
||||||
|
|
@ -87,9 +87,6 @@ namespace xo {
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
case exprstatetype::expect_rhs_expression:
|
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_symbol:
|
||||||
case exprstatetype::expect_type:
|
case exprstatetype::expect_type:
|
||||||
return false;
|
return false;
|
||||||
|
|
@ -155,9 +152,6 @@ namespace xo {
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
case exprstatetype::expect_rhs_expression:
|
case exprstatetype::expect_rhs_expression:
|
||||||
/* rhs-expressions (or expressions for that matter)
|
|
||||||
* may not begin with singleassign '='
|
|
||||||
*/
|
|
||||||
case exprstatetype::expect_symbol:
|
case exprstatetype::expect_symbol:
|
||||||
case exprstatetype::expect_type:
|
case exprstatetype::expect_type:
|
||||||
return false;
|
return false;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue