Trasformazione del programma - Program transformation

Una trasformazione di programma è qualsiasi operazione che prende un programma per computer e ne genera un altro. In molti casi il programma trasformato deve essere semanticamente equivalente all'originale, relativo a una particolare semantica formale e in un numero minore di casi le trasformazioni risultano in programmi che differiscono semanticamente dall'originale in modi prevedibili.

Sebbene le trasformazioni possano essere eseguite manualmente, è spesso più pratico utilizzare un sistema di trasformazione del programma che applica le specifiche delle trasformazioni richieste. Le trasformazioni del programma possono essere specificate come procedure automatizzate che modificano le strutture dei dati del compilatore (ad es . Alberi di sintassi astratti ) che rappresentano il testo del programma, oppure possono essere specificate più convenientemente utilizzando modelli o modelli che rappresentano frammenti di codice sorgente parametrizzato.

Un requisito pratico per i sistemi di trasformazione del codice sorgente è che siano in grado di elaborare efficacemente programmi scritti in un linguaggio di programmazione . Ciò di solito richiede l'integrazione di un front-end completo per il linguaggio di programmazione di interesse, inclusa l' analisi del codice sorgente , la creazione di rappresentazioni interne del programma delle strutture del codice, il significato dei simboli del programma, utili analisi statiche e la rigenerazione del codice sorgente valido da rappresentazioni del programma trasformate . Il problema di costruire e integrare front-end adeguati per i linguaggi convenzionali ( Java , C ++ , PHP ecc.) Può essere di uguale difficoltà quanto la costruzione del sistema di trasformazione del programma stesso a causa della complessità di tali linguaggi. Per essere ampiamente utile, un sistema di trasformazione deve essere in grado di gestire molti linguaggi di programmazione di destinazione e deve fornire alcuni mezzi per specificare tali front-end.

Una generalizzazione dell'equivalenza semantica è la nozione di affinamento del programma : un programma è un raffinamento di un altro se termina su tutti gli stati iniziali per i quali termina il programma originale, e per ciascuno di tali stati è garantito che termini in un possibile stato finale per il programma originale. In altre parole, un perfezionamento di un programma è più definito e più deterministico del programma originale. Se due programmi sono perfezionamenti l'uno dell'altro, i programmi sono equivalenti.

Guarda anche

Riferimenti

link esterno