Anwesenheitsaufgabe: ------------------- Wir wollen Terme durch ein Graphikprogramm als Baeume darstellen und anzeigen lassen. Dazu verwenden wir das Programm /bin/dot. Um den Term f(a,g(b,c),h(d)) darzustellen, braucht 'dot' ein bestimmtes Format. a) Eine Datei .dot kann man aus einer Shell mit > dot -Tps .dot -o .ps in eine Postscriptdatei umwandeln und dann ausdrucken oder mit > ghostview -magstep -2 .ps & am Bildschirm anzeigen. Aufgabe: ------- Teste das Anzeigen einer .dot-Datei mit Uebersetzen in Postscript und Aufrufen von Ghostview mit der folgende .dot-Datei zum Term f(a,g(b,c),h(d)). /* ----------------------------- testbaum.tmp.dot ------------------------------ */ digraph syntaxbaum { center=true; size="7.5,14"; ratio=compress; 0 [shape = plaintext, label = "f"]; 0 -> 1; 1 [shape = box, label = "a"]; 0 -> 2; 2 [shape = plaintext, label = "g"]; 2 -> 3; 3 [shape = box, label = "b"]; 2 -> 4; 4 [shape = box, label = "c"]; 0 -> 5; 5 [shape = plaintext, label = "h"]; 5 -> 6; 6 [shape = box, label = "d"]; } /* ------------------------------------------------------------------------------- */ b) Das Programm /bin/dot erwartet die Baumbeschreibung in folgendem Format: die Knoten des Baums muessen alle verschieden heissen, sodass wir sie numerieren, mit 0 fuer die Wurzel. Eine Kante von n nach m muss durch n -> m ; angegeben werden. Eine Markierung am Knoten n muss durch m [label = ""] ; angegeben werden. Ob der Knoten als Kasten (box) oder einfach durch die Mark angezeigt werden soll, gibt man durch m [shape = box, label = ""] ; m [shape = plaintext, label = ""] ; an. Aufgabe: Erzeuge diese Angaben aus einem beliebigen Term durch ein Praedikat ------- drawTree(+Term,+Wurzelnummer,-unverbrauchte Nummer) der Bedeutung: Schreibe mit write(+Atom) den , wobei die Wurzel mit numeriert werde und die erste dabei nicht fuer eine Knotennumerierung gebrauchte Nummer ist. - mache eine Fallunterscheidung danach, ob der Term ein Blatt oder ein Verzweigungsknoten ist. - schreibe ein Hilfspraedikat drawTrees(+Termliste,+N,+M,-K), das die Terme der Termliste als Teilbaume des Baums mit Nummer N beschreibt (wie /bin/dot es braucht), und deren Knoten anfangend mit M numeriert, und K die erste nicht gebrauchte Zahl ist. c) Schreibe den Teil des Programms, der die Baeume durchnumeriert und setze ihn in das Programm 'dottree.pro' auf der Kursseite ein, das eine Datei 'baum.tmp.dot' erzeugt, die von dot am Bildschirm angezeigt werden kann. ---------------------------------------------------------------------------- Bemerkung: Man bekommt dot von AT&T als Teil des Graphikpakets graphviz unter http://www.research.att.com/sw/tools/graphviz/download.html Zur Bedienung von 'dot' siehe das Handbuch unter Unix: > man dot ...