Dritter Meilenstein: Semantische Analyse
Deadline: Freitag,
29. Juni 2001, 1200 Uhr
Das Ergebnis der zweiten Phase ist ein
abstrakter Syntaxbaum. Dieser wird annotiert mit Informationen, die während
der semantischen Analyse berechnet werden.
Folgenden Aufgaben sollen während
der semantischen Analyse bearbeitet werden:
-
Typüberprüfung
-
Adressberechnung
-
Auffinden von Definitionen für Benutzungen
von Variablen und Methoden
Verschiedene Felder von Objekten der Klasse
Node
werden während dieser Stufe des Frontends ausgefüllt:
-
access:
enthält den Zugriffstyp für Variablen oder Methoden(-aufrufe).
Falls dieses Feld noch nicht während der Syntaxanalyse gesetzt wurde,
muß der korrekte Wert eingetragen werden, d.h. T_STATIC
für statische Variablen oder Methoden, T_LOCAL
für Variablen, die in einer Methode definiert werden, oder für
Methoden, die in der aktuellen Klasse definiert werden, sonst T_VIRTUAL.
-
decl:
ist eine Referenz zu der Definition einer Variable oder Methode.
-
etype:
der Typ eines Ausdrucks oder einer Variable als JVM Typstring. Dieses Feld
wird bottom-up berechnet.
-
limitLocals:
muß für jede Methodendefinition berechnet werden und enthält
die Anzahl formaler Parameter und lokaler Variablen. In einem Knoten des
Typs T_CLASS
enhählt dieses Feld die Anzahl an Stackzellen, die für die <init>
Methode benötigt werden.
-
limitStack:
muß für jede Methodenfedinition berechnet werden und enthält
die Anzahl an Stackzellen, die während der Ausführung des Methodenrumpfes
maximal benötigt werden. In einem Knoten des Typs T_CLASS
enthält dieses Feld die Anzahl an Stackzellen, die für die <clinit>
Methode benötigt werden.
-
offset:
ist die relative Adresse für eine Variable.
Da die TassKaf-Sprache
den von Java bekannten Import-Mechanismus nicht unterstützt, muß
das Frontend zu Beginn der Analyse über Informationen über die
folgenden Klassen (genauer gesagt Klassennamen - nicht die ganze
Klasse inklusive Methoden und Feldern), Objekte und Methoden verfügen:
-
die Klassejava.lang.Object
-
die Klasse java.lang.System
-
die Klasse java.io.PrintStream
-
die Methode println(I)V
of class java.io.PrintStream
-
das Klassenfeld out
der Klasse java.lang.System
vom Typ java.io.PrintStream
Für dieses Teilprojekt nützliche
Dokumente:
This page is maintained
by Marc Langenbach. For
questions and suggestions send email to mlangen@cs.uni-sb.de.
Last updated April 12 2001.