Una transformación de programa es cualquier operación que toma un programa informático y genera otro. 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 ]
Aunque las transformaciones pueden realizarse manualmente, suele ser más práctico utilizar un sistema de transformación de programas que aplique especificaciones de las transformaciones requeridas. Las transformaciones de programas 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 bien pueden especificarse de forma más conveniente mediante patrones o plantillas que representan fragmentos de código fuente parametrizados. [ 2 ]
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 una interfaz completa para el lenguaje de programación de interés, incluyendo el análisis del código fuente , la construcción de representaciones internas de las estructuras del 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 las representaciones del programa transformadas. El problema de construir e integrar interfaces adecuadas 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 dichas interfaces específicas del lenguaje. [ 3 ] Spoon [ 4 ] es un ejemplo de una biblioteca de transformación de programas específica para Java que aborda este desafío al proporcionar una interfaz completa para Java, exponiendo una API basada en AST para implementar análisis y transformaciones de código fuente Java.
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 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 está más definido y es más determinista que el programa original. Si dos programas son refinamientos uno del otro, entonces son equivalentes.
Véase también
Referencias
- ↑ Ward, Martin (1989). Demostración de refinamientos y transformaciones de programas (tesis doctoral). Universidad de Oxford.
{{cite book}}: CS1 mantenimiento: falta el editor de ubicación ( enlace ) - ↑ Cordy, James R. (2006). "El lenguaje de transformación de código fuente TXL". Science of Computer Programming . 61 (3): 190– 210. doi : 10.1016/j.scico.2006.04.002 .
- ^ Bravenboer, Martín; Kalleberg, Karl Trygve; Vermaas, Rob; Visser, Eelco (2008). "Stratego/XT 0.17. Un lenguaje y un conjunto de herramientas para la transformación de programas". Ciencia de la programación informática . 72 ( 1– 2): 52– 70. doi : 10.1016/j.scico.2007.11.003 .
- ↑ Pawlak, Renaud; Monperrus, Martin; Petitprez, Nicolas; Noguera, Carlos; Seinturier, Lionel (2016). "SPOON: Una biblioteca para implementar análisis y transformaciones de código fuente Java". Software: Practice and Experience . 46 (9): 1155– 1179. doi : 10.1002/spe.2346 .
Enlaces externos
- Wiki de transformación del programa
- Artículos sobre teoría y 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 de programación modernos (C++, Java, ...) y heredados (COBOL, RPG).
- Spoon : Una biblioteca para analizar, transformar, reescribir y transcompilar código fuente Java. Analiza los archivos fuente para construir un AST bien diseñado con una potente API de análisis y transformación.
- JavaParser : La biblioteca JavaParser proporciona un árbol de sintaxis abstracta (AST) de su código Java. La estructura AST permite trabajar con el código Java de forma programática y sencilla.
- Transformación del programa
- Metaprogramación
- esbozos de informática
- Temas básicos de lenguajes de programación