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:     (let ((final-value (if (equal 1 (length new-parts))
                             (aref new-parts 0)
                             (make-instance 'compound-word :parts new-parts :value nil))))
        (make-instance 'assignment-word :name name :value-word final-value :value raw))))
  
  (define-data name (simple-word)
    ()
  
negative.code: (define-reserved-word bang "!")
  (define-reserved-word in "in")
  
  (defun make-reserved (string &rest initargs)
    (apply 'make-instance (fset:lookup *reserved-words* string) initargs))
  
  (defun reserved-p (word)
    (fset:lookup *reserved-words* word))
  