1. Module (chicken read-syntax)
    1. define-reader-ctor
    2. set-read-syntax!
    3. set-sharp-read-syntax!
    4. set-parameterized-read-syntax!
    5. copy-read-table
    6. current-read-table

Module (chicken read-syntax)

This module provides procedures which can be used to extend the reader with custom read syntax.


[procedure] (define-reader-ctor SYMBOL PROC)

Define new read-time constructor for #, read syntax. For further information, see the documentation for SRFI-10.


[procedure] (set-read-syntax! CHAR-OR-SYMBOL PROC)

When the reader encounters the non-whitespace character CHAR while reading an expression from a given port, then the procedure PROC will be called with that port as its argument. The procedure should return a value that will be returned to the reader:

 ; A simple RGB color syntax:

 (set-read-syntax! #\%
   (lambda (port)
     (apply vector
       (map (cut string->number <> 16)
	    (string-chop (read-string 6 port) 2) ) ) ) )

 (with-input-from-string "(1 2 %f0f0f0 3)" read)
 ; ==> (1 2 #(240 240 240) 3)

If CHAR-OR-SYMBOL is a symbol, then a so-called read-mark handler is defined. In that case the handler procedure will be called when a character-sequence of the form #!SYMBOL is encountered.

You can undo special handling of read-syntax by passing #f as the second argument (if the syntax was previously defined via set-read-syntax!).

As a special case, your handler can return zero values, via (values). This causes the reader to completely ignore whatever input you've read, rather than returning some possibly unspecified value. This can be useful in macro context, reading comments, conditional compilation, and so forth. Available in CHICKEN 4.6.6 and later.

Note that all of CHICKEN's special non-standard read-syntax is handled directly by the reader. To disable built-in read-syntax, define a handler that triggers an error (for example).


[procedure] (set-sharp-read-syntax! CHAR-OR-SYMBOL PROC)

Similar to set-read-syntax!, but allows defining new #<CHAR> ... reader syntax. If the first argument is a symbol, then this procedure is equivalent to set-read-syntax!.

PROC may be #f to disable previously defined "sharp" read syntax.


[procedure] (set-parameterized-read-syntax! CHAR-OR-SYMBOL PROC)

Similar to set-sharp-read-syntax!, but intended for defining reader syntax of the form #<NUMBER><CHAR> .... The handler procedure PROC will be called with two arguments: the input port and the number preceding the dispatching character. If the first argument is a symbol, then this procedure is equivalent to set-read-syntax!.

PROC may be #f to disable previously defined parameterized read syntax.


[procedure] (copy-read-table READ-TABLE)

Returns a copy of the given read-table. You can access the currently active read-table with (current-read-table). This procedure can be useful to restore an old read-table after temporarily introducing new read syntax.


[parameter] (current-read-table)

A read-table object that holds read-procedures for special non-standard read-syntax (see set-read-syntax! for more information).

Previous: Module (chicken random)

Next: Module (chicken repl)