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