Rapporto Algol-60

Il rapporto Algol-60 fu scritto tra il 1959 e il 1960 da un team di esperti di linguaggi di programmazione composto dall’editore Peter Naur e da diversi educatori e professionisti provenienti dall’Europa e dagli Stati Uniti. Lo scopo del rapporto era di sviluppare una descrizione completa di un linguaggio algoritmico internazionale per esprimere processi numerici in una forma adatta alla traduzione nei linguaggi di programmazione dei computer. Non era destinato ad essere un linguaggio di programmazione, anche se in seguito fu implementato come linguaggio e divenne popolare in Europa.

Molte versioni del linguaggio di programmazione Algol furono implementate negli anni ’60 e nei primi anni ’70. Ha anche portato allo sviluppo di diversi altri linguaggi di programmazione, come il Pascal, implementato da Niklaus Wirth nei primi anni ’70, e il C.

La relazione ha introdotto le nozioni di un linguaggio di riferimento, un linguaggio di pubblicazione e una rappresentazione hardware. Il linguaggio di riferimento era lo standard per il rapporto, gli scrittori di compilatori e l’implementazione hardware. Dettava la forma del linguaggio e la sua sintassi. Il linguaggio di pubblicazione usava il linguaggio di riferimento con aggiustamenti minori per le variazioni di pubblicazione nei vari paesi e le variazioni di stampa e scrittura come la gestione dei pedici, degli apici e di altre notazioni. La rappresentazione hardware prendeva in considerazione le caratteristiche della macchina. Il linguaggio di riferimento era il linguaggio di definizione, e il linguaggio di pubblicazione e la rappresentazione hardware dovevano essere traducibili in esso.

Lo scopo della relazione e del linguaggio era di dare una rappresentazione non ambigua a vari concetti informatici – in particolare, la progettazione di algoritmi, o ALGOrithmic Language 1960. Una versione successiva, Algol68, non fu così popolare o ampiamente implementata come l’Algol-60, sebbene fosse più potente.

Algol è un linguaggio strutturato, che incorpora dichiarazioni while, dichiarazioni if-then-else, e altri costrutti che implementano la selezione, l’iterazione, dichiarazioni di base, struttura a blocchi e ricorsione. Sebbene sia stato sviluppato solo pochi anni dopo il FORTRAN (FORmula TRANslator), rilasciato nel 1957 dall’IBM, incorporava caratteristiche mancanti dal FORTRAN, vale a dire la ricorsione e il linguaggio strutturato, e fu un importante progresso nel campo della programmazione.

Uno dei discendenti di Algol e FORTRAN fu il linguaggio BASIC (Beginner’s All-purpose Symbolic Instruction Code), sviluppato da John Kemeny e Thomas Kurtz della Dartmouth University. Il BASIC era una sorta di versione del FORTRAN senza istruzioni di formato per il calcolo interattivo e iniziale. Il BASIC ha goduto di un lungo regno dagli anni ’70 agli anni ’80 ed è stato recentemente implementato in una forma abbastanza diversa, Visual Basic.

Un discendente dell’Algol era il Pascal, che ha anche goduto di un lungo regno come linguaggio popolare per implementare strutture di dati e studiare compilatori. Non era un linguaggio di produzione, ma uno strumento di insegnamento. C era un linguaggio di sistema e portò allo sviluppo di C, un linguaggio orientato agli oggetti che è ancora popolare.

Il linguaggio Algol fu descritto in una notazione chiamata Backus normal o Backus-Naur form (BNF). La notazione fu suggerita da John Backus, che la basò su una notazione di E. L. Post, un famoso logico degli anni 30. Era simile alla notazione sviluppata da Noam Chomsky nel 1957 per la linguistica, usata per implementare le grammatiche. Una grammatica è un modo succinto e non ambiguo di descrivere le lingue. L’uso di una notazione formale nella teoria dei linguaggi fu un grande progresso.

L’evoluzione dei linguaggi di programmazione fu sorprendente, ma non così sorprendente come l’evoluzione della teoria dei compilatori. Poco dopo la relazione sull’Algol-60, diversi teorici dei compilatori usarono la notazione grammaticale per implementare compilatori in modo “automatico”. Questi compilatori erano conosciuti come compilatori-compilatori. Sforzi simili furono lo sviluppo di Lex, un analizzatore lessicale, e Yacc (“Yet another compiler-compiler-compiler”) ai Bell Laboratories a metà degli anni ’70.

Understanding Programming Language

La grammatica inglese ha certi costrutti, come una frase sostantiva, che è composta da altri costrutti, come un nome e un modificatore. I linguaggi di programmazione hanno costrutti come i while-statements e le espressioni aritmetiche. Questi costrutti sono indicati da simboli speciali chiamati simboli non terminali o meta simboli del linguaggio.

I simboli che effettivamente appaiono nel linguaggio sono chiamati simboli terminali. La terminologia deriva dalle strutture di dati, o alberi di analisi, usati per implementare il linguaggio.

Un esempio è:

Questa grammatica indica che un’espressione aritmetica, E, consiste di altre espressioni aritmetiche e termini, T, sommati insieme (E–>E T). Un termine, T, è composto da un termine per un fattore, F, in modo che T–>T*F. Infine, un fattore, F, è l’espressione più elementare, composta da espressioni tra parentesi (la parentesi E), identificatori (identificatori o variabili definite dall’utente), id, e costanti numeriche (num). La grammatica dà la forma delle espressioni aritmetiche.

L’esempio dà un assaggio della notazione. Gli elementi a sinistra della freccia sono composti dagli elementi a destra. In questo caso, E, T e F sono i meta-simboli. Gli altri simboli, *, (, ) e, in questo caso, id e num, appaiono nel linguaggio. Sono le parole della lingua. In questo caso, E è il simbolo iniziale o il primo simbolo non terminale. È l’espressione più generale che viene definita. Anche se la notazione può sembrare scomoda all’inizio, è utile nella progettazione del linguaggio, nella teoria del compilatore e nell’implementazione.

Lo sviluppo delle grammatiche in informatica ha dato un grande impulso alla progettazione e all’implementazione dei linguaggi di programmazione.

vedi anche Algoritmi; Linguaggi procedurali; Programmazione.

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.