anchor.diff:  	:rules ',correct-rules
   	:first-sets ,(first first-follow)
   	:follow-sets ,(second first-follow))
  -       ,(format nil "GRAMMAR ~a~%START-SYMBOL: ~s~%NON-TERMINALS: {~{~s~^, ~}}~%RULES:~%~{ ~{~s~^ ~}~^~%~}~%"
  -		name
  -		s-symbol
  -		nts
  -		rules))))
  +       ,(format
  +	 nil
  +	 "GRAMMAR ~a~%START-SYMBOL: ~s~%NON-TERMINALS: {~{~s~^, ~}}~%RULES:~%~{ ~{~s~^ ~}~^~%~}~%"
  +	 name
  +	 s-symbol
  +	 nts
  +	 rules))))
   		    
   
   ;; DUMMY
   (defun follow-set (symb)
  -  nil)
  +  (warn "FOLLOW-SET STILL IN DEVELOPMENT.")
  +  nil
  +  
  +  )
   
  -(defmacro unions (&body sets)
  -  `(reduce #'union (list ,@sets)))
  -
  -(defun non-term-p (symb)
  -  (member symb *non-terminals*))
  -
  -(defun term-p (symb)
  -  (and (not (listp symb))
  -       (not (non-term-p symb))))
  -
  -(defparameter *depth* 0)
  -(defparameter *debug* nil)
   
   (defun first-set (symb)
     "Calculates the FIRST set of the current grammar stored in *GRAMMAR*."
  
positive.code: (defparameter *follow-sets* nil)
  (defparameter *non-terminals* nil)
  (defparameter *grammar* nil)
  
  ;;; The only way to use the latter variables!
  (defmacro with-grammar (grammar &body body)
    "Initiates the envrironment with the given GRAMMAR rules;
  if any of the variables *FIRST-SETS*, *FOLLOW-SETS*, *NON-TERMINALS*, or *GRAMMAR* is set,
  an error is throws (via ASSERT)"
    `(progn (assert (not (or *first-sets*
  		   *follow-sets*
  		   *non-terminals*
  		   *grammar*)))
  	  (let ((*grammar* ,grammar)
  		(*non-terminals* (mapcar #'first ,grammar))
  		(*first-sets* (make-hash-table))
  		(*follow-sets* (make-hash-table)))
  	    ,@body)))
  
negative.code: if the terminal is a PREDICATE, it will be applied to the seen token, and accepted on a non nil result."
    (let* ((correct-rules (make-rules rules))
  	 (nts (remove-duplicates (mapcar #'first correct-rules)))
  	 (first-follow (with-grammar (correct-rules s-symbol)
  			 (dolist (nt nts)
  			   (first-set nt))
  			 (dolist (nt nts)
  