Library: implementation of syntax-branching
...is now easy and follows entirely the scheme established thus far
This commit is contained in:
parent
e3fe8fe380
commit
1a3781bbc0
3 changed files with 194 additions and 31 deletions
|
|
@ -320,6 +320,41 @@ namespace util {
|
|||
}
|
||||
|
||||
|
||||
/** accept sequence of two parse functions */
|
||||
template<class C1, class C2>
|
||||
auto
|
||||
branchedConnex (C1&& connex1, C2&& connex2)
|
||||
{
|
||||
using R1 = typename decay_t<C1>::Result;
|
||||
using R2 = typename decay_t<C2>::Result;
|
||||
using SumResult = typename _Join<AltModel, R1, R2>::Result;
|
||||
using SumEval = Eval<SumResult>;
|
||||
return Connex{[conL = forward<C1>(connex1)
|
||||
,conR = forward<C2>(connex2)
|
||||
]
|
||||
(StrView toParse) -> SumEval
|
||||
{
|
||||
auto eval1 = conL.parse (toParse);
|
||||
if (eval1.result)
|
||||
{
|
||||
uint endBranch1 = eval1.consumed;
|
||||
return SumEval{SumResult::mark_left (move(*eval1.result))
|
||||
,endBranch1
|
||||
};
|
||||
}
|
||||
auto eval2 = conR.parse (toParse);
|
||||
if (eval2.result)
|
||||
{
|
||||
uint endBranch2 = eval2.consumed;
|
||||
return SumEval{SumResult::mark_right (move(*eval2.result))
|
||||
,endBranch2
|
||||
};
|
||||
}
|
||||
return SumEval{std::nullopt};
|
||||
}};
|
||||
}
|
||||
|
||||
|
||||
template<class PAR>
|
||||
class Syntax;
|
||||
|
||||
|
|
@ -427,6 +462,15 @@ using Sigi = typename _Fun<PFun>::Sig;
|
|||
,Parser{forward<SPEC> (clauseDef)}));
|
||||
}
|
||||
|
||||
template<typename SPEC>
|
||||
auto
|
||||
alt (SPEC&& clauseDef)
|
||||
{
|
||||
return accept(
|
||||
branchedConnex (move(parse_)
|
||||
,Parser{forward<SPEC> (clauseDef)}));
|
||||
}
|
||||
|
||||
private:
|
||||
Eval<Result>&
|
||||
eval()
|
||||
|
|
|
|||
|
|
@ -135,10 +135,17 @@ namespace test {
|
|||
}
|
||||
|
||||
|
||||
/** @test define a sequence of syntax structures to match by parse. */
|
||||
/** @test define a sequence of syntax structures to match by parse.
|
||||
* - first demonstrate explicitly how the consecutive parsing works
|
||||
* and how both models are combined into a product model (tuple)
|
||||
* - demonstrate how leading whitespace is skipped automatically
|
||||
* - then perform the same parse with a Syntax clause build with
|
||||
* the `seq()` builder-DSL
|
||||
* - extend this Syntax by adding a further sequential clause.
|
||||
*/
|
||||
void
|
||||
acceptSequential()
|
||||
{
|
||||
{ //_______________________________________________
|
||||
// Demonstration: how sequence combinator works....
|
||||
auto term1 = buildConnex ("hello");
|
||||
auto term2 = buildConnex ("world");
|
||||
|
|
@ -185,6 +192,7 @@ namespace test {
|
|||
CHECK (not term2.parse(" old ").result);
|
||||
|
||||
|
||||
//___________________________________________________
|
||||
// DSL parse clause builder: a sequence of terminals...
|
||||
auto syntax = accept("hello").seq("world");
|
||||
|
||||
|
|
@ -213,9 +221,12 @@ namespace test {
|
|||
}
|
||||
|
||||
|
||||
|
||||
/** @test TODO WIP define alternative syntax structures to match by parse.
|
||||
* - first demonstrate how a model with alternative branches can be
|
||||
* populated and gradually extended while searching for a match.
|
||||
* - then show explicitly the logic to check and select branches
|
||||
* and construct the corresponding sum-model (variant)
|
||||
*/
|
||||
void
|
||||
acceptAlternatives()
|
||||
|
|
@ -293,7 +304,42 @@ namespace test {
|
|||
CHECK (e2.result->selected() == 0); // Selector-ID of the first matching branch (here #0)
|
||||
CHECK (e2.result->get<0>().str() == "brazen"); // We know that branch#0 holds a RegExp-Matcher (from term1)
|
||||
CHECK (e2.result->get<0>().suffix() == " dicktator");
|
||||
}
|
||||
CHECK (e2.consumed == 6);
|
||||
CHECK (s2.substr(e2.consumed) == " dicktator");
|
||||
|
||||
|
||||
//________________________________________________
|
||||
// DSL parse clause builder: alternative branches...
|
||||
auto syntax = accept("brazen").alt("bragging");
|
||||
|
||||
// Perform the same parse as demonstrated above....
|
||||
CHECK (not syntax.hasResult());
|
||||
syntax.parse(s1);
|
||||
CHECK (not syntax.success());
|
||||
syntax.parse(s2);
|
||||
CHECK (syntax);
|
||||
auto altModel = syntax.getResult();
|
||||
CHECK (altModel.selected() == 0);
|
||||
CHECK (altModel.get<0>().str() == "brazen");
|
||||
|
||||
// can build extended clause from existing one
|
||||
auto syntax2 = syntax.alt("smarmy (\\w+)");
|
||||
CHECK (not syntax2.hasResult());
|
||||
syntax2.parse(s1);
|
||||
CHECK (not syntax2.success());
|
||||
syntax2.parse(s2);
|
||||
CHECK (syntax2.success());
|
||||
CHECK (syntax2.getResult().TOP == 2); // Note: further branch has been folded into an extended AltModel
|
||||
CHECK (syntax2.getResult().selected() == 0); // ... string s2 still matched the same branch (#0)
|
||||
CHECK (syntax2.getResult().get<0>().str() == "brazen");
|
||||
|
||||
syntax2.parse("smarmy saviour");
|
||||
CHECK (syntax2.success());
|
||||
auto altModel2 = syntax2.getResult();
|
||||
CHECK (syntax2.getResult().selected() == 2); // ... but another string can match the added branch #2
|
||||
CHECK (syntax2.getResult().get<2>().str() == "smarmy saviour");
|
||||
CHECK (syntax2.getResult().get<2>().str(1) == "saviour");
|
||||
} // Note: syntax for this branch #2 captured an additional word
|
||||
};
|
||||
|
||||
LAUNCHER (Parse_test, "unit common");
|
||||
|
|
|
|||
|
|
@ -55532,8 +55532,9 @@
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1736946825696" ID="ID_272711066" MODIFIED="1736946834898" TEXT="Model-Increment">
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1736947018560" ID="ID_251061074" MODIFIED="1737048260215" TEXT="Implementierungstechnik klären">
|
||||
<node COLOR="#338800" CREATED="1736946825696" ID="ID_272711066" MODIFIED="1737511471619" TEXT="Model-Increment">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#435e98" CREATED="1736947018560" ID="ID_251061074" MODIFIED="1737511474738" TEXT="Implementierungstechnik klären">
|
||||
<linktarget COLOR="#47839d" DESTINATION="ID_251061074" ENDARROW="Default" ENDINCLINATION="-14;-71;" ID="Arrow_ID_1227279766" SOURCE="ID_106647279" STARTARROW="None" STARTINCLINATION="-108;6;"/>
|
||||
<icon BUILTIN="yes"/>
|
||||
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1736947190134" ID="ID_1146338669" MODIFIED="1737234426676" TEXT="es gibt dedizierte Funktionen für jede der drei Junktoren">
|
||||
|
|
@ -55579,7 +55580,8 @@
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1736968942247" ID="ID_917376104" MODIFIED="1736984817920" TEXT="muß Anfangswert der Fold-Sequenz explizit konstruieren">
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#380f69" CREATED="1736968942247" ID="ID_917376104" MODIFIED="1737511498798" TEXT="muß Anfangswert der Fold-Sequenz explizit konstruieren">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
<node CREATED="1736971224510" ID="ID_1155045892" MODIFIED="1736972005211" TEXT="das kann aber durch Binding-Komposition realisiert werden">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
|
|
@ -55590,7 +55592,7 @@
|
|||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1736984900441" ID="ID_1840258579" MODIFIED="1737048113171" TEXT="Aufgabe: «Subexpression» von «Fortsetzung» unterscheiden">
|
||||
<node COLOR="#435e98" CREATED="1736984900441" ID="ID_1840258579" MODIFIED="1737511578229" TEXT="Aufgabe: «Subexpression» von «Fortsetzung» unterscheiden">
|
||||
<linktarget COLOR="#af6c89" DESTINATION="ID_1840258579" ENDARROW="Default" ENDINCLINATION="189;-10;" ID="Arrow_ID_290406639" SOURCE="ID_1725950802" STARTARROW="None" STARTINCLINATION="127;9;"/>
|
||||
<node CREATED="1736985415812" HGAP="40" ID="ID_1711795730" MODIFIED="1736985424657" TEXT="Analyse" VSHIFT="24">
|
||||
<icon BUILTIN="yes"/>
|
||||
|
|
@ -55745,14 +55747,15 @@
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1736988419593" ID="ID_364383845" MODIFIED="1736988437151" TEXT="Pattern-Match und Spezialfall-Implementierung">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1736988419593" ID="ID_364383845" MODIFIED="1737511653707" TEXT="Pattern-Match und Spezialfall-Implementierung">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node CREATED="1736988439351" ID="ID_396611819" MODIFIED="1736988490982" TEXT="verwende ein explizit definiertes Tag: Sub<X>"/>
|
||||
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1736988542489" ID="ID_1635129166" MODIFIED="1737234629319" TEXT="Model-Join extrahieren">
|
||||
<arrowlink COLOR="#465acd" DESTINATION="ID_226754618" ENDARROW="Default" ENDINCLINATION="-418;52;" ID="Arrow_ID_1636406845" STARTARROW="None" STARTINCLINATION="-11;79;"/>
|
||||
<icon BUILTIN="yes"/>
|
||||
<node CREATED="1736989303802" ID="ID_343321438" MODIFIED="1736989337762" TEXT="künstlichen Overlay-(Sub)-Typ mit präparierten ctor-Varianten"/>
|
||||
<node CREATED="1736989524517" ID="ID_1328191899" MODIFIED="1736989546365" TEXT="wir verwenden also für alle Fälle noch ein Type-Tag">
|
||||
<node COLOR="#435e98" CREATED="1736989524517" ID="ID_1328191899" MODIFIED="1737511798295" TEXT="wir verwenden also für alle Fälle noch ein Type-Tag">
|
||||
<icon BUILTIN="idea"/>
|
||||
<node CREATED="1736989550865" ID="ID_1529698419" MODIFIED="1736989681361" TEXT="hey ... jetzt wird die Sache doch noch symmetrisch">
|
||||
<arrowlink COLOR="#883543" DESTINATION="ID_430898447" ENDARROW="Default" ENDINCLINATION="23;81;" ID="Arrow_ID_986870112" STARTARROW="Default" STARTINCLINATION="-37;-77;"/>
|
||||
<node CREATED="1737047917423" ID="ID_1722748785" MODIFIED="1737047922311" TEXT="">
|
||||
|
|
@ -55772,7 +55775,7 @@
|
|||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1736990597339" ID="ID_116496774" MODIFIED="1736990620329" TEXT="wo / wie werden die verschiedenen Tags / Fälle eingebracht?">
|
||||
<node COLOR="#435e98" CREATED="1736990597339" ID="ID_116496774" MODIFIED="1737511779877" TEXT="wo / wie werden die verschiedenen Tags / Fälle eingebracht?">
|
||||
<icon BUILTIN="help"/>
|
||||
<node CREATED="1736990622625" ID="ID_1156223319" MODIFIED="1736990757955" TEXT="statt "Join" dann "Seq", "Alt", "Iter", Sub verwenden?"/>
|
||||
<node CREATED="1736990655365" ID="ID_1974103277" MODIFIED="1736990774257" TEXT="oder die Tag-Typen nennen: "SeqModel", "AltModel", "IterModel", "SubModel""/>
|
||||
|
|
@ -55780,9 +55783,14 @@
|
|||
<node CREATED="1736990864084" ID="ID_1562357541" MODIFIED="1736990882866" TEXT="also z.B. _Join<SeqModel, R1, R2>::Result"/>
|
||||
<node CREATED="1736990997055" ID="ID_814902476" MODIFIED="1736991012369" TEXT="explizite Spezialisierungen als Fallunterscheidung"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#480f69" CREATED="1737511768536" ID="ID_1523530760" MODIFIED="1737511789015" TEXT="das bewährt sich gut">
|
||||
<icon BUILTIN="yes"/>
|
||||
</node>
|
||||
<node CREATED="1736991166384" ID="ID_226754618" MODIFIED="1737234614712" TEXT="Fallkombinationen">
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#c8c0b6" CREATED="1736991166384" ID="ID_226754618" MODIFIED="1737511947153" TEXT="Fallkombinationen">
|
||||
<linktarget COLOR="#465acd" DESTINATION="ID_226754618" ENDARROW="Default" ENDINCLINATION="-418;52;" ID="Arrow_ID_1636406845" SOURCE="ID_1635129166" STARTARROW="None" STARTINCLINATION="-11;79;"/>
|
||||
<linktarget COLOR="#579bd2" DESTINATION="ID_226754618" ENDARROW="Default" ENDINCLINATION="6;427;" ID="Arrow_ID_220186183" SOURCE="ID_209338146" STARTARROW="None" STARTINCLINATION="1852;-83;"/>
|
||||
<font BOLD="true" NAME="SansSerif" SIZE="12"/>
|
||||
<icon BUILTIN="forward"/>
|
||||
<node CREATED="1736991171271" ID="ID_1748513219" MODIFIED="1736991211262" TEXT="_Join<TAG,R1,R2> ⟼ TAG<R1,R2>">
|
||||
<node CREATED="1736991696404" ID="ID_564129640" MODIFIED="1736991706911" TEXT="das impliziert bereits den Tag-Wechsel">
|
||||
|
|
@ -55820,12 +55828,14 @@
|
|||
</node>
|
||||
<node CREATED="1737234537803" ID="ID_337495209" MODIFIED="1737234551785" TEXT="Alternative">
|
||||
<icon BUILTIN="info"/>
|
||||
<node COLOR="#435e98" CREATED="1737511663681" ID="ID_1937626624" MODIFIED="1737511740655" TEXT="akzeptiere zwei Werte ⟶ neues AltModel"/>
|
||||
<node COLOR="#435e98" CREATED="1737511691172" ID="ID_1192322879" MODIFIED="1737511740655" TEXT="akzeptiere AltModel + Wert ⟶ neuen Fall für «Wert» zum AltModel hinzufügen"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1737048133742" ID="ID_1028852897" MODIFIED="1737125839979" TEXT="Einbindung in die DSL-Notation (class Syntax)">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node COLOR="#338800" CREATED="1737048133742" ID="ID_1028852897" MODIFIED="1737511601637" TEXT="Einbindung in die DSL-Notation (class Syntax)">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
|
|
@ -55882,9 +55892,42 @@
|
|||
</node>
|
||||
<node CREATED="1737169424955" ID="ID_5139254" MODIFIED="1737169443329" TEXT="das ist hier angemessen; es handelt sich um ein Implementierungsdetail">
|
||||
<icon BUILTIN="yes"/>
|
||||
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1737169797084" ID="ID_1565968263" MODIFIED="1737169855695" TEXT="Check auf Selektor bei AltModel notwendig">
|
||||
<node COLOR="#5b280f" CREATED="1737169797084" ID="ID_1565968263" MODIFIED="1737512121424" TEXT="Check auf Selektor bei AltModel notwendig">
|
||||
<linktarget COLOR="#b52e62" DESTINATION="ID_1565968263" ENDARROW="Default" ENDINCLINATION="-20;-92;" ID="Arrow_ID_43564391" SOURCE="ID_1120580246" STARTARROW="None" STARTINCLINATION="74;-2;"/>
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
<icon BUILTIN="button_cancel"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1737512123490" ID="ID_1402725802" MODIFIED="1737512293076" TEXT="andere Lösung: wir geben den aufzunehmenden Typ im Konstruktor vor">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
Das ist eine mehrstufige Kette
|
||||
</p>
|
||||
<ul>
|
||||
<li>
|
||||
aus der Aufrufstruktur ergibt sich die ID des Branches
|
||||
</li>
|
||||
<li>
|
||||
gleichzeitig ergibt sich damit die Position des Typ-Arguments
|
||||
</li>
|
||||
<li>
|
||||
dieses greifen wir uns per Typ-Sequenz-Manipulation
|
||||
</li>
|
||||
<li>
|
||||
und verwenden es im generierten Konstruktor
|
||||
</li>
|
||||
</ul>
|
||||
<p>
|
||||
⟹ Resultat: man kann in den jeweiligen «Slot» nur mit einem kompatiblen Typ rein, und Typsicherheit ist gewährleistet (im Parser; wenn ein Client falsch zugreift, ist er selber schuld)
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
<arrowlink COLOR="#36a9cb" DESTINATION="ID_767723954" ENDARROW="Default" ENDINCLINATION="1044;0;" ID="Arrow_ID_234371683" STARTARROW="None" STARTINCLINATION="257;10;"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
|
|
@ -55930,8 +55973,20 @@
|
|||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1737234396680" ID="ID_679636766" MODIFIED="1737235494542" TEXT="Alternativ-Kombinator bauen">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node COLOR="#338800" CREATED="1737511832794" ID="ID_209338146" MODIFIED="1737511947153" TEXT="Steuerung der Model-Komposition lösen">
|
||||
<arrowlink COLOR="#579bd2" DESTINATION="ID_226754618" ENDARROW="Default" ENDINCLINATION="6;427;" ID="Arrow_ID_220186183" STARTARROW="None" STARTINCLINATION="1852;-83;"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#435e98" CREATED="1737511902291" HGAP="21" ID="ID_1061539705" MODIFIED="1737512327118" TEXT="die Fälle werden übersetzt in Template-Spezialisierungen" VSHIFT="19"/>
|
||||
<node COLOR="#435e98" CREATED="1737511916591" ID="ID_1159668962" MODIFIED="1737511950227" TEXT="zusätzliches Marker-Template um verschachtelte Sub-Ausdrücke auszuklammern"/>
|
||||
<node COLOR="#438798" CREATED="1737512313284" HGAP="21" ID="ID_1608529418" LINK="#ID_1402725802" MODIFIED="1737512347700" TEXT="(partielle) Typsicherheit auch beim Variant-Model">
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1737512357123" ID="ID_1348106042" MODIFIED="1737512388092" TEXT="Aber: im Model-Binding muß man die Selektoren korrekt verwenden"/>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1737512373305" ID="ID_554578847" MODIFIED="1737512386247" TEXT="man könnte hier grundsätzlich auch »wild« zugreifen">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1737234396680" ID="ID_679636766" MODIFIED="1737511439516" TEXT="Alternativ-Kombinator bauen">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#338800" CREATED="1737235517170" ID="ID_1134480788" MODIFIED="1737430437282" TEXT="muß hier zuerst die Model-Mechanik entwickeln">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1737235560972" ID="ID_968357989" MODIFIED="1737235564743" TEXT="Datenstruktur">
|
||||
|
|
@ -55958,7 +56013,7 @@
|
|||
<node CREATED="1737237881741" ID="ID_183722240" MODIFIED="1737237886889" TEXT="analog wie get<i>(tuple)"/>
|
||||
<node CREATED="1737237896668" ID="ID_286879176" MODIFIED="1737237910693" TEXT="Metafunktion i ⟼ Typ"/>
|
||||
</node>
|
||||
<node CREATED="1737238022259" ID="ID_508598643" MODIFIED="1737238026071" TEXT="up-Copy">
|
||||
<node CREATED="1737238022259" FOLDED="true" ID="ID_508598643" MODIFIED="1737509649097" TEXT="up-Copy">
|
||||
<node CREATED="1737238037257" ID="ID_1788967087" MODIFIED="1737238050739" TEXT="gegeben: AltModel<N>"/>
|
||||
<node CREATED="1737238051966" ID="ID_384770143" MODIFIED="1737238076015" TEXT="zu bauen: AltModel<N+1> mit kopierten Daten und gleichem Selektor"/>
|
||||
<node COLOR="#5b280f" CREATED="1737238094329" FOLDED="true" ID="ID_1160578555" MODIFIED="1737417012015" TEXT="braucht Trampolin für konkrete Kopie">
|
||||
|
|
@ -56056,7 +56111,7 @@
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1737245801576" ID="ID_1738176168" MODIFIED="1737416989050" TEXT="Skizze Datentyp">
|
||||
<node COLOR="#338800" CREATED="1737245801576" FOLDED="true" ID="ID_1738176168" MODIFIED="1737509642850" TEXT="Skizze Datentyp">
|
||||
<linktarget COLOR="#3dad9b" DESTINATION="ID_1738176168" ENDARROW="Default" ENDINCLINATION="-15;-187;" ID="Arrow_ID_387275034" SOURCE="ID_724398426" STARTARROW="None" STARTINCLINATION="-287;14;"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1737308328478" ID="ID_993665414" MODIFIED="1737358352116" TEXT="erst mal einen uninitialised byte-Puffer in Basisklasse"/>
|
||||
|
|
@ -56416,7 +56471,7 @@
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1737417020140" ID="ID_1230396959" MODIFIED="1737430419638" TEXT="sehr komplex ⟹ in Hilfskomponente auslagern">
|
||||
<node COLOR="#338800" CREATED="1737417020140" FOLDED="true" ID="ID_1230396959" MODIFIED="1737511446086" TEXT="sehr komplex ⟹ in Hilfskomponente auslagern">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node BACKGROUND_COLOR="#c8c0b6" CREATED="1737417038777" HGAP="28" ID="ID_158901588" MODIFIED="1737430931534" TEXT="lib/branch-case.hpp" VSHIFT="-10">
|
||||
<font BOLD="true" NAME="SansSerif" SIZE="12"/>
|
||||
|
|
@ -56468,17 +56523,18 @@
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1737417060920" ID="ID_644848240" MODIFIED="1737417078580" TEXT="auf dieser Basis das AltModel definieren">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node COLOR="#338800" CREATED="1737417060920" ID="ID_644848240" MODIFIED="1737511437314" TEXT="auf dieser Basis das AltModel definieren">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#338800" CREATED="1737417079594" ID="ID_883955221" MODIFIED="1737417091878" TEXT="erst mal die Einzelschritte durchspielen">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#435e98" CREATED="1737417093057" ID="ID_1036480281" MODIFIED="1737417121178" TEXT="Typ konstruieren"/>
|
||||
<node COLOR="#435e98" CREATED="1737417099856" ID="ID_820603798" MODIFIED="1737417121178" TEXT="einen Branch belegen"/>
|
||||
<node COLOR="#435e98" CREATED="1737417104216" ID="ID_188551502" MODIFIED="1737417121178" TEXT="danach noch ein up-Copy"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1737417129349" ID="ID_1317057698" MODIFIED="1737417137972" TEXT="Struktur für den Kombinator darstellen">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node CREATED="1737482932204" ID="ID_543248475" MODIFIED="1737482959189" TEXT="Aufgabe: Branch-Models generieren">
|
||||
<node COLOR="#338800" CREATED="1737417129349" ID="ID_1317057698" MODIFIED="1737512033655" TEXT="Struktur für den Kombinator darstellen">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#338800" CREATED="1737482932204" ID="ID_543248475" MODIFIED="1737509621118" TEXT="Aufgabe: Branch-Models generieren">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1737482977331" ID="ID_63052973" MODIFIED="1737483103594" TEXT="Analog zum SeqModel, aber...">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
|
@ -56612,9 +56668,14 @@
|
|||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1737512076361" ID="ID_767723954" MODIFIED="1737512285755" TEXT="⟹ Vorteil: durch den vorgegebenen Typ ist korrekte Selektor-Zuordnung sichergestellt">
|
||||
<linktarget COLOR="#36a9cb" DESTINATION="ID_767723954" ENDARROW="Default" ENDINCLINATION="1044;0;" ID="Arrow_ID_234371683" SOURCE="ID_1402725802" STARTARROW="None" STARTINCLINATION="257;10;"/>
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1737503596247" ID="ID_371220796" MODIFIED="1737503608693" TEXT="Auswertung und Model-Erzeugung">
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1737503596247" ID="ID_371220796" MODIFIED="1737509623137" TEXT="Auswertung und Model-Erzeugung">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#338800" CREATED="1737503609673" ID="ID_984166098" MODIFIED="1737507882083" TEXT="wieder zunächst freistehend im Test ausformulieren">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
|
|
@ -56642,7 +56703,7 @@
|
|||
</node>
|
||||
<node CREATED="1737504240388" ID="ID_718576565" MODIFIED="1737504257555" TEXT="...wenn zufällig beide Zweige im Kombinator den gleichen Ergebnistyp haben"/>
|
||||
<node CREATED="1737504264413" ID="ID_198801973" MODIFIED="1737504277138" TEXT="muß anderweitig einen klaren Marker mitgeben"/>
|
||||
<node CREATED="1737504278222" ID="ID_7748352" MODIFIED="1737504291496" TEXT="⟹ Builder-Funktionen bieten">
|
||||
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1737504278222" ID="ID_7748352" MODIFIED="1737509673007" TEXT="⟹ Builder-Funktionen bieten">
|
||||
<node CREATED="1737507477423" ID="ID_712733860" MODIFIED="1737507490145" TEXT="ist maßgeschneidert für diesen einen Fall"/>
|
||||
<node CREATED="1737507491637" ID="ID_397795294" MODIFIED="1737507505855" TEXT="Clients sollen nur selected() und get<i>() verwenden"/>
|
||||
<node CREATED="1737507511586" ID="ID_1197062880" MODIFIED="1737507548997" TEXT="eigentlichen Konstruktor besser private machen">
|
||||
|
|
@ -56663,8 +56724,14 @@
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1737417144217" ID="ID_375516701" MODIFIED="1737417153090" TEXT="in einen Connex-Builder verpacken">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node COLOR="#338800" CREATED="1737417144217" ID="ID_375516701" MODIFIED="1737509801908" TEXT="in einen Connex-Builder verpacken">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#435e98" CREATED="1737509678203" ID="ID_1999420291" MODIFIED="1737509807141" TEXT="Schema komplett analog zum Seq-Kombinator"/>
|
||||
<node COLOR="#435e98" CREATED="1737509718739" ID="ID_1116046294" MODIFIED="1737509807141" TEXT="Name: branchedConnex"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1737509793049" ID="ID_1918405073" MODIFIED="1737509829765" TEXT="funktioniert im Test">
|
||||
<arrowlink COLOR="#69a19e" DESTINATION="ID_508161235" ENDARROW="Default" ENDINCLINATION="262;-17;" ID="Arrow_ID_1424243307" STARTARROW="None" STARTINCLINATION="-269;35;"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
|
|
@ -56691,8 +56758,14 @@
|
|||
<node COLOR="#435e98" CREATED="1737234345007" ID="ID_710053406" MODIFIED="1737234350021" TEXT="Syntax erweitern"/>
|
||||
<node COLOR="#435e98" CREATED="1737234354774" ID="ID_118574311" MODIFIED="1737234357941" TEXT="Whitespace"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1737234372227" ID="ID_943372204" MODIFIED="1737234378059" TEXT="Alternativ-Kombinator">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node COLOR="#338800" CREATED="1737234372227" ID="ID_943372204" MODIFIED="1737512401123" TEXT="Alternativ-Kombinator">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#435e98" CREATED="1737509744717" ID="ID_212415977" MODIFIED="1737509760563" TEXT="Eigenschaften des Model-Datentyps ausleuchten"/>
|
||||
<node COLOR="#435e98" CREATED="1737509761718" ID="ID_1413438588" MODIFIED="1737509773573" TEXT="Grundmechnismus analog aufbauen"/>
|
||||
<node COLOR="#435e98" CREATED="1737509774878" ID="ID_508161235" MODIFIED="1737509834649" TEXT="Kombinator per DSL">
|
||||
<linktarget COLOR="#69a19e" DESTINATION="ID_508161235" ENDARROW="Default" ENDINCLINATION="262;-17;" ID="Arrow_ID_1424243307" SOURCE="ID_1918405073" STARTARROW="None" STARTINCLINATION="-269;35;"/>
|
||||
</node>
|
||||
<node COLOR="#435e98" CREATED="1737512403229" ID="ID_1723790713" MODIFIED="1737512410412" TEXT="Syntax erweitern"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
|
|
|
|||
Loading…
Reference in a new issue