Structure of parser in Clojure
There is a lot of weird stuff here.


It's strange to have no ns form for defining your namespace and requiring the libraries you need. Putting a bare use at the top is gross.
Don't use an entire namespace. Either require with an alias, like (:require [clojure.string :as s]) ... (s/join ...), or else require and refer the specific stuff you use: `(:require [clojure.string :refer [join trim]]).
The uppercase function names should be lowercase: poss-dupe, or even possible-duplicate, not Poss-Dupe
There should be a newline after the parameter definitions for most functions: (defn foo [x] \newline (...))
The eval is very suspicious, but I don't want to read your whole program and figure out what you should be doing instead. Probably ns-resolve or something.
(if (or (empty? x) f) nil y) is a bad way to write (when (and (seq x) f) y)
Usually calling keyword to look stuff up in a map suggests that you shouldn't be using keywords as keys, but in your case it looks fine-ish. However, instead of ((keyword whatever) m), it would be more readable to write (get m (keyword whatever)).