anchor.diff:     int
      (|(| expression |)| #'k-2-3)))
   
  +(define-parser *ambiguous-expression-parser*
  +  (:start-symbol expression)
  +  (:terminals (int id + - * / |(| |)|))
  +  (:muffle-conflicts (16 0))
  +
  +  (expression
  +   (expression + expression)
  +   (expression - expression)
  +   (expression * expression)
  +   (expression / expression)
  +   id
  +   int
  +   (|(| expression |)| #'k-2-3)))
  +
   (define-parser *precedence-left-expression-parser*
     (:start-symbol expression)
     (:terminals (int id + - * / |(| |)|))
  
positive.code:     (handler-case (progn ,@body)
        (,class () (return-from ,name nil)))
      (error "~S didn't signal a ~S" ',body ',class))))
  
  ;;; A trivial lexer
  
  
negative.code:           (expect (parse *precedence-left-expression-parser* e) v))
          (let ((v '("x" + ((5 / (3 * ((12 + "y") / 3))) + "z"))))
            (expect (parse *precedence-right-expression-parser* e) v))
          (let ((v '("x" + (5 / (3 * ((12 + "y") / (3 + "z")))))))
            (expect (parse *ambiguous-expression-parser* e) v))
          (expect-condition yacc-parse-error
            (parse *precedence-nonassoc-expression-parser* e)))
        (dolist (e '("5/3*(" "5/3)"))
          (expect-condition yacc-parse-error
            (parse *left-expression-parser* e))
          (expect-condition yacc-parse-error
            (parse *ambiguous-expression-parser* e))
          (expect-condition yacc-parse-error
            (parse *precedence-left-expression-parser* e))
          (expect-condition yacc-parse-error
  