Articulo de referencia

TTM (lenguaje de programación)

TTM es un lenguaje de programación de macroprocesamiento de propósito general , orientado a cadenas de caracteres, desarrollado en 1968 por Steven Caine y E. Kent Gordon en el I...

TTM es un lenguaje de programación de macroprocesamiento de propósito general , orientado a cadenas de caracteres, desarrollado en 1968 por Steven Caine y E. Kent Gordon en el Instituto Tecnológico de California .

Descripción

La siguiente descripción se ha tomado del manual de referencia TTM original [ 1 ] y de la extensión posterior para el procesamiento por lotes. [ 2 ]

TTM es un lenguaje interpretativo recursivo diseñado principalmente para la manipulación de cadenas, la edición de texto, la definición y expansión de macros y otras aplicaciones generalmente clasificadas como programación de sistemas . Se deriva de GAP [ 3 ] y GPM [ 4 ] .

Inicialmente, TTM se planeó como la parte de procesamiento de macros de un ensamblador para el IBM System/360 y se diseñó para superar las restricciones e inconsistencias que existían en los ensambladores estándar para ese sistema. [ 5 ] [ 6 ]

TTM fue diseñado para tener toda la potencia de los ensambladores macro generales anteriores, pero sin las desafortunadas dificultades sintácticas y semánticas. [ 7 ] [ 8 ] [ 9 ] [ 10 ]

Durante el desarrollo de TTM, se hizo evidente que existían otras aplicaciones además del procesamiento de macros en lenguaje ensamblador. Estas incluyen la edición de datos, la manipulación de texto, la compilación de expresiones y el procesamiento de macros para procesadores de lenguaje distintos de los ensambladores.

La versión inicial de TTM se implementó para ejecutarse de manera conversacional bajo el sistema básico de tiempo compartido de Caltech para el IBM System/360 Modelo 50. [ 11 ] Se han escrito otras versiones para ejecutarse en el entorno de procesamiento por lotes de OS/360 y para operar delante o junto con varios procesadores de lenguaje.

Sintaxis y semántica

La implementación de referencia asume que TTM recibe un archivo de texto que contiene una combinación de texto normal y llamadas a funciones TTM (es decir, invocaciones). El texto se analiza carácter por carácter. El texto normal se pasa a la salida sin modificaciones (excepto los caracteres de escape ). Si se encuentra una función TTM, se recopila y se ejecuta.

La forma general de una llamada a una función TTM es la siguiente:

#<nombrefunción;arg1;arg2;...;argn> 

donde el nombre de la función y los argumentos son cadenas de caracteres arbitrarias que no contienen caracteres especiales: '#', '<', '>' y ';'. La función se invoca con los argumentos especificados y el texto resultante se inserta en el texto original en lugar de la llamada a la función. Si la llamada a la función está precedida por un solo carácter '#', el escaneo se reanudará justo antes del texto insertado por la llamada a la función.

Esto se denomina invocación activa .

Si la llamada a la función va precedida de dos caracteres '#', el escaneo se reanuda justo después del texto insertado. Esto se denomina invocación pasiva .

Durante la recopilación de una llamada a una función, pueden encontrarse llamadas a funciones adicionales, por ejemplo esta:

#<nombrefunción;arg1;#<f2;arg;...>;...;argn> 

La llamada a la función anidada se invocará cuando se encuentre y el resultado se insertará en el texto de la llamada a la función externa y el escaneo de la llamada a la función externa se reanuda en el lugar indicado por el número de caracteres '#' que preceden a la llamada anidada.

Si una función requiere, por ejemplo, dos argumentos, los argumentos adicionales se ignoran. En el caso de funciones definidas por el usuario, si se proporcionan muy pocos argumentos, se añaden argumentos adicionales con el valor de la cadena vacía (""). Una función puede tener un máximo de 62 argumentos.

Al igual que en otros lenguajes de programación aplicativa , una función TTM puede ser recursiva y definirse como el resultado de la invocación de una secuencia de llamadas a otras funciones.

Las funciones pueden ser integradas o definidas por el usuario . Existe un gran número de funciones integradas que se definen en el manual de referencia de TTM [ 1 ].

Definición de función

Las funciones definidas por el usuario se crean utilizando las dos funciones integradas siguientes.

  • #<ds;nombre;texto>
  • #<ss;nombre;texto1;texto2...;texton>

La primera función, ds (define string), define una cadena con nombre en el diccionario TTM. El nombre es "name" y su valor es "text". Al invocar esta cadena con nombre, su invocación se reemplazará por el valor (es decir, "text").

La segunda función, ss (de "cadena de segmento"), analiza el texto de una cadena previamente definida en busca de ocurrencias de sus argumentos: texto1, texto2, ... texton. Cuando se encuentra una ocurrencia, se reemplaza con una marca de segmento . Todas las ocurrencias de cada argumento se reemplazan con la misma marca de segmento.

Cuando se invoca una cadena segmentada, cada argumento de la llamada se sustituye por la marca de segmento correspondiente. Considere este ejemplo.

[01] #<ds;F;abcxxdefyy> [02] #<ss;F;xx;yy> [03] #<F;11;22> 

La cadena F está definida (línea 1) y su cuerpo "abcxxdefyy" se segmenta en las dos cadenas "xx" e "yy" (línea 2). Al invocarla (línea 3), devolverá el valor "abc11def22". En efecto, tenemos una función definida por el usuario, F, con dos argumentos.

Escapando

