[CB-Logo]
Compilerbau I WS97/98
Übungen

Blatt 12

Abgabe: Montag, 2.2.1998

(ggf. Lösungen)

[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.
  1. Entwerfen Sie für die Situationen
    1. Initialisierung
    2. Auftreten eines begin
    3. Auftreten eines end
    4. Deklaratierendes Auftreten einer Variablen (var V: Typ)
    5. Angewandtes Auftreten einer Variablen
    jeweils kurze, prozedurale (C- oder Pascal-artige) Algorithmen zur Verwaltung der Identifikatortabelle.
  2. Wenden Sie Ihre Algorithmen auf das o.a. Programm an.
  3. 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]
IfI Mathe WWU

Dietmar Lammers
Last modified: Mon Jan 26 09:24:48 MET 1998