   3. tokens containing final info are produced using their production rules"
   (:use [clojure.tools.logging])
   (:require [clojure.set :as sets]
+            [clojure.stacktrace]
             [duckling.time.prod]
             [duckling.time.api :as time]
             [duckling.util :as util]))

                                    (subs sentence pos end)
                                    (:name rule)
                                    sentence
                                    e (.printStackTrace e))
                        {:exception e}))))))

(defn- never-produced?

                      (conj route token)
                      results)))
                (catch Exception e
                  ;; (.printStackTrace e) - probably use logging/debug and turn logging output
                  ;; (prn stash)
                  (throw (ex-info (format "Exception @match stack=%s stash=%s"
                                          (with-out-str (clojure.stacktrace/print-stack-trace e))
                                          (with-out-str (pr stash)))
                                  {:exception e}))
                  ))))]
    (match-recur pattern true stash 0 [] [])))

(defn- pass-once
