Generierung lokaler Optimierungen - IPD Snelting
Generierung lokaler Optimierungen - IPD Snelting
Generierung lokaler Optimierungen - IPD Snelting
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
4 Implementierung<br />
kann. Existiert eine weiteres Muster m ′′ sowie eine weitere Regel m ′ → m ′′ , dann gilt<br />
analog, dass m ′′ vor m ′ erzeugt wurde woraus direkt folgt, dass m ′′ auch vor m erzeugt<br />
wurde. Ein Rekonstruktion von m durch eine zweite Regel ist also auch nicht möglich.<br />
Diese Überlegung lässt sich analog für drei oder mehr Regeln fortführen. Es ist jedoch<br />
nicht ausgeschlossen, dass eine Transformationsregel existiert, die auf ein Teilmuster von<br />
m ′ oder eines der folgenden Muster anwendbar ist und dadurch wieder das ursprüngliche<br />
Muster m erzeugt werden kann.<br />
Bei Transformationsregeln mit zwei strukturell identischen Mustern können definitiv<br />
Regelzyklen entstehen. Dies zeigen die Beispiele 1 und 2 zu Beginn dieses Abschnittes.<br />
Der Grund besteht darin, dass es für zwei strukturell identische Muster möglich ist, dass<br />
beide eine gemeinsame Teilmenge von spezielleren Mustern überdecken. Ein Muster m ′<br />
gilt gegenüber einem Muster m als spezieller, wenn m und m ′ strukturell identisch sind<br />
und m ′ von m überdeckt werden kann, nicht aber umgekehrt.<br />
Die Idee um dieses Problem zu lösen besteht darin, das Muster der linken Seite einer<br />
Regel r : rleft → rright mit zwei strukturell identischen Mustern rleft und rrigth derart<br />
einzuschränken, dass dieses zum einen nicht auf das Muster rright und zum anderen auch<br />
auf kein spezielleres Muster als rright angewendet werden kann. Variablen, Konstanten<br />
oder symbolische Konstanten, die nicht an einer<br />
Änderung durch die Regel beteiligt<br />
sind, stellen hierbei kein Problem dar. Sie tragen nicht dazu bei, dass durch die Anwendung<br />
der Regel eine andere Regel anwendbar wird, die nicht bereits zuvor anwendbar<br />
gewesen wäre. Ein Beispiel für eine solche Variable ist var0 aus Abbildung 4.30. Problematisch<br />
sind solche Knoten, die durch die Regel verändert werden, wie beispielsweise die<br />
symbolische Konstante sc0 aus Abbildung 4.30, die als Operand einer anderen Operation<br />
zugeordnet wird. Konstanten müssen bei der Prüfung auf die Anwendbarkeit einer Regel<br />
immer genau übereinstimmen, also auch denselben Wert besitzen. Stimmen Konstanten<br />
in der Regeldefinition hinsichtlich ihrer Position und ihres Wertes nicht überein, ist die<br />
entsprechende Regel auch nicht auf das Muster anwendbar, welches sich aus der Anwendung<br />
der Regel ergibt. Bleiben noch Variablen und symbolische Konstanten, die an<br />
einer Änderung durch die Regel beteiligt sind. Diese können auch Knoten mit anderen<br />
Typen überdecken. Um zu verhindern, dass zwei Muster eine gemeinsame Teilmenge<br />
von Mustern überdecken, werden nacheinander zunächst die Variablen und anschließend<br />
symbolische Konstanten, in der Reihenfolge ihrer Indizes auf ihren eigentlichen Typ beschränkt.<br />
D. h. eine Variable darf dann nur noch Variablen und symbolische Konstanten<br />
nur noch symbolische Konstanten bei der Anwendung einer Regel überdecken. Die Einschränkung<br />
wird sukzessive fortgeführt bis für ein Knotenpaar (v, v ′ ) gilt, dass v und<br />
v ′ keine gemeinsame Teilmenge von möglichen Knotentypen überdecken können, wobei<br />
v aus einem Muster m stammt und v ′ dem Knoten entspricht, der sich in einem zu<br />
m strukturell identischen Muster m ′ an derselben Position wie v befindet. In Abbildung<br />
4.30 wird dies bereits durch die Einschränkung von var1 erreicht. var1 aus Muster<br />
rleft kann nur noch Variablen überdecken, während sc0 nur Konstanten und symbolische<br />
Konstanten überdecken kann.<br />
64