Programmtransformation - Program transformation

Eine Programmtransformation ist eine Operation, die ein Computerprogramm aufnimmt und ein anderes Programm generiert. In vielen Fällen muss das transformierte Programm in Bezug auf eine bestimmte formale Semantik semantisch äquivalent zum Original sein, und in weniger Fällen führen die Transformationen zu Programmen, die sich auf vorhersehbare Weise semantisch vom Original unterscheiden.

Während die Transformationen manuell durchgeführt werden können, ist es häufig praktischer, ein Programmtransformationssystem zu verwenden , das Spezifikationen der erforderlichen Transformationen anwendet. Programmtransformationen können als automatisierte Prozeduren spezifiziert werden, die Compilerdatenstrukturen (z. B. abstrakte Syntaxbäume ) modifizieren, die den Programmtext darstellen, oder sie können bequemer unter Verwendung von Mustern oder Vorlagen spezifiziert werden, die parametrisierte Quellcodefragmente darstellen.

Eine praktische Voraussetzung für Quellcode- Transformationssysteme ist, dass sie in der Lage sind, in einer Programmiersprache geschriebene Programme effektiv zu verarbeiten . Dies erfordert normalerweise die Integration eines vollständigen Frontends für die interessierende Programmiersprache, einschließlich Quellcode- Analyse , Erstellung interner Programmdarstellungen von Codestrukturen, Bedeutung von Programmsymbolen, nützlicher statischer Analysen und Regeneration von gültigem Quellcode aus transformierten Programmdarstellungen . Das Problem des Aufbaus und der Integration geeigneter Frontends für herkömmliche Sprachen ( Java , C ++ , PHP usw.) kann aufgrund der Komplexität solcher Sprachen ebenso schwierig sein wie der Aufbau des Programmtransformationssystems selbst. Um allgemein nützlich zu sein, muss ein Transformationssystem in der Lage sein, viele Zielprogrammiersprachen zu handhaben, und muss ein Mittel zum Spezifizieren solcher Frontends bereitstellen.

Eine Verallgemeinerung der semantischen Äquivalenz ist der Begriff der Programmverfeinerung : Ein Programm ist eine Verfeinerung eines anderen, wenn es in allen Anfangszuständen endet, für die das ursprüngliche Programm endet, und für jeden dieser Zustände wird garantiert, dass es in einem möglichen Endzustand für endet das ursprüngliche Programm. Mit anderen Worten, eine Verfeinerung eines Programms ist definierter und deterministischer als das ursprüngliche Programm. Wenn zwei Programme Verfeinerungen voneinander sind, sind die Programme äquivalent.

Siehe auch

Verweise

Externe Links