anchor.diff:                       (yacc-parse-error-value e)
                        (yacc-parse-error-expected-terminals e)))))
   
  -(defmacro npush-end (val list)
  -  "Destructively pushes VAL onto the end of LIST"
  -  `(cond
  -    ((null ,list)
  -     (setf ,list (cons ,val nil)))
  -    (t
  -     (setf (cdr (last ,list))
  -           (cons ,val nil))
  -     ,list)))
  -
   (defun parse-with-lexer (lexer parser)
     "Parse the stream of symbols provided by LEXER using PARSER.
   LEXER is a function of no arguments returning a symbol and a semantic value,
  
positive.code:              (declare (type index i) (symbol a))
               (or (cdr (assoc a (aref goto-array i)))
                   (error "This cannot happen."))))
        (let ((stack (list 0)) symbol value unget-queue)
          (flet ((next-symbol ()
                   (if unget-queue
                     (let ((cell (pop unget-queue)))
                       (setq symbol (car cell)
                             value (cdr cell)))
                     (multiple-value-bind (s v) (funcall lexer)
  
negative.code:                      (insert-terminal (new-terminal new-value)
                         :report "Insert a new terminal and continue processing"
                         :interactive (lambda () (list :semicolon ";"))
                         (push (cons symbol value) unget-stack)
                         (setf symbol new-terminal
                               value new-value))
                       (replace-terminal (new-terminal new-value)
  