Übersetzerbau

WS 98/99
Heckmann
Pape

3. Übungsblatt

 

Aufgabe 1 (3 + 3 Punkte)

  1. Schreiben Sie ein Codeschema zur Übersetzung von Iterationsanweisungen:
    for i := e1 to e2 do s end


    Dabei sei i eine deklarierte Integer-Variable und e1 und e2 seien Integer-Ausdrücke, die höchstens einmal ausgewertet werden sollen.

  2. Schreiben Sie ein Codeschema für die allgemeine Modula-Iterationsanweisung:
    for i := e1 to e2 by c do s end


    c ist eine dem Übersetzer bekannte Integer-Konstante.

Aufgabe 2 (4 Punkte)

Schreiben Sie Codeschemata zur Übersetzung der Modula-Anweisungen

loop s end           und          exit

Wenn es dazu nötig ist, der code-Funktion zusätzliche Parameter mitzugeben, geben Sie kurz an, wie sich diese Zusatzparameter bei der Übersetzung anderer Anweisungen verhalten.

Aufgabe 3 (3 + 3 Punkte)

  1. In der Vorlesung wurden Codeschemata für allgemeine Bezeichner behandelt. In Folge der Einführung von Prozeduren wurde die Adreßumgebung um die Komponente der Schachtelungstiefe erweitert. Passen Sie die Codeschemata an die neue Adreßumgebung an.
  2. Es seien die folgenden Typ- und Variablendeklarationen in einer Prozedur p gegeben:
     
    type t = record
                a:array[-5..5,1..9] of integer;
                b:^t
             end;
     
    var i,j : integer;
        pt  : ^t;
     

    Die erste zu vergebene Relativadresse sei 5, d.h. (i)=5. Übersetzen Sie unter dieser Voraussetzung die folgende Wertzuweisung im Rumpf von p mit Hilfe der Codeschemata aus a) :

    pt^.a[i,j]:= j