From barmar@think.com Thu Feb 24 15:51:42 EST 1994
Article: 12113 of comp.lang.lisp
Xref: glinda.oz.cs.cmu.edu comp.lang.lisp:12113
Path: honeydew.srv.cs.cmu.edu!das-news.harvard.edu!spdcc!think.com!barmar
From: barmar@think.com (Barry Margolin)
Newsgroups: comp.lang.lisp
Subject: Re: Lisp BNF available?
Date: 24 Feb 1994 18:17:09 GMT
Organization: Thinking Machines Corporation, Cambridge MA, USA
Lines: 47
Message-ID: <2kiqv6INNboq@early-bird.think.com>
References: <CLp2rM.828@sparc0a.cs.uiuc.edu>
NNTP-Posting-Host: telecaster.think.com

In article <CLp2rM.828@sparc0a.cs.uiuc.edu> hovig@cs.uiuc.edu writes:
>   I would like a BNF grammar for Lisp.  It need not be complete; it
>is only for the cursory lexical analysis, but then again it mustn't
>be overly simple, either, like those sometimes in educational sources.

Here's a grammar for a Lisp subset that we used in a project here; this is
yacc source with the actions omitted.

start		:
		| s_exp
		;

s_exp		: atom
		| list
		| ERROR error
		;

atom		: NUMBER
		| SYMBOL
		| STRING
		;

list		: '(' ')'
		| '(' s_exp_list ')'
		| '(' s_exp_list '.' s_exp ')'
    		| '\'' s_exp
		| SHARP_QUOTE s_exp
		;

s_exp_list	: s_exp
		| s_exp_list s_exp
		;

Here are some comments by the author:

Hope it helps.  With yacc, the difficulty typically isn't in coming up
with the grammar, it's in coming up with the actions that accompany it;
and the appropriate actions are very problem dependent.

For many languages the lexer is very simple; for lisp it's a bit more
compilicated.  For my parser much of the "magic" was in the lexer; the
actions were very simple.
-- 
Barry Margolin
System Manager, Thinking Machines Corp.

barmar@think.com          {uunet,harvard}!think!barmar