Library: demonstrate »the« textbook example
...evaluating the recursive syntax of a numerical expression! * so this light-weight parsing support framework indeed allows to build fully capable LL(x) parsers, when the user knows how handle syntax clauses and bind the result models * furthermore, a notation is demonstrated how to arrange the binding functions so to keep the syntax definition legible * this involves a shortcut for homogeneous alternatives
This commit is contained in:
parent
ed5c6f7c17
commit
f8d0c1cf0b
4 changed files with 208 additions and 109 deletions
|
|
@ -263,6 +263,15 @@ namespace lib {
|
||||||
{
|
{
|
||||||
return access<SlotType<idx>>();
|
return access<SlotType<idx>>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** access the selected value of a homogeneous model.
|
||||||
|
* @warning compiles only if all cases yield the same type
|
||||||
|
*/
|
||||||
|
auto
|
||||||
|
getAny()
|
||||||
|
{
|
||||||
|
return accept([](auto val){ return val; });
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
}// namespace lib
|
}// namespace lib
|
||||||
|
|
|
||||||
|
|
@ -296,7 +296,7 @@ namespace util {
|
||||||
template<typename...XS, typename XX>
|
template<typename...XS, typename XX>
|
||||||
SeqModel (SeqModel<XS...>&& seq, XX&& extraElm)
|
SeqModel (SeqModel<XS...>&& seq, XX&& extraElm)
|
||||||
: Tup{std::tuple_cat (seq.extractTuple()
|
: Tup{std::tuple_cat (seq.extractTuple()
|
||||||
,make_tuple (forward<XX> (extraElm)) )}
|
,std::make_tuple (forward<XX> (extraElm)) )}
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
template<typename X1, typename X2>
|
template<typename X1, typename X2>
|
||||||
|
|
|
||||||
|
|
@ -105,7 +105,7 @@ namespace test {
|
||||||
string toParse{"hello vile world of power"};
|
string toParse{"hello vile world of power"};
|
||||||
auto eval = parse (toParse);
|
auto eval = parse (toParse);
|
||||||
CHECK (eval.result);
|
CHECK (eval.result);
|
||||||
auto res = *eval.result; // ◁——————————— the »result model« of a terminal parse is the RegExp-Matcher
|
smatch res = *eval.result; // ◁——————————— the »result model« of a terminal parse is the RegExp-Matcher
|
||||||
CHECK (res.ready() and not res.empty());
|
CHECK (res.ready() and not res.empty());
|
||||||
CHECK (res.size() == "2"_expect );
|
CHECK (res.size() == "2"_expect );
|
||||||
CHECK (res.position() == "0"_expect );
|
CHECK (res.position() == "0"_expect );
|
||||||
|
|
@ -271,6 +271,17 @@ namespace test {
|
||||||
CHECK (res.get<1>() == "seduced");
|
CHECK (res.get<1>() == "seduced");
|
||||||
|
|
||||||
|
|
||||||
|
// AltModel with homogeneous types are special
|
||||||
|
auto hom = AltModel<int,int>::mark_right(42);
|
||||||
|
CHECK (hom.getAny() == 42);
|
||||||
|
CHECK (hom.selected() == 1 );
|
||||||
|
|
||||||
|
hom = AltModel<int,int>::mark_left(55);
|
||||||
|
CHECK (hom.getAny() == 55);
|
||||||
|
CHECK (hom.selected() == 0 );
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//_____________________________________________
|
//_____________________________________________
|
||||||
// Demonstration: how branch combinator works....
|
// Demonstration: how branch combinator works....
|
||||||
auto term1 = buildConnex ("brazen");
|
auto term1 = buildConnex ("brazen");
|
||||||
|
|
@ -619,7 +630,16 @@ namespace test {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/** @test definition of recursive Syntax clauses
|
/** @test definition of recursive Syntax clauses
|
||||||
|
* - pre-declared placeholder with known result
|
||||||
|
* - bind a syntax clause later to that placeholder,
|
||||||
|
* which is possibly only with a binding to yield
|
||||||
|
* the expected result type; in the example here
|
||||||
|
* we count the optional sequenced expressions
|
||||||
|
* - demonstrate textbook example of nested numeric
|
||||||
|
* expression, including parentheses and even a
|
||||||
|
* square root function. Calculate golden ratio!
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
verify_recursiveSyntax()
|
verify_recursiveSyntax()
|
||||||
|
|
@ -637,14 +657,56 @@ namespace test {
|
||||||
});
|
});
|
||||||
CHECK (recurse.canInvoke());
|
CHECK (recurse.canInvoke());
|
||||||
|
|
||||||
string s1{"great ! great ! great"};
|
recurse.parse("great ! great ! great");
|
||||||
recurse.parse(s1);
|
|
||||||
CHECK (recurse.success());
|
CHECK (recurse.success());
|
||||||
CHECK (recurse.getResult() == 3 );
|
CHECK (recurse.getResult() == 3 );
|
||||||
|
|
||||||
CHECK (not recurse.parse(" ! great"));
|
CHECK (not recurse.parse(" ! great"));
|
||||||
CHECK (recurse.parse("great ! great actor").getResult() == 2);
|
CHECK (recurse.parse("great ! great actor").getResult() == 2);
|
||||||
CHECK (recurse.parse("great ! great ! actor").getResult() == 2);
|
CHECK (recurse.parse("great ! great ! actor").getResult() == 2);
|
||||||
|
|
||||||
|
|
||||||
|
//_____________________________________________
|
||||||
|
// Build a recursive numeric expression syntax...
|
||||||
|
auto num = accept("\\d+") .bindMatch().bind([](auto num){ return std::stod(num); });
|
||||||
|
auto sqrt = accept("√").seq(num) .bind([](auto seq){ return std::sqrt(get<1>(seq)); });
|
||||||
|
|
||||||
|
CHECK (sqrt.parse(" √x ").getResult() == 0 );
|
||||||
|
CHECK (sqrt.parse(" √2 ").getResult() == "1.4142136"_expect);
|
||||||
|
|
||||||
|
// E ::= T [ + E ]
|
||||||
|
// T ::= F [ / F ]
|
||||||
|
// F ::= ( E ) | V
|
||||||
|
// V ::= num | √ num
|
||||||
|
auto expr = expectResult<double>();
|
||||||
|
|
||||||
|
auto valu = accept(num).alt(sqrt) .bind([](auto alt){ return alt.getAny(); });
|
||||||
|
auto fact = accept_bracket(expr).alt(valu) .bind([](auto alt){ return alt.getAny(); });
|
||||||
|
auto term = accept(fact).opt(accept("/") .seq(fact)) .bind([](auto seq){ auto [f1,f2] = seq; return f1 / (f2? get<1>(*f2) : 1.0); });
|
||||||
|
expr = accept(term).opt(accept("\\+").seq(expr)) .bind([](auto exp){ auto [s1,s2] = exp; return s1 + (s2? get<1>(*s2) : 0.0); });
|
||||||
|
|
||||||
|
CHECK (expr.canInvoke());
|
||||||
|
CHECK (not expr.hasResult());
|
||||||
|
|
||||||
|
expr.parse(" 42 forever");
|
||||||
|
CHECK (expr.success());
|
||||||
|
CHECK (expr.getResult() == 42 );
|
||||||
|
|
||||||
|
expr.parse(" 42 + 13 =?");
|
||||||
|
CHECK (expr.success());
|
||||||
|
CHECK (expr.getResult() == 55 );
|
||||||
|
|
||||||
|
expr.parse(" 1 + 4/3 ");
|
||||||
|
CHECK (expr.success());
|
||||||
|
CHECK (expr.getResult() == "2.3333333"_expect);
|
||||||
|
|
||||||
|
expr.parse("(2+2)/(2+1) + 4/2");
|
||||||
|
CHECK (expr.success());
|
||||||
|
CHECK (expr.getResult() == "3.3333333"_expect);
|
||||||
|
|
||||||
|
expr.parse("(1 + √5) / 2 ");
|
||||||
|
CHECK (expr.success());
|
||||||
|
CHECK (expr.getResult() == "1.618034"_expect);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -57029,8 +57029,7 @@
|
||||||
nebenbei abgefallen
|
nebenbei abgefallen
|
||||||
</p>
|
</p>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html></richcontent>
|
||||||
</richcontent>
|
|
||||||
<icon BUILTIN="idea"/>
|
<icon BUILTIN="idea"/>
|
||||||
</node>
|
</node>
|
||||||
<node CREATED="1737763004632" ID="ID_822193320" MODIFIED="1737763015437" TEXT="ist nur ein Dekorator der Parse-Funktion"/>
|
<node CREATED="1737763004632" ID="ID_822193320" MODIFIED="1737763015437" TEXT="ist nur ein Dekorator der Parse-Funktion"/>
|
||||||
|
|
@ -57045,8 +57044,7 @@
|
||||||
<i>das</i> muß tatsächlich ein <b>Postfix-Operator</b> sein
|
<i>das</i> muß tatsächlich ein <b>Postfix-Operator</b> sein
|
||||||
</p>
|
</p>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html></richcontent>
|
||||||
</richcontent>
|
|
||||||
<icon BUILTIN="yes"/>
|
<icon BUILTIN="yes"/>
|
||||||
</node>
|
</node>
|
||||||
<node COLOR="#435e98" CREATED="1737763069414" ID="ID_1049523751" MODIFIED="1737849866205">
|
<node COLOR="#435e98" CREATED="1737763069414" ID="ID_1049523751" MODIFIED="1737849866205">
|
||||||
|
|
@ -57057,8 +57055,7 @@
|
||||||
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>
|
||||||
</p>
|
</p>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html></richcontent>
|
||||||
</richcontent>
|
|
||||||
</node>
|
</node>
|
||||||
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1737763165990" FOLDED="true" ID="ID_1051966220" MODIFIED="1737940855527" 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>
|
||||||
|
|
@ -57068,8 +57065,7 @@
|
||||||
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
|
||||||
</p>
|
</p>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html></richcontent>
|
||||||
</richcontent>
|
|
||||||
<node COLOR="#2d40b2" CREATED="1737766232691" ID="ID_1413683857" MODIFIED="1737775474932" TEXT="Ha! die ist schon da">
|
<node COLOR="#2d40b2" CREATED="1737766232691" ID="ID_1413683857" MODIFIED="1737775474932" TEXT="Ha! die ist schon da">
|
||||||
<icon BUILTIN="ksmiletris"/>
|
<icon BUILTIN="ksmiletris"/>
|
||||||
<icon BUILTIN="button_cancel"/>
|
<icon BUILTIN="button_cancel"/>
|
||||||
|
|
@ -57103,8 +57099,7 @@
|
||||||
Standard-Variante: <font face="Monospaced"><b>bindMatch</b>(n)</font>
|
Standard-Variante: <font face="Monospaced"><b>bindMatch</b>(n)</font>
|
||||||
</p>
|
</p>
|
||||||
</body>
|
</body>
|
||||||
</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 COLOR="#5c4398" CREATED="1737817685762" ID="ID_522207502" MODIFIED="1737940782764" 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"/>
|
||||||
|
|
@ -57116,8 +57111,7 @@
|
||||||
...denn es steuert die Art der Dekoration
|
...denn es steuert die Art der Dekoration
|
||||||
</p>
|
</p>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html></richcontent>
|
||||||
</richcontent>
|
|
||||||
<icon BUILTIN="closed"/>
|
<icon BUILTIN="closed"/>
|
||||||
<node CREATED="1737818825722" ID="ID_1135482924" MODIFIED="1737818869980" TEXT="geht nicht">
|
<node CREATED="1737818825722" ID="ID_1135482924" MODIFIED="1737818869980" TEXT="geht nicht">
|
||||||
<icon BUILTIN="stop-sign"/>
|
<icon BUILTIN="stop-sign"/>
|
||||||
|
|
@ -57140,8 +57134,7 @@
|
||||||
analog wie die anderen Combinatoren und buildConnex()
|
analog wie die anderen Combinatoren und buildConnex()
|
||||||
</p>
|
</p>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html></richcontent>
|
||||||
</richcontent>
|
|
||||||
</node>
|
</node>
|
||||||
<node COLOR="#338800" CREATED="1737820217112" ID="ID_983053078" MODIFIED="1737820261322" TEXT="da kommt dann die constexpr-if-Kaskade rein">
|
<node COLOR="#338800" CREATED="1737820217112" ID="ID_983053078" MODIFIED="1737820261322" TEXT="da kommt dann die constexpr-if-Kaskade rein">
|
||||||
<icon BUILTIN="button_ok"/>
|
<icon BUILTIN="button_ok"/>
|
||||||
|
|
@ -57155,8 +57148,7 @@
|
||||||
nachdem ich die Model-Fälle wegdiskutiert habe ☺
|
nachdem ich die Model-Fälle wegdiskutiert habe ☺
|
||||||
</p>
|
</p>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html></richcontent>
|
||||||
</richcontent>
|
|
||||||
</node>
|
</node>
|
||||||
<node CREATED="1737844971662" ID="ID_48221377" MODIFIED="1737844986417" TEXT="die constexpr-if kann nach innen!">
|
<node CREATED="1737844971662" ID="ID_48221377" MODIFIED="1737844986417" TEXT="die constexpr-if kann nach innen!">
|
||||||
<icon BUILTIN="idea"/>
|
<icon BUILTIN="idea"/>
|
||||||
|
|
@ -57191,8 +57183,7 @@
|
||||||
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??
|
||||||
</p>
|
</p>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html></richcontent>
|
||||||
</richcontent>
|
|
||||||
</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>
|
||||||
|
|
@ -57205,8 +57196,7 @@
|
||||||
Für eine reale Anwendung sollte man möglichst tief unten mappen, und bäuchte auch ein Konzept, um auf einen gemeinsamen Ergebnis-Typ zu kommen, möglicherweise dann doch so etwas wie einen AST. <i>Und wenn man es dann doch wirklich bräuchte, kann man's immer noch nachrüsten</i>
|
Für eine reale Anwendung sollte man möglichst tief unten mappen, und bäuchte auch ein Konzept, um auf einen gemeinsamen Ergebnis-Typ zu kommen, möglicherweise dann doch so etwas wie einen AST. <i>Und wenn man es dann doch wirklich bräuchte, kann man's immer noch nachrüsten</i>
|
||||||
</p>
|
</p>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html></richcontent>
|
||||||
</richcontent>
|
|
||||||
<icon BUILTIN="stop-sign"/>
|
<icon BUILTIN="stop-sign"/>
|
||||||
</node>
|
</node>
|
||||||
</node>
|
</node>
|
||||||
|
|
@ -57235,8 +57225,7 @@
|
||||||
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)
|
||||||
</p>
|
</p>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html></richcontent>
|
||||||
</richcontent>
|
|
||||||
<icon BUILTIN="idea"/>
|
<icon BUILTIN="idea"/>
|
||||||
</node>
|
</node>
|
||||||
<node COLOR="#338800" CREATED="1737849793598" ID="ID_213117529" MODIFIED="1737849811165" TEXT="also die beiden notwendigen Spezialisierungen in den namespace std;">
|
<node COLOR="#338800" CREATED="1737849793598" ID="ID_213117529" MODIFIED="1737849811165" TEXT="also die beiden notwendigen Spezialisierungen in den namespace std;">
|
||||||
|
|
@ -57261,8 +57250,7 @@
|
||||||
ganz banal: habe <font face="Monospaced">eval.consumed</font> nicht weitergegeben
|
ganz banal: habe <font face="Monospaced">eval.consumed</font> nicht weitergegeben
|
||||||
</p>
|
</p>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html></richcontent>
|
||||||
</richcontent>
|
|
||||||
<richcontent TYPE="NOTE"><html>
|
<richcontent TYPE="NOTE"><html>
|
||||||
<head/>
|
<head/>
|
||||||
<body>
|
<body>
|
||||||
|
|
@ -57270,8 +57258,7 @@
|
||||||
d.h. jede sub-expression setzt wieder am Anfang auf
|
d.h. jede sub-expression setzt wieder am Anfang auf
|
||||||
</p>
|
</p>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html></richcontent>
|
||||||
</richcontent>
|
|
||||||
</node>
|
</node>
|
||||||
</node>
|
</node>
|
||||||
<node COLOR="#338800" CREATED="1737850519594" ID="ID_1668182663" MODIFIED="1737850539048" TEXT="auch mit λ-generic binden">
|
<node COLOR="#338800" CREATED="1737850519594" ID="ID_1668182663" MODIFIED="1737850539048" TEXT="auch mit λ-generic binden">
|
||||||
|
|
@ -57282,8 +57269,8 @@
|
||||||
</node>
|
</node>
|
||||||
</node>
|
</node>
|
||||||
</node>
|
</node>
|
||||||
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1737515362910" ID="ID_1587990202" MODIFIED="1737850611368" TEXT="offene Rekursion">
|
<node COLOR="#338800" CREATED="1737515362910" ID="ID_1587990202" MODIFIED="1738091484405" TEXT="offene Rekursion">
|
||||||
<icon BUILTIN="flag-pink"/>
|
<icon BUILTIN="button_ok"/>
|
||||||
<node BACKGROUND_COLOR="#d9bf94" COLOR="#690f14" CREATED="1737515599278" ID="ID_1897353084" MODIFIED="1737940885393" STYLE="fork" 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"/>
|
<edge COLOR="#808080" STYLE="bezier" WIDTH="thin"/>
|
||||||
<icon BUILTIN="help"/>
|
<icon BUILTIN="help"/>
|
||||||
|
|
@ -57293,11 +57280,17 @@
|
||||||
<node CREATED="1737515630666" ID="ID_635140645" MODIFIED="1737940878718" TEXT="es ist notwendig für Dinge wie verschachtelte Ausdrücke">
|
<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="1737940896885" TEXT="nicht als Inline-Model darstellbar">
|
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1737515930491" ID="ID_72368755" MODIFIED="1738091430998" TEXT="nicht als Inline-Model darstellbar">
|
||||||
<icon BUILTIN="messagebox_warning"/>
|
<icon BUILTIN="messagebox_warning"/>
|
||||||
<node CREATED="1737515978965" ID="ID_1241101297" MODIFIED="1737515987234" TEXT="müßte dann ein smart-Ptr sein"/>
|
<node COLOR="#5b280f" CREATED="1737515978965" ID="ID_1241101297" MODIFIED="1738091424815" 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"/>
|
<icon BUILTIN="button_cancel"/>
|
||||||
<node CREATED="1737553446367" ID="ID_420976669" MODIFIED="1737553464114" TEXT="müßte dafür Klauseln per Referenz nehmen können"/>
|
</node>
|
||||||
|
<node BACKGROUND_COLOR="#c8c0b6" CREATED="1737516017110" ID="ID_1717046822" MODIFIED="1738091422615" TEXT="müßte undefiniert in der DSL referenzierbar sein">
|
||||||
|
<icon BUILTIN="forward"/>
|
||||||
|
</node>
|
||||||
|
<node BACKGROUND_COLOR="#c8c0b6" CREATED="1737553446367" ID="ID_420976669" MODIFIED="1738091407004" TEXT="müßte dafür Klauseln per Referenz nehmen können">
|
||||||
|
<icon BUILTIN="forward"/>
|
||||||
|
</node>
|
||||||
</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">
|
<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;"/>
|
<arrowlink COLOR="#6e3b4f" DESTINATION="ID_1616305471" ENDARROW="Default" ENDINCLINATION="-8;-18;" ID="Arrow_ID_129215188" STARTARROW="None" STARTINCLINATION="-11;31;"/>
|
||||||
|
|
@ -57305,7 +57298,7 @@
|
||||||
<icon BUILTIN="yes"/>
|
<icon BUILTIN="yes"/>
|
||||||
</node>
|
</node>
|
||||||
</node>
|
</node>
|
||||||
<node COLOR="#338800" CREATED="1737693819337" ID="ID_228574257" MODIFIED="1737940638024" TEXT="Implementierungs-Technik klären">
|
<node COLOR="#338800" CREATED="1737693819337" FOLDED="true" ID="ID_228574257" MODIFIED="1737940638024" TEXT="Implementierungs-Technik klären">
|
||||||
<icon BUILTIN="button_ok"/>
|
<icon BUILTIN="button_ok"/>
|
||||||
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1737693835207" ID="ID_1616305471" MODIFIED="1737940937388" TEXT="grundsätzlich realisierbar in diesem Framework">
|
<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;"/>
|
<linktarget COLOR="#6e3b4f" DESTINATION="ID_1616305471" ENDARROW="Default" ENDINCLINATION="-8;-18;" ID="Arrow_ID_129215188" SOURCE="ID_28139865" STARTARROW="None" STARTINCLINATION="-11;31;"/>
|
||||||
|
|
@ -57318,21 +57311,17 @@
|
||||||
....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)
|
||||||
</p>
|
</p>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html></richcontent>
|
||||||
</richcontent>
|
|
||||||
</node>
|
</node>
|
||||||
<node CREATED="1737693890688" ID="ID_70642689" MODIFIED="1737694064532" TEXT="das Ergebnis ist trotzdem strikt typisiert">
|
<node CREATED="1737693890688" ID="ID_70642689" MODIFIED="1737694064532" TEXT="das Ergebnis ist trotzdem strikt typisiert">
|
||||||
<richcontent TYPE="NOTE"><html>
|
<richcontent TYPE="NOTE"><html>
|
||||||
<head>
|
<head/>
|
||||||
|
|
||||||
</head>
|
|
||||||
<body>
|
<body>
|
||||||
<p>
|
<p>
|
||||||
...denn was wir abschneiden ist nur die komplett ausformulierte Struktur des Typs; an der Stelle, an der eine andere Klausel rekursiv eingebunden wird, greifen wir nur <i>deren Ergebnis-Model</i> auf.
|
...denn was wir abschneiden ist nur die komplett ausformulierte Struktur des Typs; an der Stelle, an der eine andere Klausel rekursiv eingebunden wird, greifen wir nur <i>deren Ergebnis-Model</i> auf.
|
||||||
</p>
|
</p>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html></richcontent>
|
||||||
</richcontent>
|
|
||||||
</node>
|
</node>
|
||||||
<node BACKGROUND_COLOR="#d9bf94" COLOR="#690f14" CREATED="1737694065800" ID="ID_303092277" MODIFIED="1737940681608" 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"/>
|
||||||
|
|
@ -57341,41 +57330,35 @@
|
||||||
<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>
|
||||||
<head>
|
<head/>
|
||||||
|
|
||||||
</head>
|
|
||||||
<body>
|
<body>
|
||||||
<p>
|
<p>
|
||||||
der Lambdas wegen
|
der Lambdas wegen
|
||||||
</p>
|
</p>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html></richcontent>
|
||||||
</richcontent>
|
|
||||||
</node>
|
</node>
|
||||||
<node CREATED="1737694541439" ID="ID_1004008024" MODIFIED="1737694566958">
|
<node CREATED="1737694541439" ID="ID_1004008024" MODIFIED="1737694566958">
|
||||||
<richcontent TYPE="NODE"><html>
|
<richcontent TYPE="NODE"><html>
|
||||||
<head>
|
<head/>
|
||||||
|
|
||||||
</head>
|
|
||||||
<body>
|
<body>
|
||||||
<p>
|
<p>
|
||||||
das heißt, es würde eine Art <i>late-Binding</i> notwendig
|
das heißt, es würde eine Art <i>late-Binding</i> notwendig
|
||||||
</p>
|
</p>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html></richcontent>
|
||||||
</richcontent>
|
|
||||||
</node>
|
</node>
|
||||||
<node BACKGROUND_COLOR="#d9bf94" COLOR="#690f14" CREATED="1737694569853" ID="ID_1483280295" MODIFIED="1737940688571" 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"/>
|
<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="22;-101;" ID="Arrow_ID_1260672332" STARTARROW="None" STARTINCLINATION="-525;26;"/>
|
<arrowlink COLOR="#fdfcce" DESTINATION="ID_593591679" ENDARROW="Default" ENDINCLINATION="69;-109;" ID="Arrow_ID_1260672332" STARTARROW="None" STARTINCLINATION="-525;26;"/>
|
||||||
<icon BUILTIN="idea"/>
|
<icon BUILTIN="idea"/>
|
||||||
</node>
|
</node>
|
||||||
</node>
|
</node>
|
||||||
</node>
|
</node>
|
||||||
<node CREATED="1737738318817" FOLDED="true" ID="ID_1107737972" MODIFIED="1737940652324" TEXT="nochmal Vergleich mit existierenden Libraries">
|
<node COLOR="#435e98" 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"/>
|
||||||
|
|
@ -57401,34 +57384,28 @@
|
||||||
</node>
|
</node>
|
||||||
</node>
|
</node>
|
||||||
<node BACKGROUND_COLOR="#ccb59b" COLOR="#6e2a38" CREATED="1737756303660" ID="ID_593591679" MODIFIED="1737940658714" 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="22;-101;" ID="Arrow_ID_1260672332" SOURCE="ID_64242861" STARTARROW="None" STARTINCLINATION="-525;26;"/>
|
<linktarget COLOR="#fdfcce" DESTINATION="ID_593591679" ENDARROW="Default" ENDINCLINATION="69;-109;" 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"/>
|
||||||
<node CREATED="1737756891099" ID="ID_1058310023" MODIFIED="1737756901161">
|
<node CREATED="1737756891099" ID="ID_1058310023" MODIFIED="1737756901161">
|
||||||
<richcontent TYPE="NODE"><html>
|
<richcontent TYPE="NODE"><html>
|
||||||
<head>
|
<head/>
|
||||||
|
|
||||||
</head>
|
|
||||||
<body>
|
<body>
|
||||||
<p>
|
<p>
|
||||||
und später an diese <b>zuweisen</b>
|
und später an diese <b>zuweisen</b>
|
||||||
</p>
|
</p>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html></richcontent>
|
||||||
</richcontent>
|
|
||||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1737756949618" ID="ID_1994498294" MODIFIED="1737757016770">
|
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1737756949618" ID="ID_1994498294" MODIFIED="1737757016770">
|
||||||
<richcontent TYPE="NODE"><html>
|
<richcontent TYPE="NODE"><html>
|
||||||
<head>
|
<head/>
|
||||||
|
|
||||||
</head>
|
|
||||||
<body>
|
<body>
|
||||||
<p>
|
<p>
|
||||||
das impliziert <b>Heap-Storage</b> für das Parse-λ
|
das impliziert <b>Heap-Storage</b> für das Parse-λ
|
||||||
</p>
|
</p>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html></richcontent>
|
||||||
</richcontent>
|
|
||||||
<icon BUILTIN="messagebox_warning"/>
|
<icon BUILTIN="messagebox_warning"/>
|
||||||
</node>
|
</node>
|
||||||
<node CREATED="1737757056699" ID="ID_1321549013" MODIFIED="1737757108138" TEXT="und i.d.R. schlechte Optimierbarkeit">
|
<node CREATED="1737757056699" ID="ID_1321549013" MODIFIED="1737757108138" TEXT="und i.d.R. schlechte Optimierbarkeit">
|
||||||
|
|
@ -57440,16 +57417,13 @@
|
||||||
</node>
|
</node>
|
||||||
<node BACKGROUND_COLOR="#e8d8bb" CREATED="1737757274593" ID="ID_1290815698" MODIFIED="1737850572394" TEXT="User muß typischerweise ein Result-Binding definieren">
|
<node BACKGROUND_COLOR="#e8d8bb" CREATED="1737757274593" ID="ID_1290815698" MODIFIED="1737850572394" TEXT="User muß typischerweise ein Result-Binding definieren">
|
||||||
<richcontent TYPE="NOTE"><html>
|
<richcontent TYPE="NOTE"><html>
|
||||||
<head>
|
<head/>
|
||||||
|
|
||||||
</head>
|
|
||||||
<body>
|
<body>
|
||||||
<p>
|
<p>
|
||||||
...denn sonst dürfte es kaum möglich sein, einen explizit angebbaren Result-Typ zu konstituieren; in diesem Result-Binding steckt der <i>eigentliche Ansatz,</i> mit dem eine offen-rekursive Grammatik dennoch handhabbar wird, denn es muß eine Art Reduktion der Komplexität erfolgen, beispielsweise indem sofort ein Ergebnis ausgerechnet wird
|
...denn sonst dürfte es kaum möglich sein, einen explizit angebbaren Result-Typ zu konstituieren; in diesem Result-Binding steckt der <i>eigentliche Ansatz,</i> mit dem eine offen-rekursive Grammatik dennoch handhabbar wird, denn es muß eine Art Reduktion der Komplexität erfolgen, beispielsweise indem sofort ein Ergebnis ausgerechnet wird
|
||||||
</p>
|
</p>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html></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 COLOR="#753c48" CREATED="1737762884132" HGAP="23" ID="ID_1097242773" MODIFIED="1737940733425" 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">
|
||||||
|
|
@ -57490,27 +57464,21 @@
|
||||||
<node CREATED="1737758383978" ID="ID_70770798" MODIFIED="1737758456356" TEXT="da jede weitere Dekoration dem Sinn der Forward-Deklaration zuwiderläuft"/>
|
<node CREATED="1737758383978" ID="ID_70770798" MODIFIED="1737758456356" TEXT="da jede weitere Dekoration dem Sinn der Forward-Deklaration zuwiderläuft"/>
|
||||||
<node CREATED="1737758466942" ID="ID_397213831" MODIFIED="1737758745475">
|
<node CREATED="1737758466942" ID="ID_397213831" MODIFIED="1737758745475">
|
||||||
<richcontent TYPE="NODE"><html>
|
<richcontent TYPE="NODE"><html>
|
||||||
<head>
|
<head/>
|
||||||
|
|
||||||
</head>
|
|
||||||
<body>
|
<body>
|
||||||
<p>
|
<p>
|
||||||
Konsequenz ⟹ das <i>Einbinden</i> in andere Syntax ist speziell zu behandeln
|
Konsequenz ⟹ das <i>Einbinden</i> in andere Syntax ist speziell zu behandeln
|
||||||
</p>
|
</p>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html></richcontent>
|
||||||
</richcontent>
|
|
||||||
<richcontent TYPE="NOTE"><html>
|
<richcontent TYPE="NOTE"><html>
|
||||||
<head>
|
<head/>
|
||||||
|
|
||||||
</head>
|
|
||||||
<body>
|
<body>
|
||||||
<p>
|
<p>
|
||||||
....weil ja das Einbinden technisch nichts anderes ist, als eine Dekoration (und damit unterbunden würde)
|
....weil ja das Einbinden technisch nichts anderes ist, als eine Dekoration (und damit unterbunden würde)
|
||||||
</p>
|
</p>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html></richcontent>
|
||||||
</richcontent>
|
|
||||||
</node>
|
</node>
|
||||||
<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)">
|
||||||
|
|
@ -57521,8 +57489,7 @@
|
||||||
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;
|
||||||
</p>
|
</p>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html></richcontent>
|
||||||
</richcontent>
|
|
||||||
<font NAME="SansSerif" SIZE="11"/>
|
<font NAME="SansSerif" SIZE="11"/>
|
||||||
</node>
|
</node>
|
||||||
</node>
|
</node>
|
||||||
|
|
@ -57543,8 +57510,7 @@
|
||||||
Variante-1 ist »filosofisch« und praktsich attraktiv
|
Variante-1 ist »filosofisch« und praktsich attraktiv
|
||||||
</p>
|
</p>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html></richcontent>
|
||||||
</richcontent>
|
|
||||||
<richcontent TYPE="NOTE"><html>
|
<richcontent TYPE="NOTE"><html>
|
||||||
<head/>
|
<head/>
|
||||||
<body>
|
<body>
|
||||||
|
|
@ -57552,8 +57518,7 @@
|
||||||
...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
|
||||||
</p>
|
</p>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html></richcontent>
|
||||||
</richcontent>
|
|
||||||
</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>
|
||||||
|
|
@ -57563,8 +57528,7 @@
|
||||||
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
|
||||||
</p>
|
</p>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html></richcontent>
|
||||||
</richcontent>
|
|
||||||
</node>
|
</node>
|
||||||
</node>
|
</node>
|
||||||
<node COLOR="#3e12bf" CREATED="1737760312861" ID="ID_1430169629" MODIFIED="1737940605425" TEXT="Beschluß: Variante-1">
|
<node COLOR="#3e12bf" CREATED="1737760312861" ID="ID_1430169629" MODIFIED="1737940605425" TEXT="Beschluß: Variante-1">
|
||||||
|
|
@ -57579,8 +57543,7 @@
|
||||||
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
|
||||||
</p>
|
</p>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html></richcontent>
|
||||||
</richcontent>
|
|
||||||
</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>
|
||||||
|
|
@ -57590,8 +57553,7 @@
|
||||||
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
|
||||||
</p>
|
</p>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html></richcontent>
|
||||||
</richcontent>
|
|
||||||
</node>
|
</node>
|
||||||
<node CREATED="1737760484654" ID="ID_1431261175" MODIFIED="1737760552303" TEXT="besser ist, korrekte und klare Verwendung der Library zu fordern"/>
|
<node CREATED="1737760484654" ID="ID_1431261175" MODIFIED="1737760552303" TEXT="besser ist, korrekte und klare Verwendung der Library zu fordern"/>
|
||||||
</node>
|
</node>
|
||||||
|
|
@ -57608,8 +57570,7 @@
|
||||||
...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
|
||||||
</p>
|
</p>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html></richcontent>
|
||||||
</richcontent>
|
|
||||||
</node>
|
</node>
|
||||||
<node BACKGROUND_COLOR="#ccb59b" COLOR="#6e2a38" CREATED="1737761029853" ID="ID_588199339" MODIFIED="1737761044357" TEXT="also auch das etwas, was man einfach akzeptieren sollte">
|
<node BACKGROUND_COLOR="#ccb59b" COLOR="#6e2a38" CREATED="1737761029853" ID="ID_588199339" MODIFIED="1737761044357" TEXT="also auch das etwas, was man einfach akzeptieren sollte">
|
||||||
<font ITALIC="true" NAME="SansSerif" SIZE="14"/>
|
<font ITALIC="true" NAME="SansSerif" SIZE="14"/>
|
||||||
|
|
@ -57688,8 +57649,7 @@
|
||||||
da viele Builder-Funktionen in ein neues Syntax-Objekt schieben
|
da viele Builder-Funktionen in ein neues Syntax-Objekt schieben
|
||||||
</p>
|
</p>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html></richcontent>
|
||||||
</richcontent>
|
|
||||||
<icon BUILTIN="messagebox_warning"/>
|
<icon BUILTIN="messagebox_warning"/>
|
||||||
</node>
|
</node>
|
||||||
</node>
|
</node>
|
||||||
|
|
@ -57708,14 +57668,16 @@
|
||||||
<icon BUILTIN="messagebox_warning"/>
|
<icon BUILTIN="messagebox_warning"/>
|
||||||
</node>
|
</node>
|
||||||
<node COLOR="#435e98" CREATED="1737927762571" ID="ID_980466550" MODIFIED="1737940529468" TEXT="spezieller dedurction-Guide für Parser">
|
<node COLOR="#435e98" CREATED="1737927762571" ID="ID_980466550" MODIFIED="1737940529468" TEXT="spezieller dedurction-Guide für Parser">
|
||||||
<node CREATED="1737927795006" ID="ID_1992583888" MODIFIED="1737927819175" TEXT="der macht den Schwenk auf die eingebettete Referenz"/>
|
<node COLOR="#435e98" CREATED="1737927795006" ID="ID_1992583888" MODIFIED="1738091472008" TEXT="der macht den Schwenk auf die eingebettete Referenz">
|
||||||
|
<icon BUILTIN="idea"/>
|
||||||
|
</node>
|
||||||
<node COLOR="#435e98" CREATED="1737927820003" ID="ID_303011411" MODIFIED="1737940558181" TEXT="zur Vereinfachung: Type-Alias definieren">
|
<node COLOR="#435e98" CREATED="1737927820003" ID="ID_303011411" MODIFIED="1737940558181" TEXT="zur Vereinfachung: Type-Alias definieren">
|
||||||
<icon BUILTIN="yes"/>
|
<icon BUILTIN="yes"/>
|
||||||
<node CREATED="1737927831639" ID="ID_349690499" MODIFIED="1737927838908" TEXT="OpaqueConnex<RES>"/>
|
<node CREATED="1737927831639" ID="ID_349690499" MODIFIED="1737927838908" TEXT="OpaqueConnex<RES>"/>
|
||||||
<node CREATED="1737927839640" ID="ID_320293715" MODIFIED="1737927849187" TEXT="ForwardConnex<RES>"/>
|
<node CREATED="1737927839640" ID="ID_320293715" MODIFIED="1737927849187" TEXT="ForwardConnex<RES>"/>
|
||||||
</node>
|
</node>
|
||||||
</node>
|
</node>
|
||||||
<node COLOR="#435e98" CREATED="1737927867197" ID="ID_1443350587" MODIFIED="1737940527967" TEXT="maßgeschneiderte buildConnex(Syntax<OpaqueConnex>)">
|
<node COLOR="#435e98" CREATED="1737927867197" FOLDED="true" ID="ID_1443350587" MODIFIED="1738091456117" TEXT="maßgeschneiderte buildConnex(Syntax<OpaqueConnex>)">
|
||||||
<node CREATED="1737927895529" ID="ID_1795977503" MODIFIED="1737927907403" TEXT="erzwingt explizit die Konversion"/>
|
<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="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 CREATED="1737927930852" ID="ID_956432509" MODIFIED="1737927946326" TEXT="brauche dafür geeigneten Ctor, um die Referenz zu akzeptieren"/>
|
||||||
|
|
@ -57753,8 +57715,7 @@
|
||||||
ausdefinierte Syntax <i>per Value</i> (!) nehmen
|
ausdefinierte Syntax <i>per Value</i> (!) nehmen
|
||||||
</p>
|
</p>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html></richcontent>
|
||||||
</richcontent>
|
|
||||||
</node>
|
</node>
|
||||||
<node CREATED="1737932057241" ID="ID_201731446" MODIFIED="1737932069138" TEXT="explizit die custom-conversion triggern"/>
|
<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 CREATED="1737932070061" ID="ID_193505924" MODIFIED="1737932078546" TEXT="dann die Parse-Funktion rüberschieben"/>
|
||||||
|
|
@ -57770,8 +57731,7 @@
|
||||||
...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...
|
...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>
|
</p>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html></richcontent>
|
||||||
</richcontent>
|
|
||||||
</node>
|
</node>
|
||||||
</node>
|
</node>
|
||||||
</node>
|
</node>
|
||||||
|
|
@ -57787,9 +57747,78 @@
|
||||||
<arrowlink COLOR="#a670c5" DESTINATION="ID_476963617" ENDARROW="Default" ENDINCLINATION="63;87;" ID="Arrow_ID_1307955722" STARTARROW="None" STARTINCLINATION="391;0;"/>
|
<arrowlink COLOR="#a670c5" DESTINATION="ID_476963617" ENDARROW="Default" ENDINCLINATION="63;87;" ID="Arrow_ID_1307955722" STARTARROW="None" STARTINCLINATION="391;0;"/>
|
||||||
</node>
|
</node>
|
||||||
</node>
|
</node>
|
||||||
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1737509793049" ID="ID_1654271031" MODIFIED="1737932316916" TEXT="erwartete Verwendung im Test durchspielen">
|
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1737509793049" ID="ID_1654271031" MODIFIED="1738091231539" 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;"/>
|
<arrowlink COLOR="#69a19e" DESTINATION="ID_1564220447" ENDARROW="Default" ENDINCLINATION="365;-30;" ID="Arrow_ID_30873436" STARTARROW="None" STARTINCLINATION="-288;17;"/>
|
||||||
<icon BUILTIN="flag-pink"/>
|
<icon BUILTIN="pencil"/>
|
||||||
|
<node CREATED="1738089850124" ID="ID_169271928" MODIFIED="1738089862210" TEXT="Beispiel: numerischer Ausdruck">
|
||||||
|
<node CREATED="1738089863497" ID="ID_988046108" MODIFIED="1738091511457" TEXT="»der Klassiker«">
|
||||||
|
<node BACKGROUND_COLOR="#e3d8ba" CREATED="1738089891982" ID="ID_1470816547" MODIFIED="1738091534219" STYLE="bubble">
|
||||||
|
<richcontent TYPE="NODE"><html>
|
||||||
|
<head/>
|
||||||
|
<body>
|
||||||
|
<p>
|
||||||
|
<font face="Monospaced" color="#e62a01"><b>E</b></font><font face="Monospaced"> ::= </font><font face="Monospaced" color="#9b0338">T</font><font face="Monospaced"> [ + </font><font face="Monospaced" color="#e62a01"><b>E</b></font><font face="Monospaced"> ] </font>
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
<font face="Monospaced" color="#9b0338">T</font><font face="Monospaced"> ::= </font><font face="Monospaced" color="#9b0338">F</font><font face="Monospaced"> [ / </font><font face="Monospaced" color="#9b0338">F</font><font face="Monospaced"> ] </font>
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
<font face="Monospaced" color="#9b0338">F</font><font face="Monospaced"> ::= ( </font><font face="Monospaced" color="#e62a01"><b>E</b></font><font face="Monospaced"> ) | </font><font face="Monospaced" color="#9b0338">V</font>
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
<font face="Monospaced" color="#9b0338">V</font><font face="Monospaced"> ::= </font><font face="Monospaced" color="#172eee">num</font><font face="Monospaced">   | </font><font face="Monospaced" color="#32777e">√</font><font face="Monospaced"> </font><font face="Monospaced" color="#172eee">num</font>
|
||||||
|
</p>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
</richcontent>
|
||||||
|
</node>
|
||||||
|
</node>
|
||||||
|
<node CREATED="1738090083484" ID="ID_1980844178" MODIFIED="1738090093620" TEXT="binding ⟼ double">
|
||||||
|
<node COLOR="#435e98" CREATED="1738090106160" ID="ID_1537756860" MODIFIED="1738090162305" TEXT="bequemere Notation für Alternativen">
|
||||||
|
<icon BUILTIN="idea"/>
|
||||||
|
<node CREATED="1738090117309" ID="ID_336101391" MODIFIED="1738090133812">
|
||||||
|
<richcontent TYPE="NODE"><html>
|
||||||
|
<head/>
|
||||||
|
<body>
|
||||||
|
<p>
|
||||||
|
Spezialfall hier: <i>homogenes Model</i>
|
||||||
|
</p>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
</richcontent>
|
||||||
|
</node>
|
||||||
|
<node CREATED="1738090134820" ID="ID_1211990966" MODIFIED="1738090144679" TEXT="dafür kann der Visitor einen Wert liefern"/>
|
||||||
|
<node COLOR="#435e98" CREATED="1738090145459" ID="ID_944982552" MODIFIED="1738090158609" TEXT="vordefiniert als AltModel::getAny()">
|
||||||
|
<icon BUILTIN="button_ok"/>
|
||||||
|
</node>
|
||||||
|
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f4a" CREATED="1738090228760" ID="ID_1868530708" MODIFIED="1738090248792" TEXT="compiliert nur bei kompatiblen Typen"/>
|
||||||
|
</node>
|
||||||
|
<node COLOR="#434698" CREATED="1738090168392" ID="ID_1884619934" MODIFIED="1738090222263" TEXT="baue auch noch eine Quadratwurzel ein">
|
||||||
|
<icon BUILTIN="ksmiletris"/>
|
||||||
|
</node>
|
||||||
|
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#5a2baa" CREATED="1738090179863" ID="ID_1009402167" MODIFIED="1738091972292" TEXT="wichtig: jede Produktion mit Binding ausstatten">
|
||||||
|
<richcontent TYPE="NOTE"><html>
|
||||||
|
<head/>
|
||||||
|
<body>
|
||||||
|
<p>
|
||||||
|
....denn nur so bekommt man den Aufwand in den Griff;
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
ich demonstriere auch die (beabsichtigte) Anordnung im Quelltext, indem die bindings in eine Spalte rechts geschrieben werden; jede, <i>wirklich jede</i> Syntax-Klausel sollte den beabsichtigten Ergebnistyp haben (hier double), sonst läuft dieses Schema aus dem Ruder
|
||||||
|
</p>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
</richcontent>
|
||||||
|
</node>
|
||||||
|
</node>
|
||||||
|
<node BACKGROUND_COLOR="#e4eda1" COLOR="#007199" CREATED="1738090286760" ID="ID_1538254940" MODIFIED="1738090327155" STYLE="fork" TEXT="kann Φ ausrechnen">
|
||||||
|
<edge COLOR="#808080" STYLE="bezier" WIDTH="thin"/>
|
||||||
|
<font NAME="SansSerif" SIZE="13"/>
|
||||||
|
<node BACKGROUND_COLOR="#dad1a5" COLOR="#435e98" CREATED="1738091256581" ID="ID_1201454210" MODIFIED="1738091297020" TEXT="☺">
|
||||||
|
<font NAME="SansSerif" SIZE="22"/>
|
||||||
|
</node>
|
||||||
|
</node>
|
||||||
|
</node>
|
||||||
</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"/>
|
||||||
|
|
@ -57855,9 +57884,8 @@
|
||||||
<node COLOR="#338800" CREATED="1737932197686" ID="ID_239473120" MODIFIED="1737932209253" TEXT="Rekursive Syntax">
|
<node COLOR="#338800" CREATED="1737932197686" ID="ID_239473120" MODIFIED="1737932209253" TEXT="Rekursive Syntax">
|
||||||
<icon BUILTIN="button_ok"/>
|
<icon BUILTIN="button_ok"/>
|
||||||
<node COLOR="#435e98" CREATED="1737932214652" ID="ID_725486933" MODIFIED="1737932224531" TEXT="die klassische selbst-rekursive Regel"/>
|
<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">
|
<node COLOR="#435e98" CREATED="1737509774878" ID="ID_1564220447" MODIFIED="1738091240280" 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;"/>
|
<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>
|
</node>
|
||||||
<node CREATED="1737845308863" ID="ID_383219766" MODIFIED="1737845313627" TEXT="simpleUsage">
|
<node CREATED="1737845308863" ID="ID_383219766" MODIFIED="1737845313627" TEXT="simpleUsage">
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue