anchor.diff:  	   (lambda (a b c d e f g) (declare (ignore a b d f g))
   		   `(progn (defxstruct ,(alexandria:symbolicate c '*) () ,@e)
   			   (defxtype* ,c () (:optional ,(alexandria:symbolicate c '*))))))
  +;;   (typedef struct identifier identifier |;|
  +;;	    (lambda (a b c d e) (declare (ignore a b e))
  +;;		    `(defxtype* ,d () ,c)))
  +   (typedef struct identifier |*| identifier |;|
  +	    (lambda (a b c d e f) (declare (ignore a b d f))
  +		    `(defxtype* ,e () (:optional ,c))))
      (union identifier union-body |;|
   	  (lambda (a b c d) (declare (ignore a d))
  -		  `(defxunion ,b () ,@c))))
  +		  `(defxunion ,b (,(car (cadr c)))
  +		     ,@(mapcar (lambda (decl)
  +				 (destructuring-bind (id type) decl
  +				   (list (cond
  +					   ((eq id 'otherwise) 
  +					     id)
  +					   ((integerp id) id)
  +					   (t
  +					    (intern (string id) :keyword)))
  +					 (if (listp type)
  +					     (cadr type)
  +					     type))))					     
  +			       (cddr c))))))
   
     (program-def
      (program identifier |{| version-def |}| |=| value |;|
  
positive.code:    (|{| 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))
  
negative.code: 		 ((null l))
  	       (princ l s) 
  	       (fresh-line s))))))
      (test-lexer body)
      (let ((forms (test-parser body)))
        (with-open-file (f (or outfile 
  			     (merge-pathnames (make-pathname :type "lisp")
  