%From: Damian.Cugley@prg.oxford.ac.uk (Damian Cugley) %Subject: Re: Styles for lispcode and grammars wanted... %Date: 11 Jul 90 18:34:23 GMT % %Here's one I threw together for my own use. It does EBNF, in LaTeX, in %the style I like - catagory names italicized in angle brackets, and %`::=' introducing productions. % %Example of use: %------------------------------------------------------------------------ %Generally glue is quoted using this notation~\TBcite[\p271]: %\begin{EBNF} % \item[glue] % \ [~`plus' \~] [~`minus' \~]. % \item[stretch] % \ | \. % \item[fil dimen] % \ (~`fil' | `fill' | `filll'~). %\end{EBNF} %A \ which is a \ ... %------------------------------------------------------------------------ % %This is "list" environment in the style of "description" etc (Sec. 5.7). %Thus, productions start with % % \item[LHS] % %which produces % % ::= % %in the document. (This was so I can alter the ::= to something else if %I really want to.) Each production is in LR (horizontal) mode. The %whole thing is indented to \parindent, with turnover lines indented a %further 2 em. % %`|' produces a vertical line. % %\ or \Cat{FOO} produces , with FOO italicized. % %You might prefer {\tt plus} instead of `plus' etc. % % %Here's the code: %------------------------------------------------------------------------ % Damian Cugley Wed 11 Jul 1990 \begingroup \catcode`\|=13 \gdef\EBNF {\list{???}% {% \catcode`\|=13 \def|{$\mid$}% \def\makelabel##1{\<##1> ::=}% \parsep=0pt \itemsep=\smallskipamount \leftmargin=\parindent \advance\leftmargin+2em \labelsep=0.5em \labelwidth=1.5em \raggedright }% } \endgroup \let\endEBNF\endlist \def\Cat#1{\hbox{$\langle${\it #1\/}$\rangle$}} \def\<#1>{Cat{#1}} \endinput ------------------------------------------------------------------------ /--------------------------------------------------------------------\ | Damian Cugley, Programming Research Group, 11 Keble Rd, Oxford, UK | | Damian.Cugley@prg.oxford.ac.uk =or= ...@oxford.prg in UK | \--------------------------------------------------------------------/