Algol-60 Verslag
Het Algol-60 verslag werd tussen 1959 en 1960 geschreven door een team van deskundigen op het gebied van programmeertaal, bestaande uit redacteur Peter Naur en verscheidene opleiders en mensen uit de praktijk in Europa en de Verenigde Staten. Het doel van het rapport was een volledige beschrijving te ontwikkelen van een internationale algoritmische taal voor het uitdrukken van numerieke processen in een vorm die geschikt was voor vertaling in computerprogrammeertalen. Het was niet bedoeld als programmeertaal, hoewel het later wel als taal werd geïmplementeerd en populair werd in Europa.
Vele versies van de programmeertaal Algol werden geïmplementeerd in de jaren zestig en begin jaren zeventig. Het leidde ook tot de ontwikkeling van verschillende andere programmeertalen, zoals Pascal, geïmplementeerd door Niklaus Wirth in de vroege jaren 1970, en C.
Het rapport introduceerde de begrippen van een referentietaal, een publicatietaal, en een hardware representatie. De referentie taal was de standaard voor het rapport, compiler schrijvers, en hardware implementatie. Het dicteerde de vorm van de taal en zijn syntaxis. De publicatie taal gebruikte de referentie taal met kleine aanpassingen voor publicatie variaties tussen landen en druk en schrijf variaties zoals de behandeling van subscripts, superscripts, en andere notatie. De hardwarematige weergave hield rekening met de kenmerken van de machine. De referentietaal was de definiërende taal, en de publicatietaal en de hardware-voorstelling moesten daarnaar kunnen worden vertaald.
Het doel van het rapport en de taal was een ondubbelzinnige voorstelling te geven van verschillende computerconcepten – met name het ontwerpen van algoritmen, of ALGOrithmic Language 1960. Een latere versie, Algol68, was niet zo populair of wijdverbreid geïmplementeerd als Algol-60, hoewel het krachtiger was.
Algol is een gestructureerde taal, die while-statements, if-then-else-statements, en andere constructen bevat die selectie, iteratie, basis-statements, blokstructuur, en recursie implementeren. Hoewel het slechts een paar jaar na FORTRAN (FORmula TRANslator) werd ontwikkeld, dat in 1957 door IBM werd uitgebracht, bevatte het functies die in FORTRAN ontbraken – namelijk de recursie en de gestructureerde taal – en was het een belangrijke vooruitgang op programmeergebied.
Een van de afstammelingen van Algol en FORTRAN was BASIC (Beginner’s All-purpose Symbolic Instruction Code) taal, ontwikkeld door John Kemeny en Thomas Kurtz van de Dartmouth University. BASIC was een soort format-statement-vrije versie van FORTRAN voor interactief en beginnend computergebruik. BASIC genoot een lange heerschappij van de jaren 1970 tot 1980 en is recentelijk geïmplementeerd in een heel andere vorm, Visual Basic.
Een afstammeling van Algol was Pascal, die ook een lange heerschappij had als een populaire taal voor het implementeren van datastructuren en het bestuderen van compilers . Het was geen produktietaal, maar een leermiddel. C was een systeemtaal en leidde tot de ontwikkeling van C, een objectgeoriënteerde taal die nog steeds populair is.
De Algol taal werd beschreven in een notatie die Backus normal of Backus-Naur vorm (BNF) werd genoemd. De notatie werd voorgesteld door John Backus, die deze baseerde op een notatie van E.L. Post, een beroemd logicus in de jaren 1930. Zij was vergelijkbaar met de notatie die Noam Chomsky in 1957 voor de taalkunde ontwikkelde en die werd gebruikt om grammatica’s te implementeren. Een grammatica is een beknopte, ondubbelzinnige manier om talen te beschrijven. Het gebruik van een formele notatie in de taaltheorie was een belangrijke vooruitgang.
De evolutie van programmeertalen was opvallend, maar niet zo verbluffend als de evolutie van de compilertheorie. Kort na het Algol-60 rapport, gebruikten verschillende compiler theoretici de grammatica notatie om compilers op een “automatische” manier te implementeren. Deze compilers stonden bekend als compiler-compilers. Soortgelijke inspanningen waren de ontwikkeling van Lex, een lexicale analyzer, en Yacc (“Yet another compiler-compiler”) bij Bell Laboratories in het midden van de jaren 1970.
Understanding Programming Language
Engelse grammatica heeft bepaalde constructen, zoals een zelfstandig naamwoord zinsdeel, dat is samengesteld uit andere constructen, zoals een zelfstandig naamwoord en een modifier. Programmeertalen hebben constructen zoals while-statements, en rekenkundige uitdrukkingen. Deze constructen worden aangegeven met speciale symbolen, die de niet-terminale of meta-symbolen van de taal worden genoemd.
De symbolen die werkelijk in de taal voorkomen worden terminale symbolen genoemd. De terminologie is afkomstig van de datastructuren, of parse trees, die worden gebruikt om de taal te implementeren.
Een voorbeeld is:
Deze grammatica geeft aan dat een rekenkundige uitdrukking, E, bestaat uit andere rekenkundige uitdrukkingen en termen, T, bij elkaar opgeteld (E–>E T). Een term, T, is samengesteld uit een term maal een factor, F, zodat T–>T*F. Een factor, F, tenslotte, is de meest basale uitdrukking, bestaande uit parenthese uitdrukkingen (de parenthese E), identifiers (door de gebruiker gedefinieerde identifier of variabelen), id, en numerieke constanten (num). De grammatica geeft de vorm van de rekenkundige uitdrukkingen.
Het voorbeeld geeft een voorproefje van de notatie. De items aan de linkerkant van de pijl zijn samengesteld uit de items aan de rechterkant. In dit geval zijn de E, T, en F de meta-symbolen. De andere symbolen, *, (, ), en, in dit geval, id en num, komen in de taal voor. Zij zijn de woorden van de taal. In dit geval is E het beginsymbool of eerste niet-terminale symbool. Het is de meest algemene uitdrukking die wordt gedefinieerd. Hoewel de notatie op het eerste gezicht onhandig lijkt, is ze nuttig bij taalontwerp, compilertheorie en implementatie.
De ontwikkeling van grammatika’s in de informatica gaf een grote impuls aan het ontwerpen en implementeren van programmeertaal.
Zie ook Algoritmen; Procedurele Talen; Programmeren.
Roger R. Flynn
Bibliografie
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.