fmidue / logic-tasks

0 stars 1 forks source link

Mehrstufiges Parsen wo angebracht #126

Open owestphal opened 4 months ago

owestphal commented 4 months ago

Durch #125 kann jetzt in den Grading-Funktionen jeweils der verwendete Parser individuell gewählt werden bzw mehere verschiedene Parser stufenweise hintereinander geschaltet werden (siehe Skizze in #83 und partialGrade in LogicTasks.Syntax.TreeToFormula).

Nach dem selben Schema können sicherlich auch in einigen anderen Aufgabentypen die Parserfehlermeldungen verbessert werden.

jvoigtlaender commented 4 months ago

Konkret bereits in LogicTasks.Syntax.TreeToFormula.partialGrade könnte vielleicht tokenSequence noch durch einen Parser ersetzt werden, der zusätzlich bereits "die Klammern zählt", der also mit einer aussagekräftigen Fehlermeldung reagiert, wenn es in einem Präfix der Eingabe mehr schließende als öffnende Klammern gibt, sowie wenn es in der gesamten Eingabe mehr öffnende als schließende Klammern gibt.

jvoigtlaender commented 4 months ago

Das würde natürlich bedeuten, dass in https://github.com/fmidue/logic-tasks/blob/13095f3ddb62164f53822a1d9685d96287c29ab9/src/LogicTasks/Syntax/TreeToFormula.hs#L82-L87 statt der err-Message des "Hauptparsers" doch (auch oder nur?) die Fehlermeldung des "Hilfsparsers" auszugeben wäre.

Das ist ja aber vielleicht sowieso sinnvoll? Also wenn etwa schlicht ein Symbol falsch geschrieben ist (<==> statt <=>), mag bereits der tokenSequence-Hilfsparser vielleicht eine bessere Fehlermeldung haben als der eigentliche TreeFormulaAnswer-Hauptparser?

jvoigtlaender commented 3 months ago

Oben vorgeschlagene Anpassungen/Verfeinerungen könnten jetzt zumindest teils durch Veränderungen an (oder alternativ verwendeten Funktionen zu) folgendem umgesetzt werden: https://github.com/fmidue/logic-tasks/blob/ec12c66fdcde7087b65c8d663b65698944a1de10/src/Formula/Parsing/Delayed.hs#L47-L63

und/oder Aufrufstellen wie: https://github.com/fmidue/logic-tasks/blob/ec12c66fdcde7087b65c8d663b65698944a1de10/src/LogicTasks/Syntax/DecomposeFormula.hs#L86