UNB/ CS/ David Bremner/ teaching/ cs4613/ lectures/ lecture2/ lexer.rkt
#lang racket/base
(require brag/support)
(provide tokenize tokenize-string)
(define (tokenize-string str)
  (let ([ip (open-input-string str)])
	(tokenize ip)))

(define (tokenize ip)
  (define my-lexer
    (lexer-src-pos
     [(:+ numeric)
      (token 'NUMBER (string->number lexeme))]
     [(:or "+" "-" "*" "/" "(" ")" )
      (token lexeme lexeme)]
     [whitespace
      (token 'WHITESPACE lexeme #:skip? #t)]
     [(eof)
      (void)]))
  (define (next-token) (my-lexer ip))
  next-token)