better error msg when token type is whitespace (fixes #9)

pull/14/head
Matthew Butterick 6 years ago
parent e6b8f99316
commit 359da840b9

@ -15,12 +15,12 @@
(make-parameter (make-parameter
(lambda (tok-name tok-value offset line col span) (lambda (tok-name tok-value offset line col span)
(raise (exn:fail:parsing (raise (exn:fail:parsing
(format "Encountered parsing error near ~e (token ~e) while parsing ~e [line=~a, column=~a, offset=~a]" (format "Encountered parsing error near ~e (token ~e) while parsing ~e [line=~a, column=~a, offset=~a]"
tok-value tok-name tok-value tok-name
(current-source) (current-source)
line col offset) line col offset)
(current-continuation-marks) (current-continuation-marks)
(list (srcloc (current-source) line col offset span))))))) (list (srcloc (current-source) line col offset span)))))))
;; When a tokenization error happens, we call the current-tokenizer-error-handler. ;; When a tokenization error happens, we call the current-tokenizer-error-handler.
(define current-tokenizer-error-handler (define current-tokenizer-error-handler
@ -28,7 +28,10 @@
(lambda (tok-type tok-value offset line column span) (lambda (tok-type tok-value offset line column span)
(raise (exn:fail:parsing (raise (exn:fail:parsing
(string-append (string-append
(format "Encountered unexpected token ~e (~e) while parsing" tok-type tok-value) (format "Encountered unexpected token of type ~e (value ~e) while parsing"
(if (memq tok-type (map string->symbol '("\n" "\t" "\r")))
(format "~a" tok-type)
tok-type) tok-value)
(if (or (current-source) line column offset) (if (or (current-source) line column offset)
(format " ~e [line=~a, column=~a, offset=~a]" (current-source) line column offset) (format " ~e [line=~a, column=~a, offset=~a]" (current-source) line column offset)
"")) ""))

@ -46,5 +46,5 @@
(check-exn exn:fail:parsing? (check-exn exn:fail:parsing?
(lambda () (parse '("zero" "one" "zero")))) (lambda () (parse '("zero" "one" "zero"))))
(check-exn (regexp (regexp-quote (check-exn (regexp (regexp-quote
"Encountered unexpected token \"zero\" (\"zero\") while parsing")) "Encountered unexpected token of type \"zero\" (value \"zero\") while parsing"))
(lambda () (parse '("zero" "one" "zero")))) (lambda () (parse '("zero" "one" "zero"))))

Loading…
Cancel
Save