anchor.diff:  ;;; The shared character descriptions:
   
   (defparameter *cd-invalid*                (make-instance 'character-description
  -                                            :syntax +cs-invalid+
  -                                            :traits +ct-invalid+))
  +                                                         :syntax +cs-invalid+
  +                                                         :traits +ct-invalid+))
   (defparameter *cd-whitespace*             (make-instance 'character-description
  -                                            :syntax +cs-whitespace+
  -                                            :traits +ct-invalid+))
  +                                                         :syntax +cs-whitespace+
  +                                                         :traits +ct-invalid+))
   (defparameter *cd-constituent-invalid*    (make-instance 'character-description
  -                                            :syntax +cs-whitespace+
  -                                            :traits +ct-invalid+))
  +                                                         :syntax +cs-whitespace+
  +                                                         :traits +ct-invalid+))
   (defparameter *cd-constituent-alphabetic* (make-instance 'character-description
  -                                            :syntax +cs-constituent+
  -                                            :traits +ct-alphabetic+))
  +                                                         :syntax +cs-constituent+
  +                                                         :traits +ct-alphabetic+))
   
   ;; ----------------------------------------
   
  
positive.code:         (*read-suppress* nil)
          (*read-default-float-format* 'single-float))
      (dolist (test
                '(
                  ;; integer  ::= [sign] digit+      
                  (nil "0"  0.)
                  (nil "1"  1.)
                  (nil "2"  2.)
                  (nil "9"  9.)
                  (nil "10" 10.)
                  (nil "11" 11.)
                  (nil "12" 12.)
                  (nil "19" 19.)
                  (((*read-base* 3.)) "0"  0.)
                  (((*read-base* 3.)) "1"  1.)
                  (((*read-base* 3.)) "2"  2.)
                  (((*read-base* 3.)) "9"  |9|)
                  (((*read-base* 3.)) "10" 3.)
                  (((*read-base* 3.)) "11" 4.)
                  (((*read-base* 3.)) "13" |13|)
                  (nil "-0"  -0.)
                  (nil "-1"  -1.)
                  (nil "-2"  -2.)
                  (nil "-9"  -9.)
                  (nil "-10" -10.)
                  (nil "-11" -11.)
                  (nil "-12" -12.)
                  (nil "-19" -19.)
                  (((*read-base* 3.)) "-0"  -0.)
                  (((*read-base* 3.)) "-1"  -1.)
                  (((*read-base* 3.)) "-2"  -2.)
                  (((*read-base* 3.)) "-9"  |-9|)
                  (((*read-base* 3.)) "-10" -3.)
                  (((*read-base* 3.)) "-11" -4.)
                  (((*read-base* 3.)) "-13" |-13|)
                  (nil "+0"  +0.)
                  (nil "+1"  +1.)
                  (nil "+2"  +2.)
                  (nil "+9"  +9.)
                  (nil "+10" +10.)
                  (nil "+11" +11.)
                  (nil "+12" +12.)
                  (nil "+19" +19.)
                  (((*read-base* 3.)) "+0"  +0.)
                  (((*read-base* 3.)) "+1"  +1.)
                  (((*read-base* 3.)) "+2"  +2.)
                  (((*read-base* 3.)) "+9"  |+9|)
                  (((*read-base* 3.)) "+10" +3.)
                  (((*read-base* 3.)) "+11" +4.)
                  (((*read-base* 3.)) "+13" |+13|)
                  ;; integer  ::= [sign] decimal-digit+ decimal-point 
                  (nil "0."  0.)
                  (nil "1."  1.)
                  (nil "2."  2.)
                  (nil "9."  9.)
                  (nil "10." 10.)
                  (nil "11." 11.)
                  (nil "12." 12.)
                  (nil "19." 19.)
                  (((*read-base* 3.)) "0."  0.)
                  (((*read-base* 3.)) "1."  1.)
                  (((*read-base* 3.)) "2."  2.)
                  (((*read-base* 3.)) "9."  9.)
                  (((*read-base* 3.)) "10." 10.)
                  (((*read-base* 3.)) "11." 11.)
                  (((*read-base* 3.)) "13." 13.)
                  (nil "-0."  -0.)
                  (nil "-1."  -1.)
                  (nil "-2."  -2.)
                  (nil "-9."  -9.)
                  (nil "-10." -10.)
                  (nil "-11." -11.)
                  (nil "-12." -12.)
                  (nil "-19." -19.)
                  (((*read-base* 3.)) "-0."  -0.)
                  (((*read-base* 3.)) "-1."  -1.)
                  (((*read-base* 3.)) "-2."  -2.)
                  (((*read-base* 3.)) "-9."  -9.)
                  (((*read-base* 3.)) "-10." -10.)
                  (((*read-base* 3.)) "-11." -11.)
                  (((*read-base* 3.)) "-13." -13.)
                  (nil "+0."  +0.)
                  (nil "+1."  +1.)
                  (nil "+2."  +2.)
                  (nil "+9."  +9.)
                  (nil "+10." +10.)
                  (nil "+11." +11.)
                  (nil "+12." +12.)
                  (nil "+19." +19.)
                  (((*read-base* 3.)) "+0."  +0.)
                  (((*read-base* 3.)) "+1."  +1.)
                  (((*read-base* 3.)) "+2."  +2.)
                  (((*read-base* 3.)) "+9."  +9.)
                  (((*read-base* 3.)) "+10." +10.)
                  (((*read-base* 3.)) "+11." +11.)
                  (((*read-base* 3.)) "+13." +13.)
                  ;; ratio    ::= [sign] {digit}+ slash {digit}+
                  (nil "0/0"    nil division-by-zero)
                  (nil "1/0"    nil division-by-zero)
                  (nil "10/000" nil division-by-zero)
                  (nil "0/1" 0)
                  (nil "1/1" 1)
                  (nil "2/1" 2)
                  (nil "20/10" 2)
                  (nil "200/100" 2)
                  (nil "0/2" 0)
                  (nil "1/2" 1/2)
                  (nil "0/20" 0)
                  (nil "10/20" 1/2)
                  (nil "100/200" 1/2)
                  (nil "001/2" 1/2)
                  (nil "000/20" 0)
                  (nil "010/20" 1/2)
                  (nil "100/200" 1/2)
                  (nil "12345/54321" 12345/54321)
                  (nil "+0/0"    nil division-by-zero)
                  (nil "+1/0"    nil division-by-zero)
                  (nil "+10/000" nil division-by-zero)
                  (nil "+0/1" 0)
                  (nil "+1/1" 1)
                  (nil "+2/1" 2)
                  (nil "+20/10" 2)
                  (nil "+200/100" 2)
                  (nil "+0/2" 0)
                  (nil "+1/2" 1/2)
                  (nil "+0/20" 0)
                  (nil "+10/20" 1/2)
                  (nil "+100/200" 1/2)
                  (nil "+001/2" 1/2)
                  (nil "+000/20" 0)
                  (nil "+010/20" 1/2)
                  (nil "+100/200" 1/2)
                  (nil "+12345/54321" 12345/54321)
                  (nil "-0/0"    nil division-by-zero)
                  (nil "-1/0"    nil division-by-zero)
                  (nil "-10/000" nil division-by-zero)
                  (nil "-0/1" -0)
                  (nil "-1/1" -1)
                  (nil "-2/1" -2)
                  (nil "-20/10" -2)
                  (nil "-200/100" -2)
                  (nil "-0/2" -0)
                  (nil "-1/2" -1/2)
                  (nil "-0/20" -0)
                  (nil "-10/20" -1/2)
                  (nil "-100/200" -1/2)
                  (nil "-001/2" -1/2)
                  (nil "-000/20" -0)
                  (nil "-010/20" -1/2)
                  (nil "-100/200" -1/2)
                  (nil "-12345/54321" -12345/54321)
  ;;; float    ::= [sign] {decimal-digit}* decimal-point {decimal-digit}+ exponent
  ;;; float    ::= [sign] {decimal-digit}* decimal-point {decimal-digit}+ 
  ;;; float    ::= [sign] {decimal-digit}+ exponent
  
negative.code: (defun %parse-integer (string &key (start 0) (end nil) (radix 10.) (junk-allowed nil)
                         &aux (end (or end (length string))))
    (loop
      :named parse
      :with sign = (case (aref string start)
                     (#\+ (incf start) +1)
                     (#\- (incf start) -1)
                     (otherwise        +1))
      :with mant = 0
      :for i :from start :below end
      :do (let ((digit (digit-char-p (aref string i) radix)))
            (cond
              (digit         (setf mant (+ (* mant radix) digit)))
              (junk-allowed  (return-from parse (values (* sign mant) i)))
              (t             (error 'parse-error))) ())
      :finally (return-from parse (values (* sign mant) i))))
  
  
  (defparser parse-ratio-token (token)
  