anchor.diff:  ;;; modify) is performed elsewhere as these constructs undergo additional
   ;;; transformations.
   ;;;
  -;;; $Id: parser.lisp,v 1.61 2001/04/09 19:52:06 youngde Exp $
  +;;; $Id: parser.lisp,v 1.62 2001/04/09 20:32:14 youngde Exp $
   
   (in-package "LISA")
   
  
positive.code:         (rule-structure-error name condition)))))
  
  (defun extract-rule-headers (body)
    (let ((doc nil)
          (decls nil)
          (remains body))
      (when (stringp (first remains))
        (setf doc (first remains))
        (setf remains (rest remains)))
      (setf decls (first remains))
      (cond ((and (consp decls)
                  (eq (first decls) 'declare))
             (setf decls (rest decls))
             (setf remains (rest remains)))
            (t (setf decls nil)))
      (values doc decls remains)))
  
  #+ignore
  (defun extract-rule-headers (body)
  
negative.code:   (flet ((redefine-rule ()
             (with-rule-components ((doc-string decls lhs rhs) body)
               (let ((rule (make-rule name (current-engine)
                                      :doc-string doc-string 
                                      :directives decls
                                      :source body)))
                 (finalize-rule-definition rule lhs rhs)
                 (add-rule (current-engine) rule)))))
      (handler-case
  