Previous Previous chapter · Next Next chapter · Contents Table of Contents


This chapter lists all messages displayed by SNOBOL4.


When SNOBOL4 begins execution, this title is displayed:
    Vanilla SNOBOL4      Version 2.14.
    (c) Copyright 1984,1988 Catspaw, Inc. All Rights Reserved.
Additional messages which may appear:
Cannot open file: name
The file specified in the command line cannot be opened.

Command line error:
A syntactic error was detected in the SNOBOL4 command line. The command line is displayed on two lines. The line break shows where the error occurred.

Errors detected in source program
There were compilation errors in the source program. Execution will proceed until a statement with a compilation error is encountered.

Insufficient storage for initialization
Not enough memory was available to initialize the SNOBOL4 system.

No errors
Compilation is complete, and without error. Execution begins immediately.


Termination messages are normally produced on I/O unit 7, which defaults to the user's display screen. If the /B option was used in the invoking command line, they are produced on I/O unit 6, associated with variable OUTPUT. Dump messages are always produced to unit 6.
Normal termination at level LL
The program transferred to the label END. LL is the current program-defined function call depth. This message is produced only if the /S command line option (statistics) was used.

filename(XXX) : Last statement executed was NNN
NNN is the statement number of the last statement executed, XXX is its source line number. It is the statement that transferred to the END statement. If this was a normal termination, it is only displayed if the /S option was used.

filename(XXX) : Warning: Interrupted in statement NNN at level LL
Execution was interrupted when you pressed the BREAK or control-C key. The interruption occurred before the specified statement was executed. LL is the current call depth of program-defined functions.

Incomplete storage regeneration. Terminal dump not possible
Stack overflow occurred during storage regeneration, and the &DUMP keyword was nonzero. Memory is in an indeterminate form, and a dump listing cannot be produced.

Dump of variables at termination
Natural variables Unprotected keywords These headings will appear if a termination dump was requested by setting the &DUMP keyword nonzero. Variables are listed only if they contain a nonnull value. The variable names will be sorted if the &DUMP keyword is positive; they are unsorted if it is negative.

9.2.1 Job Statistics

End-of-run statistics on program execution are provided if the /S command line option is used. Compilation and execution times are in tenths of a second. Times are wall-clock values, and include all I/O wait time, such as delays for keyboard input:
    SNOBOL4 statistics summaryNN

    tenths of a second compilation time
                 NN tenths of a second execution time
                 NN statements executed, NN failed
                 NN arithmetic operations performed
                 NN pattern matches performed
                 NN regenerations of dynamic storage
                 NN reads performed
                 NN writes performed


SNOBOL4 syntax errors are detected during compilation. Statement compilation ceases at the point where the error was detected. The error message contains a marker which indicates the valid portion of the statement accepted by the compiler---the error occurred after this point. Only the first error in a statement is detected. The erroneous statement is compiled with an internal error code which produces an error message if the statement is executed. Compilation resumes with the next statement. Compilation ceases and SNOBOL4 terminates if more than 50 errors are found.

When compiling without a list file (/L: command line option), the compiler will attempt to display the erroneous line on your screen. If a statement is continued over several lines, only the line in error is displayed. Several errors cannot be detected until the absolute end-of-statement is found. This may require reading the next line, and finding it is NOT a continuation statement. In this case, the single line displayed will be the NEXT line, with the error marker in the first character position.

The CODE function may be used to compile SNOBOL4 statements that have been concatenated into a long string. The CODE function fails if a syntax error is found, and the keyword &ERRTEXT contains the error message string for the error encountered.

Binary operators must be surrounded by blanks
Omitting a blank will often cause this error. An illegal or undefined binary operator will also produce this error.

Error in GOTO
There is a syntactic error in the GOTO field.

Erroneous END statement
The END statement contains a syntactic error, or the label specified in the subject field for initial transfer could not be found.

Erroneous integer
An integer number appears which is too large for the SNOBOL4 system. The allowable range for magnitude values is 0 to 32767.

Erroneous label
The first character of a statement must be blank, tab, alphanumeric, * (comment), + or . (continuation), or - (control).

Erroneous or missing break character
A character which separates language elements occurs in an illegal context, or an expression is not balanced with respect to parentheses.

Erroneous subject
A compiler break character appears before the statement subject field. The break characters are comma, equal sign, right parenthesis, right square bracket (]), and right angular bracket (>).

Illegal character in element
A character was found which was incorrect for the type of language object being compiled. This often occurs when a blank is omitted between elements, causing them to run together.

Improperly terminated statement
The source statement terminated with an incomplete language construction.

Limit on compilation errors exceeded
More than 50 compilation errors were found in the source program.

No END statement in source file
End-of-File was encountered in the source file without an END statement.

Previously defined label
A duplicate label appears. The first definition is retained; subsequent definitions are discarded.

Unclosed literal
The closing quotation mark from a literal string is missing. This error also occurs if the closing quotation mark (single or double) was different from the opening mark.


Most program logic errors can only be detected during program execution. Some are unconditionally fatal, and cause the SNOBOL4 system to terminate. Others are conditionally fatal---the system terminates if the value of the keyword &ERRLIMIT is zero. If &ERRLIMIT is nonzero, the keyword &ERRTYPE is set to the error message number, &ERRTEXT is set to the message text, &ERRLIMIT is decremented, and execution continues.

The protected keyword &ERRTYPE may be traced, permitting a program-defined function to gain control when a conditional error occurs. THe program CODE.SNO provides an example of how to do this. The initial value of the unprotected keyword &ERRLIMIT is zero, forcing program termination upon any error.

