Informe Algol-60

El informe Algol-60 fue redactado entre 1959 y 1960 por un equipo de expertos en lenguajes de programación formado por el editor Peter Naur y varios educadores y profesionales de Europa y Estados Unidos. El propósito del informe era desarrollar una descripción completa de un lenguaje algorítmico internacional para expresar procesos numéricos en una forma adecuada para su traducción a lenguajes de programación de ordenadores. No pretendía ser un lenguaje de programación, aunque posteriormente se implementó como lenguaje y se hizo popular en Europa.

Muchas versiones del lenguaje de programación Algol se implementaron en la década de 1960 y principios de 1970. También condujo al desarrollo de varios otros lenguajes de programación, como Pascal, implementado por Niklaus Wirth a principios de la década de 1970, y C.

El informe introdujo las nociones de un lenguaje de referencia, un lenguaje de publicación y una representación de hardware. El lenguaje de referencia era el estándar para el informe, los escritores de compiladores y la implementación de hardware. Dictaba la forma del lenguaje y su sintaxis. El lenguaje de publicación utilizaba el lenguaje de referencia con pequeños ajustes para las variaciones de publicación entre países y las variaciones de impresión y escritura, como el manejo de subíndices, superíndices y otras notaciones. La representación del hardware tenía en cuenta las características de la máquina. El lenguaje de referencia era el lenguaje de definición, y el lenguaje de publicación y la representación de hardware debían ser traducibles a él.

El propósito del informe y del lenguaje era dar una representación inequívoca a varios conceptos informáticos-en particular, el diseño de algoritmos, o ALGOrithmic Language 1960. Una versión posterior, Algol68, no fue tan popular o ampliamente implementada como Algol-60, aunque era más potente.

Algol es un lenguaje estructurado, que incorpora sentencias while, sentencias if-then-else, y otras construcciones que implementan la selección, la iteración, las sentencias básicas, la estructura de bloques y la recursión. Aunque se desarrolló sólo unos años después de FORTRAN (FORmula TRANslator), lanzado en 1957 por IBM, incorporó características que faltaban en FORTRAN -a saber, la recursividad y el lenguaje estructurado- y fue un gran avance en el ámbito de la programación.

Uno de los descendientes de Algol y FORTRAN fue el lenguaje BASIC (Beginner’s All-purpose Symbolic Instruction Code), desarrollado por John Kemeny y Thomas Kurtz de la Universidad de Dartmouth. BASIC era una especie de versión sin formato de FORTRAN para la informática interactiva y de iniciación. BASIC disfrutó de un largo reinado desde los años 70 hasta los 80 y recientemente se ha implementado en una forma bastante diferente, Visual Basic.

Un descendiente de Algol fue Pascal, que también disfrutó de un largo reinado como un lenguaje popular para implementar estructuras de datos y estudiar compiladores . No era un lenguaje de producción, sino una herramienta de enseñanza. C era un lenguaje de sistemas y condujo al desarrollo de C, un lenguaje orientado a objetos que sigue siendo popular.

El lenguaje Algol se describió en una notación llamada forma Backus normal o Backus-Naur (BNF). La notación fue sugerida por John Backus, que se basó en una notación de E. L. Post, un famoso lógico de la década de 1930. Es similar a la notación desarrollada por Noam Chomsky en 1957 para la lingüística, que se utilizó para implementar gramáticas. Una gramática es una forma sucinta e inequívoca de describir las lenguas. El uso de una notación formal en la teoría del lenguaje fue un gran avance.

La evolución de los lenguajes de programación fue sorprendente, pero no tanto como la evolución de la teoría de los compiladores. Poco después del informe Algol-60, varios teóricos de los compiladores utilizaron la notación gramatical para implementar compiladores de forma «automática». Estos compiladores se conocieron como compiladores-compiladores. Esfuerzos similares fueron el desarrollo de Lex, un analizador léxico, y Yacc («Yet another compiler-compiler») en los Laboratorios Bell a mediados de la década de 1970.

Entendiendo el Lenguaje de Programación

La gramática inglesa tiene ciertas construcciones, como una frase sustantiva, que está compuesta por otras construcciones, como un sustantivo y un modificador. Los lenguajes de programación tienen construcciones como las sentencias while y las expresiones aritméticas. Estas construcciones se indican con símbolos especiales llamados símbolos no terminales o meta símbolos del lenguaje.

Los símbolos que realmente aparecen en el lenguaje se llaman símbolos terminales. La terminología proviene de las estructuras de datos, o árboles de análisis sintáctico, utilizadas para implementar el lenguaje.

Un ejemplo es:

Esta gramática indica que una expresión aritmética, E, está formada por otras expresiones aritméticas y términos, T, sumados (E–>E T). Un término, T, se compone de un término por un factor, F, de manera que T–>T*F. Por último, un factor, F, es la expresión más básica, compuesta por expresiones entre paréntesis (el paréntesis E), identificadores (identificadores o variables definidas por el usuario), id, y constantes numéricas (num). La gramática da la forma de las expresiones aritméticas.

El ejemplo da una idea de la notación. Los elementos de la izquierda de la flecha se componen de los elementos de la derecha. En este caso, la E, la T y la F son los metasímbolos. Los otros símbolos,, *, (, ), y, en este caso, id y num, aparecen en el lenguaje. Son las palabras del lenguaje. En este caso, E es el símbolo de inicio o primer símbolo no terminal. Es la expresión más general que se define. Aunque la notación puede parecer incómoda al principio, es útil en el diseño del lenguaje, la teoría del compilador y la implementación.

El desarrollo de las gramáticas en informática dio un gran impulso al diseño e implementación de los lenguajes de programación.

Véase también Algoritmos; Lenguajes procedimentales; Programación.

Roger R. Flynn

Bibliografía

Naur, Peter, ed. «Revised Report on the Algorithmic Language Algol-60». Communications ACM 6, no. 1 (1963): 1-17.

Wexelblat, Richard L., ed. History of Programming Languages. New York: Academic Press, 1981.