anchor.diff:  
   (defparserfun optional (p input)
     "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 input)
  -    (if ok (good r pos) (good nil input))))
  +  (multiple-value-bind (ok r next-input) (funcall p input)
  +    (if ok (good r next-input) (good nil input))))
   
   (defparserfun try (p input)
     "Attempt to parse using P, moving forward if it succeeds. If P fails, the try
  
positive.code: 
  ;;; Runtime functions used by compiled parsers ;;;;;;;;;;;;;;;;;;;;;;;
  
  (defun good (result position)
    "Return values indicating a parser succeeded."
    (values t result position))
  
  
  ;;;;;; I/O protocol ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  
  (defgeneric matching-string (s len input)
    (:documentation "Does the string S (with length LEN) match at POSITION?"))
  
  (defgeneric matching-char (c input)
    (:documentation "Does the char C match at POSITION?"))
  
  (defgeneric end-of-text-p (input)
    (:documentation "Are we at the end of the text?"))
  
  (defgeneric getc (input)
    (:documentation "Get the next character and the subsequent position."))
  
  (defgeneric initial-position (input)
    (:documentation "Get the initial position."))
  
  (defgeneric gettext (input end)
    (:documentation "Get the text between START and END." ))
  
  (defgeneric input-position (input)
    (:documentation "Current position within the input"))
  
  ;;;;;;;;; (cons string position) implementation ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  
  (defmethod matching-string (s len (input cons))
    (destructuring-bind (text . position) input
  
negative.code: 
  (defmacro defparser (name (&rest args) &body body)
    "Define a parser named NAME. The argument list can be used to specify
  parameters the parser function will accept in addition to the input argument.
  Any arguments after &state will be bound at the beginning of the function and
  can be used by productions within the grammar to maintain state which will
  backtrack when the parser does."
    `(progn
       (eval-when (:compile-toplevel :load-toplevel :execute)
         (setf (get ',name 'parser-function) t))
  