Revise the markup related to the grammar productions to increase the
level of predictability.  This is not really "good" markup, but is arguably
better than we had before.
This closes SF bug #523117.
diff --git a/Doc/ref/ref2.tex b/Doc/ref/ref2.tex
index 74aaae4..1956e02 100644
--- a/Doc/ref/ref2.tex
+++ b/Doc/ref/ref2.tex
@@ -318,8 +318,8 @@
              {"'" \token{shortstringitem}* "'"
               | '"' \token{shortstringitem}* '"'}
   \production{longstring}
-             {"'''" \token{longstringitem}* "'''"
-              | '"""' \token{longstringitem}* '"""'}
+             {"'''" \token{longstringitem}* "'''"}
+  \productioncont{| '"""' \token{longstringitem}* '"""'}
   \production{shortstringitem}
              {\token{shortstringchar} | \token{escapeseq}}
   \production{longstringitem}
diff --git a/Doc/ref/ref5.tex b/Doc/ref/ref5.tex
index 9ed9337..6005f51 100644
--- a/Doc/ref/ref5.tex
+++ b/Doc/ref/ref5.tex
@@ -54,8 +54,8 @@
   \production{atom}
              {\token{identifier} | \token{literal} | \token{enclosure}}
   \production{enclosure}
-             {\token{parenth_form} | \token{list_display}
-              | \token{dict_display} | \token{string_conversion}}
+             {\token{parenth_form} | \token{list_display}}
+  \productioncont{| \token{dict_display} | \token{string_conversion}}
 \end{productionlist}
 
 
@@ -112,9 +112,8 @@
 
 \begin{productionlist}
   \production{literal}
-             {\token{stringliteral} | \token{integer}
-              | \token{longinteger} | \token{floatnumber}
-              | \token{imagnumber}}
+             {\token{stringliteral} | \token{integer} | \token{longinteger}}
+  \productioncont{| \token{floatnumber} | \token{imagnumber}}
 \end{productionlist}
 
 Evaluation of a literal yields an object of the given type (string,
@@ -439,13 +438,12 @@
   \production{call}
              {\token{primary} "(" [\token{argument_list} [","]] ")"}
   \production{argument_list}
-             {\token{positional_arguments} ["," \token{keyword_arguments} 
-		 ["," "*" \token{expression} ["," "**" \token{expression}]]]
-              | \token{keyword_arguments} ["," "*" \token{expression} 
-		["," "**" \token{expression}]]
-	      | "*" \token{expression} ["," "**" \token{expression}]
-	      | "**" \token{expression}
-	     }
+             {\token{positional_arguments} ["," \token{keyword_arguments}}
+  \productioncont{   ["," "*" \token{expression} ["," "**" \token{expression}]]]}
+  \productioncont{| \token{keyword_arguments} ["," "*" \token{expression}}
+  \productioncont{                             ["," "**" \token{expression}]]}
+  \productioncont{| "*" \token{expression} ["," "**" \token{expression}]}
+  \productioncont{| "**" \token{expression}}
   \production{positional_arguments}
              {\token{expression} ("," \token{expression})*}
   \production{keyword_arguments}
@@ -666,8 +664,8 @@
 \begin{productionlist}
   \production{m_expr}
              {\token{u_expr} | \token{m_expr} "*" \token{u_expr}
-              | \token{m_expr} "/" \token{u_expr}
-              | \token{m_expr} "\%" \token{u_expr}}
+              | \token{m_expr} "/" \token{u_expr}}
+  \productioncont{| \token{m_expr} "\%" \token{u_expr}}
   \production{a_expr}
              {\token{m_expr} | \token{aexpr} "+" \token{m_expr}
               \token{aexpr} "-" \token{m_expr}}
@@ -801,8 +799,8 @@
   \production{comparison}
              {\token{or_expr} ( \token{comp_operator} \token{or_expr} )*}
   \production{comp_operator}
-             {"<" | ">" | "==" | ">=" | "<=" | "<>" | "!="
-              | "is" ["not"] | ["not"] "in"}
+             {"<" | ">" | "==" | ">=" | "<=" | "<>" | "!="}
+  \productioncont{| "is" ["not"] | ["not"] "in"}
 \end{productionlist}
 
 Comparisons yield integer values: \code{1} for true, \code{0} for false.
diff --git a/Doc/ref/ref6.tex b/Doc/ref/ref6.tex
index 122f499..7710472 100644
--- a/Doc/ref/ref6.tex
+++ b/Doc/ref/ref6.tex
@@ -6,22 +6,21 @@
 by semicolons.  The syntax for simple statements is:
 
 \begin{productionlist}
