Next:3. Systemdesign
Up:Visualisierung
und Animation der semantischen Analyse von Programmen
Previous:1. Einführung
2. Übersetzerbau als Domäne
Wir wählten als Wissenskontext und Beispiel für ein technisches
Lehrgebiet den Übersetzerbau, speziell die semantische Analyse. Eine
erste Grobstrukturierung des (konzeptionellen) Übersetzungsprozesses
von Programmen ist die Unterteilung in eine Analysephase und eine Synthesephase,
hierzu siehe Abbildung 1. In der Analysephase
werden die syntaktische Struktur und ein Teil der semantischen Eigenschaften
berechnet. Die von einem Compiler berechenbaren semantischen Eigenschaften
nennt man die statische Semantik. Sie umfaßt diejenige semantische
Information, die man lediglich aufgrund des vorliegenden Programms, d.h.
ohne die Ausführung mit Eingabedaten herausfinden kann. Ein Beispiel
dafür ist der Typ eines Bezeichners in streng getypten Programmiersprachen,
wie etwa Java. Die Analysephase hat als Resultat entweder Meldungen
über im Eingabeprogramm vorhandene syntaktische bzw. semantische Fehler
oder eine geeignete Darstellung der syntaktischen Struktur und der statischen
Eigenschaften. Im allgemeinen handelt es sich dabei um einen mit der semantischen
Information dekorierten abstrakten Syntaxbaum. Im Idealfall ist diese Phase
von den Eigenschaften der Zielsprache und der Zielmaschine unabhängig.
Die Synthesephase eines Übersetzers nimmt nun diese Programmdarstellung
und konvertiert sie in evtl. mehreren Schritten in ein äquivalentes
Zielprogramm (siehe [WM95]).
Abbildung 1: Konzeptionelle Übersetzungsstruktur mit
Angabe der Programmzwischendarstellungen.
|
Speziell zu den Aufgaben der semantischen Analyse gehören neben
den Gültigkeits- und Sichtbarkeitsregeln, die Überprüfung
der Kontextbedingungen (Deklarations-Analysator und Typkonsistenz-Analysator),
die Überladung von Bezeichnern und schließlich die Berechnung
eines allgemeinen Typs von Ausdrücken einer fest vorgegebenen polymorph
getypten Programmiersprache. Dabei heißt eine Programmiersprache
parametrisch polymorph, wenn es möglich ist, eine Definition einer
Funktion anzugeben, die für eine Menge von Kombinationen von Operanden-
und Ergebnistypen im wesentlichen dasselbe tut. Ein sogenannter Typinferenzalgorithmus
berechnet hierbei für jede polymorph getypte Funktion ihren allgemeinsten
Typ. Solch ein allgemeinster Typ besteht i.a. aus Typvariablen und Operatoren.
Wir verwenden als Beispielsprache die funktionale Programmiersprache LaMa,
die in [WM95] definiert wurde. Um den Typ
zu berechnen, benutzt der Typinferenzalgorithmus für die komplexeren
zusammengesetzten LaMa-Ausdrücke (z.B. if_then_else, ...) bestimmte
Typkombinationsregeln.
In der Lehre bieten diese Konzepte eine Vielzahl von Problemfeldern,
die sich mit Hilfe von Visualisierungen und Animationen gut lösen
lassen:
-
Schwierige Notationen, die häufig zurück ins Gedächtnis
gerufen werden müssen.
-
Die semantische Analyse operiert auf abstrakten Syntaxbäumen, also
baumartigen Strukturen, die inhärent schon eine graphische Intuition
besitzen.
-
Komplizierte Algorithmen, deren Pseudocode als reine Textform nur schwer
nachzuvollziehen ist.
-
Diverse Datenstrukturen, wie verkettete Listen, Symboltabellen, ...
Abschnitt 6 enthält
Beispiele, wie die verschiedenen Aufgaben der semantischen Analyse mit
Hilfe unseres Lernsystems erläutert und animiert werden.
Next:3. Systemdesign
Up:Visualisierung
und Animation der semantischen Analyse von Programmen
Previous:1. Einführung
Andreas Kerren , 2000-04-24
|
Benutzer: gast
Besitzer: schwill Zuletzt geändert am:
|
|
|