WS 97/98: Algorithmen und Programmierung III - Übungsblatt 5

Abgabe bis 20.11., 12 Uhr, im Institutssekretariat


Aufgabe 5.1 (4 Punkte)

Ein Modul Queues sei durch

     DEFINTION MODULE Queues;
     TYPE Queue;		(* Folge von ...    *)
      ...
      ...
     PROCEDURE equal(q1,q2: Queue): BOOLEAN;
               (* Vor.: -
                  Erg.: Der Wert von "Beide Folgen sind gleich" *)
     END Queues.

wie üblich spezifiziert, allerdings mit der zusätzlichen Operation equal. Gesucht ist ein Implementierungsmodul mit der üblichen Dokumentierung. Als Repräsentation soll ein Feld dienen, das zirkulär verwendet wird: stößt man beim Weitergehen hinten an, so fährt man vorne fort.

Von den Prozeduren soll nur equal angegeben werden. (Beachte: Die Abstraktionsfunktion ist nicht injektiv.)

Frühere Versionen für Queues findet man hier: Queues.def, Queues.mod.


Aufgabe 5.2 (5 Punkte)

Ein Übersetzer arbeitet mit einer Symboltabelle, in der die im Programm vereinbarten Namen mit ihren zugehörigen Attributen (Typ, Adresse, ...) verzeichnet werden. Wir nehmen an, daß es sich um eine sehr einfache Sprache ohne Blockstruktur handele (z.B. ein einfacher Assembler). Zwischen den Anweisungen können an beliebiger Stelle Namensvereinbarungen der Form Identifier: eingeschoben werden, z.B. für Variable, Konstanten oder Sprungmarken. Der Sichtbarkeitsbereich eines Namens reicht von seiner Vereinbarung bis zum Programmende.

Der Übersetzer arbeitet ein vorgelegtes Quellenprogramm in einem Durchgang ab und erzeugt dabei das Objektprogramm. Sein Umgang mit der Symboltabelle wird durch folgendes Beispiel verdeutlicht:

BEGIN . erzeuge leere Symboltabelle
id: ... eintragen id mit Attributen
a: .... eintragen a mit Attributen
.
.
a .....
aufsuchen a, liefert Attribute
a: .... eintragen a scheitert!
b: .... eintragen b mit Attributen
id .... aufsuchen id, liefert Attribute
x ..... aufsuchen x scheitert!
.
.
END


Wenn das Programm keine weiteren Vereinbarungen enthält, sieht die Symboltabelle am Ende der Übersetzung so aus:

id .....
a .....
b .....


Gesucht ist die Spezifikation eines Moduls, das abstrakte Objekte vom Typ Symboltabelle verwaltet, und zwar als Definitionsmodul mit Invariante und Voraussetzungen/Effekten. Der Formalitätsgrad kann beliebig gewählt werden. (Wenn viel Umgangssprache verwendet wird: sorgfältig formulieren!)

Hinweis: Aus abstrakter Sicht sind die Tabelleneinträge gewisse Tupel und somit der Tabellenzustand eine Teilmenge eines gewissen kartesischen Produkts.


Aufgabe 5.3 (5 Punkte)

Entwickle einen iterativen Algorithmus zur Auswertung geklammerter arithmetischer Ausdrücke, der mit einem Operanden-Keller und einem Operator-Keller arbeitet. Es werde vorausgesetzt, daß beide Keller als abstrakte Objekte zur Verfügung stehen. Der Algorithmus soll Syntaxfehler erkennen und geeignet darauf reagieren.




11.11.1997, 11:11. Helau!