anchor.diff:               (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)
  +      (let ((stack (list 0)) symbol value unget-stack)
           (flet ((next-symbol ()
  -                 (if unget-queue
  -                   (let ((cell (pop unget-queue)))
  +                 (if unget-stack
  +                   (let ((cell (pop unget-stack)))
                        (setq symbol (car cell)
                              value (cdr cell)))
                      (multiple-value-bind (s v) (funcall lexer)
  
positive.code:                      (insert-terminal (new-terminal new-value)
                         :report "Insert a new terminal and continue processing"
                         :interactive (lambda () (list :semicolon ";"))
                         (npush-end (cons symbol value) unget-queue)
                         (setf symbol new-terminal
                               value new-value))
                       (replace-terminal (new-terminal new-value)
  
negative.code:                      (yacc-parse-error-value e)
                       (yacc-parse-error-expected-terminals e)))))
  
  (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,
  