Snostorm
Snostorm 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] at the University of Michigan Computing Center during the 1970s.
Features added
Added features include logical operators, control structures including procedures, initialization blocks, enhanced comments, and listing control.The grammar includes these added constructs:
;Logical operators
- AND, OR, and NOT logical operators.
- IF, ELSEIF, ELSE, and ENDIF statements.
- LOOP, LOOP WHILE, LOOP UNTIL, LOOP FOR, EXITLOOP, NEXTLOOP, ENDLOOP, and ENDLOOP REPEAT statements.
- DOCASE, CASE, ELSECASE, and ENDCASE statements.
- PROCEDURE, EXITPROCEDURE, and ENDPROCEDURE statements.
- INITIAL and ENDINITIAL statements.
- Comments starting with an asterisk in columns other than column 1.
- Blank lines treated as comments.
- EJECT, TITLE, SUBTITLE, SPACE, LIST ON, LIST OFF, LIST PUSHON, LIST PUSHOFF, and LIST POP statements.
The syntax of Snostorm is largely insensitive to spaces and newlines, but not entirely so because of its dependence upon SNOBOL4 for execution.
Example
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
TEXT = OUTPUT
NEXT TEXT CHAR = :F
COUNT
DISPLAY OUTPUT =
LOOP LETTERS CHAR = :F
OUTPUT = NE CH ' OCCURS ' COUNT
+ :
END
- The same program, rewritten in Snostorm.
LOOP WHILE TEXT = INPUT
OUTPUT = TEXT
LOOP WHILE TEXT CHAR =
COUNT
ENDLOOP
ENDLOOP
OUTPUT =
LOOP WHILE LETTERS CHAR =
IF NE
OUTPUT = CH ’ OCCURS ’ COUNT
ENDIF
ENDLOOP
END