anchor.diff:  
   (defgeneric token-value (token)
     (:documentation
  -   "Returns the string that was used to build this token.
  -
  -This function should only be used for debugging purposes."))
  +   "Returns the string that was used to build this token."))
  +
  +(defgeneric token-position (token)
  +  (:documentation
  +   "Returns a `position-record' describing where this token began."))
   
   (define-data token ()
  -  ((value :type (or null string)
  -          :initform nil
  -          :updater token-value
  -          :initarg :value))
  +  ((value
  +    :type (or null string)
  +    :initform nil
  +    :updater token-value
  +    :initarg :value)
  +   (position
  +    :type (or null position-record)
  +    :initform nil
  +    :updater token-position
  +    :initarg :position))
     (:documentation
      "A class representing a token in the POSIX shell language."))
   (defmethod print-object ((token token) stream)
  
positive.code: (define-reserved-word bang "!")
  (define-reserved-word in "in")
  
  (defun make-reserved (string raw)
    (make-instance (fset:lookup *reserved-words* string) :value raw))
  
  (defun reserved-p (word)
    (fset:lookup *reserved-words* word))
  
negative.code:         (raw-stream all-chars consumed-chars last-char-status
                      first-consumed-character-position)
        stream
      (let* ((consume-p (lexer-context-consume-p stream))
             (needs-position-record
              (and
               (not (slot-boundp stream 'first-consumed-character-position))
               consume-p))
             (position-record
              (when needs-position-record
                (make-position-record-from-positional-stream raw-stream)))
             (char (if hang-p
                       (read-char raw-stream nil :eof)
                       (read-char-no-hang raw-stream nil :eof))))
        (when needs-position-record
          (if (eq char :eof)
              (setf first-consumed-character-position nil)
              (setf first-consumed-character-position position-record)))
        (cond
          ((and (not hang-p)
                (not char)))
          ((eq char :eof)
           (setf last-char-status nil))
          (consume-p
           (vector-push-extend char all-chars)
           (vector-push-extend char consumed-chars)
           (setf last-char-status 'consumed))
          (t
           (vector-push-extend char all-chars)
  