Articulo de referencia

Transformación de programas

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 s...

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 de maneras predecibles. [1]

Si bien las transformaciones se pueden realizar manualmente, a menudo resulta más práctico utilizar un sistema de transformación de programas que aplique especificaciones de las transformaciones requeridas. Las transformaciones de programas se pueden especificar como procedimientos automatizados que modifican las estructuras de datos del compilador (por ejemplo, árboles de sintaxis abstracta ) que representan el texto del programa, o se pueden especificar de manera más conveniente 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 eficazmente 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, incluyendo el análisis del código fuente , la construcción de representaciones internas del programa de las estructuras del código, el significado de los símbolos del programa, análisis estáticos útiles y la regeneración del código fuente válido a partir de representaciones del programa transformado. El problema de construir e integrar front-ends adecuados para lenguajes convencionales ( Java , C++ , PHP , etc.) puede ser tan difícil como 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 dichos front-ends.

Una generalización de la equivalencia semántica es la noción de refinamiento de programas : un programa es un refinamiento de otro si termina en todos los estados iniciales en 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 uno del otro, entonces los programas son equivalentes. [ Aclaración necesaria ]

Véase también

Referencias

  1. ^ Ward, Martin (1989). Prueba de refinamientos y transformaciones de programas (tesis de doctorado). Universidad de Oxford.{{cite book}}: Mantenimiento de CS1: falta la ubicación del editor ( enlace )
  • El Wiki de Transformación del Programa
  • Documentos sobre la teoría y la práctica de la transformación de programas
  • Bibliografía sobre tecnología de transformación
  • Kit de herramientas de reingeniería de software DMS : un sistema de transformación de programas para DSL y lenguajes informáticos modernos (C++, Java, ...) y heredados (COBOL, RPG)
  • Spoon: una biblioteca para analizar, transformar, reescribir y transpilar código fuente de Java. Analiza archivos fuente para crear un AST bien diseñado con una potente API de análisis y transformación.
  • JavaParser: La biblioteca JavaParser le proporciona un árbol de sintaxis abstracta de su código Java. La estructura AST le permite trabajar con su código Java de una manera programática sencilla.


Retrieved from "https://en.wikipedia.org/w/index.php?title=Program_transformation&oldid=1222972270"