Library: implement support for recursive syntax

The concept was indeed successful, albeit quite difficult to pull off in detail.
It requires a carefully crafted path of Deduction guides and overloads
to effect the switch from std::function to std::function& at the point
where a predeclared syntax clause placeholder is used recursively
This commit is contained in:
Fischlurch 2025-01-26 23:54:38 +01:00
parent 5e86aa3880
commit ed5c6f7c17
3 changed files with 279 additions and 134 deletions

View file

@ -70,6 +70,9 @@ namespace util {
template<class PAR> template<class PAR>
class Syntax; class Syntax;
template<class CON>
class Parser;
/** /**
@ -97,10 +100,20 @@ namespace util {
using Result = typename _Fun<PFun>::Ret::Result; using Result = typename _Fun<PFun>::Ret::Result;
Connex (FUN pFun) Connex (FUN pFun)
: parse{move(pFun)} : parse{pFun}
{ } { }
}; };
/** special setup to be pre-declared and then used recursively */
template<class RES>
using OpaqueConnex = Connex<std::function<Eval<RES>(StrView)>>;
template<class RES>
using ForwardConnex = Connex<std::function<Eval<RES>(StrView)>&>;
/** »Null-Connex« which always successfully accepts the empty sequence */ /** »Null-Connex« which always successfully accepts the empty sequence */
auto auto
@ -166,6 +179,18 @@ namespace util {
return Con{anchor}; return Con{anchor};
} }
/** special setup to attach to a pre-defined clause for recursive syntax
* @note works in concert with the Parser deduction guide, so that the
* resulting ForwardConnex holds a _reference_ to std::function,
* and thus gets to see the full definition reassigned later. */
template<class RES>
auto
buildConnex (Syntax<Parser<OpaqueConnex<RES>>> & refClause)
{
OpaqueConnex<RES>& refConnex = refClause;
return ForwardConnex<RES>{refConnex.parse};
}
namespace { namespace {
@ -182,6 +207,17 @@ namespace util {
{ // probe the λ with ARG to force template instantiation { // probe the λ with ARG to force template instantiation
using Ret = decltype(std::declval<FUN>() (std::declval<ARG>())); using Ret = decltype(std::declval<FUN>() (std::declval<ARG>()));
}; };
template<class FUN>
inline bool
_boundFun(FUN const& fun)
{
if constexpr (std::is_constructible<bool, FUN const&>())
return bool(fun);
else
return std::is_invocable<FUN, StrView>();
}
} }
/** /**
@ -580,6 +616,7 @@ namespace util {
Eval<Result> Eval<Result>
operator() (StrView toParse) operator() (StrView toParse)
{ {
REQUIRE (_boundFun (CON::parse), "unbound recursive syntax");
return CON::parse (toParse); return CON::parse (toParse);
} }
@ -596,10 +633,14 @@ namespace util {
Parser(string const&) -> Parser<Term>; Parser(string const&) -> Parser<Term>;
template<class FUN> template<class FUN>
Parser(Connex<FUN> const&) -> Parser<Connex<FUN>>; Parser(Connex<FUN>) -> Parser<Connex<FUN>>;
template<class PAR> template<class PAR>
Parser(Syntax<PAR> const&) -> Parser<typename PAR::Connex>; Parser(Syntax<PAR>) -> Parser<typename PAR::Connex>;
template<class RES>
Parser(Syntax<Parser<OpaqueConnex<RES>>>) -> Parser<ForwardConnex<RES>>;
// bind to recursive syntax by reference
/** @internal meta-helper : detect if parser can be built from a given type */ /** @internal meta-helper : detect if parser can be built from a given type */
@ -658,11 +699,12 @@ namespace util {
operator Connex&() { return parse_; } operator Connex&() { return parse_; }
operator Connex const&() const { return parse_; } operator Connex const&() const { return parse_; }
bool success() const { return bool(Syntax::result); } bool success() const { return bool(Syntax::result); }
bool hasResult() const { return bool(Syntax::result); } bool hasResult() const { return bool(Syntax::result); }
size_t consumed() const { return Eval<Result>::consumed;} bool canInvoke() const { return _boundFun(parse_.parse);}
Result& getResult() { return * Syntax::result; } size_t consumed() const { return Eval<Result>::consumed; }
Result&& extractResult() { return move(getResult()); } Result& getResult() { return * Syntax::result; }
Result&& extractResult() { return move(getResult()); }
/********************************************//** /********************************************//**
@ -676,6 +718,16 @@ namespace util {
} }
template<class PX>
Syntax&
operator= (Syntax<PX> refSyntax)
{
using ConX = typename PX::Connex;
ConX& refConnex = refSyntax;
parse_.parse = move(refConnex.parse);
return *this;
}
/** ===== Syntax clause builder DSL ===== */ /** ===== Syntax clause builder DSL ===== */
@ -878,7 +930,23 @@ namespace util {
} }
/** Setup an assignable, recursive Syntax clause, initially empty */ /**
* Setup an assignable, recursive Syntax clause, initially empty.
* @remark this provides the foundation for recursive syntax clauses;
* initially, an empty std::function with the pre-declared return
* type is embedded. Together with a special Parser deduction guide,
* later on a full syntax clause can be built, taking a _reference_
* to this function; finally the definition prepared here should be
* _re-assigned_ with the fully defined syntax, which is handled
* by the assignment operator in class Syntax to re-assign a
* working parser function into the std::function holder.
* @tparam RES the result model type to be expected; it is necessary
* to augment the full definition explicitly by a model-binding
* to produce this type which typically also involves writing
* actual code to deal with the possibly open structure enable
* through a recursive syntax definition
* @see Parse_test::verify_recursiveSyntax()
*/
template<typename RES> template<typename RES>
auto auto
expectResult() expectResult()
@ -911,7 +979,7 @@ namespace util {
* So either the already defined part of this Syntax matches the input, * So either the already defined part of this Syntax matches the input,
* or the alternative clause is probed from the start of the input. At least * or the alternative clause is probed from the start of the input. At least
* one branch must match for the parse to be successful; however, further * one branch must match for the parse to be successful; however, further
* branches are not tested after finding a matching branch (short-circuit). * branches are not tested after finding a matching branch (short-circuit).
* The result model is a _Sum Type,_ implemented as a custom variant record * The result model is a _Sum Type,_ implemented as a custom variant record
* of type \ref SubModel. It provides a branch selector field to detect which * of type \ref SubModel. It provides a branch selector field to detect which
* branch of the syntax did match. And it allows to retrieve the result model * branch of the syntax did match. And it allows to retrieve the result model

View file

@ -624,9 +624,27 @@ namespace test {
void void
verify_recursiveSyntax() verify_recursiveSyntax()
{ {
auto recursive = expectResult<int>(); auto recurse = expectResult<int>();
CHECK (not recurse.canInvoke());
recurse = accept("great")
.opt(accept("!")
.seq(recurse))
.bind([](auto m) -> int
{
auto& [_,r] = m;
return 1 + (r? get<1>(*r):0);
});
CHECK (recurse.canInvoke());
string s1{"great ! great ! great"}; string s1{"great ! great ! great"};
recurse.parse(s1);
CHECK (recurse.success());
CHECK (recurse.getResult() == 3 );
CHECK (not recurse.parse(" ! great"));
CHECK (recurse.parse("great ! great actor").getResult() == 2);
CHECK (recurse.parse("great ! great ! actor").getResult() == 2);
} }
}; };

View file