-  \production{simple_stmt}
-             {\token{expression_stmt}
-              | \token{assert_stmt}
-              | \token{assignment_stmt}
-              | \token{augmented_assignment_stmt}
-              | \token{pass_stmt}
-              | \token{del_stmt}
-              | \token{print_stmt}
-              | \token{return_stmt}
-              | \token{yield_stmt}
-              | \token{raise_stmt}
-              | \token{break_stmt}
-              | \token{continue_stmt}
-              | \token{import_stmt}
-              | \token{global_stmt}
-              | \token{exec_stmt}}
+  \production{simple_stmt}{\token{expression_stmt}}
+  \productioncont{| \token{assert_stmt}}
+  \productioncont{| \token{assignment_stmt}}
+  \productioncont{| \token{augmented_assignment_stmt}}
+  \productioncont{| \token{pass_stmt}}
+  \productioncont{| \token{del_stmt}}
+  \productioncont{| \token{print_stmt}}
+  \productioncont{| \token{return_stmt}}
+  \productioncont{| \token{yield_stmt}}
+  \productioncont{| \token{raise_stmt}}
+  \productioncont{| \token{break_stmt}}
+  \productioncont{| \token{continue_stmt}}
+  \productioncont{| \token{import_stmt}}
+  \productioncont{| \token{global_stmt}}
+  \productioncont{| \token{exec_stmt}}
 \end{productionlist}
 
 
@@ -112,12 +111,12 @@
   \production{target_list}
              {\token{target} ("," \token{target})* [","]}
   \production{target}
-             {\token{identifier}
-              | "(" \token{target_list} ")"
-              | "[" \token{target_list} "]"
-              | \token{attributeref}
-              | \token{subscription}
-              | \token{slicing}}
+             {\token{identifier}}
+  \productioncont{| "(" \token{target_list} ")"}
+  \productioncont{| "[" \token{target_list} "]"}
+  \productioncont{| \token{attributeref}}
+  \productioncont{| \token{subscription}}
+  \productioncont{| \token{slicing}}
 \end{productionlist}
 
 (See section~\ref{primaries} for the syntax definitions for the last
@@ -264,7 +263,7 @@
 \end{verbatim}
 
 
-\subsection{Augmented Assignment statements \label{augassign}}
+\subsection{Augmented assignment statements \label{augassign}}
 
 Augmented assignment is the combination, in a single statement, of a binary
 operation and an assignment statement:
@@ -275,15 +274,8 @@
   \production{augmented_assignment_stmt}
              {\token{target} \token{augop} \token{expression_list}}
   \production{augop}
-             {"+=" | "-=" | "*=" | "/=" | "\%=" | "**="
-              | ">>=" | "<<=" | "\&=" | "\textasciicircum=" | "|="}
-  \production{target}
-             {\token{identifier}
-              | "(" \token{target_list} ")"
-              | "[" \token{target_list} "]"
-              | \token{attributeref}
-              | \token{subscription}
-              | \token{slicing}}
+             {"+=" | "-=" | "*=" | "/=" | "\%=" | "**="}
+  \productioncont{| ">>=" | "<<=" | "\&=" | "\textasciicircum=" | "|="}
 \end{productionlist}
 
 (See section~\ref{primaries} for the syntax definitions for the last
@@ -364,9 +356,9 @@
 
 \begin{productionlist}
   \production{print_stmt}
-             {"print" ( \optional{\token{expression} ("," \token{expression})* \optional{","}}
-                      | ">\code{>}" \token{expression}
-                        \optional{("," \token{expression})+ \optional{","}})}
+             {"print" ( \optional{\token{expression} ("," \token{expression})* \optional{","}}}
+  \productioncont{| ">\code{>}" \token{expression}
+                  \optional{("," \token{expression})+ \optional{","}} )}
 \end{productionlist}
 
 \keyword{print} evaluates each expression in turn and writes the
@@ -600,11 +592,11 @@
 \begin{productionlist}
   \production{import_stmt}
              {"import" \token{module} ["as" \token{name}]
-                ( "," \token{module} ["as" \token{name}] )*
-              | "from" \token{module} "import" \token{identifier}
-                ["as" \token{name}]
-                ( "," \token{identifier} ["as" \token{name}] )*
-              | "from" \token{module} "import" "*"}
+                ( "," \token{module} ["as" \token{name}] )*}
+  \productioncont{| "from" \token{module} "import" \token{identifier}
+                    ["as" \token{name}]}
+  \productioncont{  ( "," \token{identifier} ["as" \token{name}] )*}
+  \productioncont{| "from" \token{module} "import" "*"}
   \production{module}
              {(\token{identifier} ".")* \token{identifier}}
 \end{productionlist}
diff --git a/Doc/ref/ref7.tex b/Doc/ref/ref7.tex
index f22be71..eeff1aa 100644
--- a/Doc/ref/ref7.tex
+++ b/Doc/ref/ref7.tex
@@ -42,8 +42,12 @@
 
 \begin{productionlist}
   \production{compound_stmt}
-             {\token{if_stmt} | \token{while_stmt} | \token{for_stmt}
-              | \token{try_stmt} | \token{funcdef} | \token{classdef}}
+             {\token{if_stmt}}
+  \productioncont{| \token{while_stmt}}
+  \productioncont{| \token{for_stmt}}
+  \productioncont{| \token{try_stmt}}
+  \productioncont{| \token{funcdef}}
+  \productioncont{| \token{classdef}}
   \production{suite}
              {\token{stmt_list} NEWLINE
               | NEWLINE INDENT \token{statement}+ DEDENT}
@@ -73,9 +77,9 @@
 
 \begin{productionlist}
   \production{if_stmt}
-             {"if" \token{expression} ":" \token{suite}
-              ( "elif" \token{expression} ":" \token{suite} )*
-              ["else" ":" \token{suite}]}
+             {"if" \token{expression} ":" \token{suite}}
+  \productioncont{( "elif" \token{expression} ":" \token{suite} )*}
+  \productioncont{["else" ":" \token{suite}]}
 \end{productionlist}
 
 It selects exactly one of the suites by evaluating the expressions one
@@ -97,8 +101,8 @@
 
 \begin{productionlist}
   \production{while_stmt}
-             {"while" \token{expression} ":" \token{suite}
-               ["else" ":" \token{suite}]}
+             {"while" \token{expression} ":" \token{suite}}
+  \productioncont{["else" ":" \token{suite}]}
 \end{productionlist}
 
 This repeatedly tests the expression and, if it is true, executes the
@@ -126,8 +130,8 @@
 \begin{productionlist}
   \production{for_stmt}
              {"for" \token{target_list} "in" \token{expression_list}
-              ":" \token{suite}
-              ["else" ":" \token{suite}]}
+              ":" \token{suite}}
+  \productioncont{["else" ":" \token{suite}]}
 \end{productionlist}
 
 The expression list is evaluated once; it should yield a sequence.  The
