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 ...))''。希望這不是太多的濫用。 (爲了我的目的,我不需要準確的別名地圖解析。) –