Zpráva Algol-60

Zpráva Algol-60 byla sepsána v letech 1959-1960 týmem odborníků na programovací jazyky, který tvořil editor Peter Naur a několik pedagogů a praktiků z Evropy a Spojených států. Cílem zprávy bylo vypracovat úplný popis mezinárodního algoritmického jazyka pro vyjadřování numerických procesů ve formě vhodné pro překlad do počítačových programovacích jazyků. Nebyl zamýšlen jako programovací jazyk, i když byl následně jako jazyk implementován a stal se v Evropě populárním.

V šedesátých a počátkem sedmdesátých let bylo implementováno mnoho verzí programovacího jazyka Algol. Vedl také k vývoji několika dalších programovacích jazyků, například Pascalu, který počátkem 70. let implementoval Niklaus Wirth, a jazyka C.

Zpráva zavedla pojmy referenční jazyk, publikační jazyk a hardwarová reprezentace. Referenční jazyk byl standardem pro zprávu, tvůrce kompilátorů a hardwarovou implementaci. Diktoval podobu jazyka a jeho syntaxi . Publikační jazyk používal referenční jazyk s drobnými úpravami pro publikační rozdíly v různých zemích a rozdíly v tisku a psaní, jako je zacházení s indexy, horními indexy a dalšími zápisy. Hardwarová reprezentace zohledňovala vlastnosti stroje. Referenční jazyk byl definičním jazykem a publikační jazyk a hardwarová reprezentace do něj musely být přeložitelné.

Účelem zprávy a jazyka bylo poskytnout jednoznačnou reprezentaci různým počítačovým konceptům – zejména návrhu algoritmů neboli ALGOrithmic Language 1960. Následující verze, Algol68, nebyla tak populární a široce implementovaná jako Algol-60, i když byla výkonnější.

Algol je strukturovaný jazyk, obsahující příkazy while, if-then-else-statements a další konstrukce, které implementují výběr, iteraci, základní příkazy, blokovou strukturu a rekurzi. Přestože byl vyvinut jen několik let po jazyku FORTRAN (FORmula TRANslator), vydaném v roce 1957 společností IBM, obsahoval vlastnosti, které v jazyce FORTRAN chyběly – jmenovitě rekurzi a strukturovaný jazyk – a představoval významný pokrok v oblasti programování.

Jedním z potomků jazyků Algol a FORTRAN byl jazyk BASIC (Beginner’s All-purpose Symbolic Instruction Code), který vyvinuli John Kemeny a Thomas Kurtz z Dartmouth University. BASIC byl jakousi bezformátovou verzí FORTRANu pro interaktivní a počáteční výpočty. BASIC se těšil dlouhé vládě od sedmdesátých do osmdesátých let a nedávno byl implementován ve zcela jiné podobě, Visual Basicu.

Potomkem Algolu byl Pascal, který se také těšil dlouhé vládě jako populární jazyk pro implementaci datových struktur a studium překladačů . Nejednalo se o produkční jazyk, ale o výukový nástroj. Jazyk C byl systémovým jazykem a vedl k vývoji jazyka C, objektově orientovaného jazyka, který je stále populární.

Jazyk Algol byl popsán v notaci zvané Backusova normální nebo Backusova-Naurova forma (BNF). Tuto notaci navrhl John Backus, který ji založil na notaci E. L. Posta, slavného logika 30. let 20. století. Byla podobná notaci, kterou v roce 1957 vyvinul Noam Chomsky pro lingvistiku a která se používala k implementaci gramatik. Gramatika je stručný, jednoznačný způsob popisu jazyků. Použití formálního zápisu v teorii jazyků bylo velkým pokrokem.

Vývoj programovacích jazyků byl ohromující, ale ne tak ohromující jako vývoj teorie překladačů. Krátce po zprávě o Algolu-60 použilo několik teoretiků překladačů gramatickou notaci k „automatické“ implementaci překladačů. Tyto kompilátory byly známy jako kompilátory-kompilátory. Podobným úsilím byl vývoj Lex, lexikálního analyzátoru, a Yacc („Yet another compiler-compiler“) v Bellových laboratořích v polovině 70. let 20. století.

Understanding Programming Language

Anglická gramatika má určité konstrukce, například podstatnou větu, která se skládá z jiných konstrukcí, například podstatného jména a modifikátoru. Programovací jazyky mají konstrukce, jako jsou příkazy while a aritmetické výrazy. Tyto konstrukce jsou označeny speciálními symboly, které se nazývají neterminální nebo metasymboly jazyka.

Symboly, které se v jazyce skutečně vyskytují, se nazývají terminální symboly. Terminologie pochází z datových struktur neboli parsovacích stromů, které se používají k implementaci jazyka.

Příklad:

Tato gramatika označuje, že aritmetický výraz E se skládá z jiných aritmetických výrazů a termínů T, které se sčítají (E–>E T). Výraz, T, se skládá z výrazu krát činitel, F, takže T–>T*F. A konečně faktor, F, je nejzákladnější výraz, který se skládá z výrazů v závorkách (závorka E), identifikátorů (uživatelský identifikátor nebo proměnné), id a číselných konstant (num). Gramatika udává podobu aritmetických výrazů.

Příklad uvádí příchuť zápisu. Položky vlevo od šipky jsou složeny z položek vpravo. V tomto případě jsou E, T a F metasymboly. Ostatní symboly,, *, (, ) a v tomto případě id a num, se objevují v jazyce. Jsou to slova jazyka. V tomto případě je E počáteční symbol nebo první neterminální symbol. Je to nejobecnější definovaný výraz. Ačkoli se zápis může zdát na první pohled nepohodlný, je užitečný při návrhu jazyka, teorii překladačů a implementaci.

Vývoj gramatik v informatice dal velký impuls k návrhu a implementaci programovacích jazyků.

viz též Algoritmy; Procedurální jazyky; Programování.

Roger R. Flynn

Bibliografie

Naur, Peter, ed. „Revised Report on the Algorithmic Language Algol-60“. Communications ACM 6, č. 1 (1963): 1-17.

Wexelblat, Richard L., ed. History of Programming Languages. New York: Academic Press, 1981.