Library: draft how a pipelined-parser could work

This commit is contained in:
Fischlurch 2024-03-22 18:23:46 +01:00
parent 2a60f77bdf
commit c2df391f48
2 changed files with 42 additions and 3 deletions

View file

@ -137,7 +137,38 @@ namespace lib {
const regex ACCEPT_MARKUP { MATCH_ESCAPE+"|"+MATCH_FIELD
, regex::ECMAScript|regex::optimize
};
// Sub-Matches: 1 = ESCAPE; 2 = ELSE; 3 = END; 4 = LOGIC; 5 = KEY;
// Sub-Matches: 1 = ESCAPE; 2 = ELSE; 3 = END; 4 = LOGIC; 5 = KEY;
struct TagSyntax
{
enum Keyword{ ESCAPE
, KEYID
, IF
, END_IF
, FOR
, END_FOR
, ELSE
};
Keyword syntaxCase{ESCAPE};
StrView lead;
StrView key;
};
inline auto
parse (string input)
{
auto classify = [pre=size_t(0)]
(smatch mat) mutable -> TagSyntax
{
REQUIRE (not mat.empty());
StrView lead{}; //////////////////////////////OOO find a way to move that along trailing
if (mat[1].matched)
return TagSyntax{TagSyntax::ESCAPE,lead};
};
util::RegexSearchIter parser{input, ACCEPT_MARKUP};
// return explore(parser) ///////////////////////////OOO find out why this is not forward-iterable
// .transform(classify);
}
}

View file

@ -113031,11 +113031,19 @@ std::cout << tmpl.render({"what", "World"}) << s
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1710856784967" ID="ID_201927694" MODIFIED="1711067618760" TEXT="Parsing soll eager sein (wegen Syntax-Fehlern)">
<icon BUILTIN="pencil"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1711057133538" ID="ID_1870486170" MODIFIED="1711057150145" TEXT="versuche aber trotzdem ein Pipeline-Design">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1711057133538" ID="ID_1870486170" MODIFIED="1711128087871" TEXT="versuche aber trotzdem ein Pipeline-Design">
<icon BUILTIN="pencil"/>
<node CREATED="1711057187292" ID="ID_1474035866" MODIFIED="1711057203717" TEXT="weil die Verarbeitung eigentlich linear und lokal ist"/>
<node CREATED="1711057204665" ID="ID_1095373221" MODIFIED="1711057311262" TEXT="d.h. man m&#xfc;&#xdf;te jeweils nur einen Match betrachten..."/>
<node CREATED="1711057311970" ID="ID_1246349032" MODIFIED="1711057341273" TEXT="das wird aber schwierig: man br&#xe4;uchte einen Buffer mit allem Content seit dem letzten Match"/>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1711128045349" ID="ID_1871157756" MODIFIED="1711128084612" TEXT="eine State-Core die die Klassifikation des aktuellen Match repr&#xe4;sentiert">
<icon BUILTIN="idea"/>
<node CREATED="1711128102358" ID="ID_1461727407" MODIFIED="1711128105913" TEXT="TagSyntax"/>
<node CREATED="1711128106645" ID="ID_1902297931" MODIFIED="1711128116511" TEXT="ein Enum Keyword "/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1711128122683" ID="ID_1243841516" MODIFIED="1711128135098" TEXT="&#xdc;bersetzung Match-Result &#x27fc; Keyword">
<icon BUILTIN="flag-yellow"/>
</node>
</node>
</node>
<node COLOR="#338800" CREATED="1711057942703" ID="ID_1535269781" MODIFIED="1711067611692" TEXT="Regular-Expression entwickeln">
<icon BUILTIN="button_ok"/>