racket/collects/racklog/lang/reader.rkt
2010-06-28 11:24:01 -06:00

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))