glenda.party
term% ls -F
term% cat index.txt
SNOCONE(1)                  General Commands Manual                 SNOCONE(1)



NAME
       snocone - snobol with syntactic sugar

SYNOPSIS
       snocone file ...

DESCRIPTION
       Snocone  is  a  programming  language, syntactically similar to C, that
       compiles into SNOBOL4.  The Snocone compiler translates the  concatena‐
       tion  of all the input files into a SNOBOL4 program, which it writes in
       a.out.  The first line of a.out arranges that if a.out is executed, the
       SNOBOL4 interpreter will automatically be invoked.

       A synopsis of the Snocone syntax follows.

       Lexical conventions
             Everything after the first # on an input line is ignored.
             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 statment is continued on the next line.
             Spaces generally follow C conventions.

       Binary operators (grouped by decreasing precedence):

       $ .   conditional and immediate pattern value assignment, as in SNOBOL4
       ^     power; right-associative as in SNOBOL4
       * / % multiplication, division, remainder; unlike SNOBOL4, all have the
             same precedence.
       + -   addition, subtraction
       <  >  <=  >=  ==  !=  :<:  :>:  :<=:  :>=:  :==:  :!=:
             comparison operators; the ones surrounded by colons do  character
             comparisons,  the others do numeric comparisons.  These operators
             behave as SNOBOL4 predicates: they return the null string if  the
             indicated condition is true, and fail if it is false.
       &&    concatenation;  evaluates  its  right operand only after its left
             operand has been successfully evaluated.  It  therefore  acts  as
             logical  and  when applied to predicates.  The null string may be
             concatenated to any value.
       ||    the value of the left operand if possible, otherwise the value of
             the  right operand.  Behaves as logical or when applied to predi‐
             cates.
       |     pattern value alternation.
       ?     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.
       =     assignment

       Unary operators; all map to their SNOBOL4 equivalents and have the same
             (highest) precedence.

       +     The numeric equivalent of its argument.
       -     The numeric equivalent of its argument, with the sign reversed.
       ∗     Unevaluated expression, as in SNOBOL4.
       $     If v is a value of type name, then $v is  the  variable  of  that
             name.
       @     Pattern matching cursor assignment.
       ~     Logical  negation: returns the null string if its argument fails,
             and fails otherwise.
       ?     Returns the null string if its argument succeeds, and fails  oth‐
             erwise.
       Returns a value of type
       name that refers to its (lvalue) argument.

       Statements

       Statements  may be prefixed by one or more labels.  A label is an iden‐
       tifier followed by a colon, as in C.  All labels are global:  it  is  a
       good idea to begin labels in procedures with the name of the procedure.

       expression
              The given expression is evaluated for its side effects.

       { statement ... }
              The statements are executed sequentially.

       if (expression) statement [ else statement ]
              If evaluation of the expression succeeds, the first statement is
              executed.  Otherwise, the second statement, if any, is executed.
              An else belongs to the closest unmatched if.

       while (expression) statement
              The  statement is executed repeatedly, as long as the expression
              can be successfully evaluated.

       do statement while (expression)
              Like the while statement, except that the statement is  executed
              once before the first time the expression is evaluated.

       for (e1, e2, e3) statement
              As in C, except that commas are used instead of semicolons.

       return [expression]
              returns  the  value of the expression from the current function.
              If expression fails or is missing, the value returned is that of
              the  variable with the same name as the function.  If that vari‐
              able was never set, the function returns the null string.

       nreturn [expression]
              The expression must be the name of a variable.  That variable is
              returned from the current function as an lvalue.  If the expres‐
              sion fails or is missing, the variable with the same name as the
              function must have been set to the name of a variable.

       freturn
              The current function returns failure.

       goto label
              Transfer control to the given label.



       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:

             procedure name (args) locals { statement ... }

       The  args  and 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.



       Assigning  a (string) value to the variable output causes that value to
       be written as a single line on  the  standard  output.   Accessing  the
       variable  input  causes a line to be read from the standard input.  The
       access fails at end of file.  Accessing or assigning  to  the  variable
       terminal causes a line to be read from or written to the standard error
       file.  Other input-output is as implemented by the Macrospitbol  inter‐
       preter (see spitbol(1)).

BUGS
       Run-time  diagnostics refer to SNOBOL4 source statement numbers, not to
       Snocone line numbers.
       Extremely long statements can overflow the SNOBOL4 compiler's limits on
       input line length.



                                                                    SNOCONE(1)