This directory contains source code for the sml interpreter.

A few tips on extending the interpreter:

To add new primitive operators:

   -- Write a C procedure that returns an int and accepts no parameters.
      The return value should be TRUE if no errors were encountered, FALSE
      otherwise (someday the return codes can be used to do error recovery,
      etc.).  The procedure receives its operands from the operand stack,
      generally by calling Pop().  See ``stdops.c'' for lots of examples of
      primitive operators.

   -- In the file optable.h, list the new procedure as extern, then add an
      entry for it in the PrimitiveTable.


To add a new primitive data type:

   -- Add a new entry to ``enum TokenType'' located in machine.h. New entries
      must be placed just before the NumTokens symbol.

   -- Add any necessary data fields to the type ``Token'' (also located in
      machine.h).

   -- Write procedures that evaluate, execute, print, free and make copies
      of tokens of the new type.  (Evaluation and execution currently
      differ only in the treatment of CodeBody(s), so you probably only
      have to write a single procedure to perform both of these
      operations.)

   -- In methods.h, declare the new procedures external, then enter their
      names in the ``Methods'' table.  The ordering of the rows of the Methods
      table must match the ordering of the symbols in ``enum TokenType.''

   -- If the token that you're adding can be stated literally on the input
      stream, then you'll also have to change the scanner and parser (located
      in scanner.l, parser.h, and parser.c).
   
      