ALGOL W es un lenguaje de programación . Se basa en una propuesta para ALGOL X de Niklaus Wirth y Tony Hoare como sucesor de ALGOL 60 . ALGOL W es una actualización relativamente simple del ALGOL 60 original, que agrega cadenas , cadenas de bits, números complejos y referencias para registrar tipos de datos y paso de parámetros de llamada por resultado , introduciendo la declaración, reemplazándola con la declaración y, en general, reforzando el idioma.while
switch
case
La entrada de Wirth se consideró un avance muy pequeño sobre ALGOL 60, y la entrada 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 Una contribución al desarrollo de ALGOL . [1] Con una serie de pequeñas adiciones, esto finalmente se convirtió en ALGOL W.
Wirth supervisó una implementación de alta calidad para IBM System/360 en la Universidad de Stanford que tuvo una amplia distribución. [2] [3] La implementación fue escrita en PL360 , un lenguaje ensamblador similar a ALGOL diseñado por Wirth. La implementación incluye capacidades influyentes de depuración y creación de perfiles .
ALGOL W sirvió como base para el lenguaje Pascal , y la sintaxis de ALGOL W resultará inmediatamente familiar para cualquier persona con experiencia en Pascal. Las diferencias clave son las mejoras en el manejo de registros en Pascal y, curiosamente, la pérdida de la capacidad de ALGOL W para definir la longitud de una matriz en tiempo de ejecución, que es una de las características de las que más quejas hay en Pascal.
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 acortadas . Las palabras reservadas y los identificadores están separados por espacios. [2] En estos aspectos, la sintaxis de ALGOL W se parece 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]
⟨procedure identifier⟩
es un identificador que ha sido definido mediante una declaración de procedimiento, a ⟨label identifier⟩
es un identificador que se utiliza como etiqueta Goto .⟨τ function identifier⟩
es la entidad sintáctica para una función que devuelve un valor de tipo τ
, si un identificador ha sido declarado como una función entera en el alcance actual, entonces se expande a ⟨integer function identifier⟩
.⟨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 de enteros realizada en un valor de punto flotante) es una entidad sintáctica no válida.Esto demuestra la función de tipo de registro de ALGOL W.
REGISTRAR PERSONA ( STRING ( 20 ) NOMBRE ; INTEGER EDAD ; LÓGICO MASCULINO ; REFERENCIA ( PERSONA ) PADRE , MADRE , HIJO MÁS JOVEN , HERMANO MAYOR ) ; REFERENCIA ( PERSONA ) PROCEDIMIENTO TÍO JOVEN ( REFERENCIA ( PERSONA ) R ) ; COMENZAR REFERENCIA ( PERSONA ) P , M ; P := HIJOS MÁS JOVEN ( PADRE ( PADRE ( R ))) ; MIENTRAS ( P ¬ = NULL ) AND ( ¬ MASCULINO ( P )) O ( P = PADRE ( R )) DO P := HERMANO MAYOR ( P ) ; M := HIJOS JOVEN ( MADRE ( MADRE ( R ))) ; MIENTRAS ( M ¬ = NULL ) AND ( ¬ MALE ( M )) DO M := HERMANO MAYOR ( M ) ; SI P = NULO ENTONCES M ELSE SI M = NULO ENTONCES P ELSE SI EDAD ( P ) < EDAD ( M ) ENTONCES P ELSE M END