Errors 1-16 are conditionally fatal. Errors 17-28 are unconditionally fatal. When execution terminates due to an error, the following is displayed:

    filename(XXX) : Error NN, -- description --
    In statement NNN, at level LL
NN is the error number below. NNN is the statement number assigned in the compiler list file, XXX is the absolute line number in the source file. LL specifies the current programdefined function call depth (0 is the normal main-program level).
1. Illegal data type
The data type of an operand was incorrect for the type of operation attempted. This occurs most frequently with arithmetic operations, when one operand is a string which cannot be converted to a number.

2. Error in arithmetic operation
An arithmetic operation upon integer values produced a result which was out of range, or was undefined, such as division by zero.

3. Erroneous array or table reference
An array or table reference was made to a variable which did not contain an array or table pointer.

4. Null string in illegal context
The null string appeared where it is not permitted, such as the object of an indirect reference.

5. Undefined function or operation
A function was called before it was defined, or an undefined operator was used.

6. Erroneous prototype
A syntactic error occurred in the prototype string used with the functions ARRAY, DATA or DEFINE. Note that the blank and tab characters are not permitted within the prototype string.

7. Unknown keyword
The keyword specified is unknown to the SNOBOL4 system.

8. Variable not present where required
A variable name must be used as the subject of an assignment statement, or as the argument of the unary cursor, name, or keyword operator (@, ., &), or the binary pattern match assignment operators (., $).

9. Entry point of function not label
At the time a program-defined function was first called, its entry point label did not appear as the label of any SNOBOL4 statement.

10. Illegal argument to primitive function
An illegal value was used as an argument to the function ARG, FIELD, LOCAL, OPSYN, STOPTR, or TRACE, or an illegal value was specified in the third argument to INPUT or OUTPUT.

11. Reading error
An error condition was returned when reading from a file.

12. Illegal I/O unit
Allowable unit numbers are 1 through 16 (inclusive). (Unit 0 is allowed in functions INPUT and OUTPUT, and is converted to units 5 and 6 respectively.)

13. Limit on defined data types exceeded
SNOBOL4 allows 899 different program-defined data types.

14. Negative number in illegal context
A negative number was used incorrectly as the argument of the function LEN, POS, TAB, or RTAB.

15. String overflow
The program attempted to create a string larger than &MAXLNGTH characters.

16. Overflow during pattern matching
The internal SNOBOL4 stack overflowed during pattern matching. This can happen when a recursive or looping pattern is incorrectly specified.

17. Error in SNOBOL4 system
This message indicates an internal SNOBOL4 system error.

18. Return from level zero
An attempt was made to transfer to the function return label RETURN, FRETURN, or NRETURN outside of any function call.

19. Failure during GOTO evaluation
The expression used for an indirect transfer within the GOTO field failed when evaluated.

20. Insufficient storage to continue
All available memory has been used. Vanilla SNOBOL4 is limited to 30K bytes for program and data. SNOBOL4+, Catspaw's enhanced version, allocates 300K bytes for program and data.

21. Stack overflow
The SNOBOL4 internal stack has overflowed. This may be caused by excessive function recursion, or occur during memory garbage collection.

22. Limit on statement execution exceeded
The number of statements executed was greater than the value in the keyword &STLIMIT. &STLIMIT is initially -1, specifying unlimited execution.

23. Object exceeds size limit
The program attempted to create an object larger than the maximum size allowed.

24. Undefined or erroneous GOTO
A transfer was attempted to an undefined label, or an expression in a GOTO field evaluated to a string, rather than a label name---usually the result of omitting the indirect operator ($).

25. Incorrect number of arguments
A primitive function was called with too many arguments.

28. Execution of statement with compilation error
Execution proceeded to a statement that contained a compilation error.


Tracing is provided for variables, certain keywords, label transfers, and function calls and returns. A trace message is output to I/O unit 6 for each trace occurrence. Program execution time, in tenths of a second, is appended to each message.
Tracing normally occurs only if the keyword &TRACE is nonzero.
However, another keyword, &FTRACE, may be set nonzero to trace all function calls and returns independently of keyword &TRACE.

STATEMENT NN: <vname> = <value>,TIME = TT
Value trace; produced by the function call TRACE('vname', 'VALUE'), where vname is the name of the variable to be traced.

STATEMENT NN: &<keyname> = <value>,TIME = TT
Keyword trace; produced by the function call TRACE('keyname', 'KEYWORD'), where keyname is the upper case keyword name, without the leading ampersand.

Label trace; produced by the function call TRACE('labname', 'LABEL'), where labname is the desired label name. Tracing only occurs on a transfer of control; it does not occur if the labeled statement is flowed into.

STATEMENT NN: LEVEL LL CALL OF <fname>(arg1,...,argn),TIME = TT
Call trace; produced by the function call TRACE('fname', 'CALL'), where fname is the name of the function to be traced. The function's arguments at the time of the call are evaluated and displayed.

STATEMENT NN: LEVEL LL NRETURN OF <fname> = <value>,TIME = TT STATEMENT NN: LEVEL LL FRETURN OF <fname>,TIME = TT Return trace; produced by the function call TRACE('fname', 'RETURN'), where fname is the name of the function whose return is to be traced. The type of return that occurred is displayed in the trace message.

***Print request too long***
An internal buffer is used to display trace messages, and variable values during dumps. If the required display is longer than 1,800 characters, this error message is produced instead.

Previous Previous chapter · Next Next chapter · Contents Table of Contents