Atlas Autocode ( AA ) est un langage de programmation développé vers 1963 à l' Université de Manchester . Variante du langage ALGOL , il a été développé par Tony Brooker et Derrick Morris pour l' ordinateur Atlas . Les compilateurs AA et AB initiaux ont été écrits par Jeff Rohl et Tony Brooker en utilisant le compilateur Brooker-Morris , avec une implémentation ultérieure non-CC codée à la main (ABC) par Jeff Rohl.
Le terme Autocode est à l'origine un terme ancien désignant un langage de programmation . Les différents autocodes peuvent varier considérablement.
Caractéristiques
AA était un langage structuré en blocs qui comportait des variables , des sous-routines et des fonctions explicitement typées . Il omettait certaines fonctionnalités d'ALGOL telles que le passage de paramètres par nom , ce qui dans ALGOL 60 signifie passer l' adresse mémoire d'une sous-routine courte (un thunk ) pour recalculer un paramètre chaque fois qu'il est mentionné.
Le compilateur AA pouvait générer une vérification de plage pour les accès aux tableaux et permettait à un tableau d'avoir des dimensions déterminées au moment de l'exécution , c'est-à-dire qu'un tableau pouvait être déclaré comme , où et étaient des valeurs calculées. integer
array Thing (i:j)ij
Les routines AA de haut niveau pourraient inclure du code machine , soit pour rendre une boucle interne plus efficace, soit pour effectuer une opération qui autrement ne pourrait pas être effectuée facilement.
AA a inclus un complextype de données pour représenter les nombres complexes , en partie à cause de la pression du département de génie électrique , car les nombres complexes sont utilisés pour représenter le comportement du courant alternatif . La racine carrée de l'unité imaginaire de -1 était représentée par i, qui était traitée comme une constante complexe fixe = i .
Le complextype de données a été abandonné lorsque Atlas Autocode a évolué vers le langage Edinburgh IMP . IMP était une extension de AA et a été utilisé pour écrire le système d'exploitation Edinburgh Multiple Access System (EMAS) .
En plus d'être connu comme le géniteur d'IMP et d'EMAS, AA est connu pour avoir eu de nombreuses fonctionnalités du compilateur original Compiler . Une variante du compilateur AA incluait un support d'exécution pour un analyseur descendant récursif . Le style d' analyseur utilisé dans le compilateur Compiler a été utilisé en continu à Édimbourg des années 60 jusqu'à presque l'an 2000.
D'autres Autocodes ont été développés pour l' ordinateur Titan , un prototype Atlas 2 à Cambridge et le Ferranti Mercury.
Syntaxe
La syntaxe d'Atlas Autocode était en grande partie similaire à celle d'ALGOL, bien qu'elle ait été influencée par le périphérique de sortie dont disposait l'auteur, un Friden Flexowriter . Ainsi, il autorisait des symboles comme ½for .5et l'exposant 2for à la puissance 2. Le Flexowriter prenait en charge le surstriage et donc, AA le faisait également : jusqu'à trois caractères pouvaient être surstriés comme un seul symbole. Par exemple, le jeu de caractères n'avait pas ↑de symbole, donc l'exponentiation était une surstriation de |et *. Le soulignement susmentionné des mots réservés (mots-clés) pouvait également être effectué en utilisant le surstriage. Le langage est décrit en détail dans le Manuel de référence d'Atlas Autocode.
D'autres caractères Flexowriter qui ont été trouvés utiles dans AA étaient : αdans les nombres à virgule flottante, par exemple , 3.56α-7pour les nombres modernes3.56e-7 ; βpour signifier la seconde moitié d'un mot de mémoire Atlas 48 bits ; πpour la constante mathématique pi .
Lorsque AA a été porté sur l' ordinateur KDF9 d'English Electric , le jeu de caractères a été modifié pour devenir celui de l'Organisation internationale de normalisation (ISO). Ce compilateur a été récupéré à partir d'une vieille bande papier par le Edinburgh Computer History Project et est disponible en ligne, tout comme une numérisation de haute qualité de la version originale d'Édimbourg du manuel Atlas Autocode.
Les mots-clés dans AA étaient différenciables des autres textes par le fait qu'ils étaient soulignés, ce qui était implémenté par un surlignage dans Flexowriter (comparer au gras dans ALGOL). Il y avait également deux régimes de stropping . Tout d'abord, il y avait un mode "uppercasedelimiters" où toutes les lettres majuscules (en dehors des chaînes) étaient traitées comme des minuscules soulignées. Deuxièmement, dans certaines versions (mais pas dans la version originale d'Atlas), il était possible de stropping des mots-clés en plaçant un %signe " " devant eux, par exemple le mot-clé endofprogrammepouvait être tapé comme %end %of %programmeou %endofprogramme. Cela réduisait considérablement la saisie, car il ne fallait qu'un seul caractère, plutôt que de surligner le mot-clé entier. Comme dans ALGOL, il n'y avait pas de mots réservés dans la langue car les mots-clés étaient identifiés par un soulignement (ou un stropping), et non par la reconnaissance de séquences de caractères réservés. Dans l'instruction , il y a à la fois un mot-clé et une variable nommée . if token=if then
result = tokenifif
Comme dans ALGOL, AA autorisait les espaces dans les noms de variables, tels que integer previous value. Les espaces n'étaient pas significatifs et étaient supprimés avant l'analyse dans une étape de pré-analyse lexicale triviale appelée « reconstruction de ligne ». Ce que le compilateur verrait dans l'exemple ci-dessus serait « ». Les espaces étaient possibles en partie parce que les mots-clés étaient distingués d'autres manières, et en partie parce que la source était traitée par analyse sans scanner , sans phase d'analyse lexicale séparée, ce qui permettait à la syntaxe lexicale d'être sensible au contexte. iftoken=ifthenresult=token
La syntaxe des expressions permet d'omettre l'opérateur de multiplication, par exemple, 3aétait traité comme 3*a, et a(i+j)était traité comme a*(i+j)s'il ane s'agissait pas d'un tableau. Dans les utilisations ambiguës, le nom le plus long possible était pris ( maximal munch ), par exemple abn'était pas traité comme , que et ait été déclaré a*bou non .ab