11.2 Semantikanalyse



next up previous contents
Next: 11.3 Verarbeitung von Ausdrücken Up: 11 Die einzelnen Komponenten Previous: 11.1.3 Fehlerbehandlung (Error Corrector)

11.2 Semantikanalyse

 

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:
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