| Compilerbau I WS97/98 ÜbungenBlatt 12Abgabe: Montag, 2.2.1998 |
[Compilerbau-Homepage]
Gegeben sei das Programm aus Blatt11 / Aufgabe 7:
program N =
begin var x: integer; var y: real;
in(x); y:=1.0;
begin var n: integer;
n:=x;
while (n<>0) do
y:=(y*x);
begin var x: boolean;
x:=(y<0.0);
if x then out(0) else out(1) fi;
n:=(n-1)
end
od
end;
begin var n_1: boolean; var y: real;
if (x<n) then y:=(1.0/0.0) else n_1:=true fi
end;
out (y)
end.
Aufgabe 1 (20 Pkt)
Nachdem Sie in der letzten Aufgabe
intuitiv eine Identifikatortabelle aufgestellt haben, versuchen
Sie jetzt, Ihr Vorgehen zu algorithmisieren. Benötige Angaben
für einen Eintrag sind jeweils Name, Typ, Adresse im
Datenspeicher, Blockniveau (statische Schachtelungstiefe) und
Blockzähler.
-
Entwerfen Sie für die Situationen
- Initialisierung
- Auftreten eines
begin
- Auftreten eines
end
- Deklaratierendes Auftreten einer Variablen (
var V:
Typ
)
- Angewandtes Auftreten einer Variablen
jeweils kurze, prozedurale (C- oder Pascal-artige)
Algorithmen zur Verwaltung der Identifikatortabelle.
-
Wenden Sie Ihre Algorithmen auf das o.a. Programm an.
-
Können Sie die Benutzung der einzelnen Algorithmen als
Pseudoattribute in einer
attributierten MML-Grammatik skizzieren? Welche Attribute
würden für die Blockverwaltung benötigt?
[Compilerbau-Homepage]
Dietmar Lammers
Last modified: Mon Jan 26 09:24:48 MET 1998