Vorherige Seite Zur Übersicht Nächste Seite | Blatt 1 als PDF


U. Kastens, M. Jung

Vorlesung Übersetzer I WS 1999/2000 - Übungsblatt 1

Ausgabe: 15.10.99 -- Abgabe: 25.10.99, 9:00 Uhr in der Vorlesung

Aufgabe 1 (Fehlermeldungen)

Schreiben Sie kleine Java-Programme, bei deren Übersetzung der Compiler

bzw. die einen Laufzeitfehler erzeugen.

Welche Phasen des Übersetzers sind jeweils für die Meldungen verantwortlich?

Hinweis:

  1. Sie können z. B. den Übersetzer 'javac' und den Java-Bytecodeinterpreter 'java' benutzen.
    Um 'javac' und 'java' aufrufen zu können, muß Ihre Pfad-Variable '/usr/local/bin' enthalten.
  2. Wer sich mit Java nicht auskennt, kann diese Aufgabe auch für C lösen und den Übersetzer 'gcc' benutzen.
  3. Aufgabe 2 (Zuordnung Spracheigenschaften / Übersetzeraufgaben)

    a)
    Betrachten Sie den indizierten Zugriff auf ein Feld (arr_var[ind_expr]) in einer hypothetischen Sprache.

    Ordnen Sie folgende Eigenschaften den bekannten Übersetzeraufgaben (siehe Folie 05) zu:

    • arr_var muß vor der Anwendung definiert sein
    • ind_expr muß innerhalb der bei der Erzeugung von arr_var angegebenen Indexgrenzen liegen
    • Der Typ von arr_var muß ein Arraytyp sein
    • Der Typ von ind_expr muß auf den bei der Definition von arr_var angegebenen Indextyp (int) anpaßbar sein
    • Der Typ des Ergebnisses des Ausdrucks arr_var[ind_expr] entspricht dem Elementtyp von arr_var
    • arr_var muß eine Variable sein
    • ind_expr muß einen ganzzahligen Typ haben
    • Der Wert dieses Ausdrucks entspricht dem Inhalt der Speicherzelle, die durch die Formel ... berechnet wird

    b)
    Beschreiben Sie Eigenschaften in obiger Form für die Selektion von Komponenten einer Struktur über Zeiger in einer hypothetischen Sprache (entsprechend '.' für den Zugriff auf Objektvariablen in Java oder '->' in C oder C++).

    Aufgabe 3 (Abbildung Quell/Zielsprache)

    Folgendes ist ein kleines C-Programm zur Fakultätsberechnung:

            int factorial (int n)
            {
               int res = 1;
               int i;
       
               for (i = 2; i <= n; i++)
                  res = res * i;
       
               return res;
            }
    

    Durch den Aufruf gcc -S 'factorial.c' wird in der Datei 'factorial.s' das übersetzte Assembler-Programm erzeugt.

    Ordnen Sie die Strukturen des Assemblerprogramms denen des Quellprogramms zu.

    Hinweis:


    Vorherige Seite Zur Übersicht Nächste Seite | Blatt 1 als PDF