SNOBOL
SNOBOL ("StriNg Oriented and symBOlic Language") es una serie de lenguajes de programación desarrollados entre 1962 y 1967 en AT&T Bell Laboratories por David J. Farber, Ralph E Griswold e Ivan P. Polonsky, culminando en SNOBOL4. Fue uno de varios lenguajes orientados a cadenas de texto desarrollados durante las décadas de 1950 y 1960; otros incluyeron COMIT y TRAC.
SNOBOL4 se distingue de la mayoría de los lenguajes de programación de su era por tener patrones como un tipo de datos de primera clase (es decir, un tipo de datos cuyos valores se pueden manipular de todas las formas permitidas para cualquier otro tipo de datos en el lenguaje de programación) y proporcionando operadores para la concatenación y alternancia de patrones. Los patrones SNOBOL4 son un tipo de objeto y admiten varias manipulaciones, al igual que los lenguajes orientados a objetos posteriores, como JavaScript, cuyos patrones se conocen como expresiones regulares. Además, las cadenas SNOBOL4 generadas durante la ejecución pueden tratarse como programas e interpretarse o compilarse y ejecutarse (como en la función eval de otros lenguajes).
SNOBOL4 se enseñó ampliamente en las universidades más grandes de EE. UU. a fines de la década de 1960 y principios de la de 1970 y se usó ampliamente en las décadas de 1970 y 1980 como lenguaje de manipulación de texto en las humanidades.
En las décadas de 1980 y 1990, su uso se desvaneció a medida que los lenguajes más nuevos, como AWK y Perl, pusieron de moda la manipulación de cadenas mediante expresiones regulares. Los patrones SNOBOL4 incorporan las gramáticas BNF, que son equivalentes a las gramáticas libres de contexto y más potentes que las expresiones regulares. Las "expresiones regulares" en las versiones actuales de AWK y Perl son, de hecho, extensiones de expresiones regulares en el sentido tradicional, pero las expresiones regulares, a diferencia de los patrones SNOBOL4, no son recursivas, lo que otorga una clara ventaja computacional a los patrones SNOBOL4. (Sin embargo, las expresiones recursivas aparecieron en Perl 5.10, lanzado en diciembre de 2007).
Los últimos lenguajes SL5 (1977) e Icon (1978) fueron diseñados por Griswold para combinar el retroceso de la coincidencia de patrones SNOBOL4 con una estructuración similar a ALGOL más estándar.
Desarrollo
SNOBOL1
El lenguaje SNOBOL inicial fue creado como una herramienta para ser utilizada por sus autores para trabajar con la manipulación simbólica de polinomios. Fue escrito en lenguaje ensamblador para IBM 7090. Tenía una sintaxis simple, solo un tipo de datos, la cadena, sin funciones, sin declaraciones y muy poco control de errores. Sin embargo, a pesar de su sencillez y su "personal" naturaleza su uso comenzó a extenderse a otros grupos. Como resultado, los autores decidieron ampliarlo y ordenarlo.
SNOBOL2
SNOBOL2 existía, pero era una versión de desarrollo intermedia de corta duración sin funciones definidas por el usuario y nunca se lanzó.
SNOBOL3
SNOBOL se reescribió para agregar funciones, tanto estándar como definidas por el usuario, y el resultado se publicó como SNOBOL3. SNOBOL3 se hizo bastante popular y otros programadores lo reescribieron para otras computadoras además de la IBM 7090. Como resultado, surgieron varios dialectos incompatibles.
SNOBOL4
A medida que SNOBOL3 se hizo más popular, los autores recibieron más y más solicitudes de extensiones para el idioma. También comenzaron a recibir quejas sobre incompatibilidades y errores en versiones que no habían escrito. Para abordar esto y aprovechar las nuevas computadoras que se introdujeron a fines de la década de 1960, se tomó la decisión de desarrollar SNOBOL4 con muchos tipos de datos y características adicionales, pero basado en una máquina virtual para permitir una mejor portabilidad entre computadoras. El traductor de lenguaje SNOBOL4 todavía estaba escrito en lenguaje ensamblador. Sin embargo, las funciones de macro del ensamblador se utilizaron para definir las instrucciones de la máquina virtual del SNOBOL Iidioma Lde implementación, el SIL. Esto mejoró mucho la portabilidad del lenguaje al hacer relativamente fácil portar la máquina virtual que albergaba al traductor al recrear sus instrucciones virtuales en cualquier máquina que incluyera un ensamblador de macros o, de hecho, un lenguaje de alto nivel.
El lenguaje independiente de la máquina SIL surgió como una generalización de las macros de manipulación de cadenas de Douglas McIlroy, que se utilizaron ampliamente en la implementación inicial de SNOBOL. En 1969, McIlroy volvió a influir en el lenguaje al insistir en la adición del tipo de tabla a SNOBOL4.
Características de SNOBOL4
SNOBOL es distintivo en formato y estilo de programación, que son radicalmente diferentes de los lenguajes de procedimiento contemporáneos como Fortran y ALGOL.
SNOBOL4 admite varios tipos de datos integrados, como números enteros y números reales de precisión limitada, cadenas, patrones, matrices y tablas (matrices asociativas), y también permite al programador definir tipos de datos adicionales y nuevas funciones. La función de tipos de datos definidos por el programador de SNOBOL4 se avanzó en ese momento: es similar a los registros de los lenguajes de programación COBOL anteriores y Pascal posteriores.
Todas las líneas de comando de SNOBOL tienen el formato
- etiqueta tema patrón = objeto : transferencia
Cada uno de los cinco elementos es opcional. En general, el sujeto se compara con el patrón. Si el objeto está presente, cualquier parte coincidente se reemplaza por el objeto mediante reglas de reemplazo. La transferencia puede ser una rama absoluta o una rama condicional dependiendo del éxito o fracaso de la evaluación del sujeto, la evaluación del patrón, la coincidencia del patrón, la evaluación del objeto o la asignación final. También puede ser una transferencia al código creado y compilado por el propio programa durante una ejecución.
Un patrón SNOBOL puede ser muy simple o extremadamente complejo. Un patrón simple es solo una cadena de texto (por ejemplo, "ABCD"), pero un patrón complejo puede ser una estructura grande que describe, por ejemplo, la gramática completa de un lenguaje informático. Es posible implementar un intérprete de lenguaje en SNOBOL casi directamente desde una expresión de forma Backus-Naur del mismo, con pocos cambios. La creación de un ensamblador de macros y un intérprete para una pieza de hardware completamente teórica podría tomar tan solo unos cientos de líneas, y se agrega una nueva instrucción con una sola línea.
Los patrones SNOBOL complejos pueden hacer cosas que serían poco prácticas o imposibles usando las expresiones regulares más primitivas que se usan en la mayoría de los otros lenguajes de comparación de patrones. Parte de este poder se deriva de las llamadas "extensiones SPITBOL" (que desde entonces se han incorporado básicamente en todas las implementaciones modernas del lenguaje SNOBOL 4 original), aunque es posible lograr la misma potencia sin ellos. Parte de este poder proviene de los efectos secundarios que es posible producir durante la operación de coincidencia de patrones, incluido el almacenamiento de numerosos resultados intermedios/tentativos de coincidencia y la capacidad de invocar funciones escritas por el usuario durante la coincidencia de patrones que pueden realizar casi cualquier procesamiento deseado. y luego influir en la dirección en curso que toma la coincidencia del patrón interrumpido, o incluso cambiar el patrón en sí durante la operación de coincidencia. Los patrones se pueden guardar como cualquier otro elemento de datos de primera clase y se pueden concatenar, usar dentro de otros patrones y usar para crear expresiones de patrones muy complejas y sofisticadas. Es posible escribir, por ejemplo, un patrón SNOBOL4 que coincida con "un nombre completo y una dirección postal internacional", lo que va mucho más allá de lo que es práctico incluso para intentar usar expresiones regulares.
La coincidencia de patrones de SNOBOL4 utiliza un algoritmo de seguimiento similar al utilizado en el lenguaje de programación lógico Prolog, que proporciona construcciones similares a patrones a través de DCG. Este algoritmo facilita el uso de SNOBOL como lenguaje de programación lógico que en la mayoría de los lenguajes.
SNOBOL almacena variables, cadenas y estructuras de datos en un único montón de recolección de elementos no utilizados.
Programas de ejemplo
El mensaje "¡Hola, mundo!" El programa podría ser el siguiente...
OUTPUT = "¡Hola, Mundo!"FIN
Un programa simple para solicitar el nombre de un usuario y luego usarlo en una oración de salida...
OUTPUT = "¿Cómo te llamas?" Nombre de usuario = INPUT OUTPUT = "Gracias, " Nombre de usuarioFIN
Para elegir entre tres salidas posibles...
OUTPUT = "¿Cómo te llamas?" Nombre de usuario = INPUT Nombre de usuario "J" :S()AMOR) Nombre de usuario "K" :S()HATE)MEH OUTPUT = "Hola." Nombre de usuario :FIN)AMOR OUTPUT = "Qué bueno conocerte, " Nombre de usuario :FIN)HATE OUTPUT = "Oh, eres tú, " Nombre de usuarioFIN
Para continuar solicitando información hasta que no haya más...
OUTPUT = "Este programa te pedirá nombres personales" OUTPUT = "hasta que presione la vuelta sin darle uno" NameCount = 0 :GetinPUT)AGAIN NameCount = NameCount + 1 OUTPUT = "Nombre" NameCount ": " PersonalNameGetinPUT OUTPUT = "Por favor dame el nombre " NameCount + 1 PersonalName = INPUT PersonalName LEN()1) :S()AGAIN) OUTPUT = "Afinado. " NameCount "nombres solicitados".FIN
Implementaciones
La implementación clásica estaba en el PDP-10; se ha utilizado para estudiar compiladores, gramáticas formales e inteligencia artificial, especialmente traducción automática y comprensión automática de lenguajes naturales. La implementación original estaba en un IBM 7090 en Bell Labs, Holmdel, N.J. SNOBOL4 fue diseñado específicamente para la portabilidad; la primera implementación se inició en un IBM 7094 en 1966 pero se completó en un IBM 360 en 1967. Se trasladó rápidamente a muchas otras plataformas.
Normalmente se implementa como un intérprete debido a la dificultad de implementar algunas de sus características de muy alto nivel, pero hay un compilador, el compilador SPITBOL, que brinda casi todas las facilidades que brinda el intérprete.
La implementación clásica en el PDP-10 fue bastante lenta y, en 1972, James Gimpel de Bell Labs, Holmdel, Nueva Jersey, diseñó una implementación nativa de SNOBOL4 para el PDP-10 a la que denominó SITBOL. Usó el diseño como base de una clase de posgrado en procesamiento de cuerdas que enseñó ese año en el Instituto de Tecnología Stevens (por eso se llamó SITBOL). Los estudiantes recibieron secciones para implementar (en ensamblador PDP-10) y todo el semestre se enfocó en implementar SITBOL. Se completó en más del 80% al final del semestre y posteriormente fue completado por el profesor Gimpel y varios estudiantes durante el verano. SITBOL era un intérprete SNOBOL4 de alto rendimiento y con todas las funciones.
El compilador Gnat Ada viene con un paquete (GNAT.Spitbol) que implementa toda la semántica de manipulación de cadenas de Spitbol. Esto se puede llamar desde dentro de un programa Ada.
El editor de archivos para Michigan Terminal System (MTS) proporcionaba coincidencias de patrones basadas en patrones SNOBOL4.
Hay varias implementaciones disponibles actualmente. Macro SNOBOL4 en C escrito por Phil Budne es una implementación gratuita de código abierto, capaz de ejecutarse en casi cualquier plataforma. Catspaw, Inc proporcionó una implementación comercial del lenguaje SNOBOL4 para muchas plataformas informáticas diferentes, incluidas DOS, Macintosh, Sun, RS/6000 y otras, y estas implementaciones ahora están disponibles de forma gratuita en Catspaw. Minnesota SNOBOL4, de Viktors Berstis, la implementación de PC más cercana a la versión original de mainframe de IBM (incluso con compatibilidad con declaraciones FORMAT similares a Fortran) también es gratuita.
Aunque SNOBOL en sí mismo no tiene características de programación estructurada, un preprocesador SNOBOL llamado Snostorm fue diseñado e implementado durante la década de 1970 por Fred G. Swartz para su uso bajo el Michigan Terminal System (MTS) en la Universidad de Michigan. Snostorm se utilizó en los ocho a quince sitios que ejecutaban MTS. También estuvo disponible en el University College London (UCL) entre 1982 y 1984.
Snocone de Andrew Koenig agrega construcciones estructuradas en bloques al lenguaje SNOBOL4. Snocone es un lenguaje de programación autónomo, en lugar de un superconjunto adecuado de SNOBOL4.
La implementación de SPITBOL también introdujo una serie de funciones que, si bien no utilizan palabras clave tradicionales de programación estructurada, se pueden usar para proporcionar muchas de las capacidades equivalentes que normalmente se consideran como "programación estructurada", sobre todo anidadas Construcciones de tipo if/then/else. Desde entonces, estas características se han agregado a las implementaciones más recientes de SNOBOL4. Después de muchos años como producto comercial, en abril de 2009 SPITBOL se lanzó como software libre bajo la Licencia Pública General GNU.
Nombramiento
Según Dave Farber, él, Griswold y Polonsky "finalmente llegaron al nombre Symbolic EXpression Interpreter SEXI."
Todo fue bien hasta que un día estaba enviando un trabajo por lotes para montar el sistema y como normal en mi tarjeta JOB — la primera carta en la cubierta, yo, en los estándares BTL, golpeó mi trabajo y mi nombre — SEXI Farber.
Una de las chicas del Centro Comp lo miró y dijo, "Eso es lo que piensas" de una manera humorística.
¡Eso dejó claro que necesitábamos otro nombre! Nos sentamos y hablamos y bebimos café y tomamos bandas de goma y después de mucho tiempo alguien dijo —probablemente Ralph— "No tenemos la oportunidad de un Snowball en el infierno de encontrar un nombre". Todos gritamos de inmediato, "WE GOT IT — SNOBOL" en el espíritu de todos los idiomas BOL. Luego extendimos nuestra mente para encontrar lo que representaba.
Acrónimos comunes de "SNOBOL" son 'lenguaje simbólico orientado a cadenas' o (como un cuasi inicialismo) 'Lenguaje simbólico orientado a cadenas'.