Transformación del programa - Program transformation

Una transformación de programa es cualquier operación que toma un programa de computadora y genera otro programa. En muchos casos, se requiere que el programa transformado sea semánticamente equivalente al original, en relación con una semántica formal particular y, en menos casos, las transformaciones dan como resultado programas que difieren semánticamente del original en formas predecibles.

Si bien las transformaciones se pueden realizar manualmente, a menudo es más práctico utilizar un sistema de transformación de programa que aplique especificaciones de las transformaciones requeridas. Las transformaciones de programa pueden especificarse como procedimientos automatizados que modifican las estructuras de datos del compilador (por ejemplo, árboles de sintaxis abstracta ) que representan el texto del programa, o pueden especificarse más convenientemente utilizando patrones o plantillas que representan fragmentos de código fuente parametrizados.

Un requisito práctico para los sistemas de transformación de código fuente es que puedan procesar con eficacia programas escritos en un lenguaje de programación . Esto generalmente requiere la integración de un front-end completo para el lenguaje de programación de interés, incluido el análisis del código fuente , la construcción de representaciones de programas internos de estructuras de código, el significado de los símbolos del programa, análisis estáticos útiles y la regeneración de código fuente válido a partir de representaciones de programa transformadas. . El problema de construir e integrar interfaces adecuadas para lenguajes convencionales ( Java , C ++ , PHP , etc.) puede tener la misma dificultad que construir el propio sistema de transformación de programas debido a la complejidad de dichos lenguajes. Para ser ampliamente útil, un sistema de transformación debe poder manejar muchos lenguajes de programación de destino y debe proporcionar algún medio para especificar tales interfaces.

Una generalización de equivalencia semántica es la noción de refinamiento del programa : un programa es un refinamiento de otro si termina en todos los estados iniciales para los que termina el programa original, y para cada uno de esos estados se garantiza que terminará en un posible estado final para el programa original. En otras palabras, un refinamiento de un programa es más definido y más determinista que el programa original. Si dos programas son refinamientos entre sí, entonces los programas son equivalentes.

Ver también

Referencias

enlaces externos