@@ -192,10 +196,10 @@
   \production{try_stmt}
              {\token{try_exc_stmt} | \token{try_fin_stmt}}
   \production{try_exc_stmt}
-             {"try" ":" \token{suite}
-              ("except" [\token{expression} ["," \token{target}]] ":"
-              \token{suite})+
-              ["else" ":" \token{suite}]}
+             {"try" ":" \token{suite}}
+  \productioncont{("except" [\token{expression}
+                             ["," \token{target}]] ":" \token{suite})+}
+  \productioncont{["else" ":" \token{suite}]}
   \production{try_fin_stmt}
              {"try" ":" \token{suite}
               "finally" ":" \token{suite}}
@@ -310,10 +314,10 @@
              {"def" \token{funcname} "(" [\token{parameter_list}] ")"
               ":" \token{suite}}
   \production{parameter_list}
-             {(\token{defparameter} ",")*
-              ("*" \token{identifier} [, "**" \token{identifier}]
-               | "**" \token{identifier}
-               | \token{defparameter} [","])}
+             {(\token{defparameter} ",")*}
+  \productioncont{("*" \token{identifier} [, "**" \token{identifier}]}
+  \productioncont{| "**" \token{identifier}
+                  | \token{defparameter} [","])}
   \production{defparameter}
              {\token{parameter} ["=" \token{expression}]}
   \production{sublist}
diff --git a/Doc/ref/refa1.tex b/Doc/ref/refa1.tex
index 4cd10d5..bf40c2d 100644
--- a/Doc/ref/refa1.tex
+++ b/Doc/ref/refa1.tex
@@ -20,13 +20,13 @@
 language.  It allows use of the new features on a per-module basis
 before the release in which the feature becomes standard.
 
-\begin{verbatim}
-future_statement: "from" "__future__" "import" feature ["as" name]
-                 ("," feature ["as" name])*
-
-feature: identifier
-name: identifier
-\end{verbatim}
+\begin{productionlist}[*]
+  \production{future_statement}
+             {"from" "__future__" "import" feature ["as" name]}
+  \productioncont{("," feature ["as" name])*}
+  \production{feature}{identifier}
+  \production{name}{identifier}
+\end{productionlist}
 
 A future statement must appear near the top of the module.  The only
 lines that can appear before a future statement are: