我想要解决的初始任务是为任意Clojure代码构建AST。所以Google建议使用https://github.com/clojure/tools.analyzer.jvm来实现这个目的。我尝试在简单的Clojure表单(print x)
上使用这个库,但是出现了异常消息无法解析变量:x。我曾经认为构建AST是一个简单的过程,没有像验证、解析变量等副作用。而且奇怪的是,没有关于如何省略这个变量解析步骤的清晰文档。
我想要解决的初始任务是为任意Clojure代码构建AST。所以Google建议使用https://github.com/clojure/tools.analyzer.jvm来实现这个目的。我尝试在简单的Clojure表单(print x)
上使用这个库,但是出现了异常消息无法解析变量:x。我曾经认为构建AST是一个简单的过程,没有像验证、解析变量等副作用。而且奇怪的是,没有关于如何省略这个变量解析步骤的清晰文档。
:validate/unresolvable-symbol-handler
作为第三个参数传递,并且要使用:passes-opts
(而不是我尝试的放在environment
内部)。(clojure.tools.analyzer.jvm/analyze '(print x)
(clojure.tools.analyzer.jvm/empty-env)
{:passes-opts {:validate/unresolvable-symbol-handler
(fn [a b c] nil)}})
(aj/analyze '(print x) (assoc (aj/empty-env) :passes-opts {:validate/unresolvable-symbol-handler (fn [a b c] (print a)) }))
,但没有成功。 - hsestupin