Es posible evitar uno o más caracteres utilizando cualquiera de dos convenciones.

  1. <...> escapar varios caracteres.
  2. @ escapar un solo carácter

Si una cadena está entre corchetes angulares (<...>), se analiza pero TTM no la interpreta. Durante el análisis, se eliminan los corchetes angulares externos (< y >). Si hay corchetes angulares anidados (<...>), se analizan, pero no se eliminan los corchetes angulares (< y >). Los corchetes deben estar equilibrados: el número de caracteres '<' debe ser igual al número de caracteres '>'.

La convención de escape '@' hace que el intérprete transmita tal cual el carácter que sigue a '@'. El '@' inicial se mantiene si está dentro de una secuencia de escape <...>, de lo contrario se elimina. Una de sus aplicaciones es permitir ocurrencias desequilibradas de los caracteres '<' o '>'.

Ejemplos

Ejemplo 1: Definición de función

El ejemplo más básico consiste en definir una función que sea útil para definir funciones adicionales. Esta función "meta" se llama def . Se escribe de la siguiente manera:

#<ds;def;<##<ds;name;<text>>;##<ss;name;subs>>> #<ss;def;name;subs;text> 

Podemos, por ejemplo, usar def para definir la cadena XX como 12345 y luego segmentar XX en 34 escribiendo esto.

#<def;XX;34;12345> 

La llamada

#<XX;0000> 

luego producirá la cadena "1200005".

La función def opera invocando a ds para definir el nombre de la función y el texto inicial en el diccionario TTM – XX en nuestro ejemplo.

Luego, el texto de la entrada del diccionario de XX se segmenta con respecto a cualquier argumento especificado: "34" en este caso.

Cuando se invoca XX, su argumento sustituye a la marca de segmento.

Ejemplo 2: Factorial

La función factorial se puede definir (usando la función ##<def> anterior) de la siguiente manera.

#<def;n!;N;<#<lt;N;2;1;<#<mu;N;#<n!;#<su;N;1>>>>>>> 

Observe que el cálculo interno (# < mu...) está escapado, por lo que solo se evaluará después de que se ejecute la función # < lt... y devuelva ese cálculo anidado como su resultado.

Un ejemplo de llamada sería este.

#<n!;3> 

y devolvería la cadena 6.

Véase también

Se desconoce la relación exacta entre TTM y TRAC. La documentación de TTM indica que se derivó de GAP [ 3 ] y GPM [ 4 ] . En cualquier caso, la descripción de las características de TRAC también se aplica a TTM. Sin embargo, al eliminar la distinción sintáctica entre funciones integradas y definidas por el usuario, TTM parece ser un lenguaje mucho más limpio.

Notas

  1. 1 2 Caine, SH; Gordon, EK (1968). "TTM: Un lenguaje interpretativo experimental". Instituto Tecnológico de California, Centro de Computación Willis H. Booth, Informe de Programación No. 7.{{cite web}}: Falta o está vacío |url=( ayuda ) Este artículo incorpora texto de esta fuente, que es de dominio público .Dominio público
  2. Caine, SH; Gordon, EK (mayo de 1969). "TTM: Un lenguaje de macros para el procesamiento por lotes". Instituto Tecnológico de California, Centro de Computación Willis H. Booth, Informe de Programación n.° 8.{{cite web}}: Falta o está vacío |url=( ayuda ) Este artículo incorpora texto de esta fuente, que es de dominio público .Dominio público
  3. 1 2 Farber, DJ, 635 Sistema de ensamblaje - GAP. Centro de computación de los laboratorios Bell Telephone (1964).
  4. 1 2 Strachey, C., Un generador de macros de propósito general. Comput J 8, 3(1965), pp. 225-241.
  5. IBM, Lenguaje ensamblador System/360, C28-6514-4, (1967).
  6. Caine, SH et al., Informe del Comité de Objetivos y Requisitos de los Sistemas, SHARE, 1965, págs. 29-40.
  7. Eastwood, DE y McIlroy, MD , Modificación del compilador de macros de SAP. Centro de computación de los Laboratorios Bell Telephone, 1959.
  8. McClure, RM, Descripción del ensamblador CODAPT, 1960.
  9. Caine, SH, Manual de referencia para el programa experimental de ensamblaje macro (XMAP) CIT 7090/7040. Instituto Tecnológico de California, Centro de Computación Willis H. Booth (1964).
  10. McIlroy, MD , Extensiones de macroinstrucciones de lenguajes de compilación. CACM 3, No. 4 (1960), 214-220.
  11. Caine, SH, et al., Un entorno operativo para la investigación en programación. Instituto Tecnológico de California, Centro de Computación Willis H. Booth, Informe de Programación n.° 1, 1967.

Referencias

  • Greenwald, ID y Kane, M, El sistema Share 709: Programación y modificación. JACM 6 No. 2 (1959). pp.  128–133.
  • Greenwald, ID, Manejo de macroinstrucciones. CACM 2, No. 11 (1959), 21-22.
  • Remington Rand, División UNIVAC, Programación Generalizada de UNIVAC. Filadelfia, 1957.
  • McIlroy, MD , Uso de instrucciones macro de SAP para manipular expresiones simbólicas. Centro de Computación de los Laboratorios Bell Telephone (1960).
  • Implementación de referencia para el lenguaje de programación TTM en GitHub .
Obtenido de " https://en.wikipedia.org/w/index.php?title=TTM_(programming_language)&oldid=1315828262 "