Snostorm (Snostorm3) is a version of the SNOBOL4 language with structured programming constructs added. It compensates for the near absence of structured programming constructs in SNOBOL4 by providing IF, ELSEIF, ELSE, LOOP, CASE, and PROCEDURE statements, among others. It was originally designed and implemented by Fred G. Swartz as a preprocessor for SPITBOL running under the Michigan Terminal System (MTS) at the University of Michigan Computing Center during the 1970s.
Added features include logical operators, control structures including procedures, initialization blocks, enhanced comments, and listing control.
The grammar includes these added constructs:
In addition MTS Snostorm provided options for prettyprinting and for debugging with the Spitbol compiler.
The syntax of Snostorm is largely insensitive to spaces and newlines, but not entirely so because of its dependence upon SNOBOL4 for execution.
A SNOBOL4 program as given in The SNOBOL4 Programming Language by Griswold, Poage, and Polonsky followed by the same program rewritten in Snostorm.* The original SNOBOL4 program. ... READ OUTPUT = INPUT :F(DISPLAY) TEXT = OUTPUT NEXT TEXT CHAR = :F(READ) COUNT<CH> = COUNT<CH> + 1 :(NEXT) DISPLAY OUTPUT = LOOP LETTERS CHAR = :F(END) OUTPUT = NE(COUNT<CH>) CH ' OCCURS ' COUNT<CH> ' TIMES' + :(LOOP) END * The same program, rewritten in Snostorm. ... LOOP WHILE TEXT = INPUT OUTPUT = TEXT LOOP WHILE TEXT CHAR = COUNT<CH> = COUNT<CH> + 1 ENDLOOP ENDLOOP OUTPUT = LOOP WHILE LETTERS CHAR = IF NE(COUNT<CH>) OUTPUT = CH ’ OCCURS ’ COUNT<CH> ’ TIMES’ ENDIF ENDLOOP END
In addition to its use at the eight to fifteen sites that ran the Michigan Terminal System, a Snostorm3 compiler existed at University College London (UCL) from 1982 to 1984 and worked by compiling Snostorm3 into SNOBOL4, which could then be executed using the SNOBOL4 interpreter or by using a SPITBOL compiler to create an executable.