anchor.diff:                          (setf noun it))
                       (return-from parse-noun-phrase
                         (values `(:noun-phrase
  -                                . ((:article . ,article)
  -                                   (:noun . ,noun)
  -                                   (:adjectives . ,adjs)
  -                                   (:amount . ,amount)
  -                                   (:ordinality . ,ordinality)
  -                                   (:possesses . ,owns)))
  +                                . (,@(when article `((:article . ,article)))
  +                                     (:noun . ,noun)
  +                                     ,@(when adjs `((:adjectives . ,adjs)))
  +                                     ,@(when amount `((:amount . ,amount)))
  +                                     ,@(when ordinality `((:ordinality . ,ordinality)))
  +                                     ,@(when owns `((:possesses . ,owns)))))
                                 token-list)))
                      (t (when it (push it token-list))
                         (return-from parse-noun-phrase (values nil token-list)))))))))))
  
positive.code:              (if adverb
                   (error 'parser-error :text "Too many adverbs.")
                   (setf adverb (pop token-list))))))
      (let (prep1 prep2 dir-obj ind-obj)
        (maybe-parse-adverb)
        (when (prepositionp (car token-list))
          (setf prep1 (pop token-list)))
        (multiple-value-setq (dir-obj token-list) (parse-noun-group token-list))
        (maybe-parse-adverb)
        (when token-list
          (when (prepositionp (car token-list))
            (setf prep2 (pop token-list)))
          (multiple-value-setq (ind-obj token-list) (parse-noun-group token-list)))
        (values `((:direct-object
                   . (:prepositional-phrase
                      . ((:preposition . ,prep1)
                         (:object . ,dir-obj))))
                  (:indirect-object
                   . (:prepositional-phrase
                      . ((:preposition . ,prep2)
                         (:object . ,ind-obj)))))
                adverb
                token-list))))
  
  (defun parse-noun-group (token-list)
    "Parses a TOKEN-LIST into a LIST representing a NOUN GROUP (multiple noun
  
negative.code:                            (null (second token-list))
                             ;; looking ahead...
                             (and (second token-list)
                                  (or (conjunctionp (second token-list))
                                      (string-equal "," (second token-list))
                                      (prepositionp (second token-list))
                                      (chat-string-p (second token-list))
                                      (adverbp (second token-list)))))
  