summaryrefslogtreecommitdiff
path: root/static/v10/man1/snocone.1
diff options
context:
space:
mode:
authorJacob McDonnell <jacob@jacobmcdonnell.com>2026-04-25 21:07:28 -0400
committerJacob McDonnell <jacob@jacobmcdonnell.com>2026-04-25 21:07:28 -0400
commit711594636704defae873be1a355a292505585afd (patch)
tree59ee13f863830d8beba6cfd02bbe813dd486c26f /static/v10/man1/snocone.1
parent3258a063c1f189d7b019e40e525b46bef9b9a7b1 (diff)
docs: Added UNIX V10 Manuals
Diffstat (limited to 'static/v10/man1/snocone.1')
-rw-r--r--static/v10/man1/snocone.1269
1 files changed, 269 insertions, 0 deletions
diff --git a/static/v10/man1/snocone.1 b/static/v10/man1/snocone.1
new file mode 100644
index 00000000..ebe1677f
--- /dev/null
+++ b/static/v10/man1/snocone.1
@@ -0,0 +1,269 @@
+.TH SNOCONE 1
+.CT 1 prog_other
+.SH NAME
+snocone \- snobol with syntactic sugar
+.SH SYNOPSIS
+.B snocone
+.I file ...
+.SH DESCRIPTION
+.I Snocone
+is a programming language, syntactically
+similar to C, that compiles into
+.SM SNOBOL4.
+The Snocone compiler translates the concatenation of all
+the input files into a
+.SM SNOBOL4
+program, which it writes in
+.FR a.out .
+When
+.F a.out
+is executed, the
+.SM SNOBOL4
+interpreter will automatically be invoked.
+A synopsis of Snocone syntax follows.
+.SS Lexical conventions
+.br
+Everything after the first unquoted
+.L #
+on an input line is ignored.
+.br
+Statements normally end at the end of the line.
+If the last character on a line is an operator,
+open parenthesis or bracket, or comma, the statement is
+continued on the next line.
+.SS "Binary operators, \fRgrouped by decreasing precedence"
+.TP
+.B []
+Array and table indexing (denoted in
+.SM SNOBOL4
+by
+.LR <> ).
+.PD 0
+.TP
+.B $ .
+conditional and immediate pattern value assignment,
+as in
+.SM SNOBOL4
+.TP
+.B ^
+power; right-associative as in
+.SM SNOBOL4
+.TP
+.B * / %
+multiplication, division, remainder;
+unlike
+.SM SNOBOL4,
+all have the same precedence.
+.TP
+.B + -
+addition, subtraction
+.TP
+.B
+< > <= >= == != :<: :>: :<=: :>=: :==: :!=:
+comparison operators; the ones surrounded by colons
+compare strings, the others compare numbers.
+These operators behave as
+.SM SNOBOL4
+predicates: they return
+the null string if the condition is true,
+and fail if it is false.
+.TP
+.B &&
+concatenation;
+evaluates its right operand
+only after its left operand has been successfully
+evaluated.
+It therefore acts as logical
+.I and
+when applied to predicates.
+The null string may be concatenated to any value.
+.TP
+.B |\^|
+the value of the left operand if possible, otherwise
+the value of the right operand.
+.TP
+.B |
+pattern value alternation.
+.TP
+.B ?
+pattern match.
+Returns the part of the left operand matched by the
+right operand, which must be a pattern.
+May be used on the left of an assignment
+if the left operand is appropriate.
+Right-associative.
+.TP
+.B =
+assignment
+.PD
+.SS Unary operators
+.TP
+.B +
+The numeric equivalent of its argument.
+.PD 0
+.TP
+.B -
+The numeric equivalent of its argument, with the sign reversed.
+.TP
+.B *
+Unevaluated expression, as in
+.SM SNOBOL4.
+.TP
+.B $
+If
+.I v
+is a value of type
+.BR name ,
+then
+.BI $ v
+is the variable of that name.
+.TP
+.B @
+Pattern matching cursor assignment.
+.TP
+.B ~
+Logical negation: returns the null string if its argument
+fails, and fails otherwise.
+.TP
+.B ?
+Returns the null string if its argument succeeds,
+and fails otherwise.
+.TP
+.B \&.
+Returns a value of type
+.B name
+that refers to its (lvalue) argument.
+.PD
+.SS Statements
+.PP
+Statements may be prefixed by one or more labels.
+A label is an identifier followed by a colon, as in C.
+All labels are global:
+it is a good idea to prefix labels in procedures
+with the name of the procedure.
+.TP
+.I expression
+The given
+.I expression
+is evaluated for its side effects.
+.TP
+.BI { " statement ... " }
+The
+.I statements
+are executed sequentially.
+.TP
+.BI "if (" expression ) " statement \fR[ " else " statement\fR ]"
+If evaluation of the
+.I expression
+succeeds, the first
+.I statement
+is executed.
+Otherwise, the second
+.IR statement ,
+if any, is executed.
+An
+.I else
+belongs to the closest unmatched
+.BR if .
+.TP
+.BI "while (" expression ") " statement
+The
+.I statement
+is executed repeatedly, as long as the
+.I expression
+can be successfully evaluated.
+.TP
+.BI "do " statement " while (" expression )
+Like the
+.B while
+statement, except that the
+.I statement
+is executed once before the first time the
+.I expression
+is evaluated.
+.TP
+.B
+for (\fIe1\fP, \fIe2\fP, \fIe3\fP) \fIstatement\fP
+As in C, except that commas are used instead of semicolons.
+.TP
+.BR return " [\fIexpression\fP]"
+returns the value of the
+.I expression
+from the current function.
+If
+.I expression
+fails or is missing, the value returned is that of the
+variable with the same name as the function.
+If that variable was never set, the function returns
+the null string.
+.TP
+.BR nreturn " [\fIexpression\fP]"
+The
+.I expression
+must be the name of a variable.
+That variable is returned from the current
+function as an lvalue.
+If the
+.I expression
+fails or is missing, the variable with the
+same name as the function must have been set to the
+name of a variable.
+.TP
+.B freturn
+The current function returns failure.
+.TP
+.BI goto " label"
+Transfer control to the given
+.I label.
+.HP Procedures
+.PP
+Procedures may not be textually nested, but may be recursive
+and may call each other in forward references.
+The general form of a procedure declaration is:
+.IP
+.B
+procedure \fIname\fP (\fIargs\fP) \fIlocals\fP { \fIstatement ... \fP}
+.PP
+The
+.I args
+and
+.I locals
+are lists of variable names, separated by commas.
+Since Snocone is a dynamically typed language, further
+declarations are not necessary.
+Although procedures are not textually nested, names are
+dynamically scoped: a procedure can reference the local variables
+and parameters of its caller as if they were global variables.
+.HP Input-Output
+.PP
+Assigning a (string) value to the variable
+.L output
+causes that value to be written as a single line on the
+standard output.
+Accessing the variable
+.L input
+causes a line to be read from the standard input.
+The access fails at end of file.
+Accessing or assigning to the variable
+.L terminal
+causes a line to be read from or written to the
+standard error file.
+Other input-output is as implemented by
+the Macrospitbol interpreter; see
+.IR langs (1).
+.SH SEE ALSO
+A. R. Koenig,
+`The Snocone Programming Language',
+this manual, Volume 2
+.br
+.IR langs (1)
+.SH BUGS
+Run-time diagnostics refer to
+.SM SNOBOL4
+source statement numbers,
+not to Snocone line numbers.
+.br
+Extremely long statements can overflow the
+.SM SNOBOL4
+compiler's
+limits on input line length.