ALGOL W es un lenguaje de programación . Se basa en una propuesta de Niklaus Wirth y Tony Hoare para ALGOL X como sucesor de ALGOL 60. ALGOL W es una actualización relativamente sencilla del ALGOL 60 original, que añade tipos de datos de cadena , cadena de bits, número complejo y referencia a registros , así como el paso de parámetros por resultado , introduce la instrucción, reemplaza con la instrucción y, en general, mejora el lenguaje.whileswitchcase
La propuesta de Wirth se consideró un avance demasiado pequeño con respecto a ALGOL 60, y la propuesta más compleja de Adriaan van Wijngaarden, que más tarde se convertiría en ALGOL 68, fue seleccionada en una reunión muy polémica. Wirth publicó posteriormente su versión como A contribution to the development of ALGOL . [ 1 ] Con algunas pequeñas adiciones, esta se convirtió finalmente en ALGOL W.
Wirth supervisó una implementación de alta calidad para el IBM System/360 en la Universidad de Stanford , la cual tuvo una amplia distribución. [ 2 ] [ 3 ] La implementación se escribió en PL360 , un lenguaje ensamblador similar a ALGOL diseñado por Wirth. La implementación incluye importantes capacidades de depuración y análisis de rendimiento .
ALGOL W sirvió de base para el lenguaje Pascal , y su sintaxis resultará inmediatamente familiar para cualquiera con experiencia en Pascal. Las principales diferencias radican en las mejoras en el manejo de registros en Pascal y, curiosamente, en la pérdida de la capacidad de ALGOL W para definir la longitud de un array en tiempo de ejecución, una de las características más criticadas de Pascal.
Sintaxis y semántica
La sintaxis de ALGOL W se basa en un subconjunto del conjunto de codificación de caracteres EBCDIC . En ALGOL 60 , las palabras reservadas son elementos léxicos distintos, pero en ALGOL W son solo secuencias de caracteres y no necesitan ser separadas por espacios. Las palabras reservadas y los identificadores se separan por espacios. [ 2 ] De esta manera, la sintaxis de ALGOL W se asemeja a la de Pascal y lenguajes posteriores.
La descripción del lenguaje ALGOL W [ 4 ] define ALGOL W en una gramática de afijos que se asemeja a la forma Backus-Naur (BNF). Esta gramática formal fue precursora de la gramática de Van Wijngaarden . [ 1 ] [ 5 ]
Gran parte de la semántica de ALGOL W se define gramaticalmente: [ 4 ]
- Los identificadores se distinguen por su definición dentro del ámbito actual . Por ejemplo, un
⟨procedure identifier⟩es un identificador que ha sido definido por una declaración de procedimiento, un⟨label identifier⟩es un identificador que se está utilizando como etiqueta goto . - Los tipos de variables y expresiones se representan mediante afijos. Por ejemplo,
⟨τ function identifier⟩es la entidad sintáctica para una función que devuelve un valor de tipoτ, si un identificador se ha declarado como una función entera en el ámbito actual, entonces se expande a⟨integer function identifier⟩. - Los errores de tipo son errores gramaticales. Por ejemplo,
⟨integer expression⟩ / ⟨integer expression⟩y⟨real expression⟩ / ⟨real expression⟩son entidades sintácticas válidas pero distintas que representan expresiones, pero⟨real expression⟩ DIV ⟨integer expression⟩(es decir, la división entera realizada sobre un valor de punto flotante) es una entidad sintáctica no válida.
Ejemplo
Esto demuestra la funcionalidad de tipos de registro de ALGOL W , incluido el uso de la referencia nula . [ 2 ]
REGISTRO PERSONA ( CADENA ( 20 ) NOMBRE ; ENTERO EDAD ; LÓGICO MASCULINO ; REFERENCIA ( PERSONA ) PADRE , MADRE , HIJO MENOR , HERMANO MAYOR ) ;PROCEDIMIENTO REFERENCIA ( PERSONA ) TÍO MENOR ( REFERENCIA ( PERSONA ) R ) ; INICIO REFERENCIA ( PERSONA ) P , M ; P := HIJO MENOR ( PADRE ( PADRE ( R ))) ; MIENTRAS ( P ¬ = NULO ) Y ( ¬ HOMBRE ( P )) O ( P = PADRE ( R )) HACER P := HERMANO MAYOR ( P ) ; M := HIJO MENOR ( MADRE ( MADRE ( R ))) ; MIENTRAS ( M ¬ = NULO ) Y ( ¬ HOMBRE ( M )) HACER M := HERMANO MAYOR ( M ) ; SI P = NULO ENTONCES M SINO SI M = NULO ENTONCES P SINO SI EDAD ( P ) < EDAD ( M ) ENTONCES P SINO M FINReferencias
- 1 2 Wirth, Niklaus ; Hoare, CAR (junio de 1966). "Una contribución al desarrollo de ALGOL" . Communications of the ACM . 9 (6): 413– 432. doi : 10.1145/365696.365702 . S2CID 11901135. Recuperado el 7 de octubre de 2020 a través de Association for Computing Machinery .
- 1 2 3 Bauer, Henry R.; Becker, Sheldon I.; Graham, Susan L.; Forsythe, George E.; Satterthwaite, Edwin H. (marzo de 1968). Informe técnico número: CS-TR-68-89 . Departamento de Ciencias de la Computación (Informe). Universidad de Stanford.(Diversos documentos para la implementación de ALGOL W por parte de Stanford en 1972; este informe incluye la descripción del lenguaje ALGOL W.
- ↑ Sites, Richard. "Manual de referencia de ALGOL W" (PDF) . i.stanford.edu . Universidad de Stanford . Consultado el 24 de julio de 2022 .
- 1 2 Bauer, Henry R.; Becker, Sheldon I.; Graham, Susan L.; Satterthwaite, Edwin H.; Sites, Richard L. (junio de 1972). Descripción del lenguaje ALGOL W (PDF) (Informe).
- ↑ van Wijngaarden, Adriaan (22 de octubre de 1965). Diseño ortogonal y descripción de un lenguaje formal: MR76 (PDF) (Informe). Ámsterdam , Países Bajos: Centro Matemático. Archivado del original (PDF) el 29 de octubre de 2019. Recuperado el 7 de octubre de 2020 – vía Ernst-Abbe-Hochschule Jena , Universidad de Ciencias Aplicadas, Alemania.
Enlaces externos
- aw2c – Compilador ALGOL W para Linux por Glyn Webster
- asombro – versión actual de Glyn Webster
- ALGOL W @ Everything2 : descripción informal pero detallada del lenguaje por un antiguo usuario, con recuadros que ensalzan ALGOL W sobre Pascal como lenguaje de programación educativo.
- Listado del compilador ALGOL W de 1969 en bitsavers.org
- Manuales del Sistema de Terminales de Michigan , Volumen 16: ALGOL W en MTS
- Materiales ALGOL W Más de 200 programas y documentación de ALGOL W
- Lenguajes de programación creados en 1966
- Lenguajes de programación compilados
- Lenguajes de programación procedimental
- Lenguajes de programación estructurados
- dialecto ALGOL 60
- Tony Hoare