X-Git-Url: https://git.distorted.org.uk/~mdw/sod/blobdiff_plain/3a774b55edfea441c1715994924c2999e9202143..7d8d3a165fa725b686d1c89b78179a4d5705d11a:/doc/refintro.tex?ds=sidebyside

diff --git a/doc/refintro.tex b/doc/refintro.tex
index 2d4dbed..349f7b0 100644
--- a/doc/refintro.tex
+++ b/doc/refintro.tex
@@ -90,6 +90,43 @@ manual describes the base system as provided in the distribution.
 Fortunately, Sod is syntactically quite simple.  The notation is slightly
 unusual in order to make the presentation shorter and easier to read.
 
+
+\subsection{Empty production}
+
+The letter $\epsilon$ denotes the empty nonterminal
+\begin{quote}
+  \syntax{$\epsilon$ ::=}
+\end{quote}
+
+
+\subsection{Parentheses}
+
+Parentheses are used for grouping of alternatives within the right-hand side
+of a production rule.  Specifically, a right-hand side
+\begin{quote}
+  \syntax{$\alpha$ @($\beta_1$ @! $\beta_2$ $| \cdots |$ $\beta_n$@) $\gamma$}
+\end{quote}
+where $\alpha$, $\beta_i$, and $\gamma$ are any sequence of nonterminal
+symbols or parenthesized groups, is equivalent to the right-hand side
+\begin{quote}
+  \syntax{$\alpha$ $b$ $\gamma$}
+\end{quote}
+together with the new production
+\begin{quote}
+  \syntax{$b$ ::= $\beta_1$ @! $\beta_2$ $| \cdots |$ $\beta_n$}
+\end{quote}
+where $b$ is a new nonterminal symbol.
+
+Given the indexed-nonterminal notation described below, one might consider a
+group \syntax{@($\beta_1$ @! $\beta_2$ $| \cdots |$ $\beta_n$@)} equivalent
+to \syntax{<group>@[$\beta_1$ @! $\beta_2$ $| \cdots |$ $\beta_n$@]}, where
+\begin{quote}
+  \syntax{<group>@[$x$@] ::= $x$}
+\end{quote}
+
+
+\subsection{Indexed nonterminals}
+
 Anywhere a simple nonterminal name $x$ may appear in the grammar, an
 \emph{indexed} nonterminal $x[a_1, \ldots, a_n]$ may also appear.  On the
 left-hand side of a production rule, the indices $a_1$, \ldots, $a_n$ are
@@ -98,10 +135,23 @@ variables may also appear on the right-hand side in place of a nonterminal.
 Such a rule stands for a family of rules, in which each variable is replaced
 by each possible simple nonterminal or terminal symbol.
 
-The letter $\epsilon$ denotes the empty nonterminal
+As a notational convenience, where an indexed nonterminal appears on the
+right-hand side of a production rule, each actual argument may be a sequence
+of alternative right-hand sides, separated by `$|$', rather than a a simple
+terminal or nonterminal symbol.  A complex indexing of this form, say
+\syntax{$x$@[$\alpha_1^1$ @! $\alpha_1^2$ $| \cdots |$ $\alpha_1^{m_1},
+\ldots,$ $\alpha_n^1$ @! $\alpha_n^2$ $| \cdots |$ $\alpha_n^{m_n}$@]}
+means exactly the same as \syntax{$x$@[$a_1, \ldots, a_n$@]} with the
+additional rules
 \begin{quote}
-  \syntax{$\epsilon$ ::=}
+  \syntax{$a_1$ ::= $\alpha_1^1$ @! $\alpha_1^2$ $| \cdots |$ $\alpha_1^{m_1}$} \\*
+  \hbox{}\qquad $\vdots$ \\*
+  \syntax{$a_n$ ::= $\alpha_n^1$ @! $\alpha_n^2$ $| \cdots |$ $\alpha_1^{m_n}$}
 \end{quote}
+where $a_1$, \ldots, $a_n$ are new nonterminal symbols.
+
+
+\subsection{Common indexed productions}
 
 The following indexed productions are used throughout the grammar, some often
 enough that they deserve special notation.
