Drittes Teilprojekt:
Semantische Analyse
für Tasskaf
Das Frontend, das ihr im zweiten Teil des Projekts
implementiert habt, erzeugt einen Syntaxbaum.
Die Typen der Knoten im Baum, sind die
Konstanten PT_VAR, PT_METHCALL, etc.,
die ihr ja schon kennt. Die Knoten enthalten
aber noch vier Einträge, deren Werte
erst noch berechnet werden müssen, bevor
ihr euer Frontend mit dem Backend, das
ihr im ersten Teil des Projekts geschrieben
habt, verbinden könnt.
info
jvm_type
offset
access
Dazu solltet ihr Euch die Beschreibung der
semantischen Analyse ansehen, sowie die
Berechnung der Adreßumgebung.
Allerdings braucht ihr dank
Java nur die Adressen der lokalen Variablen
zu berechnen. Dann solltet ihr euch in der
Beschreibung der Zwischendarstellung anschauen,
für welche
Knoten welche Einträge berechnet werden müssen.
Der Wert von jvm_type ist der Wert,
der durch die Typeinferenz berechnet wird.
Der Wert von offset ist die Adresse
der lokalen Variable (bzw. in PT_X_METHDEC
die Anzahl der lokalen Variablen). In info
speichern wir einen Namen oder eine Signatur in
der Form, wie sie später für Instruktionen
wie getstatic oder invokevirtual
benötigt werden. Diese Namen werden während
der Typinferenz aufgebaut. In access speichern
wir die Zugriffsart (statisch, virtuell, lokal) auf
die Variable oder Methode. Diese können wir
in der Umgebung nachschlagen, sobald wir in der
Typinferenz festgestellt haben, welche Methode
oder Variable tatsächlich gemeint ist.
Die Umgebung muß auch einen Eintrag für
java.lang.System.out
und java/io/PrintStream/println(I) enthalten.
Wenn ihr für Umgebungen den Datentyp BINDING
verwendet, dann könnt ihr die Funktion
get_binding verwenden, die zu einer
externen Klasse, deren Bindung liefert (siehe
auf den CIP Rechnern: ~diehl/COMP/project3/external.c).
This page is maintained by Stephan Diehl. For questions and suggestions send email to diehl@cs.uni-sb.de.
Last updated May 22 1997