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:
parent
5e86aa3880
commit
ed5c6f7c17
3 changed files with 279 additions and 134 deletions
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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äsentation?">
|
<node COLOR="#435e98" CREATED="1737514608995" FOLDED="true" ID="ID_1247344786" MODIFIED="1737581143659" TEXT="Zahl der Iterationen und Modell-Reprä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 ⟹ kann kein Array sein"/>
|
<node CREATED="1737514625345" ID="ID_417722298" MODIFIED="1737514657151" TEXT="Konsequenz: offen ⟹ 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ändige top-level syntax">
|
<node COLOR="#5b280f" CREATED="1737560240722" ID="ID_1633583353" MODIFIED="1737560259824" TEXT="eigentstä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ützlich"/>
|
<node CREATED="1737515398692" ID="ID_1478704437" MODIFIED="1737515413091" TEXT="der ist einfach zu realisieren und sehr nü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> muß tatsächlich ein <b>Postfix-Operator</b> sein
|
<i>das</i> muß tatsächlich ein <b>Postfix-Operator</b> 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 ⟼ match-group"/>
|
<node CREATED="1737817661406" ID="ID_74788283" MODIFIED="1737817685150" TEXT="auf Matcher ⟼ 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ß dafür constexpr-branch mit switch-on-Type machen"/>
|
<node CREATED="1737818008232" ID="ID_1008681073" MODIFIED="1737818043982" TEXT="muß dafü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 ⟹ vereinfachen">
|
<node COLOR="#435e98" CREATED="1737820230519" ID="ID_4755618" MODIFIED="1737845408706" TEXT="repetitiever Code ⟹ 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älle wegdiskutiert habe ☺
|
nachdem ich die Model-Fälle wegdiskutiert habe ☺
|
||||||
|
|
@ -57182,10 +57166,14 @@
|
||||||
</node>
|
</node>
|
||||||
<node CREATED="1737817759473" ID="ID_1259641042" MODIFIED="1737820162400" TEXT="0 ⟼ insgesamt abgedeckten String">
|
<node CREATED="1737817759473" ID="ID_1259641042" MODIFIED="1737820162400" TEXT="0 ⟼ 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 ⟼ 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 ⟼ 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üßte mit allen misch-Fällen umgehen können"/>
|
<node CREATED="1737844371498" ID="ID_641248746" MODIFIED="1737844388561" TEXT="man müßte mit allen misch-Fällen umgehen kö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äuchte für alle erdenklichen Fälle einen Pfad, um auf einen String zu kommen; also bräuchte es sowas wie einen operator string(), oder man müß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äuchte für alle erdenklichen Fälle einen Pfad, um auf einen String zu kommen; also bräuchte es sowas wie einen operator string(), oder man müß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ür Tests.
|
wozu will man das? doch nur für Tests.
|
||||||
|
|
@ -57245,9 +57229,7 @@
|
||||||
<node COLOR="#435e98" CREATED="1737843950560" ID="ID_77042913" MODIFIED="1737849817609" TEXT="klären warum structured Bindings nicht funktionieren">
|
<node COLOR="#435e98" CREATED="1737843950560" ID="ID_77042913" MODIFIED="1737849817609" TEXT="klären warum structured Bindings nicht funktionieren">
|
||||||
<node CREATED="1737849641960" ID="ID_510578678" MODIFIED="1737849815956" TEXT="Grund: std::tuple_size nicht spezialisiert ⟹ biegt in Struct-Binding ab">
|
<node CREATED="1737849641960" ID="ID_510578678" MODIFIED="1737849815956" TEXT="Grund: std::tuple_size nicht spezialisiert ⟹ biegt in Struct-Binding ab">
|
||||||
<richcontent TYPE="NOTE"><html>
|
<richcontent TYPE="NOTE"><html>
|
||||||
<head>
|
<head/>
|
||||||
|
|
||||||
</head>
|
|
||||||
<body>
|
<body>
|
||||||
<p>
|
<p>
|
||||||
Die C++ »structured bindings« funktionieren für Arrays, für <i>tuple-like</i>  und aber auch für einfache PODs. Wenn std::tuple_size ein <i>incomplete-type</i>  ist, dann versucht der Compiler ein Binding auf Struct-Felder, scheitert aber daran, daß es eine nicht-triviale Basis-Klasse gibt (und damit die Feld-Nummer nicht mehr offensichtlich klar ist)
|
Die C++ »structured bindings« funktionieren für Arrays, für <i>tuple-like</i>  und aber auch für einfache PODs. Wenn std::tuple_size ein <i>incomplete-type</i>  ist, dann versucht der Compiler ein Binding auf Struct-Felder, scheitert aber daran, daß 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> nicht weitergegeben
|
ganz banal: habe <font face="Monospaced">eval.consumed</font> 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ürlich ein Kern-Feature von recursive-descent"/>
|
<node CREATED="1737515610957" ID="ID_1394504016" MODIFIED="1737940891748" TEXT="es ist natürlich ein Kern-Feature von recursive-descent">
|
||||||
<node CREATED="1737515630666" ID="ID_635140645" MODIFIED="1737553351887" TEXT="es ist notwendig für Dinge wie verschachtelte Ausdrücke">
|
<icon BUILTIN="yes"/>
|
||||||
|
</node>
|
||||||
|
<node CREATED="1737515630666" ID="ID_635140645" MODIFIED="1737940878718" TEXT="es ist notwendig für Dinge wie verschachtelte Ausdrü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üßte dann ein smart-Ptr sein"/>
|
<node CREATED="1737515978965" ID="ID_1241101297" MODIFIED="1737515987234" TEXT="müßte dann ein smart-Ptr sein"/>
|
||||||
<node CREATED="1737516017110" ID="ID_1717046822" MODIFIED="1737516058676" TEXT="müßte undefiniert in der DSL referenzierbar sein"/>
|
<node CREATED="1737516017110" ID="ID_1717046822" MODIFIED="1737516058676" TEXT="müßte undefiniert in der DSL referenzierbar sein"/>
|
||||||
<node CREATED="1737553446367" ID="ID_420976669" MODIFIED="1737553464114" TEXT="müßte dafür Klauseln per Referenz nehmen können"/>
|
<node CREATED="1737553446367" ID="ID_420976669" MODIFIED="1737553464114" TEXT="müßte dafür Klauseln per Referenz nehmen können"/>
|
||||||
</node>
|
</node>
|
||||||
|
<node BACKGROUND_COLOR="#ccb59b" COLOR="#6e2a38" CREATED="1737940901148" ID="ID_28139865" MODIFIED="1737940937388" TEXT="Fazit: finde Lö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ären">
|
</node>
|
||||||
<icon BUILTIN="pencil"/>
|
<node COLOR="#338800" CREATED="1737693819337" ID="ID_228574257" MODIFIED="1737940638024" TEXT="Implementierungs-Technik klären">
|
||||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1737693835207" ID="ID_1616305471" MODIFIED="1737694295281" TEXT="grundsä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ä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üssen dann die strikte Model-Typisierung abschneiden">
|
<node CREATED="1737693849853" ID="ID_1927056535" MODIFIED="1737693956231" TEXT="ABER wir mü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ächlich nicht terminiert; in Haskell könnte man einen solchen Typ anschreiben, in C++ nicht (weil Typ-Ausdrücke eager aufgelöst werden)
|
....weil eine rekursive Definition im Prinzip offen ist und im Extremfall auch tatsächlich nicht terminiert; in Haskell könnte man einen solchen Typ anschreiben, in C++ nicht (weil Typ-Ausdrücke eager aufgelö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<PAR>-Instanz erfolgt"/>
|
<node CREATED="1737694102427" ID="ID_878363951" MODIFIED="1737694137594" TEXT="was ohnehin schon durch die Definition einer Syntax<PAR>-Instanz erfolgt"/>
|
||||||
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1737694138462" ID="ID_837740353" MODIFIED="1737694189304" TEXT="Vorsicht �� können dann rekursive Systeme überhaupt formuliert werden?">
|
<node BACKGROUND_COLOR="#dabdad" COLOR="#990033" CREATED="1737694138462" ID="ID_837740353" MODIFIED="1737940703820" TEXT="Vorsicht �� können dann rekursive Systeme überhaupt formuliert werden?">
|
||||||
<icon BUILTIN="help"/>
|
<icon BUILTIN="help"/>
|
||||||
<node CREATED="1737694494314" ID="ID_1349021262" MODIFIED="1737694529548" TEXT="konkrete Typen können nur durch »Beispiel« erzeugt werden">
|
<node CREATED="1737694494314" ID="ID_1349021262" MODIFIED="1737694529548" TEXT="konkrete Typen können nur durch »Beispiel« 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ß vereinfacht werden">
|
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1737761108914" ID="ID_64242861" MODIFIED="1737761160846" TEXT="oder der Typ an der Schnitt-Stelle muß 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 überhaupt erwähnt wird)">
|
<node CREATED="1737738393985" ID="ID_1121877326" MODIFIED="1737751317964" TEXT="viele verstecken das Thema (wenn es überhaupt erwä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 "Calculator"-Beispiel wird dann ein Ergebnis-Stack verwendet"/>
|
<node CREATED="1737738723505" ID="ID_1018761314" MODIFIED="1737738748516" TEXT="im klassischen "Calculator"-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änkung: User muß Result-Type explizit benennen">
|
<node BACKGROUND_COLOR="#ccb59b" COLOR="#6e2a38" CREATED="1737756303660" ID="ID_593591679" MODIFIED="1737940658714" TEXT="Unvermeidbare Einschränkung: User muß 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önnen wir eine std::function<Ret(StrView)> anlegen"/>
|
<node CREATED="1737756333584" ID="ID_473974893" MODIFIED="1737756354874" TEXT="damit können wir eine std::function<Ret(StrView)> 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="⟹ das muß das nächste Thema sein" VSHIFT="10">
|
<node COLOR="#753c48" CREATED="1737762884132" HGAP="23" ID="ID_1097242773" MODIFIED="1737940733425" TEXT="⟹ das muß das nä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<RES>()"/>
|
<node CREATED="1737757552386" ID="ID_193170390" MODIFIED="1737757558213" TEXT="expect<RES>()"/>
|
||||||
<node CREATED="1737757736924" ID="ID_845564019" MODIFIED="1737757760362" TEXT="Type-Tag ⟹ macht den Connex zuweisbar"/>
|
<node CREATED="1737757736924" ID="ID_845564019" MODIFIED="1737757760362" TEXT="Type-Tag ⟹ 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ßt, außer dem Type-Tag sollte sich die Syntax komplett normal verhalten"/>
|
<node CREATED="1737757864319" ID="ID_1384035666" MODIFIED="1737757887112" TEXT="das heißt, auß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ögliche Varianten">
|
<node CREATED="1737758174587" ID="ID_29086225" MODIFIED="1737758222499" TEXT="mö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ß eine solche Syntax noch zuweisen und dann so verwenden wie sie ist"/>
|
<node CREATED="1737758560698" ID="ID_1679326652" MODIFIED="1737758575731" TEXT="man muß 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 — was stets möglich ist)">
|
<node CREATED="1737758982616" ID="ID_375516011" MODIFIED="1737759057960" TEXT="(oder aber in andere Syntax integrieren — was stets möglich ist)">
|
||||||
<richcontent TYPE="NOTE"><html>
|
<richcontent TYPE="NOTE"><html>
|
||||||
<head>
|
<head/>
|
||||||
|
|
||||||
</head>
|
|
||||||
<body>
|
<body>
|
||||||
<p>
|
<p>
|
||||||
diese andere Syntax hätte dann aber auch einen anderen Typ und müßte in einer anderen Syntax-Variablen gespeichert werden;
|
diese andere Syntax hätte dann aber auch einen anderen Typ und müß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 »filosofisch« und praktsich attraktiv
|
Variante-1 ist »filosofisch« 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 „dann mach's halt nicht falsch“-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 — und wenn irgendjemand unbedingt dekorieren möchte, dann soll er halt
|
...weil sie der „dann mach's halt nicht falsch“-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 — und wenn irgendjemand unbedingt dekorieren möchte, dann soll er halt
|
||||||
|
|
@ -57575,9 +57557,7 @@
|
||||||
</node>
|
</node>
|
||||||
<node CREATED="1737760037922" ID="ID_188274481" MODIFIED="1737760311471" TEXT="Variante-3 würde tatsächlich erweiterte Logik ermöglichen — erscheint aber fragwürdig">
|
<node CREATED="1737760037922" ID="ID_188274481" MODIFIED="1737760311471" TEXT="Variante-3 würde tatsächlich erweiterte Logik ermöglichen — erscheint aber fragwürdig">
|
||||||
<richcontent TYPE="NOTE"><html>
|
<richcontent TYPE="NOTE"><html>
|
||||||
<head>
|
<head/>
|
||||||
|
|
||||||
</head>
|
|
||||||
<body>
|
<body>
|
||||||
<p>
|
<p>
|
||||||
Weil das, was man nun zusätzlich machen könnte, nur auf Basis der Implementierung verständlich ist, aber für jeden Benutzer ziemlich verwirrend
|
Weil das, was man nun zusätzlich machen könnte, nur auf Basis der Implementierung verständlich ist, aber fü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ß: Variante-1">
|
<node COLOR="#3e12bf" CREATED="1737760312861" ID="ID_1430169629" MODIFIED="1737940605425" TEXT="Beschluß: 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äre wünschenswert">
|
<node CREATED="1737760340128" ID="ID_1904432675" MODIFIED="1737760536651" TEXT="Variante-2 wäre wü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>»Dekorieren«</i>  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>»Dekorieren«</i>  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üssen dauerhaft bestehen bleiben">
|
<node BACKGROUND_COLOR="#e9de9f" COLOR="#850649" CREATED="1737760572436" ID="ID_1761010902" MODIFIED="1737940630654" TEXT="diese Forward-Deklarationen müssen dauerhaft bestehen bleiben">
|
||||||
<icon BUILTIN="messagebox_warning"/>
|
<icon BUILTIN="messagebox_warning"/>
|
||||||
<node CREATED="1737760626950" ID="ID_1746781945" MODIFIED="1737760654483" TEXT="damit die spätere Zuweisung klappt, müssen Referenzen verwendet werden"/>
|
<node CREATED="1737760626950" ID="ID_1746781945" MODIFIED="1737760654483" TEXT="damit die spätere Zuweisung klappt, müssen Referenzen verwendet werden"/>
|
||||||
<node CREATED="1737760760265" ID="ID_1932015736" MODIFIED="1737760997909" TEXT="eine »high-tech-Lösung« wäre denkbar — erscheit aber zweifelhaft">
|
<node CREATED="1737760760265" ID="ID_1932015736" MODIFIED="1737760997909" TEXT="eine »high-tech-Lösung« wäre denkbar — erscheit aber zweifelhaft">
|
||||||
<richcontent TYPE="NOTE"><html>
|
<richcontent TYPE="NOTE"><html>
|
||||||
<head>
|
<head/>
|
||||||
|
|
||||||
</head>
|
|
||||||
<body>
|
<body>
|
||||||
<p>
|
<p>
|
||||||
...sie bestünde darin, die Referenzen nach der Zuweisung zu <i>materialisieren;</i>  aber die Schwierigkeit besteht darin dieses Linken auszulösen, da die ganze DSL darauf abstellt, Funktionen beliebig ineinander zu verschachteln, und damit sehr viel zu kopieren; man müßte dann entweder eine komplette Link-Infrastruktur hochziehen (Parser-Funktionen wären speziell als noch ungelinkt markiert und es gäbe einen separaten Call-Chain), oder man müßt das Binden/Materialisieren beim ersten Aufruf machen, was in der Praxis nicht sonderlich hilfreich ist
|
...sie bestünde darin, die Referenzen nach der Zuweisung zu <i>materialisieren;</i>  aber die Schwierigkeit besteht darin dieses Linken auszulösen, da die ganze DSL darauf abstellt, Funktionen beliebig ineinander zu verschachteln, und damit sehr viel zu kopieren; man müßte dann entweder eine komplette Link-Infrastruktur hochziehen (Parser-Funktionen wären speziell als noch ungelinkt markiert und es gäbe einen separaten Call-Chain), oder man müß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ät ergänzen">
|
<node COLOR="#338800" CREATED="1737900281772" ID="ID_1448096788" MODIFIED="1737931646416" TEXT="Funktionalität ergä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 ≡ std::function"/>
|
<node CREATED="1737900453103" ID="ID_1367568195" MODIFIED="1737900551119" TEXT="FUN ≡ 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: „nichts“ 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 über das Konstruktor-Argument"/>
|
<node CREATED="1737900687256" ID="ID_1682593770" MODIFIED="1737931373039" TEXT="Steuerung ü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 ≡ std::function <font color="#9b0202">&</font>
|
FUN ≡ std::function <font color="#9b0202">&</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üllt das bereits
|
erfü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über liegende Code sorgt für den richtigen Zugang"/>
|
<node CREATED="1737901944289" ID="ID_1298401085" MODIFIED="1737931404259" TEXT="der darüber liegende Code sorgt fü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 ⟶ beliebig kopierbar und zuweisbar">
|
<node CREATED="1737902237690" ID="ID_1997654816" MODIFIED="1737931440641" TEXT="NonAssign ⟶ beliebig kopierbar und zuweisbar">
|
||||||
<node CREATED="1737903172029" ID="ID_1448785140" MODIFIED="1737903181056" TEXT="die ganze Unterscheidung war kü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ü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ährliche Weise">
|
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1737903192730" ID="ID_1283071351" MODIFIED="1737903229001" TEXT="und dort oft auf gefä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ß in den Connex abgelegt werden"/>
|
<node CREATED="1737901996833" ID="ID_1612965331" MODIFIED="1737902030982" TEXT="denn das Fehler-Schema muß 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ü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<RES>()">
|
<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<RES>"/>
|
||||||
|
<node CREATED="1737927839640" ID="ID_320293715" MODIFIED="1737927849187" TEXT="ForwardConnex<RES>"/>
|
||||||
|
</node>
|
||||||
|
</node>
|
||||||
|
<node COLOR="#435e98" CREATED="1737927867197" ID="ID_1443350587" MODIFIED="1737940527967" TEXT="maßgeschneiderte buildConnex(Syntax<OpaqueConnex>)">
|
||||||
|
<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ür geeigneten Ctor, um die Referenz zu akzeptieren"/>
|
||||||
|
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1737927948026" ID="ID_1038319555" MODIFIED="1737931476350" TEXT="Lö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ötige Kopie im member-Init"/>
|
||||||
|
<node CREATED="1737928009314" ID="ID_752029743" MODIFIED="1737931615719" TEXT="der Optimiser soll das richten (sehe keine andere Lösung)">
|
||||||
|
<richcontent TYPE="NOTE"><html>
|
||||||
|
<head/>
|
||||||
|
<body>
|
||||||
|
<p>
|
||||||
|
es sei denn, man würde Connex komplett aufdoppeln für den Referenz-Fall (wobei ärgerlicherweise wirklich aller Code identisch wäre, bis auf eine Variante im Konstruktor). Natü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ü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ß dafü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> (!) 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überschieben"/>
|
||||||
|
</node>
|
||||||
|
<node CREATED="1737931662217" ID="ID_91260604" MODIFIED="1737931677399" TEXT="verzichte hier (und auch sonstwo) bewuß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ällt mir schwer, keine Fehler-Checks zu machen, aber ein kurzer Versuch zeigt, daß diese so einiges Metaprogramming erfordern würden — und ich habe generell beschlossen, hier <b>keine Parser-Library</b> zu entwickeln, sondern <i>nur Abkürzungen für einfache Parse-Tasks,</i>  die jemand wie ich auch von Hand (per Rekursive-descent) schreiben könnte. In dem Fall bin ich also mal arrogant und warte, was passiert, denn ich kann mir nicht vorstellen, daß 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<RES>()">
|
||||||
<node CREATED="1737903366802" ID="ID_806063281" MODIFIED="1737903376846" TEXT="bewußt ein sehr expliziter Name!">
|
<node CREATED="1737903366802" ID="ID_806063281" MODIFIED="1737903376846" TEXT="bewuß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ü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"/>
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue