%%
%% This is file `bnf.sty', generated on <1993/2/16>
%% with the docstrip utility (2.0r).
%%
%% The original source file was `bnf.doc'.
%% Included options: `style'.
%%
%%
%% IMPORTANT NOTICE:
%% You are not allowed to distribute this file.
%% For distribution of the original source see
%% the copyright notice in the file bnf.doc.
%%
\def\filename{BNF.DOC}
\def\fileversion{1.05}
\def\filedate{09 Feb 1993 15:16:48 BST}
\def\docdate{09 Feb 1993 15:16:48 BST}
%%% ====================================================================
%%%  @LaTeX-file{
%%%     filename        = "BNF.DOC",
%%%     version         = "1.05",
%%%     date            = "09 Feb 1993",
%%%     time            = "15:16:48 BST",
%%%     author          = "Mike Piff",
%%%     address         = "Dr M. J. Piff
%%%                        University of Sheffield
%%%                        Department of Pure Mathematics
%%%                        Hicks Building
%%%                        Hounsfield Road
%%%                        SHEFFIELD S3 7RH
%%%                        England",
%%%     codetable       = "ISO/ASCII",
%%%     telephone       = "+44 742 824431",
%%%     email           = "[email protected] (Janet)",
%%%     keywords        = "Backus,Naur,syntax,grammar",
%%%     supported       = "yes",
%%%     checksum        = "15432 526 2399 20401",
%%%     docstring       = "A style option to LaTeX for producing
%%%                        Backus-Naur Form syntax notation.",
%%%  }
%%% ====================================================================
%% This is BNF.DOC
%% Copyright (C) 1993 Mike Piff
%% All rights reserved.
%% Copying of this file is authorized only if
%% you make absolutely no changes to your copy.
%%
%% Usage:
%% \documentstyle[bnf]{article} %% in LaTeX
%<+driver>   \DocInput{BNF.DOC}
\typeout{Backus-Naur Form style option for LaTeX, (c) Mike Piff, \filedate}
\newif\ifnonterminal
\def\NonTerminal{\left\langle\obeyspaces\ControlSpaces
  \nonterminaltrue\NonTerminalStyle}
\def\endNonTerminal{\right\rangle}
\def\NonTerminalStyle{\fam0 }
{\obeyspaces\gdef\ControlSpaces{\let =\ }}
\def\Star{\,\left\{}  \def\endStar{\right\}\,}
\def\Optional{\,\left[} \def\endOptional{\right]\,}
\def\Bracket{\,\left(} \def\endBracket{\right)\,}
\def\OR{\mathop{\left|\right.}\nolimits}
\def\Production{\mathrel{\longrightarrow}}
\def\Yields{\mathrel{\Longrightarrow}}
\def\Empty{\varepsilon}
\begingroup
\catcode`\`=\active
\gdef\TerminalFont{\tt \catcode96\active
  \def`{\leavevmode\kern\z@\char96 }}
\endgroup
\begingroup
 \catcode`\~=\active
 \lccode`\~=`\^^M
 \lowercase{\endgroup
   \gdef\Terminal{\relax\PreTerminal
     \ifmmode \hbox \else \leavevmode\null \fi
     \bgroup
     \TerminalFont
     \catcode`~\active
     \def~{\egroup\@latexerr{Terminal string ended by
                             end of line.}\@ehc}%
   \let\do\@makeother \dospecials
   \@sTerminal}}
\def\@sTerminal#1{%
 \catcode`#1\active
 \lccode`\~`#1%
 \lowercase{\def~{\egroup\PostTerminal}}}%
\def\PreTerminal{} \def\PostTerminal{}
\mathchardef\lt="313C \mathchardef\gt="313E
\def\mathactive{"8000}
\def\bnf{%
  \mathchardef\HYPHEN="2D  \mathchardef\MINUS="2200
  \mathchardef\Relbar="303D  \def\relbar{\mathrel{\smash{\MINUS}}}
  \mathchardef\EQUALS="303D
  \mathcode`"=\mathactive
  \mathcode`[=\mathactive \mathcode`\]=\mathactive
  \mathcode`(=\mathactive \mathcode`\)=\mathactive
  \mathcode`|=\mathactive \mathcode`-=\mathactive
  \mathcode`<=\mathactive \mathcode`\>=\mathactive
  \mathcode`@=\mathactive \mathcode`==\mathactive
  \mathcode96 \mathactive
}
\def\endbnf{}
\def\NotInNonTerminal{\errmessage{Not allowed in a non-terminal}}
\def\NotNTdef#1#2{\gdef#1{\ifnonterminal\NotInNonTerminal\else#2\fi}}
\begingroup
  \catcode`"\active
  \catcode`[\active \catcode`\]\active
  \catcode`(\active \catcode`\)\active
  \catcode`|\active \catcode`-\active
  \catcode`<\active \catcode`>\active
  \catcode`@\active \catcode`=\active
  \catcode96 \active
  \gdef"{\Terminal"}%
  \gdef`{\Terminal`}%
  \NotNTdef[\Optional        \NotNTdef]\endOptional
  \NotNTdef(\Bracket         \NotNTdef)\endBracket
  \NotNTdef|\OR              \NotNTdef<\NonTerminal
  \gdef>{\endNonTerminal}%
  \gdef-{%
     \ifnonterminal
        \def\Nnext{\HYPHEN}%
     \else
        \def\Nnext{\futurelet\Next\SeeIfProdn}%
     \fi\Nnext}
  \gdef={%
     \ifnonterminal
        \def\Nnext{\NotInNonTerminal}%
     \else
        \def\Nnext{\futurelet\Next\SeeIfYields}%
     \fi\Nnext}%
  \gdef@{% either an escape char or a star group
     \ifnonterminal
        \def\Nnext{\NotInNonTerminal}%
     \else
        \def\Nnext{\futurelet\Next\SeeIfSpecial}%
     \fi\Nnext}%
\endgroup
\def\SeeIfProdn{%
  \if\noexpand\Next\noexpand>%
     \def\Nnext{\Production\@gobble}%
  \else
     \def\Nnext{\MINUS}%
  \fi
  \Nnext}
\def\SeeIfYields{%
  \if\noexpand\Next\noexpand>%
     \def\Nnext{\Yields\@gobble}%
  \else
     \def\Nnext{\EQUALS}%
  \fi\Nnext}
\def\SeeIfSpecial{%
  \if\noexpand\Next\noexpand<%
     \def\Nnext{\lt\@gobble}%
  \else
     \if\noexpand\Next\noexpand>%
        \def\Nnext{\gt\@gobble}%
     \else
        \def\Nnext{\Star\bgroup\aftergroup\endStar\aftergroup\egroup}%
     \fi
  \fi\Nnext}

\endinput
%%
%% End of file `bnf.sty'.