Anwesenheitsaufgabe 2: ---------------------- 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' folgendes 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,n,m) der Bedeutung: Schreibe mit write(+Atom) den , wobei die Wurzel mit numeriert werde und die letze verbrauchte Knotennummer ist. Wir werden das Praedikat gemeinsam erweitern, um eine Datei 'baum.tmp.dot' zu erzeugen, die von dot am Bildschirm angezeigt werden kann. 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. Fuer das Beispiel: /* ----------------------------- 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"]; } /* ------------------------------------------------------------------------------- */ 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 ...