stringtranslate.com

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 Griswold e Ivan P. Polonsky, que culminaron en SNOBOL4. Fue uno de los numerosos lenguajes orientados a cadenas de texto desarrollados durante las décadas de 1950 y 1960; otros fueron COMIT y TRAC .

SNOBOL4 se distingue de la mayoría de los lenguajes de programación de su época 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 a cualquier otro tipo de datos en el lenguaje de programación) y por proporcionar operadores para la concatenación y alternancia de patrones . Los patrones de 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 de SNOBOL4 generadas durante la ejecución se pueden tratar como programas e interpretar o compilar y ejecutar (como en la función eval de otros lenguajes).

SNOBOL4 se enseñó ampliamente en las grandes universidades de Estados Unidos 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 los años 1980 y 1990, su uso se desvaneció a medida que lenguajes más nuevos como AWK y Perl pusieron de moda la manipulación de cadenas por medio de expresiones regulares . Los patrones SNOBOL4 incluyen gramáticas BNF , que son equivalentes a gramáticas libres de contexto y más poderosas que las expresiones regulares. [2] 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 les da una clara ventaja computacional a los patrones SNOBOL4. [3] (Sin embargo, las expresiones recursivas aparecieron en Perl 5.10 , lanzado en diciembre de 2007. [4] [5] )

Los lenguajes posteriores SL5 (1977) [6] e Icon (1978) fueron diseñados por Griswold para combinar el retroceso de la coincidencia de patrones SNOBOL4 con una estructuración más estándar similar a ALGOL .

Desarrollo

SNOBOL1

El lenguaje SNOBOL inicial fue creado como una herramienta para que sus autores pudieran trabajar con la manipulación simbólica de polinomios. Fue escrito en lenguaje ensamblador para el IBM 7090. Tenía una sintaxis sencilla, un único tipo de datos, la cadena, ninguna función, ninguna declaración y muy poco control de errores. Sin embargo, a pesar de su sencillez y su carácter "personal" su uso comenzó a extenderse a otros grupos. A raíz de ello, los autores decidieron extenderlo y ponerlo en orden.

SNOBOL2

SNOBOL2 existió, pero fue una versión de desarrollo intermedia de corta duración, sin funciones definidas por el usuario y nunca se lanzó.

SNOBOL3

SNOBOL fue reescrito para agregar funciones, tanto estándar como definidas por el usuario, y el resultado fue publicado como SNOBOL3. SNOBOL3 se volvió bastante popular y fue reescrito para otras computadoras que no fueran la IBM 7090 por otros programadores. Como resultado, surgieron varios dialectos incompatibles.

SNOBOL4

A medida que SNOBOL3 se hizo más popular, los autores recibieron cada vez más solicitudes de extensiones para el lenguaje. También comenzaron a recibir quejas sobre incompatibilidad 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 portabilidad mejorada entre computadoras. [7] El traductor de lenguaje SNOBOL4 todavía estaba escrito en lenguaje ensamblador. Sin embargo, las características macro del ensamblador se utilizaron para definir las instrucciones de máquina virtual del lenguaje de implementación de SNOBOL , el SIL . Esto mejoró mucho la portabilidad del lenguaje al hacer que fuera relativamente fácil portar la máquina virtual que alojaba el traductor al recrear sus instrucciones virtuales en cualquier máquina que incluyera un ensamblador de macros o, de hecho, un lenguaje de alto nivel. [8]

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 usaron ampliamente en la implementación inicial de SNOBOL. En 1969, McIlroy influyó nuevamente en el lenguaje al insistir en la adición del tipo de tabla a SNOBOL4. [9] [10]

Características de SNOBOL4

SNOBOL se distingue por su formato y estilo de programación, que son radicalmente diferentes de los lenguajes procedimentales 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 era avanzada en ese momento: es similar a los registros de los lenguajes de programación COBOL anterior y Pascal posterior .

Todas las líneas de comando de SNOBOL tienen el formato

etiqueta sujeto 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 que depende del éxito o el 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 a 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 simplemente una cadena de texto (por ejemplo, "ABCD"), pero un patrón complejo puede ser una gran estructura que describe, por ejemplo, la gramática completa de un lenguaje de computadora. Es posible implementar un intérprete de lenguaje en SNOBOL casi directamente a partir de una expresión en forma Backus-Naur del mismo, con pocos cambios. Crear un ensamblador de macros y un intérprete para una pieza de hardware completamente teórica podría requerir tan solo unos pocos cientos de líneas, y una nueva instrucción podría agregarse con una sola línea.

Los patrones SNOBOL complejos pueden hacer cosas que serían poco prácticas o imposibles utilizando las expresiones regulares más primitivas que se utilizan en la mayoría de los demás lenguajes de comparación de patrones. Parte de esta potencia se deriva de las denominadas "extensiones SPITBOL" (que desde entonces se han incorporado también en prácticamente todas las implementaciones modernas del lenguaje SNOBOL 4 original), aunque es posible lograr la misma potencia sin ellas. Parte de esta potencia proviene de los efectos secundarios que es posible producir durante la operación de comparación de patrones, incluido el almacenamiento de numerosos resultados de comparación intermedios/tentativos y la capacidad de invocar funciones escritas por el usuario durante la comparación de patrones que pueden realizar casi cualquier procesamiento deseado y luego influir en la dirección en curso que toma la comparación de patrones interrumpida, o incluso cambiar el patrón en sí durante la operación de comparación. Los patrones se pueden guardar como cualquier otro elemento de datos de primera clase y se pueden concatenar, utilizar dentro de otros patrones y utilizar 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 cual está mucho más allá de cualquier intento práctico de utilizar expresiones regulares.

La comparación de patrones de SNOBOL4 utiliza un algoritmo de retroceso similar al que se utiliza en el lenguaje de programación lógica 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ógica en comparación con la mayoría de los lenguajes.

SNOBOL almacena variables, cadenas y estructuras de datos en un único montón de basura recolectada .

Programas de ejemplo

El programa "¡Hola, mundo!" podría ser el siguiente...

 SALIDA  =  "¡Hola, mundo!" FIN

Un programa simple para solicitar el nombre de un usuario y luego usarlo en una oración de salida...

 SALIDA  =  "¿Cuál es tu nombre?"  Nombre de usuario  =  ENTRADA  SALIDA  =  "Gracias, "  Nombre de usuario FIN

Elegir entre tres salidas posibles...

 SALIDA  =  "¿Cuál es tu nombre?"  Nombre de usuario  =  ENTRADA  Nombre de usuario  "J"  : S ( ME ENCANTA )  Nombre de usuario  "K"  : S ( ODIO ) MEH  SALIDA  =  "Hola, "  Nombre de usuario  :( FIN ) ME ENCANTA  SALIDA  =  "Qué gusto conocerte, "  Nombre de usuario  :( FIN ) ODIO  SALIDA  =  "Oh. Eres tú, "  Nombre de usuario FIN

Seguir solicitando aportaciones hasta que no haya más...

 SALIDA  =  "Este programa le pedirá nombres personales"  SALIDA  =  "hasta que presione enter sin darle uno"  NameCount  =  0  :( GETINPUT ) OTRA VEZ  NameCount  =  NameCount  +  1  SALIDA  =  "Nombre "  NameCount  ": "  PersonalName GETINPUT  SALIDA  =  "Por favor, deme el nombre "  NameCount  +  1  PersonalName  =  INPUT  PersonalName  LEN ( 1 )  : S ( OTRA VEZ )  SALIDA  =  "Terminado. "  NameCount  " nombres solicitados." FIN

Implementaciones

La implementación clásica fue 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 fue en un IBM 7090 en Bell Labs, Holmdel, NJ SNOBOL4 fue diseñado específicamente para portabilidad; la primera implementación se inició en un IBM 7094 en 1966, pero se completó en un IBM 360 en 1967. Se portó 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 proporciona casi todas las facilidades que proporciona el intérprete.

La implementación clásica en el PDP-10 era bastante lenta y en 1972 James Gimpel de Bell Labs, Holmdel, NJ diseñó una implementación nativa de SNOBOL4 para el PDP-10 que llamó SITBOL. Utilizó el diseño como base de una clase de posgrado en procesamiento de cadenas que impartió 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 centró en la implementación de 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 de SNOBOL4 con todas las funciones y alto rendimiento.

El compilador Gnat Ada viene con un paquete (GNAT.Spitbol) que implementa toda la semántica de manipulación de cadenas de Spitbol. Se puede llamar desde un programa Ada.

El editor de archivos del Sistema de Terminal de Michigan (MTS) proporcionó una coincidencia de patrones basada en patrones SNOBOL4. [11]

Actualmente, hay varias implementaciones disponibles. Macro SNOBOL4 en C escrito por Phil Budne es una implementación gratuita de código abierto, capaz de ejecutarse en casi cualquier plataforma. [12] 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 para PC más cercana a la versión original de mainframe de IBM (incluso incluye soporte para sentencias FORMAT similares a Fortran) también es gratuita. [13]

Aunque SNOBOL en sí no tiene características de programación estructurada , Fred G. Swartz diseñó e implementó un preprocesador SNOBOL llamado Snostorm durante la década de 1970 para su uso en el Sistema de Terminales de Michigan (MTS) en la Universidad de Michigan . [14] 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 añade construcciones estructuradas en bloques al lenguaje SNOBOL4. Snocone es un lenguaje de programación autónomo, en lugar de un superconjunto adecuado de SNOBOL4. [15]

La implementación de SPITBOL también introdujo una serie de características que, si bien no utilizan palabras clave de programación estructurada tradicional, pueden utilizarse para proporcionar muchas de las capacidades equivalentes que normalmente se consideran "programación estructurada", en particular las construcciones de tipo if/then/else anidadas. Estas características se han agregado desde entonces 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 de GNU .

Nombramiento

Según Dave Farber, [16] él, Griswold y Polonsky "finalmente llegaron al nombre de Intérprete de Expresión Simbólica SEXI".

Todo iba bien hasta que un día estaba enviando un trabajo por lotes para ensamblar el sistema y, como es habitual, en mi tarjeta de TRABAJO (la primera tarjeta de la baraja), yo, según los estándares BTL, escribí mi trabajo y mi nombre: SEXI Farber.

Una de las chicas del Comp Center lo miró y dijo: "Eso es lo que piensas" en tono humorístico.

Eso dejó en claro que necesitábamos otro nombre. Nos sentamos, hablamos, tomamos café y jugamos a las ligas elásticas, y después de mucho tiempo alguien dijo (probablemente Ralph): "No tenemos ni la más mínima posibilidad de encontrar un nombre". Todos gritamos a la vez: "LO CONSEGUIMOS: SNOBOL", en el espíritu de todos los idiomas BOL . Luego nos esforzamos para encontrar lo que significaba.

Los acrónimos comunes de "SNOBOL" son 'Lenguaje simbólico orientado a cadenas' [17] o (como un cuasi-inicialismo ) 'Lenguaje simbólico orientado a cadenas'. [18]

Véase también

Referencias

  1. ^ Ierusalimschy, Roberto; de Figueiredo, Luiz Henrique; Celes, Waldemar (2007), "La evolución de Lua", Actas de la tercera conferencia ACM SIGPLAN sobre Historia de los lenguajes de programación (PDF) , p. 26, doi :10.1145/1238844.1238846, ISBN 9781595937667, Número de identificación del sujeto  475143
  2. ^ Gimpel, JF (febrero de 1973). "Una teoría de patrones discretos y su implementación en SNOBOL4". Comunicaciones de la ACM . 16 (2): 91-100. doi : 10.1145/361952.361960 . S2CID  17059429.
  3. ^ "Dr. Dobb's: Programas que transforman su propio código fuente; o: la broma de Snobol Foot". Dobbscodetalk.com . Consultado el 4 de diciembre de 2011 .
  4. ^ Datos de contacto. "perlre". perldoc.perl.org . Consultado el 4 de diciembre de 2011 .
  5. ^ "Tutorial de expresiones regulares recursivas" . Consultado el 19 de marzo de 2017 .
  6. ^ Griswold, Ralph E.; Hanson, David R. (abril de 1977). "Una descripción general de SL5". Avisos SIGPLAN de la ACM . 12 (4): 40–50. doi : 10.1145/954654.954658 . S2CID  38692673.
  7. ^ Véase el Capítulo 1 de La implementación macro de SNOBOL4
  8. ^ SNOBOL4 se ha implementado utilizando C para recrear las instrucciones de la máquina virtual.
  9. ^ Griswold, Ralph (1978). "Una historia de los lenguajes de programación SNOBOL" (PDF) . ACM SIGPLAN Notices . 13 (8): 275–308. doi :10.1145/960118.808393. S2CID  5413577. Archivado desde el original (PDF) el 2 de marzo de 2019.
  10. ^ Wexelblat, Richard L. , ed. (2014) [1981]. Historia de los lenguajes de programación . Academic Press. pág. 784. ISBN 9781483266169.
  11. ^ Introducción al editor de archivos MTS, Centro de Computación de la Universidad de Michigan, 1986.
  12. ^ "SNOBOL4.ORG -- Recursos SNOBOL4".
  13. ^ "El lenguaje de programación MINNESOTA SNOBOL4".
  14. ^ "SNOSTORM", MTS Volume 9: SNOBOL4 en MTS , Computing Center, University of Michigan, junio de 1979, páginas 99-120. Consultado el 1 de septiembre de 2014.
  15. ^ "The Snocone Programming Language", Andrew Koenig, USENIX (Portland, Oregon), junio de 1985. Consultado el 2 de septiembre de 2014.
  16. ^ VALE LA PENA LEER Entrada de Wikipedia sobre SNOBOL: la VERDADERA historia, NO Wikipedias (Dave Farber, lista de correo Interesting People, 26 de diciembre de 2008)
  17. ^ Computadoras y humanidades 1 :158, 1967.
  18. ^ Belzer, Jack; Holzman, Albert G.; Kent, Allen, eds. (1979). "SNOBOL". Enciclopedia de informática y tecnología . Vol. 13. CRC Press. pág. 173. ISBN 0-8247-2263-9.

Lectura adicional

Enlaces externos