Library: draft how a pipelined-parser could work
This commit is contained in:
parent
2a60f77bdf
commit
c2df391f48
2 changed files with 42 additions and 3 deletions
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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üßte jeweils nur einen Match betrachten..."/>
|
||||
<node CREATED="1711057311970" ID="ID_1246349032" MODIFIED="1711057341273" TEXT="das wird aber schwierig: man brä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ä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="Übersetzung Match-Result ⟼ 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"/>
|
||||
|
|
|
|||
Loading…
Reference in a new issue