Clojure代码用于分析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.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…)
。希望这不是太多的虐待。(出于我的目的,我不需要精确的别名映射解析。)