old-lang/reader.rkt
#lang s-exp syntax/module-reader
(planet dyoo/brainfudge/lang/language)
#:read my-read
#:read-syntax my-read-syntax


;; Now that we have a parser, let't provide the two functions that a
;; language reader module needs to define.  These are the read and
;; read-syntax functions.
(require "parser.rkt")



;; my-read: input-port -> s-expression
(define (my-read in)
  (syntax->datum
   (my-read-syntax #f in)))



;; my-read-syntax: any input-port -> syntax-object
;;
(define (my-read-syntax src in)
  ;; Note: we're ignoring our src, but if our parser were a bit nicer,
  ;; it would also keep track of the src in the resulting syntax
  ;; objects.

  ;; We also need to return eof once we've exhausted the token stream,
  ;; so let's do so.
  (let ([token-stream (get-tokens in)])
    (cond
     [(eof-object? (peek token-stream))
      eof]
     [else
      (parse-toplevel token-stream)])))