use #:keywords in module/*.scm, not :keywords
[bpt/guile.git] / module / language / elisp / spec.scm
1 ;;; Guile Emac Lisp
2
3 ;; Copyright (C) 2001 Free Software Foundation, Inc.
4
5 ;; This program is free software; you can redistribute it and/or modify
6 ;; it under the terms of the GNU General Public License as published by
7 ;; the Free Software Foundation; either version 2, or (at your option)
8 ;; any later version.
9 ;;
10 ;; This program is distributed in the hope that it will be useful,
11 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
12 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 ;; GNU General Public License for more details.
14 ;;
15 ;; You should have received a copy of the GNU General Public License
16 ;; along with this program; see the file COPYING. If not, write to
17 ;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18 ;; Boston, MA 02111-1307, USA.
19
20 ;;; Code:
21
22 (define-module (lang elisp spec)
23 #:use-module (system lang language)
24 #:export (elisp))
25
26 \f
27 ;;;
28 ;;; Translator
29 ;;;
30
31 (define (translate x)
32 (if (pair? x)
33 (translate-pair x)
34 x))
35
36 (define (translate-pair x)
37 (let ((name (car x)) (args (cdr x)))
38 (case name
39 ((quote) `(@quote ,@args))
40 ((defvar) `(@define ,@(map translate args)))
41 ((setq) `(@set! ,@(map translate args)))
42 ((if) `(@if ,(translate (car args))
43 (@begin ,@(map translate (cdr args)))))
44 ((and) `(@and ,@(map translate args)))
45 ((or) `(@or ,@(map translate args)))
46 ((progn) `(@begin ,@(map translate args)))
47 ((defun) `(@define ,(car args)
48 (@lambda ,(cadr args) ,@(map translate (cddr args)))))
49 ((lambda) `(@lambda ,(car args) ,@(map translate (cdr args))))
50 (else x))))
51
52 \f
53 ;;;
54 ;;; Language definition
55 ;;;
56
57 (define-language elisp
58 #:title "Emacs Lisp"
59 #:version "0.0"
60 #:reader read
61 #:expander id
62 #:translator translate
63 )