在asdf defsystem中选择扩展名:file component

时间:2015-03-30 07:57:02

标签: common-lisp reader-macro

我90%肯定答案在this paragraph of the asdf documentation,但我似乎无法理解。 我想知道我是否能够拥有不以#34; .lisp"结尾的源文件。作为文件组件。例如,通常我有类似

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

如您所见:文件组件未指定扩展名。我想知道我是否可以加载不会以" .lisp"结尾的lisp文件。

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

我有一些文件" test.mylang"它从以下

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

#!mylang是一个读者宏,它为我的#' mylang函数控制解析文件的其余部分。所以,如果我有一个python的解析器,我会使用#!python,而我的#' python函数将接受解析。 在这些情况下,我希望获得.mylang.py扩展程序,以便编辑人员立即知道如何突出显示代码,即使它仍将作为lisp加载。

谢谢大家

1 个答案:

答案 0 :(得分: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")))