6.12 Grammar Production Displays
Special markup is available for displaying the productions of a
formal grammar. The markup is simple and does not attempt to
model all aspects of BNF (or any derived forms), but provides
enough to allow context-free grammars to be displayed in a way
that causes uses of a symbol to be rendered as hyperlinks to the
definition of the symbol. There is one environment and a pair of
macros:
- \begin{productionlist}
[language]
\end{productionlist}
-
This environment is used to enclose a group of productions. The
two macros are only defined within this environment. If a
document descibes more than one language, the optional parameter
language should be used to distinguish productions between
languages. The value of the parameter should be a short name
that can be used as part of a filename; colons or other
characters that can't be used in filename across platforms
should be included.
- \production
{name}{definition}
-
A production rule in the grammar. The rule defines the symbol
name to be definition. name should not
contain any markup, and the use of hyphens in a document which
supports more than one grammar is undefined. definition
may contain \token macros and any additional content
needed to describe the grammatical model of symbol. Only
one \production may be used to define a symbol --
multiple definitions are not allowed.
- \token
{name}
-
The name of a symbol defined by a \production macro, used
in the definition of a symbol. Where possible, this will
be rendered as a hyperlink to the definition of the symbol
name.
Note that the entire grammar does not need to be defined in a
single \productionlist environment; any number of
groupings may be used to describe the grammar. Every use of the
\token must correspond to a \production.
The following is an example taken from the
Python Reference Manual:
\begin{productionlist}
\production{identifier}
{(\token{letter}|"_") (\token{letter} | \token{digit} | "_")*}
\production{letter}
{\token{lowercase} | \token{uppercase}}
\production{lowercase}
{"a"..."z"}
\production{uppercase}
{"A"..."Z"}
\production{digit}
{"0"..."9"}
\end{productionlist}
See About this document... for information on suggesting changes.