anchor.diff:           (make-repeat symbol derives))
           (:option
            (make-option symbol derives))
  +        (:or
  +         (make-or symbol derives))
           (otherwise
            (list
             (make-ebnf-prod
  
positive.code: 
  (defstruct ebnf-prod symbol derives)
  
  (defun make-repeat (symbol derives)
    (append
     (expand-ebnf symbol derives :operation :option)
     (list (make-ebnf-prod :symbol symbol :derives (list symbol)))))
  
  (defun make-option (symbol derives)
    (append
     (expand-ebnf symbol derives)
     (list (make-ebnf-prod :symbol symbol :derives '()))))
  
  (defun expand-ebnf (symbol derives &key (operation '()))
    (let ((add-prods '()))
  
negative.code:                (ebnf-prod-derives prod)
                 :action action
                 :action-form action-form))
            (expand-ebnf symbol derives)))
  
  (defun make-ebnf-grammar (&key name (start-symbol (required-argument)) terminals precedence productions)
    (make-grammar :name name :start-symbol start-symbol :terminals terminals :precedence precedence :productions productions))
  
  (defun make-ebnf-parser (grammar
                      &key (discard-memos t) (muffle-conflicts nil)
                      (print-derives-epsilon nil) (print-first-terminals nil)
                      (print-states nil)
                      (print-goto-graph nil) (print-lookaheads nil))
    (make-parser grammar
                 :discard-memos discard-memos :muffle-conflicts muffle-conflicts
                 :print-derives-epsilon print-derives-epsilon
                 :print-first-terminals print-first-terminals
                 :print-states print-states
                 :print-goto-graph print-goto-graph
                 :print-lookaheads print-lookaheads))