   "Pushes all non :ε members of x into y, preserving order of x. X may also be
   a non collecton."
   [x y]
-  (if-not (coll? x) 
+  (if-not (coll? x)
     (εconj y x)
     (apply εconj y (reverse x))))
-
-(defn ε?
-  "Returns true if `x` is the epsilon keyword."
-  [x]
-  (= x :ε))
 
 (defn last-index
   "Return the index of the last item in coll where (pred x) is logical true."

        stack (εpush (if (= p-sym :<>) next-sym p-sym) stack)
        cap-hist (if will-capture (conj cap-hist [s-sym (count i-string) nil])
                   cap-hist)
        close-target (if capture-close 
                       (last-index (fn [[_ __ x]] (nil? x)) cap-hist) 0)
        cap-hist (if capture-close (assoc cap-hist 
                                          close-target 
                                          (assoc (get cap-hist close-target)
                                                 2 (count input-string)))
                   cap-hist)]

(defn coll-flatten
  "Flatten any nested coll structure"
  [coll]
  (apply concat
         (map (fn [x] (if (coll? x) (coll-flatten x) [x]))
              coll)))

(defn cfg-to-ndpda
  "Takes the description of a context free grammar and returns a
  non-deterministic push down automaton that recognizes the language generated
  by the context free grammar"
  [cfg]
