Procesador de macros de propósito general

Procesador de macros que no está vinculado ni integrado con un lenguaje o pieza de software en particular.

Un macroprocesador de propósito general o preprocesador de propósito general es un macroprocesador que no está vinculado ni integrado con un lenguaje o pieza de software en particular.

Un procesador de macros es un programa que copia un flujo de texto de un lugar a otro, realizando un conjunto sistemático de reemplazos a medida que lo hace. Los procesadores de macros suelen estar integrados en otros programas, como ensambladores y compiladores. A veces son programas independientes que se pueden utilizar para procesar cualquier tipo de texto.

Los macroprocesadores se han utilizado para la expansión del lenguaje (definiendo nuevas construcciones del lenguaje que se pueden expresar en términos de componentes del lenguaje existentes), para reemplazos sistemáticos de texto que requieren toma de decisiones y para reformatear texto (por ejemplo, extracción condicional de material de un archivo HTML ).

Ejemplos de macroprocesadores de propósito general

NombreAñoDescripción
GPMDécada de 1960Uno de los primeros procesadores de macros fue GPM (elMacrogenerador de propósito general ).[1]Este fue desarrollado en la Universidad de Cambridge, Reino Unido, a mediados de la década de 1960, bajo la dirección deChristopher Strachey.
ML/yoDécada de 1960Un procesador de macros de propósito general particularmente importante fue (y sigue siendo) ML/I ( Macro Language One ). Fue desarrollado como parte de la investigación de doctorado por un posgraduado de Cambridge, Peter J. Brown. ML/I opera sobre un flujo de caracteres y no requiere un formato especial para su entrada ni caracteres especiales para introducir macros.
ETAPA 2Década de 1960Un contemporáneo de ML/I fue STAGE2, [2] parte del Sistema de Programación Móvil de William Waite . [3] Este también es un macroprocesador de propósito general, pero procesa la entrada una línea a la vez, haciendo coincidir cada línea con patrones específicos; es notable porque es independiente del conjunto de caracteres, y solo requiere que los dígitos 0-9 sean contiguos y en ese orden (una condición que no se cumple en algunos de los códigos de caracteres BCD y de 6 bits de la época).
M6Década de 1960Primer procesador de macros desarrollado en AT&T Bell Laboratories por Douglas McIlroy , Robert Morris y Andrew Hall. Recibió influencias de GPM y TRAC . Implementado en FORTRAN IV , [4] fue portado a la versión 2 de Unix .
SNOBOLDécada de 1960SNOBOL es un lenguaje de procesamiento de cadenas capaz de realizar la mayor parte del preprocesamiento que puede realizar un procesador de macros.
XPOPXPOP ​​fue otro intento de crear un lenguaje de procesamiento de macros general realizado por Mark Halpern en IBM en la década de 1960.
TTM1968TTM es un lenguaje recursivo e interpretativo diseñado principalmente para la manipulación de cadenas, edición de texto, definición y expansión de macros y otras aplicaciones generalmente clasificadas como programación de sistemas. Fue desarrollado en 1968 por Steven Caine y E. Kent Gordon en el Instituto Tecnológico de California . Se deriva, principalmente, de GAP [5] y GPM. [1]
BPFDécada de 1970Otro intento fue el GMP (General Macro Processor) desarrollado a mediados de los años 70 por M Boule en el departamento DLB/GC de la empresa CII siguiendo las ideas de RJ Chevance. Probado en asociación con la Universidad de Bordeaux I, la primera versión ejecutaba el sistema SIRIS8/IRIS80. Fue adaptado a los sistemas mini6 y fue el componente principal involucrado en la generación de sistemas para esta familia de computadoras. El procesador GMP utilizaba gramáticas C2-Chomsky para definir la sintaxis de las macros y utilizaba un lenguaje imperativo para ejecutar los cálculos y proceder a la expansión de las macros.
M41977m4 fue diseñado para Unix por Brian Kernighan y Dennis Ritchie .
ELENASoftware: práctica y experiencia , vol. 14, págs. 519–531, junio de 1984
gema1995gema es un procesador de macros contextual basado en la comparación de patrones, escrito por David N. Gray. Reemplaza/mejora el concepto de expresiones regulares por contextos. Los contextos corresponden aproximadamente a conjuntos de patrones con nombre. Como consecuencia, las macros en gema se parecen mucho a una descripción EBNF . [6]
PPP1996gpp es otro procesador de macros general escrito por Denis Auroux. Se parece a un preprocesador de C, pero tiene una semántica más general y permite una sintaxis personalizada (por ejemplo, se pueden definir scripts de tipo TeX , XHTML y Prolog ). [7]
M51999m5 es un macroprocesador de propósito general escrito por William A. Ward, Jr. A diferencia de muchos macroprocesadores, m5 no interpreta directamente su entrada. En su lugar, utiliza un enfoque de dos pasadas en el que la primera pasada traduce la entrada a un programa awk y la segunda pasada ejecuta el programa awk para producir la salida final.
Expansor de Py2011Pyexpander es un procesador de macros de propósito general basado en el lenguaje de programación Python . Además de la sustitución simple de macros, permite la evaluación de expresiones arbitrarias de Python y la ejecución de código Python, lo que hace que Pyexpander sea un procesador Turing completo . [8]
Ensamblador de texto2014Text Assembler es un procesador de texto/macro de propósito general basado en el lenguaje de programación JavaScript . Además de la simple sustitución de macros, permite evaluar expresiones arbitrarias de JavaScript y ejecutar código JavaScript. También puede cargar modelos de datos JSON para tareas de procesamiento de texto basadas en datos más complejas. [9]
PÁGINAS2016PP es un preprocesador de texto diseñado para Pandoc (y más generalmente para Markdown y reStructuredText). PP implementa: macros, programación literaria, GraphViz , diagramas PlantUML y ditaa, Bash, Cmd , PowerShell , scripts de Python y Haskell . [10]
minimacminimac es un procesador de macros minimalista de propósito general. Funciona como un filtro de flujo de caracteres, expandiendo recursivamente las macros a medida que las encuentra. Es inusual para un procesador de macros, ya que utiliza una pila de argumentos explícita y las funciones de usuario se definen por concatenación (similar al lenguaje Forth ). [11]
macro aa2017aa_macro es un lenguaje de procesamiento de texto basado en secuencias de caracteres de código abierto escrito en Python. El texto se procesa de izquierda a derecha y de adentro hacia afuera. Una selección de funciones integradas predefinidas proporciona mecanismos de procesamiento fundamentales que se pueden utilizar directamente o como elementos de estilos definidos por el usuario. El lenguaje es extensible por el usuario y está disponible wtfm, un contenedor de preparación de documentos basado en la web de código abierto para el lenguaje. [12] [13]

