next up previous
Next: Über dieses Dokument

M. Sperber, H. Klaeren Wintersemester 1998/99


Compilerbau I


Blatt 11

Abgabe: 26.1.1999

  1. [10 Punkte] Die Annotierungsphase nimmt an, daß alle Anwendungen offener Primitiva vollständig sind, d.h. daß ein n-stelliges offenes Primitivum p auch immer in der Form tex2html_wrap_inline33 angewendet wird. Dies ist nicht immer der Fall. Schreiben Sie eine Funktion, welche ein Lambda- oder Cps-Programm in ein äquivalentes Programm transformiert, in dem alle Anwendungen offener Primitiva vollständig sind.
  2. [15 Punkte] Schreiben Sie eine endrekursive Fassung von fib in POWER''=Assembler. Plazieren Sie dabei Ihren Code in folgendes Skelett:
    .csect .text[PR]
            .globl .fib
    .fib:
            # your code goes here ...
            br
    Das Skelett findet sich auch in der Datei power/fib.s und kann mit
    gcc -o fib fibmain.c fib.s
    zu einem ausführbaren Programm fib gemacht werden. (fibmain ruft fib mit dem Argument 7 auf.)

    Dabei ist das Argument zu fib in GPR 3, und fib sollte auch den Rückgabewert in GPR 3 hinterlassen. Zur freien Verwendung stehen die GPR's 3-12 zur Verfügung. Der Rücksprung erfolgt durch einen Branch zum Inhalt von LR beim Funktionseintritt.

    Im Falle eines arithmetischen Überlaufs sollte fib den Rückgabewert -1 liefern.

  3. [5 Punkte] Diskutieren Sie aus der Sicht des Compilerbauers Vor- und Nachteile einer allgemeinen Überlauf-Behandlung in einer Programmiersprache: Jeder arithmetische Überlauf führt zu einer programmdefinierbaren Ausnahmebehandlung. Wie ließe sich das (dabei hoffentlich klargewordene) Dilemma lösen?




Michael Sperber [Mr. Preprocessor]
Fri Jan 15 14:52:57 MET 1999