Algol-60-rapport
Algol-60-rapporten blev skrevet mellem 1959 og 1960 af et team af programmeringssprogseksperter bestående af redaktør Peter Naur og adskillige undervisere og praktikere fra Europa og USA. Formålet med rapporten var at udvikle en komplet beskrivelse af et internationalt algoritmesprog til at udtrykke numeriske processer i en form, der er egnet til oversættelse til computerprogrammeringssprog. Det var ikke meningen, at det skulle være et programmeringssprog, selv om det efterfølgende blev implementeret som et sprog og blev populært i Europa.
Mange versioner af Algol-programmeringssproget blev implementeret i 1960’erne og begyndelsen af 1970’erne. Det førte også til udviklingen af flere andre programmeringssprog, f.eks. Pascal, der blev implementeret af Niklaus Wirth i begyndelsen af 1970’erne, og C.
I rapporten blev begreberne referencesprog, publikationssprog og hardwarerepræsentation indført. Referencesproget var standarden for rapporten, compilerforfattere og hardwareimplementering. Det dikterede sprogets form og dets syntaks . Publikationssproget anvendte referencesproget med mindre justeringer for at tage højde for publikationsvariationer i de forskellige lande og for variationer i trykning og skrivning, f.eks. håndtering af subscripts, superscripts og anden notation. Hardwarerepræsentationen tog hensyn til maskinens egenskaber. Referencesproget var det definerende sprog, og publikationssproget og hardwarerepræsentationen skulle kunne oversættes til det.
Sigtet med rapporten og sproget var at give en utvetydig repræsentation af forskellige computerkoncepter – især algoritmedesign, eller ALGOrithmic Language 1960. En efterfølgende version, Algol68, var ikke så populær eller bredt implementeret som Algol-60, selv om den var mere kraftfuld.
Algol er et struktureret sprog, der indeholder while-statements, if-then-else-statements og andre konstruktioner, der implementerer selektion, iteration, grundlæggende statements, blokstruktur og rekursion. Selv om det kun blev udviklet få år efter FORTRAN (FORmula TRANslator), der blev udgivet i 1957 af IBM, indeholdt det funktioner, der manglede i FORTRAN – nemlig rekursion og det strukturerede sprog – og var et stort fremskridt inden for programmering.
En af efterkommerne af Algol og FORTRAN var BASIC-sproget (Beginner’s All-purpose Symbolic Instruction Code), der blev udviklet af John Kemeny og Thomas Kurtz fra Dartmouth University. BASIC var en slags format-statement-fri version af FORTRAN til interaktive og begyndende databehandlinger. BASIC havde en lang regeringstid fra 1970’erne til 1980’erne og er for nylig blevet implementeret i en helt anden form, Visual Basic.
En efterkommer af Algol var Pascal, som også havde en lang regeringstid som et populært sprog til implementering af datastrukturer og til undersøgelse af compilere. Det var ikke et produktionssprog, men et undervisningsredskab. C var et systemsprog og førte til udviklingen af C, et objektorienteret sprog, der stadig er populært.
Algol-sproget blev beskrevet i en notation kaldet Backus normal- eller Backus-Naur-form (BNF). Notationen blev foreslået af John Backus, som baserede den på en notation af E. L. Post, en berømt logiker i 1930’erne. Den lignede den notation, som Noam Chomsky udviklede i 1957 inden for lingvistik, og som blev brugt til at implementere grammatikker. En grammatik er en kortfattet, utvetydig måde at beskrive sprog på. Brugen af en formel notation i sprogteori var et stort fremskridt.
Udviklingen af programmeringssprog var slående, men ikke så fantastisk som udviklingen af compilerteori. Kort efter Algol-60-rapporten brugte flere compilerteoretikere grammatiknotationen til at implementere compilere på en “automatisk” måde. Disse compilere blev kendt som compiler-compilere. Lignende bestræbelser var udviklingen af Lex, en leksikalsk analysator, og Yacc (“Yet another compiler-compiler”) på Bell Laboratories i midten af 1970’erne.
Forståelse af programmeringssprog
Den engelske grammatik har visse konstruktioner, f.eks. en substantivfrase, som er sammensat af andre konstruktioner, f.eks. et substantiv og en modificator. Programmeringssprog har konstruktioner som while-statements og aritmetiske udtryk. Disse konstruktioner angives ved hjælp af særlige symboler, der kaldes sprogets nonterminale symboler eller metasymboler.
De symboler, der rent faktisk optræder i sproget, kaldes terminalsymboler. Terminologien stammer fra de datastrukturer, eller parse trees, der anvendes til at implementere sproget.
Et eksempel er:
Denne grammatik angiver, at et aritmetisk udtryk, E, består af andre aritmetiske udtryk og termer, T, lagt sammen (E–>E T). Et udtryk, T, er sammensat af et udtryk gange en faktor, F, således at T–>T*F. Endelig er en faktor, F, det mest grundlæggende udtryk, der består af parentesudtryk (det parenteserede E), identifikatorer (brugerdefinerede identifikatorer eller variabler), id, og numeriske konstanter (num). Grammatikken giver formen for de aritmetiske udtryk.
Eksemplet giver et indtryk af notationen. Elementerne til venstre for pilen er sammensat af elementerne til højre. I dette tilfælde er E, T og F meta-symboler. De andre symboler,, *, *, (, ) og, i dette tilfælde, id og num, optræder i sproget. De er sprogets ord. I dette tilfælde er E startsymbolet eller det første ikke-terminale symbol. Det er det mest generelle udtryk, der defineres. Selv om notationen kan virke besværlig i starten, er den nyttig i sprogdesign, compilerteori og implementering.
Udviklingen af grammatikker inden for datalogien gav et stort skub til design og implementering af programmeringssprog.
Se også Algoritmer; Procedurelle sprog; Programmering.
Roger R. Flynn
Bibliografi
Naur, Peter, ed. “Revised Report on the Algorithmic Language Algol-60.” Communications ACM 6, no. 1 (1963): 1-17.
Wexelblat, Richard L., ed. History of Programming Languages. New York: Academic Press, 1981.