I am trying to write a racket reader extension procedure that disables special pipe symbol processing |
.
I have two files: mylang/lang/reader.rkt
for implementing lang reader and mylang/testing.rkt
to try. I ran raco pkg install --link
to 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.rkt
as 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-pipe
creates a syntax object, not a string, so it prematurely stops reading the character.
, , , , , , char , | ..
, | , , .