src/pset-parse.lisp: Add a little vertical space and commentary.
[sod] / doc / refintro.tex
index ead5ace..6b162bd 100644 (file)
@@ -95,8 +95,21 @@ Anywhere a simple nonterminal name $x$ may appear in the grammar, an
 left-hand side of a production rule, the indices $a_1$, \ldots, $a_n$ are
 variables which vary over all nonterminal and terminal symbols, and the
 variables may also appear on the right-hand side in place of a nonterminal.
-Such a rule stands for a family of rules, in each variable is replaced by
-each possible simple nonterminal or terminal symbol.
+Such a rule stands for a family of rules, in which each variable is replaced
+by each possible simple nonterminal or terminal symbol.
+
+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
+$x[\alpha_1 | \beta_1 | \cdots, \ldots, \alpha_n | \beta_n | \cdots]$ means
+exactly the same as $x[a_1, \ldots, a_n]$ with the additional rules
+\begin{quote}
+  \syntax{$a_1$ ::= $\alpha_1$ @! $\beta_1$ @! $\cdots$} \\
+  \hbox{}\qquad $\vdots$ \\
+  \syntax{$a_n$ ::= $\alpha_n$ @! $\beta_n$ @! $\cdots$}
+\end{quote}
+where $a_1$, \ldots, $a_n$ are new nonterminal symbols.
 
 The letter $\epsilon$ denotes the empty nonterminal
 \begin{quote}