/brackets.scm
http://github.com/alimoeeny/arc · Scheme · 48 lines · 17 code · 16 blank · 15 comment · 0 complexity · 5af4777794c8751d75f3abe7b9b0beb5 MD5 · raw file
- ; From Eli Barzilay, eli@barzilay.org
- ;> (require "brackets.scm")
- ;> (use-bracket-readtable)
- ;> ([+ _ 1] 10)
- ;11
- (module brackets mzscheme
-
- ; main reader function for []s
- ; recursive read starts with default readtable's [ parser,
- ; but nested reads still use the curent readtable:
- (define (read-square-brackets ch port src line col pos)
- `(make-br-fn
- ,(read/recursive port #\[ #f)))
-
- ; a readtable that is just like the builtin except for []s
- (define bracket-readtable
- (make-readtable #f #\[ 'terminating-macro read-square-brackets))
-
- ; call this to set the global readtable
- (provide use-bracket-readtable)
- (define (use-bracket-readtable)
- (current-readtable bracket-readtable))
-
- ; these two implement the required functionality for #reader
-
- ;(define (*read inp)
- ; (parameterize ((current-readtable bracket-readtable))
- ; (read inp)))
- (define (*read . args)
- (parameterize ((current-readtable bracket-readtable))
- (read (if (null? args) (current-input-port) (car args)))))
- (define (*read-syntax src port)
- (parameterize ((current-readtable bracket-readtable))
- (read-syntax src port)))
- ; and the need to be provided as `read' and `read-syntax'
- (provide (rename *read read) (rename *read-syntax read-syntax))
- )