11.1.3 Fehlerbehandlung (Error Corrector)
Next: 11.2 Semantikanalyse
Up: 11.1 Syntaxanalyse
Previous: 11.1.2 Syntaktische Analyse (Parser)
Ein wichtiger Aspekt bei der Analyse der Eingabe ist natürlich die
Behandlung von Fehlern.
Bei Fehlern kann man zwei grundsätzliche Arten unterscheiden:
- Fehler, die anhand der Grammatikregeln der vorgegebenen Syntax
erkannt werden können.
- Fehler, die erst aus den komplexeren Zusammenhängen ersichtlich sind.
Einige Beispiele dafür sind:
- Begrenzung des Wertenbereichs von Parametern (z.B. Kopplungsfaktor
bei induktiven Kopplungen)
- Fehlende Definition einer Funktion oder Tabelle
- nicht existierendes Bauelement referenziert
- Knoten ohne angeschlossene Bauelemente
- Division durch 0
Die erste Art der Fehler ist bei der Syntaxanalyse erkennbar, und kann
zu diesem Zeitpunkt mit geringem Aufwand behandelt werden.
Die zweite Art, muß an einer Reihe von Stellen erkannt werden, wie
zum Beispiel:
- In einer Semantik-Routine für eine spezielle Grammatikregel
(z.B. in der Routine zur Analyse der Kopplung)
- Beim Aufbau des Gesamtnetzwerks
- Während der Simulationsphase des Netzwerks
Da in JANAP die Syntaxanalyse bereits tabellengesteuert abläuft, liegt es
natürlich nahe, auch die Fehlerbehandlung von Syntaxfehlern tabellengesteuert
durchzuführen.
Der zur Erstellung der Parser-Tabellen gewählte Generator (ECP)
bietet auch die Möglichkeit Tabellen für einen Error-Corrector zu erstellen.
Doch zuerst einmal eine Begriffsbestimmung für Error-Corrector:
Ein Error-Corrector modifiziert eine syntaktisch falsche Eingabe
derart, daß die Grammatikregeln für die vorgegebene Eingabesprache
erfüllt werden.
Dies bedeutet jedoch nicht, daß:
- die Eingabe semantisch richtig ist,
- die Eingabe einen Sinn ergibt,
- die Eingabe dem Problem des Benutzers entspricht.
Es ist also einzig und alleine ein Mittel, um eine syntaktisch
richtige Eingabe zu erhalten, sodaß die Semantik-Routinen einfacher
gestaltet werden können (es kann davon ausgegangen werden, daß die
Eingabe syntaktisch in Ordnung ist und es müssen keine Sonderfälle
behandelt werden).
Der für JANAP verwendete Error-Corrector arbeitet nach dem folgenden
Prinzip:
- Jedem Terminalsymbol werden zwei Zahlen zugeordnet, die eine sind
die Kosten, die durch das Löschen dieses Terminalsymbols entstehen,
die andere gibt die Kosten der Einfügung des Terminalsymbols an.
Diese Kosten repräsentieren die Wahrscheinlichkeit, daß diese Aktion
sinnvoll ist. Je größer die angegebenen Kosten sind, desto
unwahrscheinlicher ist es, daß man mit dieser Abänderung der Eingabe
zu einer sinnvollen Eingabe gelangt.
- Im Falle eines Syntaxfehlers sucht nun der Error-Corrector nach
derjenigen Kombination von Einfügungen und Löschungen, die die
geringsten Kosten verursacht.
- Wenn ein Terminalsymbol eingefügt werden muß, wird ein
sogennantes Template - also eine Vorlage - für das Terminalsymbol
eingefügt. Dies ist erforderlich, damit die Semantik-Routinen mit dem
Terminalsymbol etwas Sinnvolles anfangen können.
- Im Protokoll der Eingabe werden die durchgeführten Änderungen
an der Eingabe gekennzeichnet.
- Obwohl die Syntax- und Semantikanalyse nach einem Fehler
weiter bis zum Ende der Eingabe durchgeführt wird, werden kein
Gleichungssystem und keine Fortran-Programme für den 2. Pass von
JANAP erzeugt, da nicht davon ausgegangen werden kann, daß das
entstehende Netzwerk sinnvoll ist.
Treten Fehler auf, die von den Semantik-Routinen erkannt werden,
so wird eine Fehlermeldung ausgegeben und versucht durch Einsetzen
geeigneter - harmloser - Werte einfach weiterzurechnen.
Auch in diesem Fall wird natürlich keine Simulation des Netzwerks
durchgeführt.
Next: 11.2 Semantikanalyse
Up: 11.1 Syntaxanalyse
Previous: 11.1.2 Syntaktische Analyse (Parser)
Martin Stiftinger
Fri Jun 9 19:49:39 MET DST 1995