Atlas autokod

Atlas autokod
Paradigm Procedurmässigt , imperativt , strukturerat
Familj ALGOL
Designad av Tony Brooker , Derrick Morris
Utvecklare University of Manchester
Dök först upp 1965 ; 58 år sedan ( 1965 )
Maskinskrivningsdisciplin Statisk , stark
Omfattning Lexikalisk
Implementeringsspråk ALGOL 60
Plattform
Atlas English Electric KDF9
OS Handledare
Stora implementeringar
Edinburgh IMP
Influerad av
ALGOL 60

Atlas Autocode ( AA ) är ett programmeringsspråk som utvecklades runt 1965 vid University of Manchester . En variant av språket ALGOL , det utvecklades av Tony Brooker och Derrick Morris för Atlas- datorn. AA-kompilatorn skapades med hjälp av Brooker-Morris-Rohl- kompilatorn .

Ordet autokod var i grunden en tidig term för programmeringsspråk . Olika autokoder kan variera mycket.

Funktioner

AA var ett blockstrukturerat språk som innehöll explicit skrivna variabler , subrutiner och funktioner. Den utelämnade vissa ALGOL-funktioner som att skicka parametrar efter namn , vilket i ALGOL 60 betyder att man skickar minnesadressen till en kort subrutin (a thunk ) för att räkna om en parameter varje gång den nämns.

AA- kompilatorn kunde generera intervallkontroll för arrayåtkomster och tillåta en array att ha dimensioner som bestämdes vid körning , dvs en array kunde deklareras som heltalsarray Thing (i:j), där i och j var beräknade värden.

AA-rutiner på hög nivå skulle kunna inkludera maskinkod , antingen för att göra en inre loop mer effektiv eller för att utföra någon operation som annars inte kan göras lätt.

AA inkluderade en komplex datatyp för att representera komplexa tal , delvis på grund av påtryckningar från den elektriska ingenjörsavdelningen , eftersom komplexa tal används för att representera beteendet hos växelström . Den imaginära kvadratroten av -1 representerades av i , som behandlades som en fast komplex konstant = i .

Den komplexa datatypen släpptes när Atlas Autocode senare utvecklades till språket Edinburgh IMP . IMP var en förlängning av AA och användes för att skriva operativsystemet Edinburgh Multiple Access System ( EMAS) .

AA:s näst största anspråk på berömmelse (efter att ha varit stamfadern till IMP och EMAS) var att den hade många av funktionerna i den ursprungliga kompilatorkompilatorn . En variant av AA-kompilatorn inkluderade körtidsstöd för en top-down rekursiv descent parser . Parserstilen som användes i kompilatorkompilatorn användes kontinuerligt i Edinburgh från 60-talet fram till nästan år 2000 .

Andra autokoder utvecklades för Titan-datorn , en prototyp Atlas 2 vid Cambridge och Ferranti Mercury.

Syntax

Atlas Autocodes syntax liknade i stort sett ALGOL, även om den påverkades av utdataenheten som författaren hade tillgänglig, en Friden Flexowriter . Således tillät det symboler som ½ för 0,5 och det upphöjda 2 för i makten 2 . Flexowritern stödde överstötning och därför gjorde AA det också: upp till tre tecken kunde överträffas som en enda symbol. Till exempel hade teckenuppsättningen ingen -symbol, så exponentieringen var en överstötning av | och * . Ovannämnda understrykning av reserverade ord (sökord) skulle också kunna göras med överstrikning. Språket beskrivs i detalj i Atlas Autocode Reference Manual.

Andra Flexowriter-tecken som användes i AA var: α i flyttal, t.ex. 3.56α-7 för modern 3.56e-7 ; β betyder den andra halvan av ett 48-bitars Atlas- minnesord ; π för den matematiska konstanten pi .

När AA portades till den engelska Electric KDF9- datorn ändrades teckenuppsättningen till International Organization for Standardization (ISO) och den kompilatorn har återställts från ett gammalt pappersband av Edinburgh Computer History Project och är tillgänglig online, liksom en hög -kvalitetsskanning av den ursprungliga Edinburgh-versionen av Atlas Autocode-manualen.

Nyckelord i AA kunde skiljas från annan text genom att de var understrukna, vilket implementerades via överstreck i Flexowriter (jämför med fetstil i ALGOL). Det fanns också två stroppingregimer . Först fanns det ett läge med "versaler" där alla versaler (utanför strängar) behandlades som understrukna gemener. För det andra, i vissa versioner (men inte i den ursprungliga Atlas-versionen), var det möjligt att ta bort nyckelord genom att placera ett " % "-tecken framför dem, till exempel kan nyckelordet endofprogramme skrivas som %end %of %program eller % programmets slut . Detta minskade skrivningen avsevärt, på grund av att man bara behövde ett tecken, snarare än att överträffa hela sökordet. Som i ALGOL fanns det inga reserverade ord i språket eftersom nyckelord identifierades genom att understryka (eller stryka), inte genom att känna igen reserverade teckensekvenser. I satsen if token=if then result = token , finns både ett nyckelord if och en variabel med namnet if .

Liksom i ALGOL tillät AA blanksteg i variabelnamn, som heltals föregående värde . Mellanrummen var inte signifikanta och togs bort före analys i ett trivialt pre-lexing-steg som kallas " linjerekonstruktion" . Vad kompilatorn skulle se i exemplet ovan skulle vara " if token=if thenresult =token ". Mellanslag var möjliga på grund av dels att nyckelord särskiljdes på andra sätt, och dels för att källan bearbetades genom skannerlös parsning , utan en separat lexningsfas, vilket gjorde att den lexikala syntaxen kunde vara kontextkänslig.

Syntaxen för uttryck låter multiplikationsoperatorn utelämnas, t.ex. behandlades 3a som 3*a och a(i+j) behandlades som a*(i+j) om a inte var en array. I tvetydiga användningar togs det längsta möjliga namnet ( maximal munch ), till exempel behandlades ab inte som a*b , oavsett om a och b hade deklarerats eller inte.

I den ursprungliga Atlas Autocode för Atlas-datorn kunde Atlas maskinkodinstruktioner interpoleras mellan AA-satserna.