4.6 BNF Grammars
| (require scribble/bnf) | package: scribble-lib | 
For example,
| @(let ([open @litchar{(}] | 
| [close @litchar{)}]) | 
| @BNF[(list @nonterm{expr} | 
| @nonterm{id} | 
| @BNF-seq[open @kleeneplus[@nonterm{expr}] close] | 
| @BNF-seq[open @litchar{lambda} | 
| open @kleenestar[@nonterm{id}] close | 
| @nonterm{expr} close] | 
| @nonterm{val}) | 
| (list @nonterm{val} | 
| @BNF-alt[@nonterm{number} @nonterm{primop}]) | 
| (list @nonterm{id} | 
| @elem{any name except for @litchar{lambda}})]) | 
produces the output
| 
 | ‹expr› | ::= | ‹id› | 
| 
 | 
 | | | ( ‹expr›+ ) | 
| 
 | 
 | | | ( lambda ( ‹id›* ) ‹expr› ) | 
| 
 | 
 | | | ‹val› | 
| 
 | ‹val› | ::= | ‹number› | ‹primop› | 
| 
 | ‹id› | ::= | any name except for lambda | 
See also racketgrammar.
procedure
pre-content : pre-content? 
procedure
(BNF-seq-lines elems ...) → block?
elems : (listof content?) 
procedure
pre-content : pre-content? 
procedure
pre-content : pre-content? 
procedure
(kleenestar pre-content ...) → element?
pre-content : pre-content? 
procedure
(kleeneplus pre-content ...) → element?
pre-content : pre-content? 
procedure
(kleenerange n m pre-content ...) → element?
n : any/c m : any/c pre-content : pre-content?