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 **/
|
/** formal parameter name **/
|
||||||
const DUniqueString * name_ = nullptr;
|
const DUniqueString * name_ = nullptr;
|
||||||
|
|
||||||
|
#ifdef NOT_YET
|
||||||
/** formal parameter type (if specified) **/
|
/** formal parameter type (if specified) **/
|
||||||
TypeDescr td_ = nullptr;
|
TypeDescr td_ = nullptr;
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
} /*namespace scm*/
|
} /*namespace scm*/
|
||||||
} /*namespace xo*/
|
} /*namespace xo*/
|
||||||
|
|
|
||||||
|
|
@ -146,6 +146,12 @@ namespace xo {
|
||||||
DExpectFormalArgSsm::on_parsed_symbol(std::string_view sym,
|
DExpectFormalArgSsm::on_parsed_symbol(std::string_view sym,
|
||||||
ParserStateMachine * p_psm)
|
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",
|
p_psm->illegal_input_on_symbol("DExpectFormalArgSsm::on_parsed_symbol",
|
||||||
sym,
|
sym,
|
||||||
this->get_expect_str());
|
this->get_expect_str());
|
||||||
|
|
@ -230,9 +236,18 @@ namespace xo {
|
||||||
|
|
||||||
bool
|
bool
|
||||||
DExpectFormalArgSsm::pretty(const ppindentinfo & ppii) const {
|
DExpectFormalArgSsm::pretty(const ppindentinfo & ppii) const {
|
||||||
return ppii.pps()->pretty_struct
|
if (name_) {
|
||||||
(ppii,
|
return ppii.pps()->pretty_struct
|
||||||
"DExpectFormalArgSsm");
|
(ppii,
|
||||||
|
"DExpectFormalArgSsm",
|
||||||
|
refrtag("fstate", fstate_),
|
||||||
|
refrtag("name", std::string_view(*name_)));
|
||||||
|
} else {
|
||||||
|
return ppii.pps()->pretty_struct
|
||||||
|
(ppii,
|
||||||
|
"DExpectFormalArgSsm",
|
||||||
|
refrtag("fstate", fstate_));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} /*namespace scm*/
|
} /*namespace scm*/
|
||||||
|
|
|
||||||
|
|
@ -215,7 +215,7 @@ namespace xo {
|
||||||
|
|
||||||
/** Walkthrough parsing input equivalent to:
|
/** Walkthrough parsing input equivalent to:
|
||||||
*
|
*
|
||||||
* lambda ;
|
* lambda (n : i64;
|
||||||
*
|
*
|
||||||
**/
|
**/
|
||||||
|
|
||||||
|
|
@ -243,11 +243,10 @@ namespace xo {
|
||||||
REQUIRE(result.is_incomplete());
|
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("parser", &parser));
|
||||||
log && log(xtag("result", result));
|
log && log(xtag("result", result));
|
||||||
|
|
||||||
|
|
@ -256,6 +255,31 @@ namespace xo {
|
||||||
REQUIRE(result.is_incomplete());
|
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"));
|
auto & result = parser.on_token(Token::i64_token("777"));
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue