Articulo de referencia

SNOBOL

{{Citation |last1=Ierusalimschy |first1=Roberto |last2=de Figueiredo |first2=Luiz Henrique |last3=Celes |first3=Waldemar |title=Proceedings of the third ACM SIGPLAN conference o...

SNOBOL ( String Oriented and symBOlic Language ) es una serie de lenguajes de programación desarrollados entre 1962 y 1967 en los Laboratorios Bell de AT&T por David J. Farber , Ralph Griswold e Ivan P. Polonsky, que culminó en SNOBOL4. Fue uno de los varios lenguajes orientados a cadenas de texto desarrollados durante las décadas de 1950 y 1960; otros ejemplos fueron COMIT y TRAC . A pesar de su nombre similar, es completamente distinto a COBOL .

SNOBOL4 se distingue de la mayoría de los lenguajes de programación de su época por considerar los patrones como un tipo de dato de primera clase , cuyos valores pueden manipularse de todas las maneras permitidas para cualquier otro tipo de dato en el lenguaje, y por proporcionar operadores para la concatenación y alternancia de patrones . Los patrones de SNOBOL4 son un tipo de objeto y admiten diversas manipulaciones, al igual que 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 pueden tratarse como programas y ser interpretadas o compiladas y ejecutadas (como en la función `eval` de otros lenguajes).

SNOBOL4 se enseñó bastante en las universidades más grandes de Estados Unidos a finales de la década de 1960 y principios de la de 1970, y se utilizó ampliamente en las décadas de 1970 y 1980 como lenguaje de manipulación de textos en las humanidades .

En las décadas de 1980 y 1990, su uso disminuyó a medida que lenguajes más recientes, como AWK y Perl, pusieron de moda la manipulación de cadenas mediante expresiones regulares . Los patrones SNOBOL4 incluyen una forma de expresar gramáticas BNF , que son equivalentes a las gramáticas libres de contexto y más potentes que las expresiones regulares. [ 2 ] Las "expresiones regulares" en las versiones actuales de AWK y Perl son, de hecho, extensiones de las expresiones regulares en el sentido tradicional , pero las expresiones regulares, a diferencia de los patrones SNOBOL4, no son recursivas, lo que les confiere una clara ventaja computacional. [ 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 original se creó como una herramienta para que sus autores trabajaran con la manipulación simbólica de polinomios. Fue escrito en lenguaje ensamblador para la IBM 7090. Tenía una sintaxis sencilla, un solo tipo de dato (cadena de caracteres), ninguna función, ninguna declaración y muy poco control de errores. Sin embargo, a pesar de su simplicidad y su carácter "personal", su uso comenzó a extenderse a otros grupos. Como resultado, los autores decidieron ampliarlo y mejorarlo.

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ó al mercado.

SNOBOL3

SNOBOL fue reescrito para añadir 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 ordenadores distintos del IBM 7090. Como consecuencia, surgieron varios dialectos incompatibles.

SNOBOL4

A medida que SNOBOL3 ganaba popularidad, los autores recibían cada vez más solicitudes de extensiones al 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 finales de la década de 1960, se decidió desarrollar SNOBOL4 con muchos tipos de datos y características adicionales, pero basado en una máquina virtual para permitir una mayor portabilidad entre computadoras. [ 7 ] El traductor de lenguaje SNOBOL4 todavía estaba escrito en lenguaje ensamblador. Sin embargo, las características de macro del ensamblador se utilizaron para definir las instrucciones de la máquina virtual del lenguaje de implementación SNOBOL , el SIL. Esto mejoró mucho la portabilidad del lenguaje , ya que facilitó la portabilidad de la máquina virtual que alojaba el traductor, recreando sus instrucciones virtuales en cualquier máquina que incluyera un ensamblador de macros o incluso 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 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. [ 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 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 funcionalidad de tipos de datos definidos por el programador de SNOBOL4 era avanzada para su época ; es similar a los registros de los lenguajes de programación COBOL (anterior ) y Pascal ( posterior) .

Todas las líneas de comandos de SNOBOL tienen la forma

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 bifurcación absoluta o 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 a código creado y compilado por el propio programa durante su 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 extensa que describa, por ejemplo, la gramática completa de un lenguaje de programación. Es posible implementar un intérprete de lenguaje en SNOBOL casi directamente a partir de una expresión en forma Backus-Naur , con pocos cambios. Crear un ensamblador de macros y un intérprete para un hardware completamente teórico podría requerir tan solo unos cientos de líneas, añadiendo una nueva instrucción con una sola línea.

Los patrones complejos de SNOBOL permiten realizar acciones que serían imprácticas o imposibles con las expresiones regulares más primitivas utilizadas en la mayoría de los demás lenguajes de coincidencia de patrones. Parte de esta potencia se debe a las denominadas "extensiones SPITBOL" (que se han incorporado a prácticamente todas las implementaciones modernas del lenguaje SNOBOL 4 original), aunque es posible lograr la misma potencia sin ellas. Otra parte de esta potencia proviene de los efectos secundarios que se pueden generar durante la operación de coincidencia de patrones, como guardar numerosos resultados intermedios o provisionales y la capacidad de invocar funciones definidas por el usuario durante la coincidencia, las cuales pueden realizar prácticamente cualquier procesamiento deseado e influir en la dirección que toma la coincidencia interrumpida, o incluso modificar el patrón en sí mismo durante la operación. Los patrones se pueden guardar como cualquier otro dato de primera clase, se pueden concatenar, utilizar dentro de otros patrones y emplear 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 cosa que sea práctica intentar siquiera utilizando expresiones regulares.

El algoritmo de búsqueda de patrones de SNOBOL4 utiliza un método de retroceso similar al del lenguaje de programación lógica Prolog , que proporciona construcciones tipo patrón mediante 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 gestionado por el recolector de basura .

Programas de ejemplo

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

SALIDA = "¡Hola, mundo!" FIN

Un programa sencillo para solicitar el nombre del usuario y luego usarlo en una frase de salida...

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

Utilice :S (bifurcación en caso de coincidencia exitosa) para elegir entre tres posibles resultados...

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

Continuaremos solicitando información hasta que no haya más...

SALIDA = "Este programa le pedirá nombres personales" SALIDA = "hasta que presione Enter sin proporcionarle ninguno" NameCount = 0 :( OBTENER ENTRADA ) DE NUEVO NameCount = NameCount + 1 SALIDA = "Nombre " NameCount ": " PersonalName OBTENER ENTRADA SALIDA = "Por favor, indíqueme un nombre " NameCount + 1 PersonalName = ENTRADA PersonalName LEN ( 1 ) : S ( DE NUEVO ) SALIDA = "Finalizado. " NameCount " nombres solicitados." FIN

Implementaciones

La implementación clásica se realizó 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 se realizó en un IBM 7090 en Bell Labs, Holmdel, NJ. 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. Rápidamente se adaptó 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 existe un compilador , el compilador SPITBOL , que proporciona casi todas las funcionalidades que ofrece el intérprete.

La implementación clásica en el PDP-10 era bastante lenta, y en 1972 James Gimpel, de Bell Labs en Holmdel, Nueva Jersey, diseñó una implementación nativa de SNOBOL4 para el PDP-10 a la que llamó SITBOL. Utilizó este diseño como base para un curso de posgrado sobre procesamiento de cadenas que impartió ese año en el Instituto Tecnológico Stevens (de ahí su nombre, SITBOL). A los estudiantes se les asignaron secciones para implementar (en lenguaje ensamblador del PDP-10) y todo el semestre se centró en la implementación de SITBOL. Al final del semestre, el proyecto estaba completado en más del 80% y, posteriormente, el profesor Gimpel y varios estudiantes lo finalizaron durante el verano. SITBOL era un intérprete de SNOBOL4 completo y de alto rendimiento.

El compilador GNAT Ada incluye un paquete (GNAT.Spitbol) que implementa toda la semántica de manipulación de cadenas de Spitbol. Este paquete puede ser llamado desde un programa Ada.

El editor de archivos del Sistema de Terminales de Michigan (MTS) proporcionaba coincidencia de patrones basada en patrones SNOBOL4. [ 11 ]

Actualmente existen varias implementaciones disponibles. Macro SNOBOL4 en C, escrita 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 diversas plataformas informáticas, incluyendo DOS, Macintosh, Sun, RS/6000 y otras, y estas implementaciones ahora están disponibles gratuitamente en Catspaw. Minnesota SNOBOL4, de Viktors Berstis, la implementación para PC más cercana a la versión original de la computadora central IBM (incluso incluye soporte para la instrucción FORMAT similar a Fortran), también es gratuita. [ 13 ]

Aunque SNOBOL en sí mismo no posee características de programación estructurada , Fred G. Swartz diseñó e implementó un preprocesador de 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 propiamente dicho de SNOBOL4. [ 15 ]

La implementación de SPITBOL también introdujo varias características que, si bien no utilizan palabras clave de programación estructurada tradicionales, pueden emplearse para proporcionar muchas de las capacidades equivalentes que normalmente se consideran de "programación estructurada", en particular las estructuras anidadas de tipo if/then/else. Estas características se han incorporado posteriormente a la mayoría de las implementaciones más recientes de SNOBOL4. Tras muchos años como producto comercial, en abril de 2009 SPITBOL se lanzó como software libre bajo la Licencia Pública General de GNU .

Nomenclatura

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 del mazo), según los estándares de BTL, marqué mi trabajo y mi nombre: SEXI Farber.

Una de las chicas del centro de informática lo miró y dijo, en tono de broma: "Eso es lo que tú crees".

Eso dejó claro que necesitábamos otro nombre. Nos sentamos a charlar, tomamos café y lanzamos gomas elásticas, y después de demasiado tiempo alguien dijo —probablemente Ralph—: «No tenemos ni la más mínima posibilidad de encontrar un nombre». Todos gritamos a la vez: «¡LO TENEMOS! ¡SNOBOL!», al estilo de todos los lenguajes BOL . Entonces nos pusimos a pensar qué significaba.

Los acrónimos inversos comunes de "SNOBOL" son "String Oriented Symbolic Language" [ 17 ] o (como un cuasi inicialismo ) "String Oriented symBOlic Language". [ 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ág.  26, doi : 10.1145/1238844.1238846 , ISBN 9781595937667, S2CID 475143 
  2. Gimpel, JF (febrero de 1973). "Una teoría de patrones discretos y su implementación en SNOBOL4" . Communications of the 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: el chiste del pie de Snobol" . 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 visión general de SL5" . ACM SIGPLAN Notices . 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). "Historia de los lenguajes de programación SNOBOL" (PDF) . ACM SIGPLAN Notices . 13 (8): 275–308 . doi : 10.1145/960118.808393 . S2CID 5413577. Archivado del 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 de SNOBOL4" .
  13. "El lenguaje de programación MINNESOTA SNOBOL4" .
  14. "SNOSTORM" , MTS Volumen 9: SNOBOL4 en MTS , Centro de Computación, Universidad de Michigan, junio de 1979, páginas 99-120. Consultado el 1 de septiembre de 2014.
  15. "El lenguaje de programación Snocone" , Andrew Koenig, USENIX (Portland, Oregón), 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. Archivado el 10 de febrero de 2020 en Wayback Machine (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 Ciencias de la Computación y Tecnología . Vol. 13. CRC Press. pág. 173. ISBN   0-8247-2263-9.

Lecturas adicionales

  • Emmer, Mark B. (1985). SNOBOL4+: El lenguaje SNOBOL4 para el usuario de ordenador personal . Prentice Hall. ISBN 0-13-815119-9.
  • Gimpel, James F. (1976). Algoritmos en SNOBOL4 . Wiley. ISBN 0-471-30213-9.Reeditado en Salida, CO: Catspaw, 1986 ( ISBN) 0-939793-00-8).
  • Griswold, Ralph E. (1972). La implementación macro de SNOBOL4 . WH Freeman. ISBN 0-7167-0447-1.
  • Griswold, Ralph E.; Poage, JF; Polonsky, IP (1968). El lenguaje de programación SNOBOL4 . Prentice Hall. ISBN 0-13-815373-6.
  • Griswold, Ralph E. (1975). Procesamiento de cadenas y listas en SNOBOL4: Técnicas y aplicaciones . Prentice Hall. ISBN 0-13-853010-6.
  • Hockey, Susan M. (1985). Programación Snobol para las Humanidades . Clarendon Press. ISBN 0-19-824676-5.
  • CSNOBOL4 es una adaptación gratuita y de código abierto, con licencia BSD, del SNOBOL4 original de Bell Labs para sistemas con compilador C, e incluye mejoras para SPITBOL y Blocks.
  • Catspaw, Inc. ofrece implementaciones y soporte comercial para SNOBOL4.
  • Griswold, Ralph E. (25 de julio de 1990). "Entrevista de historia oral con Ralph E. Griswold: se analiza el desarrollo de SNOBOL" . Minneapolis: Instituto Charles Babbage , Universidad de Minnesota.].
  • "Colección Charles Hall sobre el lenguaje de programación SNOBOL" . Minneapolis: Instituto Charles Babbage, Universidad de Minnesota.
  • Para una pequeña muestra de lo que trata SNOBOL4, prueba este compilador en línea.
  • Pruébalo en línea (Snobol4/CSNOBOL) Compilador en línea
  • Introducción a SNOBOL
Obtenido de " https://en.wikipedia.org/w/index.php?title=SNOBOL&oldid=1354923960#SNOBOL4 "