Download Animation der semantischen Analyse

Transcript
KAPITEL 6. DIE DYNAMISCHE ERWEITERUNG ASA
103
Wenn man einen neuen, großen Unterbaum immer mehr nach rechts schiebt, so kann zwischen diesem großen Unterbaum und kleineren Unterbäumen, die zuvor korrekt positioniert
waren, eine Lücke entstehen. Diese kleinen Unterbäume erscheinen nun wie angehäuft,
während rechts von dieser Anhäufung ein leerer Raum entsteht. Der hier vorgestellte Algorithmus löst dieses Problem (vgl. Abb. 6.13). Er generiert einen gleichmäßig verteilten
Raum um die Unterbäume. Während sich ein großer Unterbaum nach rechts bewegt, so
wird die zurückgelegte Distanz gleichmäßig auf die kleineren inneren Unterbäume verteilt.
Die Bewegung dieser Unterbäume wird wie oben beschrieben, durch Addition der proportionalen Werte zu den vorläufigen x-Koordinaten und Modifizierer-Feldern der Unterbaumwurzeln, durchgeführt. Haben wir beispielsweise auf der linken Seite drei kleine gebündelte Unterbäume, weil ein neuer großer Unterbaum rechts positioniert wurde, so wird
der erste kleine Unterbaum um ¼ der entstandenen Lücke, der zweite kleine Unterbaum um
½ und der dritte kleine Unterbaum um ¾ nach rechts gependelt.
⇒
Abb. 6.13: Auspendeln von Unterbäumen
Die zweite Traversierung, eine Preorder-Traversierung, bestimmt die endgültige xKoordinate von jedem Knoten. Sie startet beim Apex, summiert für jeden Knoten k den
Wert prelim(k) mit der vereinigten Summe der Modifizierer-Werte seiner Vorfahren. Sie
addiert dazu auch einen Wert, der die gewünschte Zentrierung des Baumes im Animationsbereich gewährleistet.
Unsere Implementierung dieses Layoutalgorithmus ist eine erweiterte Version des oben
beschriebenen Algorithmus. Die Syntaxbaumknoten haben je nach Beschriftung eine unterschiedliche Höhe und Breite. Das Layoutverfahren mußte für diesen Umstand angepaßt
werden. Weiterhin ist der Baum in vier Richtungen drehbar, d.h. der Apex des Baumes kann
sich im Fenster oben, unten, rechts oder links befinden (siehe Abb. 6.14). Die Layoutparameter Ebenenseparation, Geschwisterseparation und Unterbaumseparation lassen sich
beliebig verändern. Zusammen mit der Skalierungsmöglichkeit des Baumes wird den AnwenderInnen ermöglicht, die jeweilige optimale Darstellung des Syntaxbaumlayouts im Animationsbereich einzustellen (siehe auch Abschnitt 6.3.2.4).
a) Apex oben
b) Apex links
c) Apex unten
d) Apex rechts
Abb. 6.14: Baumorientierungen
Da jeder Syntaxbaumknoten in ASA eine unterschiedliche Größe hat, muß diese vor dem
eigentlichen Layoutvorgang ermittelt werden. Sie ist von der Beschriftung des Knotens und
von dem jeweiligen Font (der sich auch je nach Ausgabegerät und System unterscheiden