@ -56776,7 +56776,7 @@
</body> </body>
</html></richcontent> </html></richcontent>
</node> </node>
<node CREATED="1737514258866" ID="ID_1304545890" MODIFIED="1737514379504" TEXT="(optional) Trenner mit 1-Fall-Behandlung"> <node CREATED="1737514258866" FOLDED="true" ID="ID_1304545890" MODIFIED="1737514379504" TEXT="(optional) Trenner mit 1-Fall-Behandlung">
<richcontent TYPE="NOTE"><html> <richcontent TYPE="NOTE"><html>
<head/> <head/>
<body> <body>
@ -56808,7 +56808,7 @@
</node> </node>
</node> </node>
</node> </node>
<node COLOR="#435e98" CREATED="1737514608995" ID="ID_1247344786" MODIFIED="1737581143659" TEXT="Zahl der Iterationen und Modell-Repr&#xe4;sentation?"> <node COLOR="#435e98" CREATED="1737514608995" FOLDED="true" ID="ID_1247344786" MODIFIED="1737581143659" TEXT="Zahl der Iterationen und Modell-Repr&#xe4;sentation?">
<font NAME="SansSerif" SIZE="12"/> <font NAME="SansSerif" SIZE="12"/>
<icon BUILTIN="help"/> <icon BUILTIN="help"/>
<node CREATED="1737514625345" ID="ID_417722298" MODIFIED="1737514657151" TEXT="Konsequenz: offen &#x27f9; kann kein Array sein"/> <node CREATED="1737514625345" ID="ID_417722298" MODIFIED="1737514657151" TEXT="Konsequenz: offen &#x27f9; kann kein Array sein"/>
@ -56854,7 +56854,7 @@
</node> </node>
<node COLOR="#338800" CREATED="1737557808392" ID="ID_529869533" MODIFIED="1737581104395" TEXT="DSL-Varianten"> <node COLOR="#338800" CREATED="1737557808392" ID="ID_529869533" MODIFIED="1737581104395" TEXT="DSL-Varianten">
<icon BUILTIN="button_ok"/> <icon BUILTIN="button_ok"/>
<node COLOR="#435e98" CREATED="1737560210100" ID="ID_877662499" MODIFIED="1737569762631" TEXT="Spezifikations-Schema"> <node COLOR="#435e98" CREATED="1737560210100" FOLDED="true" ID="ID_877662499" MODIFIED="1737569762631" TEXT="Spezifikations-Schema">
<icon BUILTIN="yes"/> <icon BUILTIN="yes"/>
<node COLOR="#5b280f" CREATED="1737560240722" ID="ID_1633583353" MODIFIED="1737560259824" TEXT="eigentst&#xe4;ndige top-level syntax"> <node COLOR="#5b280f" CREATED="1737560240722" ID="ID_1633583353" MODIFIED="1737560259824" TEXT="eigentst&#xe4;ndige top-level syntax">
<icon BUILTIN="button_cancel"/> <icon BUILTIN="button_cancel"/>
@ -56934,7 +56934,7 @@
<icon BUILTIN="button_ok"/> <icon BUILTIN="button_ok"/>
<node CREATED="1737515398692" ID="ID_1478704437" MODIFIED="1737515413091" TEXT="der ist einfach zu realisieren und sehr n&#xfc;tzlich"/> <node CREATED="1737515398692" ID="ID_1478704437" MODIFIED="1737515413091" TEXT="der ist einfach zu realisieren und sehr n&#xfc;tzlich"/>
<node CREATED="1737515413799" ID="ID_1235063232" MODIFIED="1737515424929" TEXT="das Model wird in einen std::optional gewickelt"/> <node CREATED="1737515413799" ID="ID_1235063232" MODIFIED="1737515424929" TEXT="das Model wird in einen std::optional gewickelt"/>
<node BACKGROUND_COLOR="#e5d4c6" COLOR="#435e98" CREATED="1737515765304" ID="ID_692646776" MODIFIED="1737686075882" TEXT="per postfix-Operator darstellbar?"> <node BACKGROUND_COLOR="#e5d4c6" COLOR="#435e98" CREATED="1737515765304" FOLDED="true" ID="ID_692646776" MODIFIED="1737940841466" TEXT="per postfix-Operator darstellbar?">
<icon BUILTIN="help"/> <icon BUILTIN="help"/>
<icon BUILTIN="button_cancel"/> <icon BUILTIN="button_cancel"/>
<node CREATED="1737552397609" ID="ID_411565433" MODIFIED="1737552415673"> <node CREATED="1737552397609" ID="ID_411565433" MODIFIED="1737552415673">
@ -57023,9 +57023,7 @@
<node CREATED="1737762977024" ID="ID_1561603785" MODIFIED="1737762981006" TEXT="Basis-Implementierung"> <node CREATED="1737762977024" ID="ID_1561603785" MODIFIED="1737762981006" TEXT="Basis-Implementierung">
<node CREATED="1737762981897" ID="ID_1090727371" MODIFIED="1737763001027" TEXT="ist schon da"> <node CREATED="1737762981897" ID="ID_1090727371" MODIFIED="1737763001027" TEXT="ist schon da">
<richcontent TYPE="NOTE"><html> <richcontent TYPE="NOTE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
nebenbei abgefallen nebenbei abgefallen
@ -57041,9 +57039,7 @@
<icon BUILTIN="button_ok"/> <icon BUILTIN="button_ok"/>
<node CREATED="1737763027300" ID="ID_681702080" MODIFIED="1737763052404"> <node CREATED="1737763027300" ID="ID_681702080" MODIFIED="1737763052404">
<richcontent TYPE="NODE"><html> <richcontent TYPE="NODE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
<i>das</i>&#160;mu&#223; tats&#228;chlich ein <b>Postfix-Operator</b>&#160;sein <i>das</i>&#160;mu&#223; tats&#228;chlich ein <b>Postfix-Operator</b>&#160;sein
@ -57055,9 +57051,7 @@
</node> </node>
<node COLOR="#435e98" CREATED="1737763069414" ID="ID_1049523751" MODIFIED="1737849866205"> <node COLOR="#435e98" CREATED="1737763069414" ID="ID_1049523751" MODIFIED="1737849866205">
<richcontent TYPE="NODE"><html> <richcontent TYPE="NODE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
Vorschlag: <font face="Monospaced"><b>bind</b>(</font><font face="Monospaced" color="#642929">FUN</font><font face="Monospaced">)</font> Vorschlag: <font face="Monospaced"><b>bind</b>(</font><font face="Monospaced" color="#642929">FUN</font><font face="Monospaced">)</font>
@ -57066,11 +57060,9 @@
</html> </html>
</richcontent> </richcontent>
</node> </node>
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1737763165990" ID="ID_1051966220" MODIFIED="1737775439645" TEXT="wichtig: static-assertion bieten"> <node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1737763165990" FOLDED="true" ID="ID_1051966220" MODIFIED="1737940855527" TEXT="wichtig: static-assertion bieten">
<richcontent TYPE="NOTE"><html> <richcontent TYPE="NOTE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
damit klar gesagt wird, wenn die Funktion nicht den bisherigen Result-Typ nimmt damit klar gesagt wird, wenn die Funktion nicht den bisherigen Result-Typ nimmt
@ -57105,9 +57097,7 @@
</node> </node>
<node COLOR="#435e98" CREATED="1737763306315" ID="ID_556563323" MODIFIED="1737849862021"> <node COLOR="#435e98" CREATED="1737763306315" ID="ID_556563323" MODIFIED="1737849862021">
<richcontent TYPE="NODE"><html> <richcontent TYPE="NODE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
Standard-Variante: <font face="Monospaced"><b>bindMatch</b>(n)</font> Standard-Variante: <font face="Monospaced"><b>bindMatch</b>(n)</font>
@ -57116,13 +57106,11 @@
</html> </html>
</richcontent> </richcontent>
<node CREATED="1737817661406" ID="ID_74788283" MODIFIED="1737817685150" TEXT="auf Matcher &#x27fc; match-group"/> <node CREATED="1737817661406" ID="ID_74788283" MODIFIED="1737817685150" TEXT="auf Matcher &#x27fc; match-group"/>
<node CREATED="1737817685762" ID="ID_522207502" MODIFIED="1737844301800" TEXT="eine Verallgemeinerung versuchen"> <node COLOR="#5c4398" CREATED="1737817685762" ID="ID_522207502" MODIFIED="1737940782764" TEXT="eine Verallgemeinerung versuchen">
<node CREATED="1737818008232" ID="ID_1008681073" MODIFIED="1737818043982" TEXT="mu&#xdf; daf&#xfc;r constexpr-branch mit switch-on-Type machen"/> <node CREATED="1737818008232" ID="ID_1008681073" MODIFIED="1737818043982" TEXT="mu&#xdf; daf&#xfc;r constexpr-branch mit switch-on-Type machen"/>
<node COLOR="#5b280f" CREATED="1737818191905" ID="ID_253639135" MODIFIED="1737818824310" TEXT="diese Verzweigung in der Builder-Methode machen"> <node COLOR="#5b280f" CREATED="1737818191905" ID="ID_253639135" MODIFIED="1737818824310" TEXT="diese Verzweigung in der Builder-Methode machen">
<richcontent TYPE="NOTE"><html> <richcontent TYPE="NOTE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
...denn es steuert die Art der Dekoration ...denn es steuert die Art der Dekoration
@ -57146,9 +57134,7 @@
<icon BUILTIN="button_ok"/> <icon BUILTIN="button_ok"/>
<node COLOR="#435e98" CREATED="1737819592756" ID="ID_634105899" MODIFIED="1737820210832" TEXT="dann auch besser als toStringConnex "> <node COLOR="#435e98" CREATED="1737819592756" ID="ID_634105899" MODIFIED="1737820210832" TEXT="dann auch besser als toStringConnex ">
<richcontent TYPE="NOTE"><html> <richcontent TYPE="NOTE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
analog wie die anderen Combinatoren und buildConnex() analog wie die anderen Combinatoren und buildConnex()
@ -57163,9 +57149,7 @@
<node COLOR="#435e98" CREATED="1737820230519" ID="ID_4755618" MODIFIED="1737845408706" TEXT="repetitiever Code &#x27f9; vereinfachen"> <node COLOR="#435e98" CREATED="1737820230519" ID="ID_4755618" MODIFIED="1737845408706" TEXT="repetitiever Code &#x27f9; vereinfachen">
<node CREATED="1737844669441" ID="ID_82924290" MODIFIED="1737844753235" TEXT="jetzt viel einfacher..."> <node CREATED="1737844669441" ID="ID_82924290" MODIFIED="1737844753235" TEXT="jetzt viel einfacher...">
<richcontent TYPE="NOTE"><html> <richcontent TYPE="NOTE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
nachdem ich die Model-F&#228;lle wegdiskutiert habe &#9786; nachdem ich die Model-F&#228;lle wegdiskutiert habe &#9786;
@ -57182,10 +57166,14 @@
</node> </node>
<node CREATED="1737817759473" ID="ID_1259641042" MODIFIED="1737820162400" TEXT="0 &#x27fc; insgesamt abgedeckten String"> <node CREATED="1737817759473" ID="ID_1259641042" MODIFIED="1737820162400" TEXT="0 &#x27fc; insgesamt abgedeckten String">
<arrowlink COLOR="#d21839" DESTINATION="ID_580741187" ENDARROW="Default" ENDINCLINATION="-152;6;" ID="Arrow_ID_1339747714" STARTARROW="None" STARTINCLINATION="21;-32;"/> <arrowlink COLOR="#d21839" DESTINATION="ID_580741187" ENDARROW="Default" ENDINCLINATION="-152;6;" ID="Arrow_ID_1339747714" STARTARROW="None" STARTINCLINATION="21;-32;"/>
<node CREATED="1737818264773" ID="ID_120023356" MODIFIED="1737818272264" TEXT="genereller fall-Back"/> <node CREATED="1737818264773" ID="ID_120023356" MODIFIED="1737940794564" TEXT="genereller fall-Back">
<node CREATED="1737818273492" ID="ID_1978233039" MODIFIED="1737818392552" TEXT="damit fehlertolerant"/> <icon BUILTIN="info"/>
</node> </node>
<node COLOR="#5b280f" CREATED="1737844303914" ID="ID_533069226" MODIFIED="1737844325844" TEXT="auf compound-Model &#x27fc; Teilkomponente"> <node COLOR="#435e98" CREATED="1737818273492" ID="ID_1978233039" MODIFIED="1737940790395" TEXT="damit fehlertolerant">
<icon BUILTIN="idea"/>
</node>
</node>
<node COLOR="#5b280f" CREATED="1737844303914" FOLDED="true" ID="ID_533069226" MODIFIED="1737940755686" TEXT="auf compound-Model &#x27fc; Teilkomponente">
<icon BUILTIN="button_cancel"/> <icon BUILTIN="button_cancel"/>
<node CREATED="1737844326911" ID="ID_276945387" MODIFIED="1737844341721" TEXT="wird sehr komplex umzusetzen"/> <node CREATED="1737844326911" ID="ID_276945387" MODIFIED="1737844341721" TEXT="wird sehr komplex umzusetzen"/>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1737820277891" ID="ID_1885712747" MODIFIED="1737844365946" TEXT="Problem: es sind variadic-templates"> <node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1737820277891" ID="ID_1885712747" MODIFIED="1737844365946" TEXT="Problem: es sind variadic-templates">
@ -57197,9 +57185,7 @@
<node CREATED="1737844371498" ID="ID_641248746" MODIFIED="1737844388561" TEXT="man m&#xfc;&#xdf;te mit allen misch-F&#xe4;llen umgehen k&#xf6;nnen"/> <node CREATED="1737844371498" ID="ID_641248746" MODIFIED="1737844388561" TEXT="man m&#xfc;&#xdf;te mit allen misch-F&#xe4;llen umgehen k&#xf6;nnen"/>
<node CREATED="1737844390141" ID="ID_730168468" MODIFIED="1737844538602" TEXT="und was dann machen....?"> <node CREATED="1737844390141" ID="ID_730168468" MODIFIED="1737844538602" TEXT="und was dann machen....?">
<richcontent TYPE="NOTE"><html> <richcontent TYPE="NOTE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
es br&#228;uchte f&#252;r alle erdenklichen F&#228;lle einen Pfad, um auf einen String zu kommen; also br&#228;uchte es sowas wie einen operator string(), oder man m&#252;&#223;te rekursiv in alle Teilkomponenten hinein mappen; und was dann mit Komponenten, die bereits explizit transformiert wurden, wie erkennt man die, und was macht man mit denen?? es br&#228;uchte f&#252;r alle erdenklichen F&#228;lle einen Pfad, um auf einen String zu kommen; also br&#228;uchte es sowas wie einen operator string(), oder man m&#252;&#223;te rekursiv in alle Teilkomponenten hinein mappen; und was dann mit Komponenten, die bereits explizit transformiert wurden, wie erkennt man die, und was macht man mit denen??
@ -57210,9 +57196,7 @@
</node> </node>
<node COLOR="#5b280f" CREATED="1737844404123" ID="ID_1490711015" MODIFIED="1737844630457" TEXT="Nutzen zweifelhaft"> <node COLOR="#5b280f" CREATED="1737844404123" ID="ID_1490711015" MODIFIED="1737844630457" TEXT="Nutzen zweifelhaft">
<richcontent TYPE="NOTE"><html> <richcontent TYPE="NOTE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
wozu will man das? doch nur f&#252;r Tests. wozu will man das? doch nur f&#252;r Tests.
@ -57245,9 +57229,7 @@
<node COLOR="#435e98" CREATED="1737843950560" ID="ID_77042913" MODIFIED="1737849817609" TEXT="kl&#xe4;ren warum structured Bindings nicht funktionieren"> <node COLOR="#435e98" CREATED="1737843950560" ID="ID_77042913" MODIFIED="1737849817609" TEXT="kl&#xe4;ren warum structured Bindings nicht funktionieren">
<node CREATED="1737849641960" ID="ID_510578678" MODIFIED="1737849815956" TEXT="Grund: std::tuple_size nicht spezialisiert &#x27f9; biegt in Struct-Binding ab"> <node CREATED="1737849641960" ID="ID_510578678" MODIFIED="1737849815956" TEXT="Grund: std::tuple_size nicht spezialisiert &#x27f9; biegt in Struct-Binding ab">
<richcontent TYPE="NOTE"><html> <richcontent TYPE="NOTE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
Die C++ &#187;structured bindings&#171; funktionieren f&#252;r Arrays, f&#252;r <i>tuple-like</i>&#160; und aber auch f&#252;r einfache PODs. Wenn std::tuple_size ein <i>incomplete-type</i>&#160; ist, dann versucht der Compiler ein Binding auf Struct-Felder, scheitert aber daran, da&#223; es eine nicht-triviale Basis-Klasse gibt (und damit die Feld-Nummer nicht mehr offensichtlich klar ist) Die C++ &#187;structured bindings&#171; funktionieren f&#252;r Arrays, f&#252;r <i>tuple-like</i>&#160; und aber auch f&#252;r einfache PODs. Wenn std::tuple_size ein <i>incomplete-type</i>&#160; ist, dann versucht der Compiler ein Binding auf Struct-Felder, scheitert aber daran, da&#223; es eine nicht-triviale Basis-Klasse gibt (und damit die Feld-Nummer nicht mehr offensichtlich klar ist)
@ -57273,9 +57255,7 @@
<node CREATED="1737776795928" ID="ID_935270717" MODIFIED="1737776813345" TEXT="es kommt zweimal der bind-match vom ersten Wort"/> <node CREATED="1737776795928" ID="ID_935270717" MODIFIED="1737776813345" TEXT="es kommt zweimal der bind-match vom ersten Wort"/>
<node CREATED="1737817572295" ID="ID_1167831095" MODIFIED="1737817616236"> <node CREATED="1737817572295" ID="ID_1167831095" MODIFIED="1737817616236">
<richcontent TYPE="NODE"><html> <richcontent TYPE="NODE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
ganz banal: habe <font face="Monospaced">eval.consumed</font>&#160;nicht weitergegeben ganz banal: habe <font face="Monospaced">eval.consumed</font>&#160;nicht weitergegeben
@ -57284,9 +57264,7 @@
</html> </html>
</richcontent> </richcontent>
<richcontent TYPE="NOTE"><html> <richcontent TYPE="NOTE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
d.h. jede sub-expression setzt wieder am Anfang auf d.h. jede sub-expression setzt wieder am Anfang auf
@ -57306,27 +57284,35 @@
</node> </node>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1737515362910" ID="ID_1587990202" MODIFIED="1737850611368" TEXT="offene Rekursion"> <node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1737515362910" ID="ID_1587990202" MODIFIED="1737850611368" TEXT="offene Rekursion">
<icon BUILTIN="flag-pink"/> <icon BUILTIN="flag-pink"/>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1737515599278" ID="ID_1897353084" MODIFIED="1737515606925" TEXT="schwierige Frage...."> <node BACKGROUND_COLOR="#d9bf94" COLOR="#690f14" CREATED="1737515599278" ID="ID_1897353084" MODIFIED="1737940885393" STYLE="fork" TEXT="schwierige Frage....">
<edge COLOR="#808080" STYLE="bezier" WIDTH="thin"/>
<icon BUILTIN="help"/> <icon BUILTIN="help"/>
<node CREATED="1737515610957" ID="ID_1394504016" MODIFIED="1737515628606" TEXT="es ist nat&#xfc;rlich ein Kern-Feature von recursive-descent"/> <node CREATED="1737515610957" ID="ID_1394504016" MODIFIED="1737940891748" TEXT="es ist nat&#xfc;rlich ein Kern-Feature von recursive-descent">
<node CREATED="1737515630666" ID="ID_635140645" MODIFIED="1737553351887" TEXT="es ist notwendig f&#xfc;r Dinge wie verschachtelte Ausdr&#xfc;cke"> <icon BUILTIN="yes"/>
</node>
<node CREATED="1737515630666" ID="ID_635140645" MODIFIED="1737940878718" TEXT="es ist notwendig f&#xfc;r Dinge wie verschachtelte Ausdr&#xfc;cke">
<linktarget COLOR="#ff3f2d" DESTINATION="ID_635140645" ENDARROW="Default" ENDINCLINATION="-304;-13;" ID="Arrow_ID_727534380" SOURCE="ID_902364621" STARTARROW="None" STARTINCLINATION="-466;22;"/> <linktarget COLOR="#ff3f2d" DESTINATION="ID_635140645" ENDARROW="Default" ENDINCLINATION="-304;-13;" ID="Arrow_ID_727534380" SOURCE="ID_902364621" STARTARROW="None" STARTINCLINATION="-466;22;"/>
</node> </node>
<node CREATED="1737515930491" ID="ID_72368755" MODIFIED="1737515948915" TEXT="nicht als Inline-Model darstellbar"> <node CREATED="1737515930491" ID="ID_72368755" MODIFIED="1737940896885" TEXT="nicht als Inline-Model darstellbar">
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1737515978965" ID="ID_1241101297" MODIFIED="1737515987234" TEXT="m&#xfc;&#xdf;te dann ein smart-Ptr sein"/> <node CREATED="1737515978965" ID="ID_1241101297" MODIFIED="1737515987234" TEXT="m&#xfc;&#xdf;te dann ein smart-Ptr sein"/>
<node CREATED="1737516017110" ID="ID_1717046822" MODIFIED="1737516058676" TEXT="m&#xfc;&#xdf;te undefiniert in der DSL referenzierbar sein"/> <node CREATED="1737516017110" ID="ID_1717046822" MODIFIED="1737516058676" TEXT="m&#xfc;&#xdf;te undefiniert in der DSL referenzierbar sein"/>
<node CREATED="1737553446367" ID="ID_420976669" MODIFIED="1737553464114" TEXT="m&#xfc;&#xdf;te daf&#xfc;r Klauseln per Referenz nehmen k&#xf6;nnen"/> <node CREATED="1737553446367" ID="ID_420976669" MODIFIED="1737553464114" TEXT="m&#xfc;&#xdf;te daf&#xfc;r Klauseln per Referenz nehmen k&#xf6;nnen"/>
</node> </node>
<node BACKGROUND_COLOR="#ccb59b" COLOR="#6e2a38" CREATED="1737940901148" ID="ID_28139865" MODIFIED="1737940937388" TEXT="Fazit: finde L&#xf6;sung die dennoch nicht das Framework sprengt">
<arrowlink COLOR="#6e3b4f" DESTINATION="ID_1616305471" ENDARROW="Default" ENDINCLINATION="-8;-18;" ID="Arrow_ID_129215188" STARTARROW="None" STARTINCLINATION="-11;31;"/>
<font ITALIC="true" NAME="SansSerif" SIZE="14"/>
<icon BUILTIN="yes"/>
</node> </node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1737693819337" ID="ID_228574257" MODIFIED="1737761064544" TEXT="Implementierungs-Technik kl&#xe4;ren"> </node>
<icon BUILTIN="pencil"/> <node COLOR="#338800" CREATED="1737693819337" ID="ID_228574257" MODIFIED="1737940638024" TEXT="Implementierungs-Technik kl&#xe4;ren">
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1737693835207" ID="ID_1616305471" MODIFIED="1737694295281" TEXT="grunds&#xe4;tzlich realisierbar in diesem Framework"> <icon BUILTIN="button_ok"/>
<icon BUILTIN="pencil"/> <node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1737693835207" ID="ID_1616305471" MODIFIED="1737940937388" TEXT="grunds&#xe4;tzlich realisierbar in diesem Framework">
<linktarget COLOR="#6e3b4f" DESTINATION="ID_1616305471" ENDARROW="Default" ENDINCLINATION="-8;-18;" ID="Arrow_ID_129215188" SOURCE="ID_28139865" STARTARROW="None" STARTINCLINATION="-11;31;"/>
<icon BUILTIN="idea"/>
<node CREATED="1737693849853" ID="ID_1927056535" MODIFIED="1737693956231" TEXT="ABER wir m&#xfc;ssen dann die strikte Model-Typisierung abschneiden"> <node CREATED="1737693849853" ID="ID_1927056535" MODIFIED="1737693956231" TEXT="ABER wir m&#xfc;ssen dann die strikte Model-Typisierung abschneiden">
<richcontent TYPE="NOTE"><html> <richcontent TYPE="NOTE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
....weil eine rekursive Definition im Prinzip offen ist und im Extremfall auch tats&#228;chlich nicht terminiert; in Haskell k&#246;nnte man einen solchen Typ anschreiben, in C++ nicht (weil Typ-Ausdr&#252;cke eager aufgel&#246;st werden) ....weil eine rekursive Definition im Prinzip offen ist und im Extremfall auch tats&#228;chlich nicht terminiert; in Haskell k&#246;nnte man einen solchen Typ anschreiben, in C++ nicht (weil Typ-Ausdr&#252;cke eager aufgel&#246;st werden)
@ -57348,10 +57334,10 @@
</html> </html>
</richcontent> </richcontent>
</node> </node>
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1737694065800" ID="ID_303092277" MODIFIED="1737761080042" TEXT="das stellt aber ein Lock-in dar"> <node BACKGROUND_COLOR="#d9bf94" COLOR="#690f14" CREATED="1737694065800" ID="ID_303092277" MODIFIED="1737940681608" TEXT="das stellt aber ein Lock-in dar">
<icon BUILTIN="messagebox_warning"/> <icon BUILTIN="messagebox_warning"/>
<node CREATED="1737694102427" ID="ID_878363951" MODIFIED="1737694137594" TEXT="was ohnehin schon durch die Definition einer Syntax&lt;PAR&gt;-Instanz erfolgt"/> <node CREATED="1737694102427" ID="ID_878363951" MODIFIED="1737694137594" TEXT="was ohnehin schon durch die Definition einer Syntax&lt;PAR&gt;-Instanz erfolgt"/>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1737694138462" ID="ID_837740353" MODIFIED="1737694189304" TEXT="Vorsicht &#xd83e;&#xdc32; k&#xf6;nnen dann rekursive Systeme &#xfc;berhaupt formuliert werden?"> <node BACKGROUND_COLOR="#dabdad" COLOR="#990033" CREATED="1737694138462" ID="ID_837740353" MODIFIED="1737940703820" TEXT="Vorsicht &#xd83e;&#xdc32; k&#xf6;nnen dann rekursive Systeme &#xfc;berhaupt formuliert werden?">
<icon BUILTIN="help"/> <icon BUILTIN="help"/>
<node CREATED="1737694494314" ID="ID_1349021262" MODIFIED="1737694529548" TEXT="konkrete Typen k&#xf6;nnen nur durch &#xbb;Beispiel&#xab; erzeugt werden"> <node CREATED="1737694494314" ID="ID_1349021262" MODIFIED="1737694529548" TEXT="konkrete Typen k&#xf6;nnen nur durch &#xbb;Beispiel&#xab; erzeugt werden">
<richcontent TYPE="NOTE"><html> <richcontent TYPE="NOTE"><html>
@ -57379,16 +57365,17 @@
</html> </html>
</richcontent> </richcontent>
</node> </node>
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1737694569853" ID="ID_1483280295" MODIFIED="1737694574820" TEXT="und zwar auf Typ-Ebene"> <node BACKGROUND_COLOR="#d9bf94" COLOR="#690f14" CREATED="1737694569853" ID="ID_1483280295" MODIFIED="1737940688571" TEXT="und zwar auf Typ-Ebene">
<edge COLOR="#808080" STYLE="bezier" WIDTH="thin"/>
<icon BUILTIN="messagebox_warning"/> <icon BUILTIN="messagebox_warning"/>
</node> </node>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1737761108914" ID="ID_64242861" MODIFIED="1737761160846" TEXT="oder der Typ an der Schnitt-Stelle mu&#xdf; vereinfacht werden"> <node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1737761108914" ID="ID_64242861" MODIFIED="1737761160846" TEXT="oder der Typ an der Schnitt-Stelle mu&#xdf; vereinfacht werden">
<arrowlink COLOR="#fdfcce" DESTINATION="ID_593591679" ENDARROW="Default" ENDINCLINATION="-98;-174;" ID="Arrow_ID_1260672332" STARTARROW="None" STARTINCLINATION="-525;26;"/> <arrowlink COLOR="#fdfcce" DESTINATION="ID_593591679" ENDARROW="Default" ENDINCLINATION="22;-101;" ID="Arrow_ID_1260672332" STARTARROW="None" STARTINCLINATION="-525;26;"/>
<icon BUILTIN="idea"/> <icon BUILTIN="idea"/>
</node> </node>
</node> </node>
</node> </node>
<node CREATED="1737738318817" ID="ID_1107737972" MODIFIED="1737751309871" TEXT="nochmal Vergleich mit existierenden Libraries"> <node CREATED="1737738318817" FOLDED="true" ID="ID_1107737972" MODIFIED="1737940652324" TEXT="nochmal Vergleich mit existierenden Libraries">
<icon BUILTIN="list"/> <icon BUILTIN="list"/>
<node CREATED="1737738393985" ID="ID_1121877326" MODIFIED="1737751317964" TEXT="viele verstecken das Thema (wenn es &#xfc;berhaupt erw&#xe4;hnt wird)"> <node CREATED="1737738393985" ID="ID_1121877326" MODIFIED="1737751317964" TEXT="viele verstecken das Thema (wenn es &#xfc;berhaupt erw&#xe4;hnt wird)">
<icon BUILTIN="messagebox_warning"/> <icon BUILTIN="messagebox_warning"/>
@ -57413,8 +57400,8 @@
<node CREATED="1737738723505" ID="ID_1018761314" MODIFIED="1737738748516" TEXT="im klassischen &quot;Calculator&quot;-Beispiel wird dann ein Ergebnis-Stack verwendet"/> <node CREATED="1737738723505" ID="ID_1018761314" MODIFIED="1737738748516" TEXT="im klassischen &quot;Calculator&quot;-Beispiel wird dann ein Ergebnis-Stack verwendet"/>
</node> </node>
</node> </node>
<node BACKGROUND_COLOR="#ccb59b" COLOR="#6e2a38" CREATED="1737756303660" ID="ID_593591679" MODIFIED="1737761152655" TEXT="Unvermeidbare Einschr&#xe4;nkung: User mu&#xdf; Result-Type explizit benennen"> <node BACKGROUND_COLOR="#ccb59b" COLOR="#6e2a38" CREATED="1737756303660" ID="ID_593591679" MODIFIED="1737940658714" TEXT="Unvermeidbare Einschr&#xe4;nkung: User mu&#xdf; Result-Type explizit benennen">
<linktarget COLOR="#fdfcce" DESTINATION="ID_593591679" ENDARROW="Default" ENDINCLINATION="-98;-174;" ID="Arrow_ID_1260672332" SOURCE="ID_64242861" STARTARROW="None" STARTINCLINATION="-525;26;"/> <linktarget COLOR="#fdfcce" DESTINATION="ID_593591679" ENDARROW="Default" ENDINCLINATION="22;-101;" ID="Arrow_ID_1260672332" SOURCE="ID_64242861" STARTARROW="None" STARTINCLINATION="-525;26;"/>
<font ITALIC="true" NAME="SansSerif" SIZE="14"/> <font ITALIC="true" NAME="SansSerif" SIZE="14"/>
<icon BUILTIN="yes"/> <icon BUILTIN="yes"/>
<node CREATED="1737756333584" ID="ID_473974893" MODIFIED="1737756354874" TEXT="damit k&#xf6;nnen wir eine std::function&lt;Ret(StrView)&gt; anlegen"/> <node CREATED="1737756333584" ID="ID_473974893" MODIFIED="1737756354874" TEXT="damit k&#xf6;nnen wir eine std::function&lt;Ret(StrView)&gt; anlegen"/>
@ -57465,7 +57452,7 @@
</richcontent> </richcontent>
<arrowlink COLOR="#d2fad9" DESTINATION="ID_311219420" ENDARROW="Default" ENDINCLINATION="-362;51;" ID="Arrow_ID_1251442496" STARTARROW="None" STARTINCLINATION="-954;49;"/> <arrowlink COLOR="#d2fad9" DESTINATION="ID_311219420" ENDARROW="Default" ENDINCLINATION="-362;51;" ID="Arrow_ID_1251442496" STARTARROW="None" STARTINCLINATION="-954;49;"/>
<icon BUILTIN="forward"/> <icon BUILTIN="forward"/>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1737762884132" HGAP="23" ID="ID_1097242773" MODIFIED="1737762918245" TEXT="&#x27f9; das mu&#xdf; das n&#xe4;chste Thema sein" VSHIFT="10"> <node COLOR="#753c48" CREATED="1737762884132" HGAP="23" ID="ID_1097242773" MODIFIED="1737940733425" TEXT="&#x27f9; das mu&#xdf; das n&#xe4;chste Thema sein" VSHIFT="10">
<font NAME="SansSerif" SIZE="10"/> <font NAME="SansSerif" SIZE="10"/>
</node> </node>
</node> </node>
@ -57480,7 +57467,7 @@
<icon BUILTIN="stop-sign"/> <icon BUILTIN="stop-sign"/>
</node> </node>
</node> </node>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1737757530355" ID="ID_38602384" MODIFIED="1737757618234" TEXT="Einstiegs-Punkt: eine Syntax wird vordeklariert"> <node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1737757530355" ID="ID_38602384" MODIFIED="1737940570797" TEXT="Einstiegs-Punkt: eine Syntax wird vordeklariert">
<icon BUILTIN="idea"/> <icon BUILTIN="idea"/>
<node CREATED="1737757552386" ID="ID_193170390" MODIFIED="1737757558213" TEXT="expect&lt;RES&gt;()"/> <node CREATED="1737757552386" ID="ID_193170390" MODIFIED="1737757558213" TEXT="expect&lt;RES&gt;()"/>
<node CREATED="1737757736924" ID="ID_845564019" MODIFIED="1737757760362" TEXT="Type-Tag &#x27f9; macht den Connex zuweisbar"/> <node CREATED="1737757736924" ID="ID_845564019" MODIFIED="1737757760362" TEXT="Type-Tag &#x27f9; macht den Connex zuweisbar"/>
@ -57488,7 +57475,8 @@
<icon BUILTIN="yes"/> <icon BUILTIN="yes"/>
<node CREATED="1737757864319" ID="ID_1384035666" MODIFIED="1737757887112" TEXT="das hei&#xdf;t, au&#xdf;er dem Type-Tag sollte sich die Syntax komplett normal verhalten"/> <node CREATED="1737757864319" ID="ID_1384035666" MODIFIED="1737757887112" TEXT="das hei&#xdf;t, au&#xdf;er dem Type-Tag sollte sich die Syntax komplett normal verhalten"/>
<node CREATED="1737757888884" ID="ID_1542863836" MODIFIED="1737757914004" TEXT="im Parse passiert eine Indirektion (normalerweise transparent)"/> <node CREATED="1737757888884" ID="ID_1542863836" MODIFIED="1737757914004" TEXT="im Parse passiert eine Indirektion (normalerweise transparent)"/>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1737757927671" ID="ID_100422313" MODIFIED="1737758161080" TEXT="was machen nachfolgende Dekorationen?"> <node COLOR="#3e12bf" CREATED="1737757927671" ID="ID_100422313" MODIFIED="1737940605426" TEXT="was machen nachfolgende Dekorationen?">
<arrowlink COLOR="#2812bf" DESTINATION="ID_1430169629" ENDARROW="Default" ENDINCLINATION="-120;-12;" ID="Arrow_ID_1674350447" STARTARROW="None" STARTINCLINATION="4;52;"/>
<icon BUILTIN="help"/> <icon BUILTIN="help"/>
<node CREATED="1737758174587" ID="ID_29086225" MODIFIED="1737758222499" TEXT="m&#xf6;gliche Varianten"> <node CREATED="1737758174587" ID="ID_29086225" MODIFIED="1737758222499" TEXT="m&#xf6;gliche Varianten">
<node CREATED="1737758223415" ID="ID_1731735440" MODIFIED="1737758228534" TEXT="nichts speziell"> <node CREATED="1737758223415" ID="ID_1731735440" MODIFIED="1737758228534" TEXT="nichts speziell">
@ -57527,9 +57515,7 @@
<node CREATED="1737758560698" ID="ID_1679326652" MODIFIED="1737758575731" TEXT="man mu&#xdf; eine solche Syntax noch zuweisen und dann so verwenden wie sie ist"/> <node CREATED="1737758560698" ID="ID_1679326652" MODIFIED="1737758575731" TEXT="man mu&#xdf; eine solche Syntax noch zuweisen und dann so verwenden wie sie ist"/>
<node CREATED="1737758982616" ID="ID_375516011" MODIFIED="1737759057960" TEXT="(oder aber in andere Syntax integrieren &#x2014; was stets m&#xf6;glich ist)"> <node CREATED="1737758982616" ID="ID_375516011" MODIFIED="1737759057960" TEXT="(oder aber in andere Syntax integrieren &#x2014; was stets m&#xf6;glich ist)">
<richcontent TYPE="NOTE"><html> <richcontent TYPE="NOTE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
diese andere Syntax h&#228;tte dann aber auch einen anderen Typ und m&#252;&#223;te in einer anderen Syntax-Variablen gespeichert werden; diese andere Syntax h&#228;tte dann aber auch einen anderen Typ und m&#252;&#223;te in einer anderen Syntax-Variablen gespeichert werden;
@ -57551,9 +57537,7 @@
<node CREATED="1737758903192" ID="ID_447755008" MODIFIED="1737759845669" TEXT="Varianten-1 und 2 laufen auf die gleiche Verwendung hinaus"/> <node CREATED="1737758903192" ID="ID_447755008" MODIFIED="1737759845669" TEXT="Varianten-1 und 2 laufen auf die gleiche Verwendung hinaus"/>
<node CREATED="1737759828390" ID="ID_1549999802" MODIFIED="1737760031271"> <node CREATED="1737759828390" ID="ID_1549999802" MODIFIED="1737760031271">
<richcontent TYPE="NODE"><html> <richcontent TYPE="NODE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
Variante-1 ist &#187;filosofisch&#171; und praktsich attraktiv Variante-1 ist &#187;filosofisch&#171; und praktsich attraktiv
@ -57562,9 +57546,7 @@
</html> </html>
</richcontent> </richcontent>
<richcontent TYPE="NOTE"><html> <richcontent TYPE="NOTE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
...weil sie der &#8222;dann mach's halt nicht falsch&#8220;-Haltung entspricht, die diesem ganzen Parser-Framework zugrunde gelegt wurde; und ganz praktisch: man bekommt diese Variante geschenkt, alles funktioniert von selber so wie es soll &#8212; und wenn irgendjemand unbedingt dekorieren m&#246;chte, dann soll er halt ...weil sie der &#8222;dann mach's halt nicht falsch&#8220;-Haltung entspricht, die diesem ganzen Parser-Framework zugrunde gelegt wurde; und ganz praktisch: man bekommt diese Variante geschenkt, alles funktioniert von selber so wie es soll &#8212; und wenn irgendjemand unbedingt dekorieren m&#246;chte, dann soll er halt
@ -57575,9 +57557,7 @@
</node> </node>
<node CREATED="1737760037922" ID="ID_188274481" MODIFIED="1737760311471" TEXT="Variante-3 w&#xfc;rde tats&#xe4;chlich erweiterte Logik erm&#xf6;glichen &#x2014; erscheint aber fragw&#xfc;rdig"> <node CREATED="1737760037922" ID="ID_188274481" MODIFIED="1737760311471" TEXT="Variante-3 w&#xfc;rde tats&#xe4;chlich erweiterte Logik erm&#xf6;glichen &#x2014; erscheint aber fragw&#xfc;rdig">
<richcontent TYPE="NOTE"><html> <richcontent TYPE="NOTE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
Weil das, was man nun zus&#228;tzlich machen k&#246;nnte, nur auf Basis der Implementierung verst&#228;ndlich ist, aber f&#252;r jeden Benutzer ziemlich verwirrend Weil das, was man nun zus&#228;tzlich machen k&#246;nnte, nur auf Basis der Implementierung verst&#228;ndlich ist, aber f&#252;r jeden Benutzer ziemlich verwirrend
@ -57587,14 +57567,13 @@
</richcontent> </richcontent>
</node> </node>
</node> </node>
<node CREATED="1737760312861" ID="ID_1430169629" MODIFIED="1737760337743" TEXT="Beschlu&#xdf;: Variante-1"> <node COLOR="#3e12bf" CREATED="1737760312861" ID="ID_1430169629" MODIFIED="1737940605425" TEXT="Beschlu&#xdf;: Variante-1">
<linktarget COLOR="#2812bf" DESTINATION="ID_1430169629" ENDARROW="Default" ENDINCLINATION="-120;-12;" ID="Arrow_ID_1674350447" SOURCE="ID_100422313" STARTARROW="None" STARTINCLINATION="4;52;"/>
<font NAME="SansSerif" SIZE="12"/> <font NAME="SansSerif" SIZE="12"/>
<icon BUILTIN="yes"/> <icon BUILTIN="yes"/>
<node CREATED="1737760340128" ID="ID_1904432675" MODIFIED="1737760536651" TEXT="Variante-2 w&#xe4;re w&#xfc;nschenswert"> <node CREATED="1737760340128" ID="ID_1904432675" MODIFIED="1737760536651" TEXT="Variante-2 w&#xe4;re w&#xfc;nschenswert">
<richcontent TYPE="NOTE"><html> <richcontent TYPE="NOTE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
da sie ohnehin das erlaubt was man machen sollte, aber Fehl-Verwendungen unterbindet da sie ohnehin das erlaubt was man machen sollte, aber Fehl-Verwendungen unterbindet
@ -57605,9 +57584,7 @@
</node> </node>
<node CREATED="1737760356767" ID="ID_523967840" MODIFIED="1737760483530" TEXT="ist aber in der Umsetzung unklar"> <node CREATED="1737760356767" ID="ID_523967840" MODIFIED="1737760483530" TEXT="ist aber in der Umsetzung unklar">
<richcontent TYPE="NOTE"><html> <richcontent TYPE="NOTE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
da man ja dennoch irgendwie auf diese Funktion Bezug nehmen kann, indem man sie in andere Sytnax einbaut, ist die Abgrenzung zum <i>&#187;Dekorieren&#171;</i>&#160; nicht klar da man ja dennoch irgendwie auf diese Funktion Bezug nehmen kann, indem man sie in andere Sytnax einbaut, ist die Abgrenzung zum <i>&#187;Dekorieren&#171;</i>&#160; nicht klar
@ -57620,14 +57597,12 @@
</node> </node>
</node> </node>
</node> </node>
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1737760572436" ID="ID_1761010902" MODIFIED="1737760625364" TEXT="diese Forward-Deklarationen m&#xfc;ssen dauerhaft bestehen bleiben"> <node BACKGROUND_COLOR="#e9de9f" COLOR="#850649" CREATED="1737760572436" ID="ID_1761010902" MODIFIED="1737940630654" TEXT="diese Forward-Deklarationen m&#xfc;ssen dauerhaft bestehen bleiben">
<icon BUILTIN="messagebox_warning"/> <icon BUILTIN="messagebox_warning"/>
<node CREATED="1737760626950" ID="ID_1746781945" MODIFIED="1737760654483" TEXT="damit die sp&#xe4;tere Zuweisung klappt, m&#xfc;ssen Referenzen verwendet werden"/> <node CREATED="1737760626950" ID="ID_1746781945" MODIFIED="1737760654483" TEXT="damit die sp&#xe4;tere Zuweisung klappt, m&#xfc;ssen Referenzen verwendet werden"/>
<node CREATED="1737760760265" ID="ID_1932015736" MODIFIED="1737760997909" TEXT="eine &#xbb;high-tech-L&#xf6;sung&#xab; w&#xe4;re denkbar &#x2014; erscheit aber zweifelhaft"> <node CREATED="1737760760265" ID="ID_1932015736" MODIFIED="1737760997909" TEXT="eine &#xbb;high-tech-L&#xf6;sung&#xab; w&#xe4;re denkbar &#x2014; erscheit aber zweifelhaft">
<richcontent TYPE="NOTE"><html> <richcontent TYPE="NOTE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
...sie best&#252;nde darin, die Referenzen nach der Zuweisung zu <i>materialisieren;</i>&#160; aber die Schwierigkeit besteht darin dieses Linken auszul&#246;sen, da die ganze DSL darauf abstellt, Funktionen beliebig ineinander zu verschachteln, und damit sehr viel zu kopieren; man m&#252;&#223;te dann entweder eine komplette Link-Infrastruktur hochziehen (Parser-Funktionen w&#228;ren speziell als noch ungelinkt markiert und es g&#228;be einen separaten Call-Chain), oder man m&#252;&#223;t das Binden/Materialisieren beim ersten Aufruf machen, was in der Praxis nicht sonderlich hilfreich ist ...sie best&#252;nde darin, die Referenzen nach der Zuweisung zu <i>materialisieren;</i>&#160; aber die Schwierigkeit besteht darin dieses Linken auszul&#246;sen, da die ganze DSL darauf abstellt, Funktionen beliebig ineinander zu verschachteln, und damit sehr viel zu kopieren; man m&#252;&#223;te dann entweder eine komplette Link-Infrastruktur hochziehen (Parser-Funktionen w&#228;ren speziell als noch ungelinkt markiert und es g&#228;be einen separaten Call-Chain), oder man m&#252;&#223;t das Binden/Materialisieren beim ersten Aufruf machen, was in der Praxis nicht sonderlich hilfreich ist
@ -57643,9 +57618,9 @@
</node> </node>
</node> </node>
</node> </node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1737900281772" ID="ID_1448096788" MODIFIED="1737900299647" TEXT="Funktionalit&#xe4;t erg&#xe4;nzen"> <node COLOR="#338800" CREATED="1737900281772" ID="ID_1448096788" MODIFIED="1737931646416" TEXT="Funktionalit&#xe4;t erg&#xe4;nzen">
<icon BUILTIN="flag-yellow"/> <icon BUILTIN="button_ok"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1737900357508" ID="ID_1812575904" MODIFIED="1737902053232" TEXT="opaqueConnex"> <node COLOR="#435e98" CREATED="1737900357508" ID="ID_1812575904" MODIFIED="1737931377725" TEXT="opaqueConnex">
<icon BUILTIN="info"/> <icon BUILTIN="info"/>
<node CREATED="1737900423425" ID="ID_1797162357" MODIFIED="1737900451668" TEXT="parse function is type-erased"/> <node CREATED="1737900423425" ID="ID_1797162357" MODIFIED="1737900451668" TEXT="parse function is type-erased"/>
<node CREATED="1737900453103" ID="ID_1367568195" MODIFIED="1737900551119" TEXT="FUN &#x2261; std::function"/> <node CREATED="1737900453103" ID="ID_1367568195" MODIFIED="1737900551119" TEXT="FUN &#x2261; std::function"/>
@ -57653,35 +57628,34 @@
<node CREATED="1737900569320" ID="ID_1096113156" MODIFIED="1737900574986" TEXT="ist zuweisbar"/> <node CREATED="1737900569320" ID="ID_1096113156" MODIFIED="1737900574986" TEXT="ist zuweisbar"/>
<node CREATED="1737900578558" ID="ID_344632892" MODIFIED="1737900631289" TEXT="(Zuweisbarkeit) dient auch als type-Tag"/> <node CREATED="1737900578558" ID="ID_344632892" MODIFIED="1737900631289" TEXT="(Zuweisbarkeit) dient auch als type-Tag"/>
</node> </node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1737900639590" ID="ID_1759226520" MODIFIED="1737902126147" TEXT="ansonsten: nichts zu tun"> <node BACKGROUND_COLOR="#e4eda1" COLOR="#001299" CREATED="1737900639590" ID="ID_1759226520" MODIFIED="1737931399567" STYLE="fork" TEXT="ansonsten: &#x201e;nichts&#x201c; zu tun">
<edge COLOR="#808080" STYLE="bezier" WIDTH="thin"/>
<arrowlink COLOR="#f6fec6" DESTINATION="ID_677433286" ENDARROW="Default" ENDINCLINATION="-25;-71;" ID="Arrow_ID_47317323" STARTARROW="None" STARTINCLINATION="-19;2;"/> <arrowlink COLOR="#f6fec6" DESTINATION="ID_677433286" ENDARROW="Default" ENDINCLINATION="-25;-71;" ID="Arrow_ID_47317323" STARTARROW="None" STARTINCLINATION="-19;2;"/>
<icon BUILTIN="idea"/> <icon BUILTIN="idea"/>
<node CREATED="1737900687256" ID="ID_1682593770" MODIFIED="1737900709225" TEXT="Steuerung &#xfc;ber das Konstruktor-Argument"/> <node CREATED="1737900687256" ID="ID_1682593770" MODIFIED="1737931373039" TEXT="Steuerung &#xfc;ber das Konstruktor-Argument"/>
<node CREATED="1737900726635" ID="ID_844484749" MODIFIED="1737900746868" TEXT="anlegen durch eine leere std::function"/> <node CREATED="1737900726635" ID="ID_844484749" MODIFIED="1737931373039" TEXT="anlegen durch eine leere std::function"/>
</node> </node>
</node> </node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1737900361556" ID="ID_1323300092" MODIFIED="1737902053232" TEXT="forwardConnex"> <node COLOR="#435e98" CREATED="1737900361556" ID="ID_1323300092" MODIFIED="1737931379863" TEXT="forwardConnex">
<icon BUILTIN="info"/> <icon BUILTIN="info"/>
<node CREATED="1737901815146" ID="ID_248887267" MODIFIED="1737901826492" TEXT="Referenz auf einen anderen Connex"/> <node CREATED="1737901815146" ID="ID_248887267" MODIFIED="1737901826492" TEXT="Referenz auf einen anderen Connex"/>
<node CREATED="1737900453103" ID="ID_432272475" MODIFIED="1737901850195"> <node CREATED="1737900453103" ID="ID_432272475" MODIFIED="1737901850195">
<richcontent TYPE="NODE"><html> <richcontent TYPE="NODE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
FUN &#8801; std::function <font color="#9b0202">&amp;</font> FUN &#8801; std::function <font color="#9b0202">&amp;</font>
</p> </p>
</body> </body>
</html> </html></richcontent>
</richcontent> </node>
<node COLOR="#435e98" CREATED="1737931633450" ID="ID_1828235175" MODIFIED="1737931640249" TEXT="als Typedef formulieren">
<icon BUILTIN="yes"/>
</node> </node>
</node> </node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1737901890719" ID="ID_677433286" MODIFIED="1737902114644"> <node BACKGROUND_COLOR="#e4eda1" COLOR="#001299" CREATED="1737901890719" ID="ID_677433286" MODIFIED="1737931404261" STYLE="fork">
<richcontent TYPE="NODE"><html> <richcontent TYPE="NODE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
Connex-Definition Connex-Definition
@ -57690,27 +57664,25 @@
erf&#252;llt das bereits erf&#252;llt das bereits
</p> </p>
</body> </body>
</html> </html></richcontent>
</richcontent>
<linktarget COLOR="#f6fec6" DESTINATION="ID_677433286" ENDARROW="Default" ENDINCLINATION="-25;-71;" ID="Arrow_ID_47317323" SOURCE="ID_1759226520" STARTARROW="None" STARTINCLINATION="-19;2;"/> <linktarget COLOR="#f6fec6" DESTINATION="ID_677433286" ENDARROW="Default" ENDINCLINATION="-25;-71;" ID="Arrow_ID_47317323" SOURCE="ID_1759226520" STARTARROW="None" STARTINCLINATION="-19;2;"/>
<icon BUILTIN="idea"/> <icon BUILTIN="idea"/>
<node BACKGROUND_COLOR="#ccb59b" COLOR="#6e2a38" CREATED="1737901921332" ID="ID_969187731" MODIFIED="1737901935953" TEXT="Connex ist ein low-level-Konstrukt"> <node BACKGROUND_COLOR="#ccb59b" COLOR="#6e2a38" CREATED="1737901921332" ID="ID_969187731" MODIFIED="1737931404259" TEXT="Connex ist ein low-level-Konstrukt">
<font ITALIC="true" NAME="SansSerif" SIZE="14"/> <font ITALIC="true" NAME="SansSerif" SIZE="14"/>
<icon BUILTIN="yes"/> <icon BUILTIN="yes"/>
<node CREATED="1737901937041" ID="ID_25503755" MODIFIED="1737901942778" TEXT="deshalb haben wir den Parser"> <node CREATED="1737901937041" ID="ID_25503755" MODIFIED="1737901942778" TEXT="deshalb haben wir den Parser">
<icon BUILTIN="ksmiletris"/> <icon BUILTIN="ksmiletris"/>
</node> </node>
<node CREATED="1737901944289" ID="ID_1298401085" MODIFIED="1737901960594" TEXT="der dar&#xfc;ber liegende Code sorgt f&#xfc;r den richtigen Zugang"/> <node CREATED="1737901944289" ID="ID_1298401085" MODIFIED="1737931404259" TEXT="der dar&#xfc;ber liegende Code sorgt f&#xfc;r den richtigen Zugang"/>
</node> </node>
<node CREATED="1737902212717" ID="ID_1611321813" MODIFIED="1737902236666" TEXT="umstellen..."> <node CREATED="1737902212717" ID="ID_1611321813" MODIFIED="1737931404259" TEXT="umstellen...">
<node CREATED="1737902237690" ID="ID_1997654816" MODIFIED="1737903301670" TEXT="NonAssign &#x27f6; beliebig kopierbar und zuweisbar"> <node CREATED="1737902237690" ID="ID_1997654816" MODIFIED="1737931440641" TEXT="NonAssign &#x27f6; beliebig kopierbar und zuweisbar">
<node CREATED="1737903172029" ID="ID_1448785140" MODIFIED="1737903181056" TEXT="die ganze Unterscheidung war k&#xfc;nstlich"/> <arrowlink COLOR="#0d5ec0" DESTINATION="ID_909721103" ENDARROW="Default" ENDINCLINATION="1;-37;" ID="Arrow_ID_1649313759" STARTARROW="None" STARTINCLINATION="-118;7;"/>
<node CREATED="1737903181956" ID="ID_395623810" MODIFIED="1737903192030" TEXT="die Weichen werden auf DSL-Ebene gestellt"/> <node CREATED="1737903172029" ID="ID_1448785140" MODIFIED="1737931404259" TEXT="die ganze Unterscheidung war k&#xfc;nstlich"/>
<node CREATED="1737903181956" ID="ID_395623810" MODIFIED="1737931404259" TEXT="die Weichen werden auf DSL-Ebene gestellt"/>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1737903192730" ID="ID_1283071351" MODIFIED="1737903229001" TEXT="und dort oft auf gef&#xe4;hrliche Weise"> <node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1737903192730" ID="ID_1283071351" MODIFIED="1737903229001" TEXT="und dort oft auf gef&#xe4;hrliche Weise">
<richcontent TYPE="NOTE"><html> <richcontent TYPE="NOTE"><html>
<head> <head/>
</head>
<body> <body>
<p> <p>
da viele Builder-Funktionen in ein neues Syntax-Objekt schieben da viele Builder-Funktionen in ein neues Syntax-Objekt schieben
@ -57729,16 +57701,95 @@
<node CREATED="1737901996833" ID="ID_1612965331" MODIFIED="1737902030982" TEXT="denn das Fehler-Schema mu&#xdf; in den Connex abgelegt werden"/> <node CREATED="1737901996833" ID="ID_1612965331" MODIFIED="1737902030982" TEXT="denn das Fehler-Schema mu&#xdf; in den Connex abgelegt werden"/>
</node> </node>
</node> </node>
<node CREATED="1737928226021" ID="ID_1934790072" MODIFIED="1737928238887" TEXT="Zuweisung an die Funktion explizit in Syntax realisieren"/> <node COLOR="#338800" CREATED="1737903254242" ID="ID_909721103" MODIFIED="1737931440641" TEXT="Initialisierung der Referenz">
<linktarget COLOR="#0d5ec0" DESTINATION="ID_909721103" ENDARROW="Default" ENDINCLINATION="1;-37;" ID="Arrow_ID_1649313759" SOURCE="ID_1997654816" STARTARROW="None" STARTINCLINATION="-118;7;"/>
<icon BUILTIN="button_ok"/>
<node BACKGROUND_COLOR="#d2bbc9" CREATED="1737927753932" ID="ID_317012062" MODIFIED="1737940548945" TEXT="das ist technisch anspruchsvoll...">
<icon BUILTIN="messagebox_warning"/>
</node> </node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1737900294630" ID="ID_770847444" MODIFIED="1737900299648" TEXT="in DSL einbinden"> <node COLOR="#435e98" CREATED="1737927762571" ID="ID_980466550" MODIFIED="1737940529468" TEXT="spezieller dedurction-Guide f&#xfc;r Parser">
<icon BUILTIN="flag-yellow"/> <node CREATED="1737927795006" ID="ID_1992583888" MODIFIED="1737927819175" TEXT="der macht den Schwenk auf die eingebettete Referenz"/>
<node CREATED="1737903350357" ID="ID_870130978" MODIFIED="1737903359576" TEXT="expectResult&lt;RES&gt;()"> <node COLOR="#435e98" CREATED="1737927820003" ID="ID_303011411" MODIFIED="1737940558181" TEXT="zur Vereinfachung: Type-Alias definieren">
<icon BUILTIN="yes"/>
<node CREATED="1737927831639" ID="ID_349690499" MODIFIED="1737927838908" TEXT="OpaqueConnex&lt;RES&gt;"/>
<node CREATED="1737927839640" ID="ID_320293715" MODIFIED="1737927849187" TEXT="ForwardConnex&lt;RES&gt;"/>
</node>
</node>
<node COLOR="#435e98" CREATED="1737927867197" ID="ID_1443350587" MODIFIED="1737940527967" TEXT="ma&#xdf;geschneiderte buildConnex(Syntax&lt;OpaqueConnex&gt;)">
<node CREATED="1737927895529" ID="ID_1795977503" MODIFIED="1737927907403" TEXT="erzwingt explizit die Konversion"/>
<node CREATED="1737927908178" ID="ID_614403358" MODIFIED="1737927930153" TEXT="konstruiert direkt einen ForwardConnex"/>
<node CREATED="1737927930852" ID="ID_956432509" MODIFIED="1737927946326" TEXT="brauche daf&#xfc;r geeigneten Ctor, um die Referenz zu akzeptieren"/>
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1737927948026" ID="ID_1038319555" MODIFIED="1737931476350" TEXT="L&#xf6;sung: Value-construct, kein move">
<icon BUILTIN="idea"/>
<node CREATED="1737927968957" ID="ID_1311369405" MODIFIED="1737927995199" TEXT="die move/copy-Unterscheidung passiert im Argument"/>
<node CREATED="1737927995860" ID="ID_1053841178" MODIFIED="1737931531011" TEXT="dann schreiben wir aber eine unn&#xf6;tige Kopie im member-Init"/>
<node CREATED="1737928009314" ID="ID_752029743" MODIFIED="1737931615719" TEXT="der Optimiser soll das richten (sehe keine andere L&#xf6;sung)">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
es sei denn, man w&#252;rde Connex komplett aufdoppeln f&#252;r den Referenz-Fall (wobei &#228;rgerlicherweise wirklich aller Code identisch w&#228;re, bis auf eine Variante im Konstruktor). Nat&#252;rlich habe ich auch versucht, nur den Konstruktor allein zu spezialisieren, das ist mir aber nicht gelungen
</p>
</body>
</html></richcontent>
</node>
<node BACKGROUND_COLOR="#c8c0b6" CREATED="1737928015241" ID="ID_284506355" MODIFIED="1737931622739" TEXT="daf&#xfc;r bekommen wir nun auch eine Referenz durch"/>
</node>
<node BACKGROUND_COLOR="#c5aaab" COLOR="#bf0dc0" CREATED="1737928039006" ID="ID_476963617" MODIFIED="1737932121902" TEXT="puh ... mehrere Stunden Knobelei">
<linktarget COLOR="#a670c5" DESTINATION="ID_476963617" ENDARROW="Default" ENDINCLINATION="63;87;" ID="Arrow_ID_1307955722" SOURCE="ID_1965092419" STARTARROW="None" STARTINCLINATION="391;0;"/>
<icon BUILTIN="smiley-angry"/>
</node>
</node>
</node>
<node COLOR="#338800" CREATED="1737928226021" ID="ID_1934790072" MODIFIED="1737932003225" TEXT="Zuweisung an die Funktion explizit in Syntax realisieren">
<icon BUILTIN="button_ok"/>
<node COLOR="#435e98" CREATED="1737931648229" ID="ID_1083371316" MODIFIED="1737932028968" TEXT="mu&#xdf; daf&#xfc;r einen eigenen cross-Assignment-Operator schreiben">
<icon BUILTIN="button_ok"/>
<node CREATED="1737932034900" ID="ID_1173496187" MODIFIED="1737932055544">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
ausdefinierte Syntax <i>per Value</i>&#160;(!) nehmen
</p>
</body>
</html>
</richcontent>
</node>
<node CREATED="1737932057241" ID="ID_201731446" MODIFIED="1737932069138" TEXT="explizit die custom-conversion triggern"/>
<node CREATED="1737932070061" ID="ID_193505924" MODIFIED="1737932078546" TEXT="dann die Parse-Funktion r&#xfc;berschieben"/>
</node>
<node CREATED="1737931662217" ID="ID_91260604" MODIFIED="1737931677399" TEXT="verzichte hier (und auch sonstwo) bewu&#xdf;t auf alle Checks">
<icon BUILTIN="yes"/>
</node>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1737931682044" ID="ID_850275819" MODIFIED="1737931998586" TEXT="(das ist angemessen hier)">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
...es f&#228;llt mir schwer, keine Fehler-Checks zu machen, aber ein kurzer Versuch zeigt, da&#223; diese so einiges Metaprogramming erfordern w&#252;rden &#8212; und ich habe generell beschlossen, hier <b>keine Parser-Library</b>&#160;zu entwickeln, sondern <i>nur Abk&#252;rzungen f&#252;r einfache Parse-Tasks,</i>&#160; die jemand wie ich auch von Hand (per Rekursive-descent) schreiben k&#246;nnte. In dem Fall bin ich also mal arrogant und warte, was passiert, denn ich kann mir nicht vorstellen, da&#223; man dieses Framework ohne gewisse Erfahrungen mit Parsern verwenden kann...
</p>
</body>
</html>
</richcontent>
</node>
</node>
</node>
<node COLOR="#338800" CREATED="1737900294630" ID="ID_770847444" MODIFIED="1737932135453" TEXT="in DSL einbinden">
<icon BUILTIN="button_ok"/>
<node COLOR="#435e98" CREATED="1737903350357" ID="ID_870130978" MODIFIED="1737940521807" TEXT="expectResult&lt;RES&gt;()">
<node CREATED="1737903366802" ID="ID_806063281" MODIFIED="1737903376846" TEXT="bewu&#xdf;t ein sehr expliziter Name!"> <node CREATED="1737903366802" ID="ID_806063281" MODIFIED="1737903376846" TEXT="bewu&#xdf;t ein sehr expliziter Name!">
<icon BUILTIN="yes"/> <icon BUILTIN="yes"/>
</node> </node>
<node CREATED="1737903380886" ID="ID_1444141146" MODIFIED="1737903395440" TEXT="legt ein leeres Platzhalter-Syntax-Objekt an"/> <node CREATED="1737903380886" ID="ID_1444141146" MODIFIED="1737903395440" TEXT="legt ein leeres Platzhalter-Syntax-Objekt an"/>
</node> </node>
<node COLOR="#435e98" CREATED="1737932089739" ID="ID_1965092419" MODIFIED="1737940523039" TEXT="Anpassungen um per accept(syntax) eine Referenz aufzugreifen">
<arrowlink COLOR="#a670c5" DESTINATION="ID_476963617" ENDARROW="Default" ENDINCLINATION="63;87;" ID="Arrow_ID_1307955722" STARTARROW="None" STARTINCLINATION="391;0;"/>
</node>
</node>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1737509793049" ID="ID_1654271031" MODIFIED="1737932316916" TEXT="erwartete Verwendung im Test durchspielen">
<arrowlink COLOR="#69a19e" DESTINATION="ID_1564220447" ENDARROW="Default" ENDINCLINATION="365;-30;" ID="Arrow_ID_30873436" STARTARROW="None" STARTINCLINATION="-288;17;"/>
<icon BUILTIN="flag-pink"/>
</node> </node>
</node> </node>
<node CREATED="1737048820482" ID="ID_235554745" MODIFIED="1737048832524" TEXT="generisches Model-Binding"/> <node CREATED="1737048820482" ID="ID_235554745" MODIFIED="1737048832524" TEXT="generisches Model-Binding"/>
@ -57801,6 +57852,14 @@
</node> </node>
<node COLOR="#435e98" CREATED="1737850587657" ID="ID_1051789530" MODIFIED="1737850597849" TEXT="was anderes als strings erzeugen"/> <node COLOR="#435e98" CREATED="1737850587657" ID="ID_1051789530" MODIFIED="1737850597849" TEXT="was anderes als strings erzeugen"/>
</node> </node>
<node COLOR="#338800" CREATED="1737932197686" ID="ID_239473120" MODIFIED="1737932209253" TEXT="Rekursive Syntax">
<icon BUILTIN="button_ok"/>
<node COLOR="#435e98" CREATED="1737932214652" ID="ID_725486933" MODIFIED="1737932224531" TEXT="die klassische selbst-rekursive Regel"/>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1737509774878" ID="ID_1564220447" MODIFIED="1737932324341" TEXT="Beispiel f&#xfc;r verschachtelte Expressions">
<linktarget COLOR="#69a19e" DESTINATION="ID_1564220447" ENDARROW="Default" ENDINCLINATION="365;-30;" ID="Arrow_ID_30873436" SOURCE="ID_1654271031" STARTARROW="None" STARTINCLINATION="-288;17;"/>
<icon BUILTIN="flag-pink"/>
</node>
</node>
<node CREATED="1737845308863" ID="ID_383219766" MODIFIED="1737845313627" TEXT="simpleUsage"> <node CREATED="1737845308863" ID="ID_383219766" MODIFIED="1737845313627" TEXT="simpleUsage">
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1737845314577" ID="ID_453689160" MODIFIED="1737845324102" TEXT="puh ... was zeigen wir da?"> <node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1737845314577" ID="ID_453689160" MODIFIED="1737845324102" TEXT="puh ... was zeigen wir da?">
<icon BUILTIN="help"/> <icon BUILTIN="help"/>