stringtranslate.com

SNOBOL

SNOBOL ("Lenguaje simbólico y orientado a cadenas") es una serie de lenguajes de programación desarrollados entre 1962 y 1967 en los Laboratorios AT&T Bell 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 época por tener patrones como un tipo de datos de primera clase ( es decir, un tipo de datos cuyos valores pueden manipularse en todas las formas permitidas para cualquier otro tipo de datos en el lenguaje de programación) y por proporcionar operadores para patrones. concatenación y alternancia . Los patrones SNOBOL4 son un tipo de objeto y admiten diversas manipulaciones, muy parecido a los lenguajes posteriores orientados a objetos 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 grandes universidades estadounidenses a finales de los años 1960 y principios de los años 1970 y fue ampliamente utilizado en los años 1970 y 1980 como lenguaje de manipulación de textos en humanidades .

En las décadas de 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 mediante 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 otorga 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 que sus autores utilizarían 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 ni declaraciones y muy poco control de errores. Sin embargo, a pesar de su sencillez y su carácter "personal", su uso empezó a extenderse a otros colectivos. Como resultado, los autores decidieron ampliarlo y ordenarlo.

SNOBOL2

SNOBOL2 existió pero fue una versión de desarrollo intermedio de corta duración sin funciones definidas por el usuario y nunca fue lanzada.

SNOBOL3

SNOBOL se reescribió para agregar funciones, tanto estándar como definidas por el usuario, y el resultado se lanzó como SNOBOL3. SNOBOL3 se hizo bastante popular y otros programadores lo reescribieron para otras computadoras además del IBM 7090. 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 del lenguaje. También empezaron 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. [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 la máquina virtual del lenguaje de implementación SNOBOL , el SIL. Esto mejoró mucho la portabilidad del lenguaje al hacer relativamente fácil portar la máquina virtual que alojaba al traductor recreando sus instrucciones virtuales en cualquier máquina que incluyera un macro ensamblador 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 agregar el 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 una serie de 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 tipo de datos definido por el programador de SNOBOL4 era avanzada en ese momento; es similar a los registros de los lenguajes de programación anteriores COBOL y Pascal posteriores .

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

patrón de tema de etiqueta = objeto : transferencia

Cada uno de los cinco elementos es opcional. En general, el tema se compara con el patrón . Si el objeto está presente, cualquier parte coincidente es reemplazada 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 tarea 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 simplemente 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 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 tomar tan solo unos cientos de líneas, y se agrega una nueva instrucción con una sola línea.

Los patrones complejos de SNOBOL pueden hacer cosas que serían poco prácticas o imposibles usando las expresiones regulares más primitivas utilizadas en la mayoría de los otros lenguajes de coincidencia de patrones. Parte de este poder se deriva de las llamadas "extensiones SPITBOL" (que desde entonces también se han incorporado básicamente en todas las implementaciones modernas del lenguaje SNOBOL 4 original), aunque es posible lograr el mismo poder sin ellas. 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 de coincidencias intermedios/provisionales 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 mismo durante la operación de coincidencia. 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 que va mucho más allá de cualquier intento práctico de utilizar expresiones regulares.

La coincidencia de patrones SNOBOL4 utiliza un algoritmo de retroceso similar al utilizado en el lenguaje de programación lógica Prolog , que proporciona construcciones similares a patrones a través de DCG . Este algoritmo hace que sea más fácil utilizar SNOBOL como lenguaje de programación lógica que 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 mensaje "¡Hola mundo!" El programa 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

Para elegir entre tres posibles salidas...

 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

Para continuar solicitando comentarios hasta que no haya más...

 SALIDA  =  "Este programa le pedirá nombres personales"  SALIDA  =  "hasta que presione Intro sin darle uno"  NameCount  =  0  :( GETINPUT ) OTRA VEZ  NameCount  =  NameCount  +  1  SALIDA  =  "Nombre "  NameCount  ": "  PersonalName GETINPUT  SALIDA  =  "Por favor, dame el nombre "  NameCount  +  1  PersonalName  =  INPUT  PersonalName  LEN ( 1 )  : S ( OTRA VEZ )  OUTPUT  =  "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 la traducción automática y la comprensión automática de lenguajes naturales . La implementación original se realizó en un IBM 7090 en Bell Labs, Holmdel, Nueva Jersey. 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 portó a muchas otras plataformas.

Normalmente se implementa como 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 funciones que proporciona 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 llamó SITBOL. Usó el diseño como base de una clase de posgrado sobre procesamiento de cuerdas que impartió ese año en el Instituto de Tecnología Stevens (por eso se llamó SITBOL). A los estudiantes se les dieron secciones para implementar (en ensamblador PDP-10) y todo el semestre se centró en implementar SITBOL. Estaba completado 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 un programa Ada.

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

Actualmente hay varias implementaciones disponibles. Macro SNOBOL4 en C escrita por Phil Budne es una implementación gratuita y 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 declaraciones FORMAT tipo Fortran) también es gratuito. [13]

