/brackets.scm

http://github.com/alimoeeny/arc · Scheme · 48 lines · 17 code · 16 blank · 15 comment · 0 complexity · 5af4777794c8751d75f3abe7b9b0beb5 MD5 · raw file

  1. ; From Eli Barzilay, eli@barzilay.org
  2. ;> (require "brackets.scm")
  3. ;> (use-bracket-readtable)
  4. ;> ([+ _ 1] 10)
  5. ;11
  6. (module brackets mzscheme
  7. ; main reader function for []s
  8. ; recursive read starts with default readtable's [ parser,
  9. ; but nested reads still use the curent readtable:
  10. (define (read-square-brackets ch port src line col pos)
  11. `(make-br-fn
  12. ,(read/recursive port #\[ #f)))
  13. ; a readtable that is just like the builtin except for []s
  14. (define bracket-readtable
  15. (make-readtable #f #\[ 'terminating-macro read-square-brackets))
  16. ; call this to set the global readtable
  17. (provide use-bracket-readtable)
  18. (define (use-bracket-readtable)
  19. (current-readtable bracket-readtable))
  20. ; these two implement the required functionality for #reader
  21. ;(define (*read inp)
  22. ; (parameterize ((current-readtable bracket-readtable))
  23. ; (read inp)))
  24. (define (*read . args)
  25. (parameterize ((current-readtable bracket-readtable))
  26. (read (if (null? args) (current-input-port) (car args)))))
  27. (define (*read-syntax src port)
  28. (parameterize ((current-readtable bracket-readtable))
  29. (read-syntax src port)))
  30. ; and the need to be provided as `read' and `read-syntax'
  31. (provide (rename *read read) (rename *read-syntax read-syntax))
  32. )