Raportul Algol-60
Raportul Algol-60 a fost scris între 1959 și 1960 de o echipă de experți în limbaje de programare formată din editorul Peter Naur și mai mulți educatori și practicieni din Europa și Statele Unite. Scopul raportului a fost acela de a elabora o descriere completă a unui limbaj algoritmic internațional pentru exprimarea proceselor numerice într-o formă adecvată pentru traducerea în limbaje de programare pentru calculatoare. Nu era destinat să fie un limbaj de programare, deși ulterior a fost implementat ca limbaj și a devenit popular în Europa.
Multe versiuni ale limbajului de programare Algol au fost implementate în anii 1960 și la începutul anilor 1970. De asemenea, a condus la dezvoltarea mai multor alte limbaje de programare, cum ar fi Pascal, implementat de Niklaus Wirth la începutul anilor 1970, și C.
Raportul a introdus noțiunile de limbaj de referință, limbaj de publicare și reprezentare hardware. Limbajul de referință a fost standardul pentru raport, scriitorii de compilatoare și implementarea hardware. Acesta a dictat forma limbajului și sintaxa sa . Limbajul de publicare folosea limbajul de referință cu mici ajustări pentru variațiile de publicare între țări și variațiile de tipărire și scriere, cum ar fi tratarea subscriptelor, superscriptelor și a altor notații. Reprezentarea hardware a luat în considerare caracteristicile mașinii. Limbajul de referință era limbajul definitoriu, iar limbajul de publicare și reprezentarea hardware trebuiau să fie traductibile în acesta.
Scopul raportului și al limbajului a fost acela de a oferi o reprezentare neambiguă pentru diverse concepte de calculatoare – în special, proiectarea algoritmilor, sau ALGOrithmic Language 1960. O versiune ulterioară, Algol68, nu a fost la fel de populară sau implementată pe scară largă ca Algol-60, deși era mai puternică.
Algol este un limbaj structurat, încorporând declarații while, declarații if-then-else și alte construcții care implementează selecția, iterația, declarațiile de bază, structura blocurilor și recursivitatea. Deși a fost dezvoltat la numai câțiva ani după FORTRAN (FORmula TRANslator), lansat în 1957 de IBM, a încorporat caracteristici care lipseau din FORTRAN – și anume recursivitatea și limbajul structurat – și a reprezentat un progres major în domeniul programării.
Unul dintre urmașii lui Algol și FORTRAN a fost limbajul BASIC (Beginner’s All-purpose Symbolic Instruction Code), dezvoltat de John Kemeny și Thomas Kurtz de la Universitatea Dartmouth. BASIC a fost un fel de versiune fără declarații de format a FORTRAN pentru calcul interactiv și pentru începători. BASIC s-a bucurat de o lungă domnie din anii 1970 până în anii 1980 și a fost recent implementat într-o formă destul de diferită, Visual Basic.
Un descendent al Algol a fost Pascal, care s-a bucurat, de asemenea, de o lungă domnie ca limbaj popular pentru implementarea structurilor de date și studierea compilatoarelor . Nu a fost un limbaj de producție, ci un instrument de predare. C a fost un limbaj de sistem și a dus la dezvoltarea lui C, un limbaj orientat pe obiecte care este încă popular.
Limbajul Algol a fost descris într-o notație numită Backus normal sau Backus-Naur form (BNF). Notația a fost sugerată de John Backus, care s-a bazat pe o notație a lui E. L. Post, un logician celebru în anii 1930. Era similară cu notația dezvoltată de Noam Chomsky în 1957 pentru lingvistică, care a fost folosită pentru a implementa gramatici. O gramatică este un mod succint și lipsit de ambiguitate de a descrie limbile. Utilizarea unei notații formale în teoria limbajelor a reprezentat un progres major.
Evoluția limbajelor de programare a fost uimitoare, dar nu la fel de uimitoare ca evoluția teoriei compilatoarelor. La scurt timp după raportul Algol-60, mai mulți teoreticieni ai compilatoarelor au folosit notația gramaticală pentru a implementa compilatoare într-un mod „automat”. Aceste compilatoare au fost cunoscute sub numele de compilatoare-compilatoare. Eforturi similare au fost dezvoltarea lui Lex, un analizator lexical, și a lui Yacc („Yet another compiler-compiler”) la Bell Laboratories la mijlocul anilor 1970.
Înțelegerea limbajului de programare
Gramatica engleză are anumite construcții, cum ar fi o frază substantivală, care este compusă din alte construcții, cum ar fi un substantiv și un modificator. Limbajele de programare au constructe precum while-statements și expresii aritmetice. Aceste construcții sunt indicate prin simboluri speciale numite simboluri nonterminale sau meta-simboluri ale limbajului.
Simbolurile care apar efectiv în limbaj sunt numite simboluri terminale. Terminologia provine de la structurile de date, sau arbori de analiză, utilizate pentru a implementa limbajul.
Un exemplu este:
Această gramatică indică faptul că o expresie aritmetică, E, constă din alte expresii aritmetice și termeni, T, adăugate împreună (E–>E T). Un termen, T, este compus dintr-un termen înmulțit cu un factor, F, astfel încât T–>T*F. În cele din urmă,un factor, F, este expresia cea mai elementară, formată din expresii între paranteze (E între paranteze), identificatori (identificatori sau variabile definite de utilizator), id, și constante numerice (num). Gramatica oferă forma expresiilor aritmetice.
Exemplul oferă o aromă a notației. Elementele din stânga săgeții sunt compuse din elementele din dreapta. În acest caz, E, T și F sunt meta-simbolurile. Celelalte simboluri,, *, (, ), și, în acest caz, id și num, apar în limbaj. Acestea sunt cuvintele limbii. În acest caz, E este simbolul de început sau primul simbol non-terminal. Este expresia cea mai generală care este definită. Deși notația poate părea ciudată la început, ea este utilă în proiectarea limbajului, în teoria compilatoarelor și în implementare.
Dezvoltarea gramaticii în informatică a dat un mare impuls proiectării și implementării limbajelor de programare.
vezi și Algoritmi; Limbaje procedurale; Programare.
Roger R. Flynn
Bibliografie
Naur, Peter, ed. „Revised Report on the Algorithmic Language Algol-60”. Communications ACM 6, nr. 1 (1963): 1-17.
Wexelblat, Richard L., ed. History of Programming Languages. New York: Academic Press, 1981.
.