ALGOL W es un lenguaje de programación . Se basa en una propuesta de 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 a tipos de datos de registros y paso de parámetros por llamada por resultado , introducción de la declaración, reemplazo por la declaración y, en general, ajuste el lenguaje.while
switch
case
La propuesta de Wirth se consideró demasiado pequeña como para suponer un avance respecto de ALGOL 60, y en una reunión muy polémica se seleccionó la propuesta más compleja de Adriaan van Wijngaarden , que más tarde se convertiría en ALGOL 68. Wirth publicó más tarde su versión como Una contribución al desarrollo de ALGOL . [1] Con una serie de pequeñas adiciones, esta versión acabó convirtiéndose en ALGOL W.
Wirth supervisó una implementación de alta calidad para IBM System/360 en la Universidad de Stanford que se distribuyó ampliamente. [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 creación de perfiles .
ALGOL W sirvió como base para el lenguaje Pascal , y la sintaxis de ALGOL W resultará familiar de inmediato 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 Pascal que más quejas suscita.
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 recortadas . Las palabras reservadas y los identificadores están separados por espacios. [2] De esta manera, la sintaxis de ALGOL W se parece a la de Pascal y a los 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 está definida gramaticalmente: [4]
⟨procedure identifier⟩
es un identificador que se ha definido mediante una declaración de procedimiento, a ⟨label identifier⟩
es un identificador que se utiliza como etiqueta de destino .⟨τ function identifier⟩
es la entidad sintáctica de una función que devuelve un valor de tipo τ
, si se ha declarado un identificador como una función entera en el ámbito 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 facilidad de tipo de registro de ALGOL W.
REGISTRAR PERSONA ( CADENA ( 20 ) NOMBRE ; ENTERO EDAD ; LÓGICO MASCULINO ; REFERENCIA ( PERSONA ) PADRE , MADRE , HIJO MENOR , HERMANO MAYOR ) ; REFERENCIA ( PERSONA ) PROCEDIMIENTO TÍO MENOR ( REFERENCIA ( PERSONA ) R ) ; COMIENZO REFERENCIA ( PERSONA ) P , M ; P := HIJOMENOR ( PADRE ( PADRE ( R ))) ; MIENTRAS ( P¬ = NULO ) Y ( ¬ HOMBRE ( P )) O ( P = PADRE ( R )) HACER P : = HERMANO MAYOR ( P ) ; M := HIJOMENOR ( MADRE ( MADRE ( R ))) ; MIENTRAS ( M¬ = NULO ) Y ( ¬ HOMBRE ( M )) HACER M := HERMANO MAYOR ( M ) ; SI P = NULO ENTONCES M DE LO CONTRARIO SI M = NULO ENTONCES P DE LO CONTRARIO SI EDAD ( P ) < EDAD ( M ) ENTONCES P DE LO CONTRARIO M FIN