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.
  +  "Parse the stream of symbols provided by LEXER using PARSER.
   LEXER is a function of no arguments returning a symbol and a semantic value,
   and should return (VALUES NIL NIL) when the end of input is reached.
   Handle YACC-PARSE-ERROR to provide custom error reporting."
  
positive.code: (defpackage #:yacc
    (:use #:common-lisp)
    (:export #:make-production #:make-grammar #:make-parser #:parse-with-lexer
             #:define-grammar #:define-parser
             #:yacc-parse-error #:yacc-parse-error-terminal
             #:yacc-parse-error-value #:yacc-parse-error-expected-terminals)
    #+CMU
    (:import-from #:extensions #:required-argument #:memq)
    )
  
  (in-package #:yacc)
  
  (defparameter *debug* nil)
  
  (if *debug*
      (pushnew :yacc-debug cl:*features*)
      (setf cl:*features* (remove :yacc-debug cl:*features*)))
  
  #-CMU
  (defun required-argument () (error "A required argument was not supplied"))
  
negative.code:                  (cond
                     ((and (eq 's-prime (item-symbol item))
                           (= 1 (item-position item)))
                      (when (member 'yacc-eof-symbol la)
                        (set-action k (list 'yacc-eof-symbol)
                                    (make-accept-action)
                                    (item-production item))))
                     (t
  