Algol-60-raportti

Algol-60-raportin kirjoitti vuosina 1959-1960 ohjelmointikielten asiantuntijaryhmä, johon kuuluivat päätoimittaja Peter Naur sekä useita eurooppalaisia ja yhdysvaltalaisia kouluttajia ja ammattilaisia. Raportin tarkoituksena oli kehittää täydellinen kuvaus kansainvälisestä algoritmisesta kielestä numeeristen prosessien ilmaisemiseksi muodossa, joka soveltuu käännettäväksi tietokoneiden ohjelmointikieliin. Sitä ei ollut tarkoitettu ohjelmointikieleksi, vaikka se sittemmin toteutettiinkin kielenä ja siitä tuli suosittu Euroopassa.

Algol-ohjelmointikielestä toteutettiin 1960-luvulla ja 1970-luvun alussa useita versioita. Se johti myös useiden muiden ohjelmointikielten, kuten Niklaus Wirthin 1970-luvun alussa toteuttaman Pascalin ja C:n, kehittämiseen.

Raportissa esiteltiin viitekielen, julkaisukielen ja laitteistoesityksen käsitteet. Viitekieli oli raportin, kääntäjäkirjoittajien ja laitteistototeutuksen standardi. Se saneli kielen muodon ja syntaksin . Julkaisukielessä käytettiin viitekieltä pienin mukautuksin eri maiden julkaisuvaihteluiden sekä paino- ja kirjoitusvaihteluiden, kuten ala- ja ylämerkkien ja muiden merkintöjen käsittelyn, huomioon ottamiseksi. Laitteistoesityksessä otettiin huomioon koneen ominaisuudet. Viitekieli oli määrittelevä kieli, ja julkaisukielen ja laitteistoesityksen oli oltava käännettävissä siihen.

Raportin ja kielen tarkoituksena oli antaa yksiselitteinen esitys erilaisille tietokonekäsitteille – erityisesti algoritmien suunnittelulle eli ALGOrithmic Language 1960. Myöhempi versio, Algol68, ei ollut yhtä suosittu tai laajalti käytössä kuin Algol-60, vaikka se olikin tehokkaampi.

Algol on strukturoitu kieli, joka sisältää while-lausekkeita, if-then-else-lausekkeita ja muita konstruktioita, jotka toteuttavat valintaa, iterointia, peruslausekkeita, lohkorakennetta ja rekursiota. Vaikka se kehitettiin vain muutama vuosi IBM:n vuonna 1957 julkaiseman FORTRANin (FORmula TRANslator) jälkeen, se sisälsi ominaisuuksia, jotka puuttuivat FORTRANista – nimittäin rekursion ja strukturoidun kielen – ja oli merkittävä edistysaskel ohjelmoinnissa.

Yksi Algolin ja FORTRANin jälkeläisistä oli BASIC-kieli (Beginner’s All-purpose Symbolic Instruction Code), jonka kehittelivät John Kemeny ja Thomas Kurtz Dartmouthin yliopistosta. BASIC oli eräänlainen FORTRANin formaatti-lausekkeista vapaa versio interaktiiviseen ja aloittelevaan tietojenkäsittelyyn. BASIC nautti pitkää valtakautta 1970-luvulta 1980-luvulle, ja se on viime aikoina toteutettu aivan eri muodossa, Visual Basicina.

Algolin jälkeläinen oli Pascal, joka myös nautti pitkää valtakautta suosittuna kielenä tietorakenteiden toteuttamiseen ja kääntäjien tutkimiseen. Se ei ollut tuotantokieli vaan opetusväline. C oli järjestelmäkieli, ja se johti edelleen suositun oliosuuntautuneen kielen C:n kehitykseen.

Algol-kieli kuvattiin merkintätavalla, jota kutsutaan Backus-normaaliksi tai Backus-Naur-muodoksi (BNF). Merkintätapaa ehdotti John Backus, joka perusti sen 1930-luvulla kuuluisan loogikon E. L. Postin merkintätapaan. Se oli samankaltainen kuin Noam Chomskyn vuonna 1957 kielitieteeseen kehittämä merkintätapa, jota käytettiin kielioppien toteuttamiseen. Kielioppi on tiivis, yksiselitteinen tapa kuvata kieliä. Formaalin notaation käyttö kieliteoriassa oli merkittävä edistysaskel.

Ohjelmointikielten kehitys oli silmiinpistävää, mutta ei yhtä huikeaa kuin kääntäjäteorian kehitys. Pian Algol-60-raportin jälkeen useat kääntäjäteoreetikot käyttivät kielioppinotaatiota toteuttaakseen kääntäjiä ”automaattisesti”. Näitä kääntäjiä kutsuttiin kääntäjäkompilaattoreiksi. Samankaltaisia pyrkimyksiä olivat Lexin, leksikaalisen analysaattorin, ja Yaccin (”Yet another compiler-compiler”) kehittäminen Bell Laboratoriesissa 1970-luvun puolivälissä.

Ohjelmointikielen ymmärtäminen

Englannin kieliopissa on tietyt konstruktiot, kuten substantiivilause, joka muodostuu toisista konstruktioista, kuten substantiivista ja modifioivasta sanasta. Ohjelmointikielissä on konstruktioita, kuten while-lauseet ja aritmeettiset lausekkeet. Nämä konstruktiot merkitään erityisillä symboleilla, joita kutsutaan kielen nonterminaalisymboleiksi tai metasymboleiksi.

Symboleita, jotka todella esiintyvät kielessä, kutsutaan terminaalisymboleiksi. Terminologia tulee kielen toteuttamiseen käytetyistä tietorakenteista eli jäsennyspuista.

Esimerkki on:

Tämä kielioppi ilmaisee, että aritmeettinen lauseke, E, koostuu muista yhteenlasketuista aritmeettisista lausekkeista ja termeistä, T, (E–>E T). Termi, T, koostuu termistä kertaa tekijä, F, niin että T–>T*F. Lopuksi,tekijä, F, on perustavanlaatuisin lauseke, joka koostuu sulkeistetuista lausekkeista (sulkeistettu E), tunnisteista (käyttäjän määrittelemä tunniste tai muuttuja), id, ja numeerisista vakioista (num). Kielioppi antaa aritmeettisten lausekkeiden muodon.

Esimerkki antaa maistiaisen notaatiosta. Nuolen vasemmalla puolella olevat kohteet koostuvat oikealla olevista kohteista. Tässä tapauksessa E, T ja F ovat metasymboleja. Muut symbolit,, *, (, ) ja, tässä tapauksessa, id ja num, esiintyvät kielessä. Ne ovat kielen sanoja. Tässä tapauksessa E on aloitussymboli tai ensimmäinen ei-terminaalinen symboli. Se on yleisin määriteltävä lauseke. Vaikka merkintätapa voi aluksi tuntua hankalalta, se on hyödyllinen kielen suunnittelussa, kääntäjien teoriassa ja toteutuksessa.

Kielioppien kehittäminen tietojenkäsittelytieteessä antoi suuren sysäyksen ohjelmointikielten suunnittelulle ja toteutukselle.

katso myös Algoritmit; Proseduraaliset kielet; Ohjelmointi.

Roger R. Flynn

Bibliografia

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.

.