ML / I - ML/I

ML / 1 ( Macro Language / One ) es un potente procesador de macros de uso general .

Los usos típicos de ML / 1 incluyen:

  • editar, modificar, corregir o reformatear archivos de texto
  • traducir el código fuente de un lenguaje de programación a otro
  • actuar como un preprocesador de código fuente para permitir al usuario agregar nuevas formas sintácticas a un lenguaje de programación existente
  • apoyo a la parametrización del código fuente del programa (por ejemplo, un parámetro puede determinar si las declaraciones de depuración deben incluirse en el código fuente del programa que se pasa al compilador)

ML / 1 fue desarrollado en 1966 por Peter J. Brown como parte de una investigación de doctorado en la Universidad de Cambridge en Inglaterra.

En 1984, Robert D. Eager, uno de los colegas de Peter Brown en la Universidad de Kent , reescribió ML / I, primero en BCPL en 1981 y luego en C en 1984, lo que aumentó su portabilidad.

  • Tenga en cuenta que el nombre original de Peter Brown para el idioma era ML / I, donde (como en PL / I de IBM ) el último carácter es el número romano "I", no el número arábigo "1". Sin embargo, la mayoría de las implementaciones posteriores se han denominado ML / 1 (donde el último carácter es el número arábigo "1").

Desde entonces, ML / 1 se ha adaptado a muchas plataformas y sistemas operativos, incluidos VMS , MVS , MS-DOS , OS / 2 y UNIX . En sus implementaciones de ML / 1, Bob Eager ha agregado características y capacidades además de las especificadas originalmente en la tesis de Peter Brown.

Esa versión está disponible para múltiples plataformas a través del sitio web ML / 1, http://www.ml1.org.uk . El sitio web ML / 1 proporciona más información sobre ML / 1, así como documentación (que incluye un tutorial, una guía introductoria simple y un manual de usuario completo).

Aunque el número total de usuarios de ML / 1 en el mundo es pequeño, hay usuarios de ML / 1 en todo el mundo, y Bob ha mantenido correspondencia con usuarios de ML / 1 en los Estados Unidos, Canadá, Australia, Nueva Zelanda, Alemania, Holanda. e India.

En un artículo de 1976, Andrew S. Tanenbaum describe el uso de ML / I como compilador-compilador .

Visión general

ML / I acepta la entrada de forma completamente libre, tratando los datos como un flujo de bytes en lugar de una serie de líneas o registros. No requiere ningún indicador en particular para indicar una expansión de macro, lo que lo hace particularmente útil para procesar texto arbitrario. Los reemplazos de texto pueden ser simples (por ejemplo, PIG debe ser reemplazado por PERRO) o complejos (por ejemplo, reemplazar el elemento entre la tercera y la cuarta comas después del último punto, por el contenido de algún contador).

ML / I se utilizó para implementar varios elementos de software portátil, incluido él mismo. Originalmente se escribió en un lenguaje descriptivo especial y luego se asignó a un lenguaje adecuado para cada sistema de destino. Este mapeo se realizó utilizando ML / I mismo. Había dos formas diferentes de este lenguaje descriptivo; nivel alto y nivel bajo.

Después de este mapeo, ML / I se usó a menudo para implementar SIL (lenguajes de implementación del sistema, como C) para la nueva generación de miniordenadores de arquitectura de 16 bits .

Cómo funciona ML / 1

En los términos más básicos, así es como funciona ML / 1.

  • El usuario proporciona a ML / 1 un archivo que contiene el texto de entrada.
  • En otro archivo (o, opcionalmente, en el mismo archivo) el usuario proporciona un conjunto de macros ML / 1. Las macros le dicen al intérprete ML / 1 qué inserciones, eliminaciones, expansiones, traducciones y otras modificaciones el usuario desea que se realicen en el texto de entrada.
  • Cuando se ejecuta ML / 1 en el texto de entrada, ML / 1 sigue las instrucciones de las macros ML / 1, cambia el texto y escribe un nuevo archivo que contiene el texto modificado.

Características distintivas de ML / 1

Hay varias formas en las que ML / 1 es más poderoso que las simples utilidades de "escanear y reemplazar".

ML / 1 no procesa texto cadena de caracteres por cadena de caracteres; procesa el texto palabra por palabra (o, en la terminología de ML / 1, "átomo por átomo"). Para muchas aplicaciones, es extremadamente útil poder procesar un texto como una secuencia de átomos en lugar de una secuencia de caracteres. Supongamos, por ejemplo, que deseamos traducir un programa de un lenguaje de programación que tiene una sintaxis DO ... END, a un lenguaje que tiene una sintaxis BEGIN ... END. Por lo tanto, deseamos reemplazar "HACER" por "COMENZAR". Si reemplazamos con una utilidad de escaneo y reemplazo ordinario, todas las apariciones de la cadena "DO" se cambiarán a "BEGIN", incluyendo cualquier "DO" que esté incrustado en palabras como "DOCUMENTO" (que se convierte en "BEGINCUMENT"). Con ML / 1, por el contrario, esto no sucederá porque la cadena "DO" activará el reemplazo de texto solo cuando aparezca como una palabra (es decir, cuando esté precedida y seguida de delimitadores como espacios, tabulaciones, nuevas líneas, o caracteres de puntuación).

ML / 1, en lugar de operar línea por línea, reconoce patrones de texto que pueden ser bastante complejos, anidados, con múltiples delimitadores y que abarcan muchas líneas. ML / 1 puede, por ejemplo, procesar un patrón como el lenguaje de programación común IF ... THEN ... ELSE ... ENDIF estructura que abarca varias líneas y contiene texto incrustado que a su vez puede incluir un IF ... anidado ENTONCES ... ELSE ... Estructura ENDIF.

ML / 1 puede reconocer comentarios incrustados y citas literales y protegerlos de alteraciones. Las utilidades ordinarias de exploración y sustitución cambian las cadenas de forma indiscriminada, ya sea que aparezcan en el texto del programa como una palabra clave o un nombre de variable, incrustadas en un comentario o en un literal entre comillas.

Para lidiar con patrones tan complicados, ML / 1 necesita ser un lenguaje de programación por derecho propio. Al igual que otros lenguajes de programación, ML / 1 admite variables y declaraciones de asignación, GOTO y etiquetas, IF ... THEN pruebas y bucles. Estas características le dan a ML / 1 un grado inusual de potencia y flexibilidad.

Limitaciones

ML / 1 distingue entre mayúsculas y minúsculas, por lo que no admite el procesamiento de texto que no distingue entre mayúsculas y minúsculas.

Referencias

enlaces externos