anchor.diff:        (seen-escape
          (intern token))
         ;; Attempt to parse a number.
  -      (t (or (maybe-parse-number token)
  -             (parse-ratio token)
  +      (t (or (read-integer token)
  +             (read-float token)
  +             (read-ratio token)
                (intern token))))))
   
  -(defun parse-ratio (string)
  +(defun read-ratio (string)
     ;; ratio = sign? digits+ slash digits+
     (let ((numerator nil)
           (denominator nil)
  
positive.code:         (start 0)
          (len (length string)))
      (when (zerop (length string))
        (return-from parse-ratio))
      ;; Check for a leading sign.
      (case (char string 0)
        (#\- (incf start)
  
negative.code:       (setf saw-sign t
  	    negative (minus-sign-p (char token 0))
  	    start (1+ start)))
      ;; If the token is empty, aside from the sign, then it isn't a number.
      (when (not (= (- end start) 0))
        ;; Main digit-reading loop for integers.
        (do ((offset start (1+ offset)))
            ((>= offset end)
             ;; Successfully parsed an integer!
             (if negative
                 (- number)
                 number))
          (let ((weight (digit-char-p (char token offset) read-base)))
            (when (not weight)
              ;; This character is not a digit in the current base.
              (return))
            (setf number (+ (* number read-base) weight)))))))
  
  (defun read-maybe-nothing (stream char)
    (let ((retval (multiple-value-list
  