Aunque SNOBOL en sí no tiene características de programación estructuradas , Fred G. Swartz diseñó e implementó un preprocesador SNOBOL llamado Snostorm durante la década de 1970 para su uso bajo el Michigan Terminal System (MTS) en la Universidad de Michigan . [14] Snostorm se utilizó en 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. [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 tradicionales, pueden usarse para proporcionar muchas de las capacidades equivalentes que normalmente se consideran "programación estructurada", en particular construcciones anidadas 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 fue lanzado como software libre bajo la Licencia Pública General GNU .

Nombrar

Según Dave Farber, [16] él, Griswold y Polonsky "finalmente llegaron al nombre Symbolic EXpression Interpreter SEXI".

Todo salió bien hasta que un día estaba enviando un trabajo por lotes para ensamblar el sistema y, como de costumbre, en mi tarjeta de TRABAJO (la primera tarjeta de la baraja, yo, en los estándares BTL, marqué mi trabajo y mi nombre: SEXI Farber).

Una de las chicas del Centro de Compensación lo miró y dijo, "Eso es lo que piensas", en tono humorístico.

¡¡Eso dejó claro que necesitábamos otro nombre!! Nos sentamos, hablamos, bebimos café y disparamos gomas elásticas y, después de demasiado tiempo, alguien dijo (muy probablemente Ralph) "No tenemos ni la más mínima posibilidad de que Snowball encuentre un nombre". Todos gritamos a la vez: "LO TENEMOS - SNOBOL" en el espíritu de todos los idiomas BOL . Luego ampliamos nuestra mente para encontrar lo que representaba.

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

Ver también

Referencias

  1. ^ Jerusalén, 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, S2CID  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 del pie de Snobol". Dobbscodetalk.com . Consultado el 4 de diciembre de 2011 .
  4. ^ Datos de contacto. "perla". 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 ACM SIGPLAN . 12 (4): 40–50. doi : 10.1145/954654.954658 . S2CID  38692673.
  7. ^ Consulte el Capítulo 1 de La implementación macro de SNOBOL4
  8. ^ SNOBOL4 se implementó usando C para recrear las instrucciones de la máquina virtual.
  9. ^ Griswold, Ralph (1978). "Una historia de los lenguajes de programación SNOBOL" (PDF) . Avisos ACM SIGPLAN . 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 . Prensa académica. pag. 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 , Computing Center, 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, Oregon), junio de 1985. Consultado el 2 de septiembre de 2014.
  16. ^ VALE LA PENA LEER la entrada de Wikipedia sobre SNOBOL: la historia VERDADERA, NO Wikipedias (Dave Farber, lista de correo de personas interesantes, 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 y Tecnología de la Computación . vol. 13. Prensa CRC. pag. 173.ISBN _ 0-8247-2263-9.

Otras lecturas

enlaces externos