35 lines
1.3 KiB
Racket
35 lines
1.3 KiB
Racket
(module reader syntax/module-reader
|
|
; XXX Copied shamelessly from datalog/lang/reader (some things should be better designed to share
|
|
#:language 'racklog/lang/lang
|
|
#:read (lambda ([in (current-input-port)]) (this-read-syntax #f in))
|
|
#:read-syntax this-read-syntax
|
|
#:whole-body-readers? #t
|
|
#:info (lambda (key defval default)
|
|
; XXX Should have different comment character key
|
|
(case key
|
|
[(drracket:submit-predicate)
|
|
(dynamic-require 'datalog/tool/submit 'repl-submit?)]
|
|
[(color-lexer)
|
|
(dynamic-require 'datalog/tool/syntax-color 'get-syntax-token)]
|
|
[(configure-runtime)
|
|
(λ () (current-read-interaction even-read))]
|
|
[else (default key defval)]))
|
|
(require datalog/parse
|
|
racklog/lang/compiler)
|
|
|
|
(define (this-read-syntax [src #f] [in (current-input-port)])
|
|
(list
|
|
(compile-program
|
|
(parameterize ([current-source-name src])
|
|
(parse-program in)))))
|
|
|
|
; XXX This is almost certainly wrong.
|
|
(define (even-read src ip)
|
|
(begin0
|
|
(compile-statement
|
|
(parameterize ([current-source-name src])
|
|
(parse-statement ip)))
|
|
(current-read-interaction odd-read)))
|
|
(define (odd-read src ip)
|
|
(current-read-interaction even-read)
|
|
eof)) |