Clojure代码用于分析Clojure代码

Clojure代码用于分析Clojure代码,clojure,Clojure,我想分析一个外国clojure代码文件。我目前正在使用clojure.tools.reader阅读所有表单: (require '[clojure.tools.reader :as reader]) (defn read-all-forms [f] (let [rdr (indexing-push-back-reader (slurp f)) EOF (Object.) opts {:eof EOF}] (loop [ret []] (l

我想分析一个外国clojure代码文件。我目前正在使用
clojure.tools.reader
阅读所有表单:

(require '[clojure.tools.reader :as reader])

(defn read-all-forms [f]
  (let [rdr (indexing-push-back-reader (slurp f))
        EOF (Object.)
        opts {:eof EOF}]
    (loop [ret []]
      (let [form (reader/read opts rdr)]
        (if (= EOF form)
          ret
          (recur (conj ret form)))))))
这通常是有效的,除非遇到引用别名ns的双冒号关键字。例如:

(ns foo
  (:require [foo.bar :as bar]))

::bar/baz
在以下情况下失败:

例外信息无效令牌:::bar/baz


有没有一种方法可以使用clojure.tools.reader来读取文件并解析这样的关键字?我是否应该以某种方式跟踪
*别名映射*
我自己?

tools.reader使用
clojure.tools.reader/*别名映射*
如果绑定,否则它使用
(ns别名*ns*)
解析别名。因此,如果文件中有自动解析的关键字,则需要使用其中一种方法来解析自动解析的别名。

谢谢!最后我做了
(绑定[reader/*别名映射*标识](reader/read…)
。希望这不是太多的虐待。(出于我的目的,我不需要精确的别名映射解析。)