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