sbcl 使用 --script 立即解析并执行

chr*_*eyn 1 parsing sbcl common-lisp abstract-syntax-tree

如果我运行以下 common lisp 代码:

(print "A")
(print "B")
(print "C - No closing bracket"
Run Code Online (Sandbox Code Playgroud)

sbcl --script ./test.lisp

打印A和B。之后错误就像预期的那样出现。

SBCL是否解析第一行(或者换句话说“括号内的代码”)并在进入下一部分之前立即执行它?或者它是否解析整个文件并“标记”AST 中的特定点存在解析器错误?

ign*_*ens 6

它逐个形式地解读事物,就像load、compile等一样。它正在做这样的事情(但更复杂):

(defun trivial-script-runner (f)
  (let ((*package* *package*))
    ;; ... and other things
    (with-open-file (in f)
      (loop for form = (read in nil in)
            until (eq form in)
            do (eval form)))))
Run Code Online (Sandbox Code Playgroud)