chiark / gitweb /
src/{lexer-{proto,impl},parser/floc-proto}.lisp: Conditionify parse errors.
[sod] / src / lexer-impl.lisp
index 48109b18154a8b353f7b3f97a1ed4940bd26d4bb..42370c06f91e144192096210008352b8c66334b1 100644 (file)
@@ -39,15 +39,12 @@ (defmethod make-scanner-stream ((scanner sod-token-scanner))
 ;;;--------------------------------------------------------------------------
 ;;; Indicators and error messages.
 
-(defun show-char (stream char &optional colonp atsignp)
-  "Format CHAR to STREAM in a readable way.
-
-   Usable in `format''s ~/.../ command."
-  (declare (ignore colonp atsignp))
-  (cond ((null char) (write-string "<end-of-file>" stream))
+(defun show-char (char)
+  "Format CHAR as a string in a readable way."
+  (cond ((null char) "<end-of-file>")
        ((and (graphic-char-p char) (char/= char #\space))
-        (format stream "`~C'" char))
-       (t (format stream "<~(~:C~)>" char))))
+        (format nil "`~C'" char))
+       (t (format nil "<~(~:C~)>" char))))
 
 (defun skip-until (scanner token-types &key keep-end)
   "This is the implementation of the `skip-until' parser."
@@ -149,13 +146,15 @@ (defmethod scanner-token ((scanner sod-token-scanner))
               (#\' (case (length contents)
                      (1 (char contents 0))
                      (0 (cerror*-with-location (start-floc)
-                                               "Lexical error: ~
-                                                empty character literal")
+                                               'simple-lexer-error
+                                               :format-control
+                                               "Empty character literal")
                         #\?)
                      (t (cerror*-with-location (start-floc)
-                                               "Lexical error: ~
-                                                too many characters ~
-                                                in literal")
+                                               'simple-lexer-error
+                                               :format-control
+                                               "Too many characters ~
+                                                in character literal")
                         (char contents 0))))))
           (values (etypecase it
                     (character :char)