TXL es un lenguaje de programación de propósito especial diseñado originalmente por Charles Halpern-Hamu y James Cordy en la Universidad de Toronto en 1985. El acrónimo "TXL" originalmente significaba "Turing eXtender Language" después del propósito original del lenguaje, la especificación y la creación rápida de prototipos. de variantes y extensiones del lenguaje de programación de Turing , pero ya no tiene ninguna interpretación significativa.
Paradigma | Coincidencia de patrones y reescritura de términos |
---|---|
Diseñada por | Charles Halpern-Hamu James Cordy |
Desarrollador | James Cordy Charles Halpern-Hamu Ian Carmichael Eric Promislow |
Sitio web | www |
El TXL moderno está diseñado específicamente para crear, manipular y crear rápidamente un prototipo de descripciones, herramientas y aplicaciones basadas en el lenguaje mediante la transformación de fuentes. Es un lenguaje híbrido funcional / basado en reglas que utiliza programación funcional de primer orden en el nivel superior y reescritura de términos en el nivel inferior. La semántica formal y la implementación de TXL se basan en la reescritura formal de términos , pero las estructuras de términos están en gran parte ocultas al usuario debido al estilo de especificación de patrones similar a un ejemplo.
Cada programa TXL tiene dos componentes: una descripción de las estructuras de origen que se van a transformar, especificadas como una gramática libre de contexto (posiblemente ambigua) utilizando un formulario Backus-Naur extendido ; y un conjunto de reglas de transformación de árboles, especificadas usando pares patrón / reemplazo combinados usando programación funcional de primer orden. TXL está diseñado para permitir al programador un control explícito sobre la interpretación, aplicación, orden y retroceso de las reglas de análisis y reescritura, lo que permite la expresión de una amplia gama de técnicas basadas en la gramática, como el análisis ágil.
El primer componente analiza la expresión de entrada en un árbol mediante la coincidencia de patrones . El segundo componente utiliza la reescritura de términos de una manera similar a Yacc para producir la salida transformada.
TXL se utiliza con mayor frecuencia en tareas de análisis y reingeniería de software, como la recuperación de diseños , y en la creación rápida de prototipos de nuevos lenguajes y dialectos de programación.
Ejemplos de
BubbleSort [1]
% Especificación de sintaxisdefinir programa [repetir número]fin de definir
% Reglas de transformaciónregla principal reemplazar $ [repetir número] N1 [número] N2 [número] Descanso [número repetido] dónde N1 [> N2] por N2 N1 Descansoregla final
Factorial [2]
% Especificación de sintaxisdefinir programa [número]fin de definir
% Reglas de transformaciónfunción principal reemplazar [programa] p [número] por p [hecho] [hecho0]función final
hecho de función reemplazar [número] n [número] construir nMinusOne [número] n [- 1] dónde n [> 1] construir factMinusOne [número] nMinusOne [hecho] por n [* factMinusOne]función final función fact0 reemplazar [número] 0 por 1función final
Ver también
Referencias
- JR Cordy, CD Halpern y E. Promislow, 1991. TXL: Un sistema de creación rápida de prototipos para dialectos del lenguaje de programación. Computer Languages 16,1 (enero de 1991), 97-107.
- JR Cordy, 2006. El lenguaje de transformación de fuente TXL. Science of Computer Programming 61,3 (agosto de 2006), 190-210.