#lang scheme/base ;; We use the position struct from the parser-tools collection in order to ;; interoperate with the DrScheme syntax coloring mechanism, but we use our ;; own custom token structure since the syntax colorer doesn't make use of ;; the parser-tools token structure. (require (only-in parser-tools/lex position struct:position make-position position? position-offset position-line position-col set-position-offset! set-position-line! set-position-col!)) (provide (all-defined-out) (struct-out position)) (define-struct region (source start end) #:prefab) ; #:property prop:custom-write (lambda (r port write?) ; (fprintf port ; "#" ; (position-line (region-start r)) ; (position-col (region-start r)) ; (position-line (region-end r)) ; (position-col (region-end r))))) ;; region->string : region -> string (define (region->string r) (format "~a:~a:~a-~a:~a" (object-name (region-source r)) (position-line (region-start r)) (position-col (region-start r)) (position-line (region-end r)) (position-col (region-end r)))) ;; string * boolean * boolean (define-struct regexp-contents (pattern global? case-insensitive?) #:transparent) ;; symbol * (optional (union string number symbol regexp-contents)) * region (define-struct token (type contents location) #:transparent)