1
我想分析一个国外clojure代码的文件。我目前使用clojure.tools.reader
阅读所有的形式:Clojure代码来分析clojure代码
(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
与失败:
ExceptionInfo Invalid token: ::bar/baz
有没有办法使用clojure.tools.reader读取该文件,并解决这样的关键字的方法吗?我应该以某种方式跟踪自己的*alias-map*
?
谢谢!我结束了'(binding [reader/* alias-map * identity](reader/read ...))''。希望这不是太多的滥用。 (为了我的目的,我不需要准确的别名地图解析。) –