\newenvironment{bnf}% {\begin{grammar} [(colon){ $\longrightarrow$\ \ignorespaces}] [(semicolon){\penalty10000 \ \hskip -20pt plus 1 fil \penalty0 \hbox{}\hskip 20pt plus -1fil $|$\ \ignorespaces}] [(period){\\}][(nonterminal){$\langle$\bgroup\tt}{\egroup$\rangle$}]}% {\end{grammar}}