blob: 72cbaebace2d8978ed5382997c49b2664c07989d (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
%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]
% \<dimen> [~`plus' \<stretch>~] [~`minus' \<stretch>~].
% \item[stretch]
% \<dimen> | \<fil dimen>.
% \item[fil dimen]
% \<factor> (~`fil' | `fill' | `filll'~).
%\end{EBNF}
%A \<stretch> which is a \<dimen> ...
%------------------------------------------------------------------------
%
%This is "list" environment in the style of "description" etc (Sec. 5.7).
%Thus, productions start with
%
% \item[LHS]
%
%which produces
%
% <LHS> ::=
%
%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.
%
%\<FOO> or \Cat{FOO} produces <FOO>, with FOO italicized.
%
%You might prefer {\tt plus} instead of `plus' etc.
%
%
%Here's the code:
%------------------------------------------------------------------------
% Damian Cugley <Damian.Cugley@prg.oxford.ac.uk> 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{\ifmmode%
\hbox{$\langle${\it #1\/}$\rangle$}\else
{$\langle$\penalty10000{\it #1\/}\penalty10000$\rangle$}\fi}
\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 |
\--------------------------------------------------------------------/
|