You are looking at historical revision 19155 of this page. It may differ significantly from its current revision.

This is a simple example of set-read-syntax! which transforms nested { ... } braces into (begin ...) clauses. Several other examples are available in various eggs, such as objc.

In the example below we are called when the reader encounters the opening { character, and we then (read) in S-expressions in a loop until we detect a } character. Of course, what we (read) may well be another opening brace, which will call us recursively.

;; 2007/10 zb
(set-read-syntax! #\{
   (lambda (port)
     (let loop ((c (peek-char port)) (exps '()))
       (cond ((eof-object? c)
              (error "EOF encountered while parsing { ... } clause"))
             ((char=? c #\})
              (read-char port)   ; discard
              `(begin ,@(reverse exps)))
             ((char-whitespace? c)
              (read-char port)   ; discard whitespace
              (loop (peek-char port) exps))
             (else
              (let ((exp (read port)))
                (loop (peek-char port)
                      (cons exp exps))))))))

Example usage:

#;21> ,x { (display 'hello) (newline) { (display 'inner) (newline) } (newline) }
(begin (display 'hello) (newline) (begin (display 'inner) (newline)) (newline))
#;21> { (display 'hello) (newline) { (display 'inner) (newline) } (newline) }
hello
inner

#;22>