;;; scheme.by -- Scheme BNF language specification ;; ;; Copyright (C) 2001, 2003 Eric M. Ludlam ;; ;; Author: Eric M. Ludlam ;; X-RCS: $Id: scheme.by,v 1.9 2005/09/30 20:22:04 zappo Exp $ ;; ;; This is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation; either version 2, or (at your option) ;; any later version. ;; ;; This software is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to the ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ;; Boston, MA 02110-1301, USA. %package semantic-scm-by %languagemode scheme-mode %start scheme %token DEFINE "define" %token DEFINE-MODULE "define-module" %token LOAD "load" %put DEFINE summary "Function: (define symbol expression)" %put DEFINE-MODULE summary "Function: (define-module (name arg1 ...)) " %put LOAD summary "Function: (load \"filename\")" %token OPENPAREN "(" %token CLOSEPAREN ")" %% scheme : semantic-list (EXPAND $1 scheme-list) ; scheme-list : OPENPAREN scheme-in-list CLOSEPAREN ( ,$2 ) ; scheme-in-list: DEFINE symbol expression (VARIABLE-TAG $2 nil $3 ) | DEFINE name-args opt-doc sequence (FUNCTION-TAG (car ,$2) nil (cdr ,$2) ) | DEFINE-MODULE name-args (PACKAGE-TAG (nth (length $2) $2 ) nil) | LOAD string (INCLUDE-TAG (file-name-nondirectory (read $2)) (read $2) ) | symbol (CODE-TAG $1 nil) ; name-args: semantic-list (EXPAND $1 name-arg-expand) ; name-arg-expand : open-paren name-arg-expand ( ,$2 ) | symbol name-arg-expand ( ,(cons $1 ,$2) ) | ;; EMPTY ( ) ; opt-doc : string | ;; EMPTY ; sequence : expression sequence | expression ; expression : symbol | semantic-list | string ; ;;; scheme.by ends here