anchor.diff:    (mapcar #'(lambda (x) `(,(gensym (symbol-name x)) ,x)) names))
   
   (defun restore-state (bindings)
  -  "Given bindings produced by SAVE-STATE-BINDINGS, generate a list of
  -SETF forms that will restore the saved values."
  +  "Given bindings produced by SAVE-STATE-BINDINGS, generate a list of SETF forms
  +that will restore the saved values."
     (mapcar #'(lambda (x) `(setf ,@(reverse x))) bindings))
   
   (defun grammar-p (name names)
  -  "If a symbol either names a production within the grammar or an
  -external parser function."
  +  "If a symbol either names a production within the grammar or an external
  +parser function."
     (or (member name names) (get name 'parser-function)))
   
   (defun compile-and (body txt pos names result state)
  -  "Compile the forms in an AND so that the AND matches if each of
  -the elements matches in sequence."
  +  "Compile the forms in an AND so that the AND matches if each of the elements
  +matches in sequence."
     (unless (null body)
       (let ((body (rewrite-returns body)))
         (with-gensyms (p)
  
positive.code:       `(,name ,@(mapcar #'comp args) ,txt ,p))))
  
  (defun rewrite-form (form names)
    "Rewrite bare symbols naming parser productions or parser functions
  into cannonical list from."
    (cond
      ((and (symbolp form) (grammar-p form names)) (list form))
      (t form)))
  
negative.code: ;;; Parser combinators ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  
  (defparserfun optional (p text position)
    "Match P if we can, returning what P did if it succeeded or nil if it failed."
    (multiple-value-bind (ok r pos) (funcall p text position)
      (if ok (good r pos) (good nil position))))
  
  (defparserfun try (p text position)
    "Attempt to parse using P, moving forward if it succeeds. If P fails, the try
  consumes no input."
    (multiple-value-bind (ok r np) (funcall p text position)
      (when ok (good r np))))
  
  (defparserfun many (p text position)
    "Match P as many times as possible. Always succeeds as zero is an acceptable
  number of times to match. Returns a list of the values returned by P."
    (let ((result nil))
      (loop
         (multiple-value-bind (ok r pos) (funcall p text position)
  