11.07.2015 Aufrufe

ODL-Sprachkonstrukte und interaktive Benutzerschnittstelle - TUM

ODL-Sprachkonstrukte und interaktive Benutzerschnittstelle - TUM

ODL-Sprachkonstrukte und interaktive Benutzerschnittstelle - TUM

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

6.2 OPTIMIERUNG DER ABFRAGEAUSWERTUNG 103Im Zuge der weiteren Entwicklung des <strong>ODL</strong>-Interpreters kann die Positionierung von verschiebbarenQuantoren innerhalb einer <strong>ODL</strong>-Abfrage so verfeinert werden, dass folgende Nachbedingungenfür jeden verschiebbaren Quantor nach der Umformung der <strong>ODL</strong>-Abfrage gelten:• Die erste Nachbedingung stimmt mit der oben angegebenen ersten Nachbedingung des aktuellenAlgorithmus überein: ein verschiebbarer Quantor, dessen Variable von keiner anderenVariablen abhängt, befindet sich direkt hinter seiner Verschiebungsgrenze, wobei sich weitereverschiebbare Quantoren zwischen ihm <strong>und</strong> seiner Verschiebungsgrenze befinden dürfen.• Ist die von einem context-Quantor q1 geb<strong>und</strong>ene Variable von anderen Variablen abhängig,so befindet sich q1 an der frühestmöglichen Position hinter seiner Verschiebungsgrenze <strong>und</strong>allen Quantoren, die Variablen binden, von denen die von q1 geb<strong>und</strong>ene Variable abhängt.• Befand sich ein context-Quantor q1 im ursprünglichen <strong>ODL</strong>-Ausdruck hinter einem anderencontext-Quantor q2, so darf sich q1 in der umgeformten <strong>ODL</strong>-Abfrage nur dann vor q2 befinden,falls q2 hinter einem Quantor q steht, von dessen Variablen die Variable von q2 abhängig<strong>und</strong> die Variable von q1 unabhängig ist (q ist dabei kein forall-Quantor).Diese Bedingung gewährleistet, dass die ursprüngliche Reihenfolge der verschiebbaren Quantorenuntereinander soweit wie möglich beibehalten wird.Der wesentliche Unterschied zu dem jetzigen Algorithmus besteht also darin, dass ein context-Quantor q1, dessen Variable von anderen Variablen abhängt, nicht mehr zwingend an seiner Stellenbleiben muss, sondern bis zu einer früheren Position vorgezogen werden kann, die sich hinter allenQuantoren befindet, von deren Variablen die Variable von q1 abhängt.Der Algorithmus 1 nimmt die Umformung einer <strong>ODL</strong>-Abfrage bezüglich der Positionen verschiebbarerQuantoren vor, sodass die oben aufgezählten Nachbedingungen nach der Ausführung desAlgorithmus gelten.Algorithmusidee:Verschiebbare Quantoren können nur zwischen zwei Verschiebungsgrenzen bewegt werden, weilkein verschiebbarer Quantor über eine Verschiebungsgrenze hinweg bewegt werden kann. DieHauptschleife des Algorithmus ruft deshalb für jede Verschiebungsgrenze in der Abfrage (außerder letzten, die entweder das Ende der Abfrage oder ein am Ende der Abfrage stehender forall-Quantor ist) eine innere Schleife auf, die verschiebbare Quantoren innerhalb des Intervalls zwischender betrachteten <strong>und</strong> der nachfolgenden Verschiebungsgrenze neu positioniert.Die innere Schleife betrachtet jeden verschiebbaren Quantor zwischen der aktuellen <strong>und</strong> dernächsten Verschiebungsgrenze: zunächst wird der Quantor nach vorne verschoben, bis er auf dieVerschiebungsgrenze oder auf einen Quantor trifft, von dessen Variablen er abhängig ist. Befindetsich nach dieser Stelle eine Gruppe verschiebbarer Quantoren, so wird der betrachtete verschiebbareQuantor zurück hinter diese Gruppe verschoben, jedoch nicht weiter als an seine ursprünglichePosition. Damit wird gewährleistet, dass die Reihenfolge verschiebbarer Quantoren in Bezugaufeinander soweit wie möglich erhalten bleibt.Solange dieser Optimierungsvorschlag nicht implementiert ist, kann seine Wirkung vom Benutzerdurch gezielte Positionierung von context-Quantoren nachgeahmt werden. So würde in deraktuellen Version des <strong>ODL</strong>-Übersetzers die Abfrage 6.1 nicht umgeformt <strong>und</strong> der Quantor contextsubComp nicht vor den Quantor exists port vorgezogen. Dies führt dazu, dass für jeden Portder context-Eingabedialog für die Variable subComp gestartet wird, obwohl dies nur für jedeBelegung von comp, nicht aber für jede Belegung von port nötig ist. Der Benutzer kann hier dieAbfrage explizit so umformulieren, wie dies auch von dem vorgestellten Positionierungsalgorithmusgeleistet würde:context comp:Component.context subComp:element( comp.SubComponents ).(6.2)exists port:Port. true

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!