Veinticinco a˜nos del Lenguaje REC

Anuncio
Veinticinco años del Lenguaje REC
Gerardo Cisneros∗
Departamento de Innovación, Dirección de Cómputo para la Investigación,
Dirección General de Servicios de Cómputo Académico,
Universidad Nacional Autónoma de México, Apartado postal 20-059,
01000 México, D.F., México
BITNET: CISNEROS@UNAMVM1†
Introducción
El lenguaje de programación REC (Compilador de Expresiones Regulares, por las siglas del nombre
en inglés, Regular Expression Compiler) es un lenguaje creado por H. V. McIntosh a partir de
la idea de “predicados operadores” cuya intención original era la de proporcionar un sustituto
estético al program feature introducido por McCarthy en LISP. El lenguaje resultante es un lenguaje
extremadamente conciso, y por la simplicidad de su estructura es relativamente fácil construir
diferentes versiones según el área de aplicación que se desee abordar.
En este artı́culo se describe la historia y la evolución de REC, desde su primer compilador para
una computadora DEC PDP-8 hasta la biblioteca configurable actual.
Estructura de REC
REC es un lenguaje extremadamente conciso, cuya sintaxis se puede describir en sólo dos renglones
con la notación extendida de Backus-Naur. En esta notación [Je85], el sı́mbolo “→” significa
“se define como”, la barra vertical denota alternativa, los paréntesis redondos agrupan dos o más
opciones y los corchetes, aparte de agrupar, denotan que se puede tomar cero o más instancias del
objeto encerrado. Con esto, un programa Prog REC y una expresión Expr REC se definen como:
Prog → Expr | “{”{Prog ν}Prog “}”
Expr → “(”{{Prog | π}(“:”|“;”)}{Prog | π}“)”
En esta definición, π es un predicado (un elemento de un conjunto que varı́a según la versión
particular de REC), ν es un nombre de subrutina (un solo carácter imprimible ASCII diferente de
“}” que se asigna como nombre al programa REC que le precede) y los caracteres entrecomillados
son literales.
En una versión tı́pica, los predicados π constan de una o dos letras, con excepción de unos pocos
predicados con estructura más compleja, p. ej., cadenas entrecomilladas o constantes decimales.
Los corchetes, los paréntesis, los dos puntos, el punto y coma y la alteración en el flujo de control
que puede inducir un predicado proporcionan a REC toda su estructura de control y lo hacen un
lenguaje recursivo y estructurado. REC ya era un lenguaje intrı́nsecamente estructurado desde antes
de que se inventara el término programación estructurada.
∗ Investigador
Nacional, en licencia de año sabático del Departamento de Aplicación de Microcomputadoras, Instituto de Ciencias, Universidad Autónoma de Puebla, Apartado postal 461, 72000 Puebla, Puebla, durante el año
académico 1991-92.
† Dirección actual gerardo@brozo.dgsca.unam.mx
1
El primer compilador: REC en la Universidad Nacional Autónoma de México
El primer compilador de REC fué escrito por McIntosh en 1966 como parte de las pruebas de
aceptación de la computadora DEC PDP-8 del Centro de Cálculo Electrónico de la UNAM [McI66].
El lenguaje fué construido sobre las idea de predicados operadores implantada en MBLISP [McI63],
que planteaba una alternativa al program feature de LISP que preservaba la naturaleza funcional
y recursiva del lenguaje, sin apelar a saltos y etiquetas (que eran una caracterı́stica del program
feature).
En esta versión no habı́a subrutinas y la sintaxis era más sencilla:
Expr → “(”{{Expr | π}(“:”|“;” )}{Expr | π}“)”
La idea de los predicados operadores era expresar programas en algo semejante a la forma
canónica de Shannon (disyunción de conjunciones): cada sucesión de predicados terminada por dos
puntos, punto y coma, o el paréntesis derecho se intenta ejecutar en su totalidad; si alguno de
los predicados resulta falso, la ejecución se interrumpe y continúa con la siguiente sucesión. La
iteración la causa el encuentro del sı́mbolo dos puntos, y la terminación se logra con el punto y
coma. Encontrar un paréntesis derecho causa que la expresión sea falsa, con lo cual se permite
expresar complementos de predicados.
El primer compilador sólo tenı́a cuatro predicados: leer un carácter del teletipo al acumulador,
escribir al teletipo el carácter del acumulador, cargar el acumulador con una constante, y probar la
igualdad del acumulador con una constante. (Sólo el último predicado podı́a ser falso; los primeros
tres siempre eran verdaderos, y por convención a los predicados siempre verdaderos se les llamó
operadores.) Este pequeño conjunto de predicados sirvió para mostrar la viabilidad del lenguaje,
y el compilador correspondiente es el que se describe en la primera publicación formal sobre el
lenguaje, [McI68].
Al poco tiempo se le agregaron predicados que permitı́an realizar operaciones aritméticas y
calcular funciones trigonométricas y trascendentales en notación polaca inversa, al actuar éstas
sobre números introducidos en una pila. También habı́a predicados para controlar la lectura y
escritura de caracteres de un teletipo, el despliegue de resultados en un osciloscopio, y para guardar
y recuperar resultados intermedios de un par de localidades auxiliares [Or67].
Un ejemplo de programa en esta versión es el siguiente:
([-2]J,([-2]K,
(VV*UU*+PPPP****VV*UU*[-1]*+V*U*[8]*P*[-1]*+
(N".W;" W;),V[.054]+K,!74!:;)
"←-W"↓WU[.08]+J,!50!:;);)
que graficaba a base de puntos y espacios la región limitada por la función r = 2 sin 4θ. Los sı́mbolos
←- y ↓ representan los caracteres de control para retorno de carro (CR) y avance de renglón (LF),
respectivamente.
Esta versión, REC-A (REC Aritmético), se utilizó en cursos de análisis numérico en la Escuela
Superior de Fı́sica y Matemáticas (ESFM) del IPN. La estructura de REC también fué estudiada
desde el punto de vista formal en la ESFM en los cursos de lógica matemática [McI67].
REC en el Instituto Politécnico Nacional
Una vez que se introdujo en la enseñanza el REC-A de la DEC PDP-8, el uso de REC se extendió
como notación para sistematizar cálculos manuales realizados con una calculadora de escritorio que
contaba con una pila: la Friden 132 [Or67, Ci68].
Con la disponibilidad de una computadora IBM 1130 en el Centro Nacional de Cálculo (CeNaC)
del IPN, se desarrolló una versión nueva de REC-A en forma de intérprete programado en Fortran
[Ci70]. En esta versión se introdujeron subrutinas, pero los programas no eran anidables, y los
2
nombres de las subrutinas se asignaban de los caracteres sobrantes del conjunto de predicados, de
modo que no habı́a un predicado que sirviera para llamar a una subrutina, sino que cada subrutina
quedaba agregada a REC-A, durante la ejecución, como un predicado nuevo.
Esta misma versión fué extendida en la IBM 1130 a REC-M, una versión matricial en la que
los operandos que entraban a la pila podı́an ser matrices cuadradas de dimensión hasta de 6×6,
vectores hasta de 6×1 o 1×6, o escalares. REC-M fué transportado a versiones con números reales y
complejos en la computadora CDC 3150 que se instaló en el CeNaC en 1968 [Ci69]. En estas versiones
la dimensión máxima para matrices habı́a subido a 10×10. Estos compiladores fueron utilizados
durante varios años en los cursos de análisis numérico de la ESFM, y con ellos se resolvı́an problemas
de cuadratura numérica, integración numérica de sistemas de ecuaciones diferenciales, solución de
sistemas de ecuaciones lineales y diagonalización de matrices, entre otros; el conjunto de predicados
permitı́a incluso obtener resultados graficados en la impresora de lı́neas. Un programa para resolver
un sistema de ecuaciones se podı́a escribir como (IOVIO*O;), donde I leı́a un dato y lo colocaba en
el tope de la pila, O escribı́a en la impresora el dato del tope, V invertı́a el tope si era una matriz o
dejaba su recı́proco si era un escalar, y * multiplicaba el elemento siguiente al tope por el dato del
tope, dejando el producto en lugar de ambos.
En la misma IBM 1130 y con base en el compilador escrito en Fortran, McIntosh escribió una
versión para estudiar numéricamente ecuaciones diferenciales de segundo orden (REC/SECO, utilizada en cursos de análisis numérico y mecánica clásica y cuántica), y una versión simbólica para
los cursos de lógica matemática, REC/Markov, con la que se escribió además un editor de texto,
aplicación desconocida en aquel entonces en equipos como la IBM 1130.
Cuando la ESFM adquirió una computadora DEC PDP-8I, REC volvió a ser implantado en ésta
máquina, en la versión REC/Markov.
Con la experiencia adquirida al utilizar las versiones de la IBM 1130, la CDC 3150 y la DEC
PDP-8, varios estudiantes de la ESFM escribieron sus tesis sobre compiladores de REC desarrollados
para otras máquinas u otras aplicaciones:
• REC para el despliegue y manipulación visual en una computadora DEC PDP-15, de datos
generados por una computadora DEC PDP-10 y transmitidos por un canal de alta velocidad
[Ga71].
• REC/Markov en lenguaje ensamblador para la computadora CDC-6400 [Va71].
• REC con un conjunto de predicados para análisis estadı́sticos, en la computadora IBM 1130
[Se75].
• Adaptación del REC de 64 predicados [Ga75] de la computadora DEC PDP-10 a la computadora
DEC PDP-8 [Sa78].
• Versión para captura, almacenamiento, procesamiento estadı́stico y representación visual de
señales neurofisiológicas, en tiempo real, desarrollada en un sistema DEC PDP-12 (combinación de DEC LINC y DEC PDP-8) [Go83].
La versión matricial para la CDC 3150 fué reimplantada en la computadora Cyber 72 en 1978
[Ci78], y tomando su compilador como base se desarrolló en la Escuela Superior de Ingenierı́a
Mecánica y Eléctrica del IPN una versión para análisis y diseño de filtros digitales de respuesta
finita al impulso unitario [Ga85].
REC en el Instituto Nacional de Energı́a Nuclear
Luego de las versiones arimética y matricial de REC de principios de los años 70, el siguiente avance
en REC ocurrió cuando C. Garcı́a-Jurado implantó una versión con 64 predicados en la DEC PDP10 del entonces Instituto Nacional de Energı́a Nuclear (INEN) [Ga75]. Esta versión estaba escrita
en ensamblador y podı́a invocarse como subrutina desde programas en Fortran. Contaba con un
predicado para compilar y ejecutar otros programas en REC al momento de la ejecución, de modo que,
con los predicados de REC/Markov, sirvió para construir programas que validaran datos leı́dos por
programas en Fortran, y para ofrecer una interfaz interactiva amigable a los usuarios de programas
escritos también en Fortran. Incluso el programa de la nómina del INEN se benefició con estas
aplicaciones de REC.
3
El mecanismo para definición de subrutinas cambió; en lugar de ocupar el mismo espacio de
nombres que el conjunto base de predicados, como en la IBM 1130, se introdujo un predicado
compuesto @ν, que invocaba a la subrutina identificada con el nombre ν. La sintaxis de REC era
ahora
Prog → {Expr“@”ν} Expr“$”
Expr → “(”{{Expr | π}(“:”|“;”)}{Expr | π}“)”
donde el programa principal era la expresión terminada con el signo “$”.
Otros procesos computacionales cientı́ficos y técnicos en el INEN requerı́an un despliegue gráfico,
y la arquitectura de la DEC PDP-10 era tal que el uso de una graficadora directamente conectada
deterioraba notablemente la respuesta del sistema. Para resolver este problema, Garcı́a-Jurado
escribió una versión con predicados para controlar un despliegue gráfico vectorial conectado a una
DEC PDP-15 [Ga71]. Los programas en esta versión podı́an recibir datos de la DEC PDP-10 por
un canal de alta velocidad, y luego de desplegarlos, podı́an realizar transformaciones de la imagen,
como rotaciones, traslaciones y escalamientos.
También en el INEN se construyó una versión de REC para la computadora DEC PDP-11 [Lo75],
con un conjunto de predicados semejante al de la computadora DEC PDP-10, que posteriormente
sirvió como base para que W. López y S. Bermúdez desarrollaran REC en Industrias Digitales para
la microcomputadora IMSAI, basada en el microprocesador 8080, en la época en que las microcomputadoras acababan de aparecer en el mercado (fines de los años 70) y prácticamente no habı́a
lenguajes de alto nivel para ellas. Esta versión de REC tuvo al menos una aplicación comercial: con
ella se construyó un sistema administrativo para el Jockey Club.
REC en la Universidad Autónoma de Puebla
Con la experiencia adquirida en el uso de REC en la DEC PDP-10, al poco tiempo de llegar a Puebla,
McIntosh escribió un documento de 63 páginas [McI76] en el que definió las bases mı́nimas para REC,
tanto en su estructura como en los conjuntos de predicados necesarios para expresar dos modelos
de computación (los algoritmos de Markov [Ma54] y los sistemas de Post [Po43, Po46]), y sentó
las bases de una versión de REC adecuada para la compilación de Convert (lenguaje originalmente
desarrollado como intérprete en LISP [Gu65, Gu66]), lo que guió el desarrollo posterior del lenguaje.
El resultado fué que se escribieron compiladores de REC para una variedad de máquinas y microprocesadores:
• IBM 1130. Una versión en lenguaje ensamblador, a base de macros que pudieran transportarse
a otras máquinas. Con esta versión se escribieron, entre otros programas, ensambladores
cruzados para los microprocesadores Motorola 6800 e Intel 8080.
• DEC PDP-8. En esta versión se resolvió el problema del lı́mite de una página de memoria que
tenı́an los programas de versiones anteriores. También se escribió con este REC un ensamblador
cruzado para el microprocesador Intel 8080, y Alberto Licona escribió con el mismo REC un
intérprete de LISP con el que se podı́an correr todos los ejemplos de las notas de J. Barberán
[Ba63]
• Alpha-Micro. Una versión similar en su conjunto de predicados a la de la DEC PDP-10
fué construida y utilizada por A. Licona para desarrollar ROS (REC Operating System), una
multitud de programas en REC que incluı́a un intérprete de órdenes y utilerı́as para el uso y
administración de computadoras Alpha-Micro, entre otras, editores, ensambladores y compiladores [Li81]. Este sistema se utilizó en apoyo a las actividades de computación administrativa
de la Universidad Autónoma de Puebla (UAP).
• Intel 8080 y Motorola 6800. Compiladores de REC que reproducı́an en términos generales
el conjunto de predicados de la versión para la DEC PDP-10, utilizados en una diversidad
de cursos del programa de la Licenciatura en Ciencias de la Computación de la Escuela de
Ciencias Fı́sico-Matemáticas (ECFM) de la UAP.
4
Todos estos compiladores seguı́an esencialmente la sintaxis establecida para el REC de la DEC
PDP-10 y se desarrollaron en los primeros años de las microcomputadoras. El desarrollo de REC
en el microprocesador Intel 8080 con miras a contar con una herramienta capaz de compilar Convert requirió el cambio en la sintaxis que permitió anidar programas con subrutinas, utilizando un
mecanismo dinámico para la activación de éstas. REC80, escrito en lenguaje ensamblador para el
microprocesador Intel 8080 bajo el sistema operativo CP/M, cuenta con una selección de predicados
que operan sobre cuatro estructuras de datos: una pila para números, cadenas y direcciones, un área
de trabajo para inserciones, borraduras y búsquedas de texto, un arreglo para definiciones de subrutinas y almacenamiento de direcciones, y el área de compilación [Gi84, McI85]. Este compilador
fué extendido para incorporar aritmética de punto flotante y transportado a los microprocesadores
de la familia Intel 8086 (bajo CP/M y MS-DOS) y Motorola MC68000 (bajo el sistema operativo
UNIX) [Ci86a, Ci86b, McI90].
Además de cumplir su propósito de servir como base para escribir un compilador de Convert
[Ci85, McI90], REC80 y sus sucesores, REC86 y REC68 han sido y siguen siendo utilizados en una
variedad de cursos de la Licenciatura en Ciencias de la Computación de la ECFM de la UAP. Entre
otras aplicaciones, con una combinación de programas de REC y Convert se escribió un paquete
para el estudio de autómatas finitos e infinitos [Ci89], utilizado en cursos de lógica matemática de
la ECFM.
El compilador más reciente de REC [Ci91] no es una versión especı́fica; es una biblioteca de
funciones que permite al usuario asignar sus propias definiciones a los predicados que requiera su
aplicación. Las funciones más importantes son rec c y rec x. La función rec c tiene como argumentos un programa en REC, un arreglo en el cual se coloca el código generado y una tabla que
indica, para cada sı́mbolo imprimible ASCII, el tipo de compilación (operador—predicado siempre
verdadero—, predicado, carácter de control, etc.) que le corresponde y la función que realiza la operación asociada. La función rec x ejecuta el programa REC cuyo código se encuentra en el arreglo
especificado como argumento. La biblioteca ha sido utilizada para darle una gran flexibilidad a las
interfaces de programas para estudios de autómatas celulares lineales [McI91a], de cálculo de trayectorias de una partı́cula cargada en el campo de dos centros cargados eléctrica y magnéticamente
[McI91b], y para el control de una tablilla especial para evoluciones de autómatas celulares [McI91c].
La biblioteca funciona bajo los sistemas operativos MS-DOS y UNIX.
Conclusión
REC ha prestado un servicio útil en las instituciones en donde han existido compiladores. Tal vez
no se haya difundido más por lo conciso, casi crı́ptico de su notación. No obstante, es un lenguaje
estructurado y fácil de usar, que por lo conciso puede integrarse a otros programas y proporcionarle
programabilidad a sus interfaces interactivas.
Todos los compiladores recientes (de REC80 en adelante) se pueden obtener del autor en el
Departamento de Aplicación de Microcomputadoras del Instituto de Ciencias de la UAP, y, durante
el año académico Septiembre de 1991 a Agosto de 1992, en la Dirección General de Servicios de
Cómputo Académico de la UNAM; sólo se requiere proporcionar los discos magnéticos suficientes
para contener las versiones que se soliciten.
Agradecimientos
El autor agradece al Dr. Harold V. McIntosh, al M. en C. Carlos Garcı́a-Jurado M. y al Dr. Cristóbal
Vargas J. los documentos históricos y los comentarios que le proporcionaron sobre el desarrollo de
REC en épocas e instituciones en las que no participó.
5
Referencias
[Ba63]
[Ci68]
[Ci69]
[Ci70]
[Ci78]
[Ci85]
[Ci86a]
[Ci86b]
[Ci89]
J. Barberán, “LISP functions to calculate derivatives and Poisson brackets,” Program
Note # 3, Quantum Theory Project, University of Florida (Feb 1963)
G. Cisneros S., “Programación en REC/F de una calculadora electrónica Friden 132,”
Nota de Programa # 7, Escuela Superior de Fı́sica y Matemáticas, Instituto Politécnico
Nacional (Ene 1968)
G. Cisneros S., “REC CDC-3150,” (listados) Escuela Superior de Fı́sica y Matemáticas,
Instituto Politécnico Nacional (Abr 1969, Jul 1970)
G. Cisneros, “A FORTRAN coded Regular Expression Compiler for the IBM 1130 Computing System,” Acta Mex. Cienc. Tecnol. 4, 1 (Ene-Abr), 30–86 (1970)
G. Cisneros, “Compilador de Expresiones Regulares para el sistema Cyber 72 del IPN,”
Sección de Graduados, Escuela Superior de Ingenierı́a Mecánica y Eléctrica, IPN (1978)
G. Cisneros y H. V. McIntosh, “Introducción al lenguaje de programación Convert,” Acta
Mex. Cienc. Tecnol. 3, 9 (Ene-Mar 1985) 65–74. Se publicó una traducción al inglés en
SIGPLAN Notices 21, 4 (April 1986) 48–57.
G. Cisneros and H. V. McIntosh, REC and Convert compilers for MS-DOS, PC/Blue
library Vols. 211 and 212, New York Amateur Computer Club (1986); también en el disco
#MS29 de Micro Cornucopia.
G. Cisneros y H. V. McIntosh, “Notas sobre los lenguajes REC y Convert,” Departamento
de Aplicación de Microcomputadoras, Instituto de Ciencias, UAP, Puebla (1986)
Gerardo Cisneros y Harold V. McIntosh, “REC y Convert en la enseñanza de la Teorı́a de
Autómatas,” Memorias de la Quinta Conferencia Internacional Las Computadoras en las
Instituciones de Educación y de Investigación (México: Universidad Nacional Autónoma
de México y Unisys, 1989)
[Ci91]
Gerardo Cisneros “Biblioteca de REC para construcción de interfaces interactivas flexibles”, Memorias de la Séptima Conferencia Internacional Las Computadoras en las Instituciones de Educación y de Investigación (México: Universidad Nacional Autónoma de
México, INEGI y Unisys, 1991, en prensa)
[Ga71]
Carlos R. Garcı́a-Jurado M., “Un REC visual para la PDP-15 en comunicación con la
PDP-10,” Tesis de Licenciado en Fı́sica y Matemáticas, Instituto Politécnico Nacional
(1971)
C. R. Garcı́a-Jurado M., “RECSM,” Instituto Nacional de Energı́a Nuclear (1975)
[Ga75]
[Ga85]
[Gi84]
[Go83]
[Gu65]
[Gu66]
[Je85]
[Lo75]
Héctor S. Garcı́a Salas, “Desarrollo de un procesador REC para análisis y diseño de filtros
digitales FIR,” Tesis de Maestrı́a en Ciencias con especialidad en Ingenierı́a Electrónica,
Instituto Politécnico Nacional, México (1985)
Francisco Gil Z. y H. V. McIntosh, “REC,” Departamento de Aplicación de Microcomputadoras, Instituto de Ciencias, UAP, Puebla (1984)
J. Germán González Santos, “Diseño y desarrollo de un lenguaje de programación para
procesamiento de señales en tiempo real,” Tesis de Licenciado en Fı́sica y Matemáticas,
Instituto Politécnico Nacional (1983)
A. Guzmán, “CONVERT,” Tesis de Ingeniero en Comunicaciones y Electrónica, Instituto
Politécnico Nacional, México (1965)
A. Guzmán and H. V. McIntosh, “CONVERT,” Commun. ACM 9, 8 (August 1966) 604–
615.
K. Jensen, and N. Wirth, “Pascal User Manual and Report,” 3rd. edition, (New York:
Springer-Verlag, 1985) pp. 213–214.
W. S. López F. y R. Rojas, “REC/ARITMETICO PDP-10 y PDP-11/45,” Instituto
Nacional de Energı́a Nuclear (1975)
6
[Li81]
[Ma54]
[McI63]
[McI66]
[McI67]
[McI68]
[McI76]
[McI85]
[McI90]
A. Licona A., Listados de ROS, Instituto de Ciencias, Universidad Autónoma de Puebla
(1981)
A. A. Markov, “Theory of Algorithms,” Works of the Mathematical Institute “V. A.
Steklov,” Vol. 42, (Moscow: Academy of Sciences of the U.S.S.R., 1954) [Traducción al
inglés: The Israel Program for Scientific Translations; U. S. National Technical Information Service document No. TT60-51085]
H. V. McIntosh, “Operators for MBLISP,” Quantum Theory Project Program Note #9,
University of Florida (Jul 1963)
H. V. McIntosh, “Regular Expression Compiler Program Listing,” Centro de Cálculo
Electrónico, Universidad Nacional Autónoma de México (Oct 1966)
H. V. McIntosh, “Regular Expressions,” Notas para el curso de Lógica Matemática, Escuela Superior de Fı́sica y Matemáticas, Instituto Politécnico Nacional (1967) [Reeditadas
como capı́tulo 7 de H. V. McIntosh, “Notes on Mathematical Logic,” con correcciones y
adiciones por G. Cisneros, Instituto de Ciencias, Universidad Autónoma de Puebla (1990)]
H. V. McIntosh, “A CONVERT compiler of REC for the PDP-8,” Acta Mex. Cienc.
Tecnol. 2, 1 (Ene-Abr 1968), 33–43.
H. V. McIntosh, “REC” (notas), Universidad Autónoma de Puebla (1976)
H. V. McIntosh and G. Cisneros, REC and Convert compilers for CP/M, SIG/M Vols.
213, 214 and 215, Amateur Computer Group of New Jersey (Jan 1985)
H. V. McIntosh and G. Cisneros, “The programming languages REC and Convert,” SIGPLAN Notices 25, 7 (July 1990) 81–94.
[McI91a] H. V. McIntosh y G. Cisneros, “LCAU41,” Instituto de Ciencias, Universidad Autónoma
de Puebla (1991)
[McI91b] H. V. McIntosh, “TWOC,” Instituto de Ciencias, Universidad Autónoma de Puebla (1991)
[McI91c] H. V. McIntosh, “The CAM/PC exerciser CAMEX,” Instituto de Ciencias, Universidad
Autónoma de Puebla (1991)
[Or67]
[Po43]
[Po46]
[Sa78]
[Se75]
[Va71]
J. J. Ortiz Amezcua, “El lenguaje REC-A” (notas mimeografiadas), Escuela Superior de
Fı́sica y Matemáticas, Instituto Politécnico Nacional (1967)
E. L. Post, “Formal reductions of the general combinatorial decision problem,” Amer. J.
Math. 65, (1943) 197–268.
E. L. Post, “A variant of a recursively unsolvable problem,” Bull. Amer. Math. Soc. 52,
(1946) 264–268.
H. Saldaña A., “(REC:;) Compilador de Expresiones Regulares y algunas Aplicaciones,”
Tesis de Licenciado en Fı́sica y Matemáticas, Instituto Politécnico Nacional (1978)
J. M. Sesma, “REC Estadı́stico para la IBM 1130,” Tesis de Licenciado en Fı́sica y
Matemáticas, Instituto Politécnico Nacional (1975)
José Luis Varas-Araujo, “Compilador REC en lenguaje COMPASS para la computadora
CDC 6400,” Tesis de Licenciado en Fı́sica y Matemáticas, Instituto Politécnico Nacional
(1971)
7
Descargar