Véase también

Referencias

  1. ^ ab Strachey, Christopher (octubre de 1965). "Un macrogenerador de propósito general". Computer Journal . 8 (3): 225–241. doi : 10.1093/comjnl/8.3.225 .
  2. ^ Waite, William M. (julio de 1970). "El sistema de programación móvil: STAGE2". Comunicaciones de la ACM . 13 (7). Nueva York, NY, EE. UU.: ACM: 415–421. doi :10.1145/362686.362691.
  3. ^ Britten, Charles Randyl (26 de junio de 2020). "Traducción de código 8080 a 8086 - Traducción de Microsoft de código 8080 a 8086 y otros procesadores de 16 bits". Archivado desde el original el 23 de julio de 2021. Consultado el 28 de noviembre de 2021. Stage2 fue creado por el profesor William Waite en la Universidad de Colorado a finales de los años sesenta como un componente importante de su sistema de programación móvil, MPS. Stage2 utiliza un algoritmo de coincidencia de patrones para hacer coincidir las líneas de entrada de texto con un conjunto de plantillas. Cada plantilla es la primera línea de una macro y cuando se reconoce una coincidencia, el cuerpo del código de esa macro se procesa para producir texto de salida, mensajes de error o crear una línea construida que se envía para una mayor coincidencia de plantillas. Por lo tanto, el proceso es completamente recursivo y bastante potente en sus capacidades para la transformación de texto. De hecho, se puede utilizar para implementar un compilador de lenguaje de programación.
  4. ^ Cole, AJ (1981). Macro Processors (2.ª edición revisada). Archivo CUP. pág. 254.
  5. ^ Farber, DJ, 635 Sistema de ensamblaje - GAP. Centro de computación de los laboratorios Bell Telephone (1964).
  6. ^ "Gema". gema.sourceforge.net . Consultado el 21 de abril de 2017 .
  7. ^ "GPP". logological.org/gpp . Consultado el 21 de abril de 2017 .
  8. ^ "¡Bienvenido a la documentación de pyexpander! — Documentación de pyexpander 1.7.0". pyexpander.sourceforge.net . Consultado el 21 de abril de 2017 .
  9. ^ "akiwi - Text Assembler" (Akiwi: ensamblador de texto). www.akiwi.co.uk . Consultado el 21 de abril de 2017 .
  10. ^ Delord, Christophe. "PP - Un preprocesador genérico (con Pandoc en mente)". cdsoft.fr . Consultado el 17 de octubre de 2017 .
  11. ^ "minimac". freshmeat.net . Consultado el 21 de abril de 2017 .
  12. ^ "aa_macro" . Consultado el 24 de noviembre de 2017 .
  13. ^ "wtfm" . Consultado el 24 de noviembre de 2017 .
Obtenido de "https://es.wikipedia.org/w/index.php?title=Macroprocesador_de_propósito_general&oldid=1057648597"