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.

104 KAPITEL 6: VERBESSERUNGSMÖGLICHKEITENAlgorithmus 1 Neupositionierung verschiebbarer QuantorenquantorList := Liste aller Quantoren aus der <strong>ODL</strong>-Abfrage in der Reihenfolge ihres Auftretensif not quantorList.isEmpty thenfirstQuantor := quantorList.first()co Markierungen für den Anfang <strong>und</strong> das Ende der <strong>ODL</strong>-Abfrage in quantorList einfügen ocquantorList.insertAsFirst( START_MARK )quantorList.insertAsLast( FINISH_MARK )elsefirstQuantor := nullend ifleftLimit := START_MARKco Hauptschleife ocwhile firstQuantor ≠ null doif Ein forall-Quantor ist hinter firstQuantor vorhanden thenrightLimit := Gef<strong>und</strong>ener nächster forall-Quantor hinter firstQuantorelserightLimit := FINISH_MARKend ifco Quantoren zwischen leftLimit <strong>und</strong> rightLimit neu positionieren ocquantor := quantorList.nextAfter( leftLimit )while quantor ≠ rightLimit doco Position für quantor finden ocposQuantor := quantorList.previousBefore( quantor )co Bis zur linken Verschiebungsgrenze oder bis zu einem Quantor zurückgehen, von dessen Variablenquantor.variable abhängig ist ocwhile posQuantor ≠ leftLimit and (quantor.variable ist von posQuantor.variable unabhängig) doposQuantor := quantorList.previousBefore( posQuantor )end whilenextPosQuantor := quantorList.nextAfter(posQuantor)co Wenn nach posQuantor eine Gruppe verschiebbarer Quantoren folgt, muss quantor ans Ende dieserGruppe verschoben werden, damit die Reihenfolge verschiebbarer Quantoren untereinander erhaltenbleibt, jedoch nicht weiter als an seine ursprüngliche Position ocwhile (nextPosQuantor ist ein verschiebbarer Quantor) and (nextPosQuantor ≠ quantor) donextPosQuantor := quantorList.nextAfter( nextPosQuantor )end whileco nextPosQuantor gibt nun den Quantor an, vor den quantor verschoben werden muss ocif nextPosQuantor ≠ quantor thenquantorList.remove( quantor )quantorList.insertBefore( nextPosQuantor, quantor ) co quantor vor nextPosQuantor in die Liste einfügenocend ifquantor := quantorList.nextAfter( quantor )end whileif (Nicht-forall-Quantoren hinter rightLimit in quantorList vorhanden) thenfirstQuantor := Erster Nicht-forall-Quantor hinter rightLimitleftLimit := quantorList.previousBefore( firstQuantor )elsefirstQuantor := nullend ifend whileco listQuantor enthält nun die optimierte Reihenfolge der Quantoren in der <strong>ODL</strong>-Abfrage oc

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!