SNOBOL

Snobol
linguaggio di programmazione
AutoreDavid J. Farber, Ralph E. Griswold, Ivan P. Polonsky
Data di origine1962
Ultima versione4
Utilizzogeneral purpose e analisi di testi
ParadigmiImperativo
Tipizzazionedinamica
Estensioni comunisno, spt (Spitbol)
Influenzato daFORTRAN II e COMIT
Ha influenzatoIcon, Lua, SL5
Implementazione di riferimento
ImplementazioneCSNOBOL4 release 2.3 2022.03
Sistema operativoUnix-like, Windows, OSX
Licenzavarie
Sito webwww.regressive.org/snobol4/

SNOBOL (StriNg Oriented and symBOlic Language) è il nome generico di un linguaggio di programmazione per calcolatore sviluppato tra il 1962 e il 1967 da David J. Farber, Ralph E. Griswold e Ivan P. Polonsky presso i Laboratori AT&T Bell. L'ultima versione del linguaggio ha preso il nome di SNOBOL4. SNOBOL è stato uno di una serie di linguaggi orientati alle stringhe sviluppato tra gli anni cinquanta e i sessanta (tra gli altri, COMIT e TRAC).

SNOBOL4 si differenzia dalla maggior parte dei linguaggi di programmazione poiché fornisce il pattern come tipo di dato di prima classe (ovvero, un tipo di dato i cui valori possono essere manipolati in qualsiasi modo permesso a qualsiasi altro tipo di dato nel linguaggio) e operatori per concatenazione e alternanza di pattern. Le stringhe generate durante l'esecuzione possono essere trattate come programmi e quindi eseguite.

SNOBOL4 è stato spesso insegnato in grandi università statunitensi verso la fine degli anni 1960 e all'inizio degli anni 1970 ed è stato ampiamente utilizzato nei due decenni seguenti come linguaggio di manipolazione del testo in ambito umanistico.

In anni recenti SNOBOL ha ceduto il passo a nuovi linguaggi quali Awk e Perl, che hanno reso di moda la manipolazione di stringhe mediante espressioni regolari. Tuttavia, i pattern di SNOBOL4 sussumono le grammatiche BNF, che sono equivalenti alle grammatiche libere dal contesto e più potenti delle espressioni regolari.[1] Le espressioni regolari implementate da Awk e Perl, infatti, sono estensioni delle espressioni regolari intese in senso tradizionale, ma esse - al contrario dei pattern di SNOBOL4 - non possono essere ricorsive.[2]

Uno dei progettisti di SNOBOL, Ralph Griswold, ne ideò due successori, chiamati SL5 e Icon, che combinavano il meccanismo di pattern matching di SNOBOL4 con una strutturazione più standard stile ALGOL.

Il programma "Hello World":

        output = "Hello world" end 

Un programma per identificare le vocali all'interno di una stringa proposta dall'utente:

        Vocali = "aeiou"         Testo = input loop    Testo ? any(Vocali) . output rem . Testo :s(loop) end 

Se l'utilizzatore scrive ad esempio aiuole il programma restituisce in sequenza i caratteri aiuoe. Se l'utilizzatore scrive abbassata il programma restituisce aaaa.

Snobol non utilizza la sintassi di tipo if then else ma una sintassi di tipo booleano, fondata su AND / OR /NOT. Per esempio:

se il contenuto della variable X è identico alla stringa "Carlo", allora scrivi "Esatto", altrimenti scrivi "Sbagliato"

si può esprimere così:

  	X = "Carlo" 	( (leq(X,"Carlo")) (Terminal = "Esatto"), (Terminal = "Sbagliato") ) end 

Lo spazio tra le due prime parentesi è un AND implicito: si valuta la verità di ambedue le dichiarazioni unite nella prima parentesi; la virgola esprime OR, quindi se non risulta vero AND vero si esegue l’istruzione alternativa. In questo caso, siccome X è effettivamente istanziata a "Carlo", il programma scriverà "Bene". NOT si esprime con ~

Snobol permette e incoraggia l'uso delle funzioni, molte delle quali disponibili nella libreria standard. Il programmatore può scrivere le sue funzioni personali. Per esempio, questo programma scrive Ciao seguito da un nome indicato dall'utente, e restituito da una funzione qui chiamata nome:

*-- Funzione NOME             define("nome()")   :(nome_end) nome        Terminal = "Introdurre un nome" 			Scelta   = input             nome     =  Scelta :(return) nome_end * MAIN 		Persona = nome() 		Output  = "Ciao " Persona end 

Se l'utente inserisce Giulia sull'output si otterrà Ciao Giulia. Se non si risponde alla domanda sull'output si otterrà Ciao.

Implementazioni disponibili

[modifica | modifica wikitesto]

Disponibile sia per sistemi Unix-like sia per Windows sia per OSX è l'implementazione Macro SNOBOL4 in C scritta da Phil Budne: è gratuita e open source [3]. Anche Dave Shields sviluppa una sua versione del linguaggio [4], che continua lo Spitbol (Speedy Implementation of Snobol) realizzato da Catspaw, Inc.[5]; Catspaw distribuisce ora gratuitamente molto materiale su Snobol e Spitbol.

  1. ^ (EN) Gimpel, J. F. 1973. A theory of discrete patterns and their implementation in SNOBOL4. Commun. ACM 16, 2 (Feb. 1973), 91-100.
  2. ^ (EN) Programs that transform their own source code or the Snobol foot joke
  3. ^ http://www.regressive.org/snobol4/
  4. ^ https://github.com/daveshields
  5. ^ http://www.snobol4.com/
  • Dewar, Robert BK, Mark B. Emmer, and Robert E. Goldberg. Macro Spitbol. The High-Performance SNOBOL4 Language. Salida, Colorado, Catspaw Inc., 2000².
  • Emmer, Mark B. SNOBOL4+: The SNOBOL4 Language for the Personal Computer User. Englewood Cliffs, NJ: Prentice Hall, 1985 (ISBN 0-13-815119-9).
  • Gimpel, James F. Algorithms in SNOBOL4. New York: Wiley, 1976 (ISBN 0-471-30213-9); republished Salida, CO: Catspaw, 1986 (ISBN 0-939793-00-8).
  • Griswold, Ralph E. The Macro Implementation of SNOBOL4. San Francisco, CA: W. H. Freeman and Company, 1972 (ISBN 0-7167-0447-1).
  • Griswold, Ralph E., J. F. Poage, and I. P. Polonsky. The SNOBOL4 Programming Language. Englewood Cliffs, NJ: Prentice Hall, 1968 (ISBN 0-13-815373-6).
  • Griswold, Ralph E. String and List Processing in SNOBOL4: Techniques and Applications. Englewood Cliffs, NJ: Prentice Hall, 1975 (ISBN 0-13-853010-6).
  • Hockey, Susan M. Snobol Programming for the Humanities. New York: Clarendon Press; Oxford: Oxford University Press, 1985 (ISBN 0-19-824676-5).
  • Milanese, Guido Filologia, letteratura, computer. Idee e strumenti per l'informatica umanistica. Milano: Vita e Pensiero, 2020, pp. 241-243 (ISBN 9788834337516)

Collegamenti esterni

[modifica | modifica wikitesto]
Controllo di autoritàLCCN (ENsh85123758 · J9U (ENHE987007551052105171