anchor.diff:  ;;; particularly with large/complicated interfaces.
   
   ;; Note: this is not finished yet.
  +
  +;;(ql:quickload '("yacc" "cl-lex"))
   
   (defpackage #:frpc.gen
     (:use #:cl #:yacc #:cl-lex))
  
positive.code:    (hyper (lambda (h) (declare (ignore h)) :int64))
     (float (lambda (f) (declare (ignore f)) :real32))
     (double (lambda (d) (declare (ignore d)) :real64))
     (bool (lambda (b) (declare (ignore b)) :boolean)))
     
    (enum-body 
     (|{| enum-body-list |}| (select-n 1)))
  
    (enum-body-list 
     (identifier |=| value 
                 (lambda (a b c) (declare (ignore b)) (list (list (intern (string-upcase a) :keyword) c))))
     (enum-body-list |,| identifier |=| value
                     (lambda (prev comma id eq val)
                       (declare (ignore comma eq))
                       (append prev 
                             (list (list (intern (string-upcase id) :keyword) val))))))
  
    (struct-type-spec 
     (struct |{|  struct-body |}| (select-n 2)))
  
  
negative.code: ;;    discriminant.  Finally, a case value may not be specified more than
  ;;    once within the scope of a union declaration.
  
  (eval-when (:compile-toplevel :load-toplevel :execute)
    (defun select-n (n)
      (lambda (&rest args) (nth n args)))
    
    (defun select-these (nums)
      (lambda (&rest args) 
        (do ((i 0 (1+ i))
  	   (res nil)
  	   (n nums (cdr n))
  	   (l args (cdr l)))
  	  ((null l) (nreverse res))
  	(when (= (car n) i)
  	  (push (car l) res))))))
  
  (define-string-lexer xdr-lexer 
    ("\\=" (return (values '|=| '|=|)))
  