# SNOBOL

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. 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.
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.

## Esempi

Il programma "Hello World":
Un programma per identificare le vocali all'interno di una stringa proposta dall'utente:
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ì:
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:
Se l'utente inserisce Giulia sull'output si otterrà Ciao Giulia. Se non si risponde alla domanda sull'output si otterrà Ciao.

## Implementazioni disponibili

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. Anche Dave Shields sviluppa una sua versione del linguaggio, che continua lo Spitbol (Speedy Implementation of Snobol) realizzato da Catspaw, Inc.; Catspaw distribuisce ora gratuitamente molto materiale su Snobol e Spitbol.