Suche Home Einstellungen Anmelden Hilfe  

previousupnext
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.
Übersetzungsstruktur (klein)

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:

Abschnitt 6 enthält Beispiele, wie die verschiedenen Aufgaben der semantischen Analyse mit Hilfe unseres Lernsystems erläutert und animiert werden.


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