Seems sane enough. added by zilti on Sun Jan 7 13:23:29 2018

(define (read-keyword location l)
  (if (char=? (peek-char) #\space)
      (let ((s (apply string (reverse l))))
	(case s
	  ("abstract"    (begin (set! location (cons abstract: location))
				(make-lexical-token 'U_ABSTRACT     location s)))
	  ("class"       (begin (set! location (cons class: location))
				(make-lexical-token 'U_CLASS        location s)))
	  ("mixin"       (begin (set! location (cons mixin: location))
				(make-lexical-token 'U_MIXIN        location s)))
	  ("interface"   (begin (set! location (cons interface: location))
				(make-lexical-token 'U_INTERFACE    location s)))
	  ("type"        (begin (set! location (cons type: location))
				(make-lexical-token 'U_TYPE         location s)))
	  ("const"       (begin (set! location (cons const: location))
				(make-lexical-token 'U_CONST        location s)))
	  ("var"         (begin (set! location (cons var: location))
				(make-lexical-token 'U_VAR          location s)))
	  ("struct"      (begin (set! location (cons struct: location))
				(make-lexical-token 'U_STRUCT       location s)))
	  ("enum"        (begin (set! location (cons enum: location))
				(make-lexical-token 'U_ENUM         location s)))))
      (read-keyword location (cons (read-char) l))))