xo-reader2: lambda ssm progress. incremental [WIP]
This commit is contained in:
parent
dcb5a8fb30
commit
2a149d371c
3 changed files with 48 additions and 7 deletions
|
|
@ -140,8 +140,10 @@ namespace xo {
|
|||
/** formal parameter name **/
|
||||
const DUniqueString * name_ = nullptr;
|
||||
|
||||
#ifdef NOT_YET
|
||||
/** formal parameter type (if specified) **/
|
||||
TypeDescr td_ = nullptr;
|
||||
#endif
|
||||
};
|
||||
} /*namespace scm*/
|
||||
} /*namespace xo*/
|
||||
|
|
|
|||
|
|
@ -146,6 +146,12 @@ namespace xo {
|
|||
DExpectFormalArgSsm::on_parsed_symbol(std::string_view sym,
|
||||
ParserStateMachine * p_psm)
|
||||
{
|
||||
if (fstate_ == formalstatetype::formal_0) {
|
||||
this->fstate_ = formalstatetype::formal_1;
|
||||
this->name_ = p_psm->intern_string(sym);
|
||||
return;
|
||||
}
|
||||
|
||||
p_psm->illegal_input_on_symbol("DExpectFormalArgSsm::on_parsed_symbol",
|
||||
sym,
|
||||
this->get_expect_str());
|
||||
|
|
@ -230,9 +236,18 @@ namespace xo {
|
|||
|
||||
bool
|
||||
DExpectFormalArgSsm::pretty(const ppindentinfo & ppii) const {
|
||||
return ppii.pps()->pretty_struct
|
||||
(ppii,
|
||||
"DExpectFormalArgSsm");
|
||||
if (name_) {
|
||||
return ppii.pps()->pretty_struct
|
||||
(ppii,
|
||||
"DExpectFormalArgSsm",
|
||||
refrtag("fstate", fstate_),
|
||||
refrtag("name", std::string_view(*name_)));
|
||||
} else {
|
||||
return ppii.pps()->pretty_struct
|
||||
(ppii,
|
||||
"DExpectFormalArgSsm",
|
||||
refrtag("fstate", fstate_));
|
||||
}
|
||||
}
|
||||
|
||||
} /*namespace scm*/
|
||||
|
|
|
|||
|
|
@ -215,7 +215,7 @@ namespace xo {
|
|||
|
||||
/** Walkthrough parsing input equivalent to:
|
||||
*
|
||||
* lambda ;
|
||||
* lambda (n : i64;
|
||||
*
|
||||
**/
|
||||
|
||||
|
|
@ -243,11 +243,10 @@ namespace xo {
|
|||
REQUIRE(result.is_incomplete());
|
||||
}
|
||||
|
||||
#ifdef NOT_YET
|
||||
{
|
||||
auto & result = parser.on_token(Token::then_token());
|
||||
auto & result = parser.on_token(Token::symbol_token("n"));
|
||||
|
||||
log && log("after then token:");
|
||||
log && log("after symbol(n) token:");
|
||||
log && log(xtag("parser", &parser));
|
||||
log && log(xtag("result", result));
|
||||
|
||||
|
|
@ -256,6 +255,31 @@ namespace xo {
|
|||
REQUIRE(result.is_incomplete());
|
||||
}
|
||||
|
||||
{
|
||||
auto & result = parser.on_token(Token::colon_token());
|
||||
|
||||
log && log("after colon token:");
|
||||
log && log(xtag("parser", &parser));
|
||||
log && log(xtag("result", result));
|
||||
|
||||
REQUIRE(parser.has_incomplete_expr() == true);
|
||||
REQUIRE(!result.is_error());
|
||||
REQUIRE(result.is_incomplete());
|
||||
}
|
||||
|
||||
{
|
||||
auto & result = parser.on_token(Token::symbol_token("i64"));
|
||||
|
||||
log && log("after symbol(i64) token:");
|
||||
log && log(xtag("parser", &parser));
|
||||
log && log(xtag("result", result));
|
||||
|
||||
REQUIRE(parser.has_incomplete_expr() == true);
|
||||
REQUIRE(!result.is_error());
|
||||
REQUIRE(result.is_incomplete());
|
||||
}
|
||||
|
||||
#ifdef NOT_YET
|
||||
{
|
||||
auto & result = parser.on_token(Token::i64_token("777"));
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue