I am trying to write a racket reader extension procedure that disables special pipe symbol processing |.
I have two files: mylang/lang/reader.rktfor implementing lang reader and mylang/testing.rktto try. I ran raco pkg install --linkto install lang.
Here reader.rkt:
racket
(define (parse-pipe char in srcloc src linum colnum)
(define my-readtable
(make-readtable
(define (my-read-syntax src in)
(parameterize ((current-readtable my-readtable))
(read-syntax src in)))
(define (my-read in)
(syntax->datum
(my-read-syntax
With testing.rktas follows:
(define | 3)
(+ 3 2)
starts and produces 5 as expected. But this does not follow:
(define |+ 3)
(+ |+ 2)
complains that define: bad syntax (multiple expressions after identifier) in: (define \| + 3), which is reasonable, since it parse-pipecreates a syntax object, not a string, so it prematurely stops reading the character.
, , , , , , char , | ..
, | , , .