3

我 90% 确定答案在asdf 文档的这一段中,但我似乎无法理解它。我想知道我是否能够将不以“.lisp”结尾的源文件作为文件组件。例如,通常我有类似的东西

(asdf:defsystem #:hash-bang-lang
  :serial t
  :depends-on (#:named-readtables)
  :components ((:file "package")
               (:file "hash-bang-lang")))

如您所见 :file 组件没有指定扩展名。我想知道是否可以加载不以“.lisp”结尾的 lisp 文件。

我想要这个的原因有点奇怪,但对问题没有影响,所以请随意跳过下一点。

我有一些文件“test.mylang”,它以以下内容开头

(in-package :hash-bang-lang)
(in-readtable hash-bang)
#!mylang
..rest of file..

#!mylang是一个阅读器宏,它让我的#'mylang 函数控制解析文件的其余部分。因此,如果我有一个 python 解析器,我会使用 #!python 并且我的 #'python 函数将负责解析。在这些情况下,我希望使用.mylangor.py扩展名,以便编辑器立即知道如何突出显示代码,即使它无论如何都会被加载为 lisp。

谢谢各位

4

1 回答 1

2

:file组件类型强制文件扩展.lisp名为. 如果您需要其他扩展,则需要一个新的组件类型。

(defpackage #:mylang-system
  (:use #:cl #:asdf))
(in-package #:mylang-system)

(defclass mylang-file (cl-source-file)
  ((type :initform "mylang")))

(defsystem test-ext
  :encoding :utf-8
  :components ((:file "package")
               (:mylang-file "hash-bang-lang")))
于 2015-03-30T15:10:17.337 回答