anchor.diff:    ((parts :type vector
             :initform (required)
             :accessor compound-word-parts
  -          :initarg :parts)))
  +          :initarg :parts))
  +  (:documentation
  +   "A token class that consists of several tokens combined into a
  +single aggregate token."))
   (defmethod print-object ((compound-word compound-word) stream)
     (format stream "#<~A ~S>" (class-name (class-of compound-word)) (compound-word-parts compound-word)))
  +
  +(defgeneric assignment-word-name (assignment-word)
  +  (:documentation
  +   "Retrieve the name portion of the assignment.
  +
  +The name portion is the part that comes before the #\= character."))
  +
  +(defgeneric assignment-word-value-word (assignment-word)
  +  (:documentation
  +   "Retrieve the value portion of the assignment.
  +
  +The value portion is the part tat comes after the #\= character."))
   
   (defclass assignment-word (a-word)
     ((name
  
positive.code:   (declare (ignore stream))
    (error 'not-implemented :feature "Backquote (it sucks and you should use $())"))
  
  (defclass command-word (a-word)
    ((tokens
      :initarg :tokens
  
negative.code:     :type a-word
      :initarg :value-word
      :initform (required)
      :accessor assignment-word-value-word))
    (:documentation
     "A class to represent words that look like variable assignments.
  
  Whether or not this token actually represents a variable assignment
  won't be known until after parsing happens."))
  (defmethod print-object ((word assignment-word) stream)
    (format stream "#<~A ~S = ~S>" (class-name (class-of word)) (assignment-word-name word) (assignment-word-value-word word)))
  
  