11.2 Semantikanalyse
Next: 11.3 Verarbeitung von Ausdrücken
Up: 11 Die einzelnen Komponenten
Previous: 11.1.3 Fehlerbehandlung (Error Corrector)
Wie schon im vorigen Kapitel angedeutet, erfolgt die Analyse der
Semantik der Eingabe durch sogenannte Semantik-Routinen.
Bei jeder Grammatikregel kann angegeben werden, ob eine
Semantik-Routine aufgerufen werden soll.
Der Name der Routine wird als vierstellige Zahl kodiert.
Anhand dieser Zahl ruft das Unterprogramm SEMANT die
entsprechende Routine auf.
Ein wichtiger Aspekt bei der Semantikanalyse ist die Weitergabe der
Daten zu den anderen Semantik-Routinen.
Dieses Problem wird verkompliziert, da auf Grund der Methode der
Syntaxanalyse nicht davon ausgegangen werden kann, daß die Terminalsymbole
von links nach rechts durch die Semantik-Routinen verarbeitet werden.
Es werden die Terminalsymbole dagegen baumartig abgearbeitet.
Der Baum wird durch die Grammatikregeln definiert.
Je nach Art der Daten werden dabei folgende Methoden verwendet:
- Tabellen:
- Eine Reihe von globalen Informationen (z.B.
bereits definierte Bauelemente, Funktionen und Tabellen) werden in
Tabellen gespeichert. In diesem Fall müssen - wenn überhaupt -
die Semantik-Routinen nur mehr
den Zeiger auf die entsprechende Tabellen-Eintragung weitergeben.
- Globale Variable:
- Einige Informationen werden über globale
Variable den anderen Semantik-Routinen zur Verfügung gestellt.
Beispiele sind:
- Bereich der Eingabe (Topologie, Analyse)
- derzeitiger Gültigkeitsbereich (Hauptschaltung, Teilschaltung)
- Debug-Flags
- Operanden während der Analyse von Ausdrücken
- Semantik-Stack:
- Jede Semantik-Routine kann als ihr Ergebnis drei
Werte in einem sogenannten Semantik-Stack hinterlassen.
Es handelt sich dabei um eine Länge (Integer-Zahl), einen Text und
einen Zeiger auf einen Ausdruck (Integer-Zahl).
Diese 3 Werte werden mit dem Metasymbol der Grammatik verknüpft, das
durch die gerade abgeleitete Grammatikregel definiert wurde.
Eine Semantik-Routine hat Zugriff auf alle Informationen im Semantik-Stack,
die zu der gerade bearbeiteten Grammatikregel gehören.
Für Terminalsymbole wird im Semantik-Stack automatisch der zum Symbol
gehörige Eingabetext gespeichert.
Der Semantik-Stack wird von Parser und Error-Corrector automatisch
verwaltet.
Martin Stiftinger
Fri Jun 9 19:49:39 MET DST 1995