Programmumwandlung

A Programmumwandlung ist jede Operation, die a dauert Computer Programm und generiert ein anderes Programm. In vielen Fällen muss das transformierte Programm sein semantisch äquivalent zum ursprünglichen, relativ zu einem bestimmten formelle Semantik Und in weniger Fällen führen die Transformationen zu Programmen, die sich semantisch auf vorhersehbare Weise vom Original unterscheiden.[1]

Während die Transformationen manuell durchgeführt werden können, ist es oft praktischer, a zu verwenden Programmtransformationssystem Dies gilt Spezifikationen der erforderlichen Transformationen. Programmtransformationen können als automatisierte Verfahren angegeben werden, die Compiler -Datenstrukturen ändern (z. Abstrakte Syntaxbäume) Darstellung des Programmtextes oder kann bequemer unter Verwendung von Mustern oder Vorlagen angegeben werden, die parametrisierte Quellcodefragmente darstellen.[2]

Eine praktische Voraussetzung für Quellcode Transformationssysteme sind, dass sie in der Lage sind, Programme effektiv zu verarbeiten, die in a geschrieben wurden Programmiersprache. Dies erfordert in der Regel die Integration eines vollständigen Front-Ends für die interessierende Programmiersprache, einschließlich Quellcode Parsing, Erstellen interner Programmdarstellungen von Codestrukturen, die Bedeutung von Programmsymbolen, nützlich Statische Analysenund Regeneration gültiger Quellcode aus transformierten Programmdarstellungen. Das Problem des Aufbaus und der Integration von angemessenen Frontenden für konventionelle Sprachen (Java, C ++, Php usw.) kann aufgrund der Komplexität solcher Sprachen gleich Schwierigkeiten haben, das Programmtransformationssystem selbst aufzubauen. Um allgemein nützlich zu sein, muss ein Transformationssystem in der Lage sein, viele Zielprogrammiersprachen zu verarbeiten und einige Mittel zur Angabe solcher Frontenden zu bieten.

Eine Verallgemeinerung der semantischen Äquivalenz ist der Begriff von Programmverfeinerung: Ein Programm ist eine Verfeinerung eines anderen, wenn es in allen Anfangszuständen, für die das ursprüngliche Programm endet, endet, und für jeden solchen Staat wird garantiert es in einem möglichen endgültigen Zustand für das ursprüngliche Programm enden. Mit anderen Worten, eine Verfeinerung eines Programms ist definierter und deterministischer als das ursprüngliche Programm. Wenn zwei Programme sich gegenseitig verfeinert, sind die Programme gleichwertig.[Klarstellung erforderlich]

Siehe auch

Verweise

  1. ^ Ward, Martin (1989). Nachweisungsprogrammverfeinerungen und Transformationen (DPHIL -These). Universität Oxford.
  2. ^ Pawlak, Renaud; Monperrus, Martin; Petitprez, Nicolas; Noguera, Carlos; Seinturier, Lionel (2016). "Löffel: Eine Bibliothek zur Implementierung von Analysen und Transformationen des Java -Quellcodes". Software: Übung und Erfahrung. 46 (9): 1155–1179. doi:10.1002/spe.2346.

Externe Links