---
Institut für Informatik und Praktische Mathematik
Christian-Albrechts-Universität zu Kiel

Übungen zu Implementierung objektorientierter Sprachen
Priv.-Doz. Dr. Wolfgang Goerigk

Serie 3    [PostScript]

---


Aufgabe 6 ( Lineare Listen, Hausaufgabe 4 Pkt.)

Der Datentyp T* der linearen Listen (Sequenzen) mit Elementen des Typs T (z.B. int oder Object) ist induktiv definiert: Listen (a . (b . (c . ... (z . ()) ... ))) notieren wir auch in der Form (a b c ... z). Für nichtleere Listen (a . l) sind die Selektoren und für a : T und l : T* ist der Konstruktor definiert. Schreiben Sie Java-Klassendefinitionen, die den Typ T* für T = int und T = Object realisieren, und in denen statische Methoden für head, tail und cons definiert sind.

Hinweis:  Die Rolle der leeren Liste kann der Null-Pointer spielen.

Abgabetermin: Mittwoch, 6.12.2000
 
 

---


Aufgabe 7 ( Abstrakte Syntaxbäume 1, Hausaufgabe 6 Pkt. )

Um abstrakte Syntaxbäume von Programmen einer Programmiersprache repräsentieren zu können, brauchen wir einen Datentyp für
heterogene Bäume, d.h. für Bäume mit inneren Knoten und Blättern verschiedener Typen, die je nach Typ verschiedene Attribute (auch verschieden viele unterschiedliche Nachfolger) haben.

Schreiben Sie, wie in der Übung gezeigt, Klassendefinitionen für Konstanten (mit ihrem Wert), für Variablen (mit ihrem Namen) und
für Ausdrücke (mit ihrem Typ), die aus Konstanten, Variablen und binären Operatoranwendungen der Operatoren + und <= aufgebaut sind.

Instanzen dieser Klassen repräsentieren also Ausdrücke, die der abstrakten Syntax

       e ::= c | x | e1 + e2 | e1 <= e2

entsprechen. Dabei seien Konstanten und Variablen allesamt vom Typ int, und nur Ausdrücke der Form e1 <= e2 sind vom Typ boolean.

Schreiben Sie eine statische Methode, also eine Funktion, die von einem Ausdruck feststellt, ob der den Typ boolean hat.

Hinweis: Verwenden Sie Vererbung, d.h. definieren Sie eine Klasse für Ausdrücke e mit Unterklassen, deren Instanzen die Ausdrücke der Form c, x, e1 + e2 bzw. e1 <= e2 repräsentieren

Abgabetermin: Mittwoch, 6.12.2000
 
 

---


Aufgabe 8 (Abstrakte Syntaxbäume 2, Praktische Hausaufgabe 6 Pkt. )

Schreiben Sie die Klassendefinitionen, die nötig sind, um abstrakte Syntaxbäume für Anweisungen (statements) s der Form

        s  ::=   x = e  |  s1; ... ;sn  |  while (e) s

zu repräsentieren. Dabei sind Ausrücke e wie in Aufgabe 7 aufgebaut und vom Typ int oder boolean, Variablen sind vom Typ int, Zuweisungen sind wohlgeformt, wenn der Ausdruck e vom Typ int ist, und while (e) s ist wohlgeformt, wenn der Ausdruck e vom Typ boolean und die Anweisung s wohlgeformt ist. s1; ... ;sn ist wohlgeformt, wenn jedes si wohlgeformt ist.

Schreiben Sie eine statische Methode, die von einer Anweisung s feststellt, ob sie wohlgeformt ist oder nicht. Programmieren Sie Ihre Klassen in Java und testen Sie das Programm, indem Sie verschiedene Ausdrücke und Anweisungen aufbauen und deren Wohlgeformtheit überprüfen.

Abgabetermin: Mittwoch, 6.12.2000
 
 

---