Open jvoigtlaender opened 3 days ago
Ist es auch so, dass nur
PropFormula
eine Eingabe wieA /\ B /\ C
überhaupt parsen kann? Also wenn ein Aufgabentyp solche Eingaben annehmen soll ("Konzertaufgabe"), kann er nicht mitSynTree
arbeiten?
Ja, bezüglich der Eingabe ist das so.
Wie ist es hinsichtlich der Ausgabe? Gibt es nur für
PropFormula
die Möglichkeit des Pretty-Printings mit minimaler Klammeranzahl?
Nein, für SynTree
gibt es simplestDisplay
.
In der Tat ist die Entscheidung jetzt, dass für die Ausgabe bestimmte Formeln (etwa Musterlösungen) immer als SynTree
s zu erzeugen sind. Maximal noch für die Eingabe sollen PropFormula
s benutzt werden.
Wenn dennoch eine PropFormula
vorliegt und ausgegeben werden soll (zum Beispiel, um eine von Studierenden eingegebene Formel "vorsichtshalber" zur Gegenprüfung nochmal auszugeben), dann kann wie in https://github.com/fmidue/logic-tasks/issues/224#issuecomment-2485383606 vorgeschlagen vorgegangen werden.
Wenn eine "nicht unbedingt vollständig, aber auch nicht zu wenig geklammerte" Formel eingelesen werden soll (etwa (A /\ B /\ C) => D
ist zu akzeptieren, aber A /\ B => C
nicht), wie es etwa bei der Konzertaufgabe auftritt, dann sollte m.E. ein Parser für SynTree
erstellt werden, der folgendermaßen vorgeht:
PropFormula
geparstPropFormula
wird toTree
angewendetshow
auf der PropFormula
exakt den gleichen String
liefert wie simplestDisplay
auf dem im vorigen Schritt erhaltenen SynTree
SynTree
zurückgeliefertDer Parser könnte liberalParser
oder so heißen.
Ein bisschen muss die Idee wohl noch verfeinert werden. Mit dem obigen Ansatz würden ja auch "zu viele Klammern" zurückgewiesen werden, etwa bei Eingabe von ((A /\ B)) => C
.
Bisher benutzen zwei Aufgabentypen (Teilformeln, Klammern entfernen)
PropFormula
als Eingabetyp, andereSynTree
.Motivation für die Verwendung von
PropFormula
scheint zu sein, dass da die Klammerpositionen (insbesondere auch zusätzlicher Klammern) explizit festgehalten werden.Ist es auch so, dass nur
PropFormula
eine Eingabe wieA /\ B /\ C
überhaupt parsen kann? Also wenn ein Aufgabentyp solche Eingaben annehmen soll ("Konzertaufgabe"), kann er nicht mitSynTree
arbeiten?Wie ist es hinsichtlich der Ausgabe? Gibt es nur für
PropFormula
die Möglichkeit des Pretty-Printings mit minimaler Klammeranzahl?[Mittlerweile konkret adressiert:]
Letzteres hätte zum Beispiel Relevanz bei Wahrheitstafel-Aufgaben. Zum Beispiel könnte da im Moment eine Formel wie folgende ausgewürfelt werden (als diejenige Formel, zu der eine Wahrheitstafel anzugeben/auszufüllen ist):
F = (C => C) <=> (¬B ∧ (A ∧ D))
. Aber zu dem Zeitpunkt in der Lehrveranstaltung, wo diese Aufgabe verwendet wird, werden assoziative Operationen eigentlich schon nicht mehr so streng geklammert (und in der Tat werden die Wahrheitstafel-Aufgaben ja alternativ auch durch KNFs/DNFs gespeist). Also eigentlich würde man da dann gernF = (C => C) <=> (¬B ∧ A ∧ D)
vorgeben. Aber gibt es einen Pretty-Printer, der den erzeugtenSynTree
so ausgibt? Oder muss man dafür entweder statt denSynTree
zu würfeln, einePropFormula
würfeln, oder eine Konvertierungsfunktion zwischen diesen Typen benutzen?