SNOBOL

Retour histoire langages
mise à jour 05-Jan-2003
en construction

SNOBOL (StriNg Oriented and symBOlic Language) est un langage de traitement de chaînes de caractères inventé au début des années 1960 par D.J. Farber, R.E. Griswold, and F.P. Polensky des Bell Laboartories. Sa première fonction a été d'être une boîte à outils pour écrire des éditeurs de texte. Comme il s'agissait d'un langage utilisé interactivement et complètement interprété, il n'avait pas les performances nécessaires sur des ordinateurs en temps partagé de la puissance de l'époque. Il n'a qu'une importance historique.

Types de données:

Integers, reals, strings, patterns, arrays, et tables sont les types de données de base de SNOBOL. Il est possible de créer de nouveaux types à partir de ces types de base.

Fonctions

Les fonctions doivent être définies préalablement et invoquées par nom. La récursivité est permise. Le sparamètres sont passés aux fonctions par valeur.

SNOBOL a été disponible sur beaucoup de gros ordinateurs (GE-635 par Bell, S/360, Sigma 7). La première version a été programmée en langage de macros SIL,

La version de référence du langage est SNOBOL4. introduit en 1967. 

Il a été porté sous UNIX (1986), MS/DOS (1989). la version Vanilla de Catspaw 2.04 sous DOS est disponible sur le Web.

exécution de la fonction length qui retourne le nombre de caractères contenu sur la ligne

 

SPITBOL (par Robert Dewar) est un dialecte de SNOBOL opérant sous un compilateur.

Référence de programmation SNOBOL4

Exemples de programmes SNOBOL:

#1

OUTPUT = 'Hello World!'
END

#2

* WORDSIZE.SNO *
* Program to read a file and display the number of words of
* various word lengths. To make the program more interesting,
* we shall only consider word lengths between 3 and 9. This allows
* us to demonstrate the use of an array with subscripts offset from
* 1, as well as array failure.
*
* The file being scanned is read from standard input. For example,
* to scan the file TEXT.IN, type:
*
* SNOBOL4 WORDSIZE <TEXT.IN
*
* Trim trailing blanks from input
*
   &TRIM = 1
* Define pattern for words. A word consists of upper- and lower-case
* letters, apostrosphe and hyphen.
*
  WORDPAT = BREAK(&LCASE &UCASE) SPAN(&LCASE &UCASE "'-") . WORD
* Define the array to hold the word counts. Valid subscripts must be
* in the range 3 through 9; all others will cause the array reference
* to fail. Array elements are initialized to zero instead of the normal
* default, which is the null string. This causes a zero to be produced
* in the printed output if a particular array entry is never incremented.
*
    COUNT = ARRAY('3:9',0)
* Read a line from the input file. Fail if end-of-file.
*
   READ LINE = INPUT :F(DONE)
* Find the next word in LINE, and remove it to WORD. Fail when
* no more words remain in the line.
*
  NEXTW LINE WORDPAT = :F(READ)
* Increment the appropriate array element for words of this
* size. The statement quietly fails if the size is outside
* the range 3 through 9.
*
  COUNT<SIZE(WORD)> = COUNT<SIZE(WORD)>+ 1 :(NEXTW)
* Upon end of file, print the values in the array. Print heading first.
*
  DONE OUTPUT = "WORD LENGTH NUMBER OF OCCURRENCES"
        I = 2
* Index through array starting at element 3. When we reach element
* 10, the array reference fails, and we fall through to END.
*
  PRINT I = I + 1
  OUTPUT = LPAD(I,5) LPAD(COUNT<I>,20) :S(PRINT)
  END