SNOBOL - SNOBOL

SNOBOL
Paradigma Imperativo , desestructurado
Diseñada por David J. Farber , Ralph E. Griswold e Ivan P. Polonsky
Desarrollador David J. Farber, Ralph E. Griswold, Ivan P. Polonsky y Bell Labs
Apareció por primera vez 1962 ; Hace 59 años ( 1962 )
Lanzamiento estable
SNOBOL4 / 1967 ; Hace 54 años ( 1967 )
Sitio web www .snobol4 .org
Implementaciones importantes
SNOBOL, SPITBOL
Influenciado por
COMIT
Influenciado
AWK , SL5, Icono , bs , Lua

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 época al 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 al proporcionar operadores para patrones concatenación y alternancia . 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 y ser interpretadas o compiladas y ejecutadas (como en la función eval de otros lenguajes).

SNOBOL4 se enseñó ampliamente en las universidades más grandes de los 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 un lenguaje de manipulación de textos 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 subsumen las gramáticas BNF , que son equivalentes a las gramáticas libres de contexto y más poderosas 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 da una ventaja computacional distinta a los patrones SNOBOL4. (Sin embargo, las expresiones recursivas aparecieron en Perl 5.10, lanzado en diciembre de 2007).

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

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 con 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. Como resultado, los autores decidieron ampliarlo y ordenarlo.

SNOBOL2

SNOBOL2 existía, pero era una versión de desarrollo intermedio 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 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 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 idiomas SNOBOL4 todavía estaba escrito en lenguaje ensamblador. Sin embargo las características de macro de la ensamblador fueron utilizados para definir las instrucciones de la máquina virtual de la S Nobol I JECUCIÓN L anguage, 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 ensamblador de macros o incluso un lenguaje de alto nivel.

El lenguaje SIL, independiente de la máquina, 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.

Características de SNOBOL4

SNOBOL es distintivo en 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 fue avanzada 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 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 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 de la asignatura, 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 de computadora. Es posible implementar un intérprete de idiomas en SNOBOL casi directamente a partir de una expresión en 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 pocos cientos de líneas, con una nueva instrucción agregada con una sola línea.

Los patrones SNOBOL complejos pueden hacer cosas que serían imprácticas o imposibles usando las expresiones regulares más primitivas que se usan 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 coincidencia intermedios / tentativos 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 de patrones interrumpidos, 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 de correo 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 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 facilita el uso de SNOBOL como lenguaje de programación lógica que en el caso de la mayoría de los lenguajes.

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

Programas de ejemplo

El mensaje "¡Hola, mundo!" El programa puede ser el siguiente ...

          OUTPUT = "Hello, World!"
END

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

          OUTPUT = "What is your name?"
          Username = INPUT
          OUTPUT = "Thank you, " Username
END

Para elegir entre tres posibles salidas ...

          OUTPUT = "What is your name?"
          Username = INPUT
          Username "J"                                             :S(LOVE)
          Username "K"                                             :S(HATE)
MEH       OUTPUT = "Hi, " Username                                 :(END)
LOVE      OUTPUT = "How nice to meet you, " Username               :(END)
HATE      OUTPUT = "Oh. It's you, " Username
END

Para continuar solicitando información hasta que no haya más próximamente ...

          OUTPUT = "This program will ask you for personal names"
          OUTPUT = "until you press return without giving it one"
          NameCount = 0                                            :(GETINPUT)
AGAIN     NameCount = NameCount + 1
          OUTPUT = "Name " NameCount ": " PersonalName
GETINPUT  OUTPUT = "Please give me name " NameCount + 1 
          PersonalName = INPUT
          PersonalName LEN(1)                                      :S(AGAIN)
          OUTPUT = "Finished. " NameCount " names requested."
END

Implementaciones

La implementación clásica estaba 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 fue 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. 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 proporciona casi todas las facilidades que proporciona el intérprete.

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.

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. 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 del mainframe de IBM (incluso incluyendo el soporte de declaración FORMAT similar a Fortran) también es gratuita.

Aunque SNOBOL en sí no tiene características de programación estructuradas , 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 características que, aunque no utilizan palabras clave de programación estructurada tradicionales, pueden utilizarse para proporcionar muchas de las capacidades equivalentes que normalmente se consideran "programación estructurada", sobre todo construcciones de tipo if / then / else anidadas. 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, él, Griswold y Polonsky "finalmente llegaron al nombre de Intérprete de Expresión Simbólica SEXI".

Todo salió bien hasta que un día estaba enviando un trabajo por lotes para ensamblar el sistema y, como es normal 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 Comp Center lo miró y dijo: "Eso es lo que piensas" con humor.

¡¡Eso dejó en claro que necesitábamos otro nombre !! Nos sentamos y charlamos y bebimos café y jugamos 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 CONSEGUIMOS - SNOBOL" en el espíritu de todos los idiomas BOL . Luego estiramos nuestra mente para encontrar lo que representaba.

Los backronyms comunes de "SNOBOL" son "Lenguaje simbólico orientado a cadenas" o (como un cuasi-inicialismo ) "Lenguaje simbólico orientado a cadenas ".

Ver también

Referencias

Otras lecturas

  • Emmer, Mark B. SNOBOL4 +: El lenguaje SNOBOL4 para el usuario de una computadora personal . Englewood Cliffs, Nueva Jersey: Prentice Hall, 1985 ( ISBN  0-13-815119-9 ).
  • Gimpel, James F. Algoritmos en SNOBOL4 . Nueva York: Wiley, 1976 ( ISBN  0-471-30213-9 ); Publicado nuevamente Salida, CO: Catspaw, 1986 ( ISBN  0-939793-00-8 ).
  • Griswold, Ralph E. La macro implementación de SNOBOL4 . San Francisco, CA: WH Freeman and Company, 1972 ( ISBN  0-7167-0447-1 ).
  • Griswold, Ralph E., JF Poage e IP Polonsky. El lenguaje de programación SNOBOL4 . Englewood Cliffs, Nueva Jersey: Prentice Hall, 1968 ( ISBN  0-13-815373-6 ).
  • Griswold, Ralph E. Procesamiento de cadenas y listas en SNOBOL4: técnicas y aplicaciones . Englewood Cliffs, Nueva Jersey: Prentice Hall, 1975 ( ISBN  0-13-853010-6 ).
  • Hockey, Susan M. Snobol Programación para las Humanidades . Nueva York: Clarendon Press; Oxford: Oxford University Press, 1985 ( ISBN  0-19-824676-5 ).

enlaces externos