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