Autocodificación Atlas
Atlas Autocode (AA) es un lenguaje de programación desarrollado alrededor de 1965 en la Universidad de Manchester. Una variante del lenguaje ALGOL, fue desarrollado por Tony Brooker y Derrick Morris para la computadora Atlas. El compilador AA se generó utilizando el compilador Brooker-Morris-Rohl Compiler.
La palabra Autocode fue básicamente un término temprano para lenguaje de programación. Los diferentes autocódigos pueden variar mucho.
Características
AA era un lenguaje estructurado en bloques que presentaba variables, subrutinas y funciones tipeadas explícitamente. Omitió algunas funciones de ALGOL como pasar parámetros por nombre, que en ALGOL 60 significa pasar la dirección de memoria de una subrutina corta (un thunk) para recalcular un parámetro cada vez que es mencionado.
El compilador AA podía generar una verificación de rango para los accesos a la matriz y permitía que una matriz tuviera dimensiones que se determinaban en tiempo de ejecución, es decir, una matriz podía declararse como entero matriz Cosa (i:j)
, donde i
y j
fueron valores calculados.
Las rutinas de alto nivel de AA podrían incluir código de máquina, ya sea para hacer que un bucle interno sea más eficiente o para efectuar alguna operación que de otro modo no se podría realizar fácilmente.
AA incluyó un tipo de datos complejo
para representar números complejos, en parte debido a la presión del departamento de ingeniería eléctrica, ya que los números complejos se utilizan para representar el comportamiento de la corriente alterna. La raíz cuadrada unitaria imaginaria de -1 se representó mediante i
, que se trató como una constante compleja fija = i.
El tipo de datos complex
se eliminó cuando Atlas Autocode evolucionó posteriormente al lenguaje Edinburgh IMP. IMP era una extensión de AA y se utilizó para escribir el sistema operativo Edinburgh Multiple Access System (EMAS).
La segunda mayor fama de AA (después de ser el progenitor de IMP y EMAS) fue que tenía muchas de las características del Compiler Compiler original. Una variante del compilador AA incluía soporte en tiempo de ejecución para un analizador descendente recursivo de arriba hacia abajo. El estilo de analizador utilizado en Compiler Compiler estuvo en uso continuo en Edimburgo desde los años 60 hasta casi el año 2000.
Se desarrollaron otros códigos automáticos para la computadora Titan, un prototipo de Atlas 2 en Cambridge y el Ferranti Mercury.
Sintaxis
La sintaxis de Atlas Autocode era muy similar a ALGOL, aunque estaba influenciada por el dispositivo de salida que el autor tenía disponible, un Friden Flexowriter. Por lo tanto, permitió símbolos como ½
para .5
y el superíndice 2 para a la potencia de 2. El Flexowriter admitía la superposición y, por lo tanto, AA también: se podían superponer hasta tres caracteres como un solo símbolo. Por ejemplo, el conjunto de caracteres no tenía el símbolo ↑
, por lo que la exponenciación fue una superposición de |
y *
. El subrayado mencionado anteriormente de palabras reservadas (palabras clave) también se podría realizar mediante sobretachado. El idioma se describe en detalle en el Manual de referencia de Atlas Autocode.
Otros caracteres Flexowriter que se encontraron útiles en AA fueron: α
en números de punto flotante, p. ej., 3.56α-7
para moderno 3.56e-7
; β
para significar la segunda mitad de una palabra de memoria Atlas de 48 bits; π
para la constante matemática pi.
Cuando AA se transfirió a la computadora English Electric KDF9, el conjunto de caracteres se cambió a la Organización Internacional de Normalización (ISO) y ese compilador se recuperó de una cinta de papel antigua por el Edinburgh Computer History Project y está disponible en línea, como es un escaneo de alta calidad de la versión original de Edimburgo del manual Atlas Autocode.
Las palabras clave en AA se distinguían del resto del texto al estar subrayadas, lo que se implementó a través de tachado en Flexowriter (en comparación con la negrita en ALGOL). También hubo dos regímenes de stropping. Primero, había un "delimitadores en mayúsculas" modo en el que todas las letras mayúsculas (cadenas exteriores) se trataban como minúsculas subrayadas. En segundo lugar, en algunas versiones (pero no en la versión original de Atlas), era posible definir palabras clave colocando un "%
" firmar delante de ellos, por ejemplo, la palabra clave endofprogramme
podría escribirse como %end %of %programme
o %endofprogramme. Esto redujo significativamente la escritura, debido a que solo se necesitaba un carácter, en lugar de tachar toda la palabra clave. Al igual que en ALGOL, no había palabras reservadas en el idioma ya que las palabras clave se identificaban subrayando (o marcando), no reconociendo secuencias de caracteres reservados. En la instrucción
if token=if then result = token
, hay una palabra clave if
y una variable llamada if
.
Al igual que en ALGOL, AA permitía espacios en los nombres de variables, como entero valor anterior
. Los espacios no eran significativos y se eliminaron antes del análisis en una etapa trivial de lectura previa llamada "reconstrucción de línea". Lo que el compilador vería en el ejemplo anterior sería "iftoken=ifthenresult=token
". Los espacios eran posibles debido en parte a que las palabras clave se distinguían de otras maneras y en parte porque la fuente se procesaba mediante un análisis sin análisis, sin una fase de lexing separada, lo que permitía que la sintaxis léxica fuera sensible al contexto.
La sintaxis de las expresiones permite omitir el operador de multiplicación, por ejemplo, 3a
se trató como 3*a
, y a(i+j)
se trataba como a*(i+j)
si a
no era una matriz. En usos ambiguos, se tomaba el nombre más largo posible (máximo munch), por ejemplo, ab
no se trataba como a*b
, tanto si a
> y b
habían sido declarados.
En el Atlas Autocode original para la computadora Atlas, las instrucciones del código de máquina Atlas podían interpolarse entre las declaraciones AA.
Contenido relacionado
Analizador LR canónico
ISCSI
IBMAIX