Replies: 6 comments
-
https://www.graymatterdeveloper.com/2019/11/21/antlr-error-handling/ |
Beta Was this translation helpful? Give feedback.
0 replies
-
geplante thesis für @malt-r |
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
Status Quo:
Es gibt keine durchgängige Strategie, um mit Fehlern umzugehen. "Umgang" bedeutet: Erkennen, Kommunizieren, Beheben, Reagieren. Meistens treten Fehler im
DSLInterpreter
und in den vorgeschalteten Analysen inSemanticAnalyzer
zu spät auf, d. h. sie könnten früher erkannt und deutlich aussagekräftiger kommuniziert werden. Typechecking ist nicht implementiert. Die Reaktion auf einen Fehler besteht in den meisten Fällen im Werfen einerRuntimeException
und im Beenden des Programms. Das ANTLR-Fehlerhandling ist aktuell auch nicht in das Gesamtsystem eingebunden.Um die DSL wirklich produktiv einsetzen zu können, muss hierfür ein Konzept erarbeitet und umgesetzt werden. Dazu sollte analysiert werden, welche Fehlerarten es gibt, wie die zu behandeln und zu kommunizieren sind. Für einfache Syntax-Fehler sollten Synchronisationsgrenzen festgelegt werden, sodass ein einzelnes fehlendes Semikolon nicht eine Reihe an falschen und irreführenden Fehlermeldungen nach sich zieht. Darüber hinaus ist zu klären, welche Daten in welcher Form für die semantische Analyse gehalten werden müssen, um aussagekräftige Fehlermeldungen zu generieren.
Typinferenz und Typechecking wären wichtige Komponenten für die Fehlererkennung, sind allerdings auch alleine schon so groß, dass es ein kleines https://github.com/Programmiermethoden/Dungeon/labels/thesis Label bekommen und in #99 getrackt werden.
Der
DSLInterpreter
stellt eine Ausführungsumgebung für Funktionsdefinitionen dar. Hiermit tauchen alle in diesen Umgebungen "gängigen" Fehlerbilder auf (Zugriff auf nicht definierte oder in einem bestimmten Kontext nicht gültige Symbole, Zugriff aufnull
-Werte, Typfehler). Auch für diese Fehler muss ein Fehlerhandling definiert werden.Ein weiterer Aspekt ist der Umgang mit dem ECS in der DSL. Das ECS ermöglicht das dynamische Hinzufügen und Entfernen von
Components
zuEntity
s während der Programmlaufzeit. Per DSL-Konfiguration können DSL-Funktionen als Callback für Events aus dem Dungeon-Kontext definiert werden. D. h.Entity
s werden als Parameter an DSL-Funktionen übergeben. Um in den Callback-Funktionen etwas mit den übergebenEntity
s tun zu können, muss es möglich sein, auf dieComponent
s einer Entity zugreifen zu können. Dazu ist für jeden möglicheComponent
ein Property in der DSL-Abbildung desEntity
-Datentypen vorgesehen. Falls jedoch dasEntity
-Objekt aus dem Dungeon-Kontext keinComponent
des entsprechenden Typs hat, ist der Rückgabewert dieser Propertynull
. Greift das Program auf Symbole im Kontext des nicht vorhandenComponents
zu, stürzt das Programm ab. Hier könnte untersucht werden, inwiefern das Typsystem erweitert werden könnte, um diese Art der Fehler bereits vor der Programmausführung zu verhindern/erkennen/melden.Beta Was this translation helpful? Give feedback.
All reactions