anchor.diff:              (grammar-or ,@rest)))))
   
   (defmacro grammar-n (n x)
  +  "match = n * x"
     (if (> n 0)
         (let ((n1 (1- n)))
         `(multiple-value-bind (end value) (grammar-call ,x)
  
positive.code:         (when (not e)
            (values end value))))))
  
  ;;
  ;; Value-changing mechanism
  ;;
  (defmacro grammar-func (x f)
    "Apply f to the value of x"
    `(multiple-value-bind (end value) (grammar-call ,x)
  
negative.code:         nil
          (string= prefix string :start2 start :end2 end))))
  
  (defmacro grammar-string (str)
    "match = 'str'"
    (let ((l (length str)))
      (cond ((= l 0) '(values start ""))
            ((= l 1) `(when (and
  