|
Terminologie
Auf der linken Hälfte der Seite in Abb. 2
sind die in der semantischen Analyse verwendeten Begriffe kurz definiert.
Klickt man auf einen blau gefärbten Textteil,
so erscheint auf der rechten Hälfte eine detailliertere Erklärung
des gewählten Begriffs. Innerhalb dieses Bereichs lassen sich auch
ein oder mehrere Beispiele zu dem ausgewählten Begriff anzeigen.
Überprüfung der Kontextbedingungen
In unserem zweiten Beispiel (Abb. 3) soll
die Funktionsweise eines Deklarationsanalysators zunächst an einer
gedachten Übersetzungssituation erläutert werden. Der rot
gefärbte Quelltext des Algorithmus kennzeichnet die aktuelle
Stelle, die auf der rechten Hälfte der Seite erklärt wird. Mit
den Steuerungsknöpfen unten in der Kontrolleiste kann der Algorithmus
komplett durchlaufen werden (Textanimation). Zu allen wichtigen Bestandteilen
des Algorithmus lassen sich Beispielanimationen aufrufen, die ihrerseits
wieder aus mehreren Seiten bestehen können.
Die nächste Abbildung 4 zeigt einen Schritt in einer Animationsabfolge, die durch Anklicken des Knopfes Ein Beispiel aus Abb. 3 aufgerufen wird. Rechts oben befindet sich die aktuelle Stelle im Quelltext zum Algorithmus für den Deklarations-Analysator. Man kann die Elemente der Symboltabelle anklicken, um eine kurze Erklärung zu dem ausgewählten Element zu erhalten. Hier hat der Benutzer auf die erste Zelle eines Eintrags geklickt, um sich deren Bedeutung anzeigen zu lassen. Die Symboltabelle ist als verkettete Liste dargestellt, deren Einträge aus Strukturen von je vier Elementen bestehen. Das erste Element ist die Blocknummer, das zweite Element die Adresse der entsprechenden Deklaration im Syntaxbaum, etc. Die Animation zeigt, daß bereits ein Bezeichner a im aktuellen vierten Block neu deklariert wurde. Der Bezeichner c, der schon im ersten Block ein deklarierendes Vorkommen hat, wird nun im aktuellen vierten Block erneut deklariert. Dazu wird in der Symboltabelle ein neuer Eintrag generiert und in die entsprechende Stelle der Symboltabelle eingefügt. Genau dieser Prozess ist in der oben gezeigten Animation zu sehen. In der Quelltextzeile rechts oben ist ein Funktionsaufruf enter_id(id, ^k) enthalten. Diese Funktion ist nun im Feld links oben zu sehen. Der Anwender kann den Quelltext für diese Funktion zeilenweise abarbeiten lassen. Die Animationssteuerung gestattet es, die Animation mit unterschiedlichen, frei einstellbaren Geschwindigkeitsniveaus ablaufen zu lassen, anzuhalten und einzelne Schritte auszuführen. Dabei wird in einer Fortschrittsleiste (links unten) der aktuelle Stand innerhalb der Animation angezeigt.
Typinferenz
Zu dem zusammengesetzten LaMa-Ausdruck LETREC wird eine Animation
der Typkombinationsregel an einem verallgemeinerten Beispiel angezeigt
(siehe Abbildung 5). Man sieht einen
der letzten Schritte der Animation. Der Typkombinationsregel entsprechend
werden die einzelnen polymorphen Typen der Unterbaumwurzeln berechnet,
eine Typumgebung erzeugt, neue Typvariablen eingeführt, etc. Die Animation
zeigt einen Schritt in dieser Berechnung. Man sieht den Teilbaum des
LETREC-Konstrukts,
in dessen Wurzelknoten die neue Typumgebung und neue Typvariablen eingetragen
werden. Dieser expandierte Wurzelknoten entspricht der intuitiven Speicherung
der Typinformationen in den Knoten des realen Syntaxbaumes. Am Ende der
Animation wird der neue Ergebnistyp in das Feld links unten eingetragen.
Überprüfung der Kontextbedingungen
Der in Abb. 6 angegebene Bildschirmausschnitt
zeigt eine Visualisierung der Überprüfung der Kontextbedingungen
eines durch den Anwender eingegebenen Beispielprogramms (s.u.). Eine komfortable
Eingabemöglichkeit dieser Programme ist der eingebaute Editor, der
auch eine Funktion zur Syntaxtprüfung bereithält. Ist das Eingabeprogramm
syntaktisch fehlerhaft, so markiert der Editor das Fehlersymptom. Syntaktische
Korrektheit ist eine Voraussetzung zur semantischen Analyse und wird daher
vom System getestet.
Der zugehörige abstrakte Syntaxbaum ist in der Abbildung fast vollständig dargestellt. Zu einigen Syntaxbaumknoten sind die Typattribute zu sehen. Grundlage für deren Berechnung sind die in einem Hilfsfenster (links unten) angegebenen Typen für die im Beispielprogramm verwendeten und eingebauten Operatoren. Für ein angewandtes Vorkommen des Bezeichners Fakultaet wurde das nach den Gültigkeits- und Sichtbarkeitsregeln errechnete definierende Vorkommen nach einem Mausklick auf das angewandte Vorkommen rot markiert und der entsprechende Link mit einer roten Kante symbolisiert. Wird kein definierendes Vorkommen gefunden, dann öffnet sich ein Dialogfenster mit einer entsprechenden Fehlermeldung. Der Lernende hat nun die Möglichkeit, das Beispielprogramm abzuändern und die Analyse neu ablaufen zu lassen. Der Pascal-Code des Beispielprogramms ist in Programm 1 angegeben. Die entsprechende Pascal-Grammatik wurde in der Online-Hilfe definiert.
Überladung von Operatoren
Unser letztes Beispiel (Abb. 7) demonstriert
die Auflösung der Überladung von Operatoren. Rechts unten ist
ein Hilfsfenster mit der aktuellen Eingabespezifikation eingeblendet, die
zuvor mit Hilfe einer Eingabemaske erstellt und syntaktisch überprüft
worden war. Der "+"-Operator ist vierfach und der "/"-Operator dreifach
überladen. Im Animationsbereich ist der auf 140% vergrößerte
Ausdrucksbaum des Eingabeausdrucks (hier "1/2+3/4") mit den zu jedem Operatorknoten
assoziierten Mengen von Definitionsalternativen zu sehen. Alle Mengen sind
nach der Berechnung einelementig, wobei die Integerkonstanten nullstellige
Operatoren vom Typ int sind. Die Überladung der Operatoren
wurde also erfolgreich aufgelöst. Im Falle eines Fehlers wäre
mindestens eine Menge mehrelementig und entsprechend markiert.
|