anchor.diff:                       (,(first names) ,@args ,input)))))))))))
   
   (defun extract-docstring (body)
  +  "Extract an optional docstring from the body of a macro form."
     (if (and (consp body) (stringp (first body)))
         (values (first body) (rest body))
         (values nil body)))
  
positive.code:      ,(compile-parser name args body)))
  
  (defmacro defterm (name (&rest args) &body body)
    "Define a parser function using the same language as DEFPARSER."
    (multiple-value-bind (docstring body) (extract-docstring body)
      (with-gensyms (input)
        `(progn
  
negative.code:            (setf (get ',name 'parser-function) t))
           (defun ,name (,@args ,input)
             ,@(when docstring (list docstring))
             ,(compile-and body input nil nil))))))
  
  ;;; Compiler ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  
  