Revision 225828311 of "SNOBOL" on enwiki

{{otheruses4|the programming language|the cleaning product|SnoBol (cleaner)}}

{{ infobox programming language
| name                   = SNOBOL
| paradigm               = [[multi-paradigm programming language|multi-paradigm]]: [[Object-oriented programming|object-oriented]], [[functional programming|functional]], [[logic programming|logic]]
| year                   = 1962
| designer               = [[David J. Farber]], [[Ralph E. Griswold]] and [[Ivan P. Polonsky]]
| developer              = David J. Farber, Ralph E. Griswold, Ivan P. Polonsky, and [[Bell Labs]]
| latest release version = [[SNOBOL4]]
| latest release date    = 1967
| implementations        = SNOBOL, [[SPITBOL]]
| influenced             = [[Icon programming language|Icon]]
}}

'''SNOBOL''' (''String Oriented Symbolic Language'') is a computer [[programming language]] developed between 1962 and 1967 at [[AT&T]] [[Bell Laboratories]] by  [[David J. Farber]], [[Ralph E. Griswold]] and [[Ivan P. Polonsky]]. (The name is a jocular reference to [[COBOL programming language|COBOL]] and [[ALGOL programming language|ALGOL]], but these languages have no other connection and no other notable similarities).

During the 1950s and 1960s there was a flourishing of interest in special-purpose computer languages. SNOBOL was one of a number of text-string-oriented languages, and one of the more successful; others included [[COMIT]] and [[TRAC programming language|TRAC]].

SNOBOL was widely used in the 1970s and 1980s as a text manipulation language in the [[humanities]], but in recent years, its popularity has faded as newer languages such as [[Awk]] and [[Perl]] have made string manipulation by means of [[regular expression]]s popular; it is now mostly a special interest language used mainly by enthusiasts, and new implementations are rare.

== Features ==

The [[SNOBOL4]] (StriNg Oriented symBOlic Language number 4) version is the fourth and final incarnation of such a series of special purpose programming languages for character string manipulation. 

The SNOBOL4 variant of the language supports a number of built-in [[data type]]s, such as [[integer]]s and limited precision [[real number]]s, [[string (computer science)|strings]], [[pattern matching|pattern]]s, [[array]]s, and [[associative array|table]]s (associative arrays), and also allows the programmer to define additional data types and new [[function (programming)|function]]s.  SNOBOL4's programmer-defined data type facility was advanced at the time (it preceded, and resembles, [[Pascal programming language|Pascal]]'s "records" and [[C (programming language)|C]]'s "structs").

SNOBOL4 stands apart from the mainstream programming languages of that time by having patterns as a [[first-class object|first-class data type]] (''i.e.'' a data type whose values can be manipulated in all ways permitted to any other data type in the programming language) and by providing operators for pattern [[concatenation]] and alternation.  Strings generated during execution can be treated as programs and executed.

A SNOBOL pattern can be very simple or extremely complex. A simple pattern is just a text string (e.g. "ABCD"), but a complex pattern may be a large structure describing, for example, the complete grammar of a computer language.

SNOBOL provides the programmer with a rich assortment of features including some rather exotic ones.  As a result it is possible to use SNOBOL as if it were an [[object-oriented programming|object-oriented]] language, a [[logical programming]] language, a [[functional programming|functional language]] or a standard [[imperative programming|imperative language]] by changing the set of features used to write a program. It also concatenates strings that are simply placed next to each other in a statement.  It keeps strings in a memory heap, and frees programmers from concerns about memory allocation and management for strings.

== Implementations ==

The classic implementation was on the [[PDP-10]]; it has been used to study [[compiler]]s, [[formal grammar]]s, and [[artificial intelligence]], especially [[machine translation]] and [[machine comprehension]] of [[natural language]]s. The original implementation was on an IBM 7090 at Bell Labs, Holmdel, N.J. SNOBOL4 was specifically designed for portability; the first implementation was on an IBM 7094 but it was rapidly ported to many other platforms.

It is normally implemented as an [[interpreter (computer software)|interpreter]] because of the difficulty in implementing some of its very high-level features, but there is a [[compiler]], the [[SPITBOL compiler]], which provides nearly all the facilities that the interpreter provides.

The Gnat Ada Compiler comes with a package (GNAT.Spitbol) which implements all of the Spitbol string manipulation semantics. This can be called from within an Ada program.

Several implementations are currently available. Macro SNOBOL4 in C written by Phil Budne is a free, open source implementation, capable of running on almost any platform. It is available at http://www.snobol4.org/. Catspaw, Inc. at http://www.snobol4.com/, provides a commercial implementation of the SNOBOL4 language for many different computer platforms, including DOS, Macintosh, Sun, RS/6000, and others. An older version, SNOBOL4+, is now available free from Catspaw. Minnesota SNOBOL4, By Viktors Berstis, is also free.

Although SNOBOL itself has almost a complete absence of structured programming features,
a structured version of SNOBOL called [[Snostorm]] existed at University College London [[UCL]]
between 1982 and 1984, and another by [[Andrew Koenig (programmer)|Andrew Koenig]] called Snocone. [http://www.acceleratedcpp.com/authors/koenig/bibliography/snocone.pdf]

== See also ==

* [[SPITBOL]]
* [[Icon programming language]]
* [[Unicon programming language]]

== References ==

{{reflist}}

== Further reading ==

* 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).
* Hockey, Susan M.  ''Snobol Programming for the Humanities''.  New York: Clarendon Press; Oxford: Oxford University Press, 1985 (ISBN 0-19-824676-5).

== External links ==

* [http://www.snobol4.com/ Catspaw, Inc. offers implementations of and support for SNOBOL4]
* [http://dmoz.org/Computers/Programming/Languages/Snobol/ Open Directory Project Category for Snobol]
* [http://drofmij.awardspace.com/snobol/ Introduction to Snobol by James Ford]
* [http://www.engin.umd.umich.edu/CIS/course.des/cis400/snobol/word.html A sample program in SNOBOL]
* [http://special.lib.umn.edu/findaid/xml/cbi00190.xml Charles Hall Collection on the SNOBOL Programming Language]. [http://www.cbi.umn.edu Charles Babbage Institute], University of Minnesota, Minneapolis.

[[Category:Text-oriented programming languages]]
[[Category:SNOBOL programming language family]]

[[bg:SNOBOL]]
[[ca:Snobol]]
[[de:SNOBOL4]]
[[es:Snobol]]
[[fr:SNOBOL]]
[[ja:SNOBOL]]
[[pl:Snobol]]
[[pt:SNOBOL 4]]
[[ru:Snobol]]
[[fi:SNOBOL]]
[[tr:Snobol]]
[[uk:Snobol]]