How to run SNOBOL5 programs
INVOKING SNOBOL5
To invoke the Oregon SNOBOL5 interpreter, you
enter the command:
SNOBOL5 <:user-string>
Where <program.sno> is the name of the file containing
the SNOBOL5 program. In Minnesota SNOBOL4 a default extension of .SNO
was added to this name unless an extension is
explicitly given. SNOBOL5 no longer does that and requires the full file name.
The program file
is assigned to SNOBOL input/output unit 5 and is equivalent
to making a file assignment to input/output unit 5.
For example, to run the English parsing program you
could use:
SNOBOL5 ENGLISH.SNO or
SNOBOL5 -5 ENGLISH.sno
Where <file-assignments> is one or more
unit-number-to-file assignments of the form:
- filename
The filename can have file
modifiers appended to it (see the section on input/output
to see more about the modifiers.
It is important to understand that
SNOBOL5 uses an "input/output unit number" (or more
briefly a "unit number") for every file it reads or
writes. A file name is assigned to a unit number
either by giving a "file assignment" on the
command line, or at run time using the
the INPUT() or OUTPUT() functions.
To read or write a file, a variable name must be
associated with the unit number also. SNOBOL5 has,
by default, three preassigned variable names:
"INPUT" to unit 5, "OUTPUT" to unit 6 and "PUNCH" to
unit 7. Each unit number can be used only for
reading or writing but not both at the same time.
Unit numbers can be any integer from 1 through 999.
The SNOBOL5 source program is read by the compiler
using unit 5. Any additional lines of data after
the END statement of the program can be read with
the input variable "INPUT". For example, the
following could be used to print the cross reference
for the ENGLISH.SNO program:
SNOBOL5 xref.sno -1 english.sno -6 listing.txt
Where <options> are either:
1: -d command option sets &DUMP to 1 so that a dump
will occur at termination.
2: -v command option causes source listing to be turned on
turns listing on initially (-LIST) and sets &STAT to
one so that execution statistics are given at the end of the run.
3: --work=nnn[b|k|m|g] command option allocates the specified
size of the SNOBOL5 work area. The default is about 30m for
30 megabytes.
4: -ex command option says to execute the program even if there
are syntatic errors in the source code.
5: -s command option sets &STAT to 1 so that a statistics
are shown at termination.
The above options can also be placed on the first line of the source
program if preceded by "-PRM " starting at the beginning of the line.
Where <user-string> is additional information on
the command line you may wish to pass to the
SNOBOL5 program. The colon ":" keeps
SNOBOL5 from looking any further for file
assignments or command options. The program can
look at this information (as well as the file
assignments) using the keyword &PARM which is a
string consisting of everything on the command line invoking
SNOBOL5 (with token separated with zero bytes).
For example the following program residing
in file program.sno:
&PARM CHAR(0) ':' REM . X
OUTPUT = EVAL(REPLACE(X,CHAR(0),' '))
END
would print 132 as the answer to 11 multiplied by 12
when invoked with the command line:
SNOBOL5 program.sno :"11 * 12"
The quotes are required in Linux to keep the "*" from expanding into all of the
current directory's file names.
Example SNOBOL5 run
The SNOBOL5 interpreter is used to run SNOBOL5 programs.
The SNOBOL5 source program must be stored in a file, usually
a file with an extension of ".sno".
An example program resides in the file named english.sno
which has its input data following the "END" statement of the SNOBOL5 program.
So in the simplest case, when you issue the command:
snobol5 -v english.sno
you should get output at the terminal which looks like shown below.
Note that the compilation and execution times are approximate wall clock time (as opposed to
cpu time).
* Program to parse simple English sentences with following grammar:
1 N = 'DOG ' | 'CAT ' | 'RAT ' | 'MALT '
2 V = 'WORRIED ' | 'KILLED ' | 'ATE '
3 VP = V *NP | V
4 AC = 'THAT ' VP
5 NP = 'THE ' N AC | 'THE ' N
6 S = NP VP
7
8 &FULLSCAN = 1; &ANCHOR = 1; &TRIM = 1
11 NEXT TEXT = INPUT :F(END)
12 (TEXT ' ') S RPOS(0) :F(NO)
13 OUTPUT = '"' TEXT '." IS A SENTENCE.' :(NEXT)
14 NO OUTPUT = '"' TEXT '." IS NOT A SENTENCE.' :(NEXT)
15 END
No syntax errors detected in source program
"THE DOG ATE THE CAT." IS A SENTENCE.
"THE CAT ATE THE RAT." IS A SENTENCE.
"THE DOG WORRIED THE CAT THAT ATE THE RAT." IS A SENTENCE.
"THE MALT THE ATE DOG." IS NOT A SENTENCE.
"THE RAT THAT ATE THE MALT THAT WORRIED THE DOG KILLED THE CAT." IS A SENTENCE.
"THE RAT MALT THE MALT THAT DOG THE WORRIED." IS NOT A SENTENCE.
"THE RAT THAT ATE THE MALT THAT WORRIED THE DOG KILLED." IS A SENTENCE.
Normal termination at level 0
Last statement executed was 11
SNOBOL5 Statistics summary:
0.00105927 Sec. Compilation time (wall clock)
0.000158019 Sec. Execution time (wall clock)
31 Statements executed, 3 Failed
0 Arithmetic operations performed
7 Pattern matches performed
0 Regenerations of dynamic storage
8 Reads performed
7 Writes performed
5097.41 nSec. Average per statement executed (wall clock)
Output from ENGLISH.SNO sample program
Input from the keyboard
If "IN" is specified for a filename and the modifier is "-std", the
input is from standard input, usually the keyboard.
So you could run a simple one line program by typing:
snobol5 -5 IN -std
OUTPUT = 123 * 456 ;END
However, if no input is specified for unit number 5, then SNOBOL5 defaults to
reading from standard input. The above could be more simply:
snobol5
OUTPUT = 123 * 456 ;END
Interrupting your program
Sometimes you may wish to stop a running SNOBOL5 program before it
is finished. You can do this by pressing the Ctrl-C key.
The SNOBOL5 program will then terminate and indicate the statement
that it was executing at the time.
This is very useful when you suspect that the program is in an
infinite loop.
You may wish to set the keyword &DUMP = 1 at the beginning of any
program you are debugging so that a dump of all of your SNOBOL5 variables
is printed at the end of the run, even when ended with Ctrl-Break of Ctrl-C.
Sometimes the program may be in some tight state where interrupts are not allowed. To
stop the program even in those cases, press Ctrl-C ten times and this will force termination.
Prior Page, Next Page, First Page of the Oregon SNOBOL5 Reference