automatic <sub>opt</sub>
authornsz <nsz@port70.net>
Fri, 22 Jul 2011 10:53:18 +0000 (12:53 +0200)
committernsz <nsz@port70.net>
Fri, 22 Jul 2011 10:53:18 +0000 (12:53 +0200)
ann2html.sh
n1548.html

index 509e3a2..8999198 100755 (executable)
@@ -1,7 +1,5 @@
 #!/bin/sh
 
 #!/bin/sh
 
-# todo: <sub>opt</sub>
-
 export LC_ALL=C
 awk '
 BEGIN {
 export LC_ALL=C
 awk '
 BEGIN {
@@ -213,6 +211,11 @@ seencontents && !seenfore && /^[^@]/ {
        }
        s = p s
        p = ""
        }
        s = p s
        p = ""
+       # TODO: false positives..
+       while (match(s, /[a-z]opt[ )]/))
+               s = substr(s,1,RSTART) "<sub>opt</sub>" substr(s,RSTART+RLENGTH-1)
+       if (match(s, /[a-z]opt$/))
+               s = substr(s,1,RSTART) "<sub>opt</sub>"
        for (;;) {
                while (match(s, noteid-1 "\\)")) {
                        p = p substr(s,1,RSTART-1)
        for (;;) {
                while (match(s, noteid-1 "\\)")) {
                        p = p substr(s,1,RSTART-1)
index 47d9b1b..5f12277 100644 (file)
@@ -2400,7 +2400,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
  definitions are listed on separate lines, except when prefaced by the words ''one of''. An
  optional symbol is indicated by the subscript ''opt'', so that
 <pre>
  definitions are listed on separate lines, except when prefaced by the words ''one of''. An
  optional symbol is indicated by the subscript ''opt'', so that
 <pre>
-          { expressionopt }</pre>
+          { expression<sub>opt</sub> }</pre>
  indicates an optional expression enclosed in braces.
 <p><!--para 2 -->
  When syntactic categories are referred to in the main text, they are not italicized and
  indicates an optional expression enclosed in braces.
 <p><!--para 2 -->
  When syntactic categories are referred to in the main text, they are not italicized and
@@ -3695,9 +3695,9 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
 <!--page 81 -->
 <pre>
           integer-constant:
 <!--page 81 -->
 <pre>
           integer-constant:
-                  decimal-constant integer-suffixopt
-                  octal-constant integer-suffixopt
-                  hexadecimal-constant integer-suffixopt
+                  decimal-constant integer-suffix<sub>opt</sub>
+                  octal-constant integer-suffix<sub>opt</sub>
+                  hexadecimal-constant integer-suffix<sub>opt</sub>
           decimal-constant:
                 nonzero-digit
                 decimal-constant digit
           decimal-constant:
                 nonzero-digit
                 decimal-constant digit
@@ -3718,10 +3718,10 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
                a b c           d e     f
                A B C           D E     F
          integer-suffix:
                a b c           d e     f
                A B C           D E     F
          integer-suffix:
-                 unsigned-suffix long-suffixopt
+                 unsigned-suffix long-suffix<sub>opt</sub>
                  unsigned-suffix long-long-suffix
                  unsigned-suffix long-long-suffix
-                 long-suffix unsigned-suffixopt
-                 long-long-suffix unsigned-suffixopt
+                 long-suffix unsigned-suffix<sub>opt</sub>
+                 long-long-suffix unsigned-suffix<sub>opt</sub>
          unsigned-suffix: one of
                 u U
          long-suffix: one of
          unsigned-suffix: one of
                 u U
          long-suffix: one of
@@ -3797,31 +3797,31 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
                  decimal-floating-constant
                  hexadecimal-floating-constant
           decimal-floating-constant:
                  decimal-floating-constant
                  hexadecimal-floating-constant
           decimal-floating-constant:
-                fractional-constant exponent-partopt floating-suffixopt
-                digit-sequence exponent-part floating-suffixopt
+                fractional-constant exponent-part<sub>opt</sub> floating-suffix<sub>opt</sub>
+                digit-sequence exponent-part floating-suffix<sub>opt</sub>
           hexadecimal-floating-constant:
                 hexadecimal-prefix hexadecimal-fractional-constant
           hexadecimal-floating-constant:
                 hexadecimal-prefix hexadecimal-fractional-constant
-                               binary-exponent-part floating-suffixopt
+                               binary-exponent-part floating-suffix<sub>opt</sub>
                 hexadecimal-prefix hexadecimal-digit-sequence
                 hexadecimal-prefix hexadecimal-digit-sequence
-                               binary-exponent-part floating-suffixopt
+                               binary-exponent-part floating-suffix<sub>opt</sub>
           fractional-constant:
           fractional-constant:
-                  digit-sequenceopt . digit-sequence
+                  digit-sequence<sub>opt</sub> . digit-sequence
                   digit-sequence .
           exponent-part:
                   digit-sequence .
           exponent-part:
-                e signopt digit-sequence
-                E signopt digit-sequence
+                e sign<sub>opt</sub> digit-sequence
+                E sign<sub>opt</sub> digit-sequence
           sign: one of
                  + -
           digit-sequence:
                   digit
                   digit-sequence digit
           hexadecimal-fractional-constant:
           sign: one of
                  + -
           digit-sequence:
                   digit
                   digit-sequence digit
           hexadecimal-fractional-constant:
-                hexadecimal-digit-sequenceopt .
+                hexadecimal-digit-sequence<sub>opt</sub> .
                                hexadecimal-digit-sequence
                 hexadecimal-digit-sequence .
           binary-exponent-part:
                                hexadecimal-digit-sequence
                 hexadecimal-digit-sequence .
           binary-exponent-part:
-                 p signopt digit-sequence
-                 P signopt digit-sequence
+                 p sign<sub>opt</sub> digit-sequence
+                 P sign<sub>opt</sub> digit-sequence
           hexadecimal-digit-sequence:
                 hexadecimal-digit
                 hexadecimal-digit-sequence hexadecimal-digit
           hexadecimal-digit-sequence:
                 hexadecimal-digit
                 hexadecimal-digit-sequence hexadecimal-digit
@@ -4035,7 +4035,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
 <p><!--para 1 -->
 <pre>
           string-literal:
 <p><!--para 1 -->
 <pre>
           string-literal:
-                  encoding-prefixopt " s-char-sequenceopt "
+                  encoding-prefix<sub>opt</sub> " s-char-sequence<sub>opt</sub> "
           encoding-prefix:
                  u8
                  u
           encoding-prefix:
                  u8
                  u
@@ -4483,7 +4483,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
           postfix-expression:
                  primary-expression
                  postfix-expression [ expression ]
           postfix-expression:
                  primary-expression
                  postfix-expression [ expression ]
-                 postfix-expression ( argument-expression-listopt )
+                 postfix-expression ( argument-expression-list<sub>opt</sub> )
                  postfix-expression . identifier
                  postfix-expression -&gt; identifier
                  postfix-expression ++
                  postfix-expression . identifier
                  postfix-expression -&gt; identifier
                  postfix-expression ++
@@ -5833,14 +5833,14 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
 <p><!--para 1 -->
 <pre>
           declaration:
 <p><!--para 1 -->
 <pre>
           declaration:
-                 declaration-specifiers init-declarator-listopt ;
+                 declaration-specifiers init-declarator-list<sub>opt</sub> ;
                  static_assert-declaration
           declaration-specifiers:
                  static_assert-declaration
           declaration-specifiers:
-                 storage-class-specifier declaration-specifiersopt
-                 type-specifier declaration-specifiersopt
-                 type-qualifier declaration-specifiersopt
-                 function-specifier declaration-specifiersopt
-                 alignment-specifier declaration-specifiersopt
+                 storage-class-specifier declaration-specifiers<sub>opt</sub>
+                 type-specifier declaration-specifiers<sub>opt</sub>
+                 type-qualifier declaration-specifiers<sub>opt</sub>
+                 function-specifier declaration-specifiers<sub>opt</sub>
+                 alignment-specifier declaration-specifiers<sub>opt</sub>
           init-declarator-list:
                   init-declarator
                   init-declarator-list , init-declarator
           init-declarator-list:
                   init-declarator
                   init-declarator-list , init-declarator
@@ -6023,7 +6023,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
 <p><!--para 1 -->
 <pre>
           struct-or-union-specifier:
 <p><!--para 1 -->
 <pre>
           struct-or-union-specifier:
-                  struct-or-union identifieropt { struct-declaration-list }
+                  struct-or-union identifier<sub>opt</sub> { struct-declaration-list }
                   struct-or-union identifier
           struct-or-union:
                   struct
                   struct-or-union identifier
           struct-or-union:
                   struct
@@ -6032,17 +6032,17 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
                   struct-declaration
                   struct-declaration-list struct-declaration
           struct-declaration:
                   struct-declaration
                   struct-declaration-list struct-declaration
           struct-declaration:
-                  specifier-qualifier-list struct-declarator-listopt ;
+                  specifier-qualifier-list struct-declarator-list<sub>opt</sub> ;
                   static_assert-declaration
           specifier-qualifier-list:
                   static_assert-declaration
           specifier-qualifier-list:
-                 type-specifier specifier-qualifier-listopt
-                 type-qualifier specifier-qualifier-listopt
+                 type-specifier specifier-qualifier-list<sub>opt</sub>
+                 type-qualifier specifier-qualifier-list<sub>opt</sub>
           struct-declarator-list:
                   struct-declarator
                   struct-declarator-list , struct-declarator
           struct-declarator:
                   declarator
           struct-declarator-list:
                   struct-declarator
                   struct-declarator-list , struct-declarator
           struct-declarator:
                   declarator
-                  declaratoropt : constant-expression</pre>
+                  declarator<sub>opt</sub> : constant-expression</pre>
 <h6>Constraints</h6>
 <p><!--para 2 -->
  A struct-declaration that does not declare an anonymous structure or anonymous union
 <h6>Constraints</h6>
 <p><!--para 2 -->
  A struct-declaration that does not declare an anonymous structure or anonymous union
@@ -6252,8 +6252,8 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
 <p><!--para 1 -->
 <pre>
           enum-specifier:
 <p><!--para 1 -->
 <pre>
           enum-specifier:
-                enum identifieropt { enumerator-list }
-                enum identifieropt { enumerator-list , }
+                enum identifier<sub>opt</sub> { enumerator-list }
+                enum identifier<sub>opt</sub> { enumerator-list , }
                 enum identifier
           enumerator-list:
                 enumerator
                 enum identifier
           enumerator-list:
                 enumerator
@@ -6339,13 +6339,13 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
  
 <!--page 136 -->
 <pre>
  
 <!--page 136 -->
 <pre>
-          struct-or-union identifieropt { struct-declaration-list }</pre>
+          struct-or-union identifier<sub>opt</sub> { struct-declaration-list }</pre>
  or
 <pre>
  or
 <pre>
-          enum identifieropt { enumerator-list }</pre>
+          enum identifier<sub>opt</sub> { enumerator-list }</pre>
  or
 <pre>
  or
 <pre>
-          enum identifieropt { enumerator-list , }</pre>
+          enum identifier<sub>opt</sub> { enumerator-list , }</pre>
  declares a structure, union, or enumerated type. The list defines the structure content,
  union content, or enumeration content. If an identifier is provided,<sup><a href="#note130"><b>130)</b></a></sup> the type specifier
  also declares the identifier to be the tag of that type.
  declares a structure, union, or enumerated type. The list defines the structure content,
  union content, or enumeration content. If an identifier is provided,<sup><a href="#note130"><b>130)</b></a></sup> the type specifier
  also declares the identifier to be the tag of that type.
@@ -6834,19 +6834,19 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
 <p><!--para 1 -->
 <pre>
           declarator:
 <p><!--para 1 -->
 <pre>
           declarator:
-                 pointeropt direct-declarator
+                 pointer<sub>opt</sub> direct-declarator
           direct-declarator:
                   identifier
                   ( declarator )
           direct-declarator:
                   identifier
                   ( declarator )
-                  direct-declarator [ type-qualifier-listopt assignment-expressionopt ]
-                  direct-declarator [ static type-qualifier-listopt assignment-expression ]
+                  direct-declarator [ type-qualifier-list<sub>opt</sub> assignment-expression<sub>opt</sub> ]
+                  direct-declarator [ static type-qualifier-list<sub>opt</sub> assignment-expression ]
                   direct-declarator [ type-qualifier-list static assignment-expression ]
                   direct-declarator [ type-qualifier-list static assignment-expression ]
-                  direct-declarator [ type-qualifier-listopt * ]
+                  direct-declarator [ type-qualifier-list<sub>opt</sub> * ]
                   direct-declarator ( parameter-type-list )
                   direct-declarator ( parameter-type-list )
-                  direct-declarator ( identifier-listopt )
+                  direct-declarator ( identifier-list<sub>opt</sub> )
           pointer:
           pointer:
-                 * type-qualifier-listopt
-                 * type-qualifier-listopt pointer
+                 * type-qualifier-list<sub>opt</sub>
+                 * type-qualifier-list<sub>opt</sub> pointer
           type-qualifier-list:
                  type-qualifier
                  type-qualifier-list type-qualifier
           type-qualifier-list:
                  type-qualifier
                  type-qualifier-list type-qualifier
@@ -6858,7 +6858,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
                 parameter-list , parameter-declaration
           parameter-declaration:
                 declaration-specifiers declarator
                 parameter-list , parameter-declaration
           parameter-declaration:
                 declaration-specifiers declarator
-                declaration-specifiers abstract-declaratoropt
+                declaration-specifiers abstract-declarator<sub>opt</sub>
           identifier-list:
                  identifier
                  identifier-list , identifier</pre>
           identifier-list:
                  identifier
                  identifier-list , identifier</pre>
@@ -6905,7 +6905,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
 <p><!--para 1 -->
  If, in the declaration ''T D1'', D1 has the form
 <pre>
 <p><!--para 1 -->
  If, in the declaration ''T D1'', D1 has the form
 <pre>
-         * type-qualifier-listopt D</pre>
+         * type-qualifier-list<sub>opt</sub> D</pre>
  and the type specified for ident in the declaration ''T D'' is ''derived-declarator-type-list
  T '', then the type specified for ident is ''derived-declarator-type-list type-qualifier-list
  pointer to T ''. For each type qualifier in the list, ident is a so-qualified pointer.
  and the type specified for ident in the declaration ''T D'' is ''derived-declarator-type-list
  T '', then the type specified for ident is ''derived-declarator-type-list type-qualifier-list
  pointer to T ''. For each type qualifier in the list, ident is a so-qualified pointer.
@@ -6951,10 +6951,10 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
 <p><!--para 3 -->
  If, in the declaration ''T D1'', D1 has one of the forms:
 <pre>
 <p><!--para 3 -->
  If, in the declaration ''T D1'', D1 has one of the forms:
 <pre>
-          D[ type-qualifier-listopt assignment-expressionopt ]
-          D[ static type-qualifier-listopt assignment-expression ]
+          D[ type-qualifier-list<sub>opt</sub> assignment-expression<sub>opt</sub> ]
+          D[ static type-qualifier-list<sub>opt</sub> assignment-expression ]
           D[ type-qualifier-list static assignment-expression ]
           D[ type-qualifier-list static assignment-expression ]
-          D[ type-qualifier-listopt * ]</pre>
+          D[ type-qualifier-list<sub>opt</sub> * ]</pre>
  and the type specified for ident in the declaration ''T D'' is ''derived-declarator-type-list
  T '', then the type specified for ident is ''derived-declarator-type-list array of T ''.<sup><a href="#note142"><b>142)</b></a></sup>
  (See <a href="#6.7.6.3">6.7.6.3</a> for the meaning of the optional type qualifiers and the keyword static.)
  and the type specified for ident in the declaration ''T D'' is ''derived-declarator-type-list
  T '', then the type specified for ident is ''derived-declarator-type-list array of T ''.<sup><a href="#note142"><b>142)</b></a></sup>
  (See <a href="#6.7.6.3">6.7.6.3</a> for the meaning of the optional type qualifiers and the keyword static.)
@@ -7074,7 +7074,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
         D( parameter-type-list )</pre>
  or
 <pre>
         D( parameter-type-list )</pre>
  or
 <pre>
-        D( identifier-listopt )</pre>
+        D( identifier-list<sub>opt</sub> )</pre>
  and the type specified for ident in the declaration ''T D'' is ''derived-declarator-type-list
  T '', then the type specified for ident is ''derived-declarator-type-list function returning
  T ''.
  and the type specified for ident in the declaration ''T D'' is ''derived-declarator-type-list
  T '', then the type specified for ident is ''derived-declarator-type-list function returning
  T ''.
@@ -7224,20 +7224,20 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
 <p><!--para 1 -->
 <pre>
           type-name:
 <p><!--para 1 -->
 <pre>
           type-name:
-                 specifier-qualifier-list abstract-declaratoropt
+                 specifier-qualifier-list abstract-declarator<sub>opt</sub>
           abstract-declarator:
                  pointer
           abstract-declarator:
                  pointer
-                 pointeropt direct-abstract-declarator
+                 pointer<sub>opt</sub> direct-abstract-declarator
           direct-abstract-declarator:
                   ( abstract-declarator )
           direct-abstract-declarator:
                   ( abstract-declarator )
-                  direct-abstract-declaratoropt [ type-qualifier-listopt
-                                 assignment-expressionopt ]
-                  direct-abstract-declaratoropt [ static type-qualifier-listopt
+                  direct-abstract-declarator<sub>opt</sub> [ type-qualifier-list<sub>opt</sub>
+                                 assignment-expression<sub>opt</sub> ]
+                  direct-abstract-declarator<sub>opt</sub> [ static type-qualifier-list<sub>opt</sub>
                                  assignment-expression ]
                                  assignment-expression ]
-                  direct-abstract-declaratoropt [ type-qualifier-list static
+                  direct-abstract-declarator<sub>opt</sub> [ type-qualifier-list static
                                  assignment-expression ]
                                  assignment-expression ]
-                  direct-abstract-declaratoropt [ * ]
-                  direct-abstract-declaratoropt ( parameter-type-listopt )</pre>
+                  direct-abstract-declarator<sub>opt</sub> [ * ]
+                  direct-abstract-declarator<sub>opt</sub> ( parameter-type-list<sub>opt</sub> )</pre>
 <h6>Semantics</h6>
 <p><!--para 2 -->
  In several contexts, it is necessary to specify a type. This is accomplished using a type
 <h6>Semantics</h6>
 <p><!--para 2 -->
  In several contexts, it is necessary to specify a type. This is accomplished using a type
@@ -7378,8 +7378,8 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
                    { initializer-list }
                    { initializer-list , }
           initializer-list:
                    { initializer-list }
                    { initializer-list , }
           initializer-list:
-                   designationopt initializer
-                   initializer-list , designationopt initializer
+                   designation<sub>opt</sub> initializer
+                   initializer-list , designation<sub>opt</sub> initializer
           designation:
                  designator-list =
           designator-list:
           designation:
                  designator-list =
           designator-list:
@@ -7765,7 +7765,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
 <p><!--para 1 -->
 <pre>
           compound-statement:
 <p><!--para 1 -->
 <pre>
           compound-statement:
-                { block-item-listopt }
+                { block-item-list<sub>opt</sub> }
           block-item-list:
                   block-item
                   block-item-list block-item
           block-item-list:
                   block-item
                   block-item-list block-item
@@ -7781,7 +7781,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
 <p><!--para 1 -->
 <pre>
           expression-statement:
 <p><!--para 1 -->
 <pre>
           expression-statement:
-                 expressionopt ;</pre>
+                 expression<sub>opt</sub> ;</pre>
 <h6>Semantics</h6>
 <p><!--para 2 -->
  The expression in an expression statement is evaluated as a void expression for its side
 <h6>Semantics</h6>
 <p><!--para 2 -->
  The expression in an expression statement is evaluated as a void expression for its side
@@ -7931,8 +7931,8 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
           iteration-statement:
                   while ( expression ) statement
                   do statement while ( expression ) ;
           iteration-statement:
                   while ( expression ) statement
                   do statement while ( expression ) ;
-                  for ( expressionopt ; expressionopt ; expressionopt ) statement
-                  for ( declaration expressionopt ; expressionopt ) statement</pre>
+                  for ( expression<sub>opt</sub> ; expression<sub>opt</sub> ; expression<sub>opt</sub> ) statement
+                  for ( declaration expression<sub>opt</sub> ; expression<sub>opt</sub> ) statement</pre>
 <h6>Constraints</h6>
 <p><!--para 2 -->
  The controlling expression of an iteration statement shall have scalar type.
 <h6>Constraints</h6>
 <p><!--para 2 -->
  The controlling expression of an iteration statement shall have scalar type.
@@ -8008,7 +8008,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
                  goto identifier ;
                  continue ;
                  break ;
                  goto identifier ;
                  continue ;
                  break ;
-                 return expressionopt ;</pre>
+                 return expression<sub>opt</sub> ;</pre>
  
  
  
  
  
  
@@ -8208,7 +8208,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
 <p><!--para 1 -->
 <pre>
           function-definition:
 <p><!--para 1 -->
 <pre>
           function-definition:
-                 declaration-specifiers declarator declaration-listopt compound-statement
+                 declaration-specifiers declarator declaration-list<sub>opt</sub> compound-statement
           declaration-list:
                  declaration
                  declaration-list declaration</pre>
           declaration-list:
                  declaration
                  declaration-list declaration</pre>
@@ -8386,7 +8386,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
 <!--page 178 -->
 <pre>
           preprocessing-file:
 <!--page 178 -->
 <pre>
           preprocessing-file:
-                 groupopt
+                 group<sub>opt</sub>
           group:
                    group-part
                    group group-part
           group:
                    group-part
                    group group-part
@@ -8396,41 +8396,41 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
                  text-line
                  # non-directive
           if-section:
                  text-line
                  # non-directive
           if-section:
-                   if-group elif-groupsopt else-groupopt endif-line
+                   if-group elif-groups<sub>opt</sub> else-group<sub>opt</sub> endif-line
           if-group:
           if-group:
-                  # if     constant-expression new-line groupopt
-                  # ifdef identifier new-line groupopt
-                  # ifndef identifier new-line groupopt
+                  # if     constant-expression new-line group<sub>opt</sub>
+                  # ifdef identifier new-line group<sub>opt</sub>
+                  # ifndef identifier new-line group<sub>opt</sub>
           elif-groups:
                   elif-group
                   elif-groups elif-group
           elif-group:
           elif-groups:
                   elif-group
                   elif-groups elif-group
           elif-group:
-                  # elif       constant-expression new-line groupopt
+                  # elif       constant-expression new-line group<sub>opt</sub>
           else-group:
           else-group:
-                  # else       new-line groupopt
+                  # else       new-line group<sub>opt</sub>
           endif-line:
                   # endif      new-line
           control-line:
                  # include pp-tokens new-line
                  # define identifier replacement-list new-line
           endif-line:
                   # endif      new-line
           control-line:
                  # include pp-tokens new-line
                  # define identifier replacement-list new-line
-                 # define identifier lparen identifier-listopt )
+                 # define identifier lparen identifier-list<sub>opt</sub> )
                                                  replacement-list new-line
                  # define identifier lparen ... ) replacement-list new-line
                  # define identifier lparen identifier-list , ... )
                                                  replacement-list new-line
                  # undef   identifier new-line
                  # line    pp-tokens new-line
                                                  replacement-list new-line
                  # define identifier lparen ... ) replacement-list new-line
                  # define identifier lparen identifier-list , ... )
                                                  replacement-list new-line
                  # undef   identifier new-line
                  # line    pp-tokens new-line
-                 # error   pp-tokensopt new-line
-                 # pragma pp-tokensopt new-line
+                 # error   pp-tokens<sub>opt</sub> new-line
+                 # pragma pp-tokens<sub>opt</sub> new-line
                  #         new-line
           text-line:
                  #         new-line
           text-line:
-                  pp-tokensopt new-line
+                  pp-tokens<sub>opt</sub> new-line
           non-directive:
                  pp-tokens new-line
           lparen:
                     a ( character not immediately preceded by white-space
           replacement-list:
           non-directive:
                  pp-tokens new-line
           lparen:
                     a ( character not immediately preceded by white-space
           replacement-list:
-                 pp-tokensopt
+                 pp-tokens<sub>opt</sub>
           pp-tokens:
                  preprocessing-token
                  pp-tokens preprocessing-token
           pp-tokens:
                  preprocessing-token
                  pp-tokens preprocessing-token
@@ -8511,8 +8511,8 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
 <p><!--para 3 -->
  Preprocessing directives of the forms
 <pre>
 <p><!--para 3 -->
  Preprocessing directives of the forms
 <pre>
-    # if   constant-expression new-line groupopt
-    # elif constant-expression new-line groupopt</pre>
+    # if   constant-expression new-line group<sub>opt</sub>
+    # elif constant-expression new-line group<sub>opt</sub></pre>
  check whether the controlling constant expression evaluates to nonzero.
 <p><!--para 4 -->
  Prior to evaluation, macro invocations in the list of preprocessing tokens that will become
  check whether the controlling constant expression evaluates to nonzero.
 <p><!--para 4 -->
  Prior to evaluation, macro invocations in the list of preprocessing tokens that will become
@@ -8541,8 +8541,8 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
 <p><!--para 5 -->
  Preprocessing directives of the forms
 <pre>
 <p><!--para 5 -->
  Preprocessing directives of the forms
 <pre>
-    # ifdef identifier new-line groupopt
-    # ifndef identifier new-line groupopt</pre>
+    # ifdef identifier new-line group<sub>opt</sub>
+    # ifndef identifier new-line group<sub>opt</sub></pre>
  check whether the identifier is or is not currently defined as a macro name. Their
  conditions are equivalent to #if defined identifier and #if !defined identifier
  respectively.
  check whether the identifier is or is not currently defined as a macro name. Their
  conditions are equivalent to #if defined identifier and #if !defined identifier
  respectively.
@@ -8706,7 +8706,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
 <p><!--para 10 -->
  A preprocessing directive of the form
 <pre>
 <p><!--para 10 -->
  A preprocessing directive of the form
 <pre>
-    # define identifier lparen identifier-listopt ) replacement-list new-line
+    # define identifier lparen identifier-list<sub>opt</sub> ) replacement-list new-line
     # define identifier lparen ... ) replacement-list new-line
     # define identifier lparen identifier-list , ... ) replacement-list new-line</pre>
  defines a function-like macro with parameters, whose use is similar syntactically to a
     # define identifier lparen ... ) replacement-list new-line
     # define identifier lparen identifier-list , ... ) replacement-list new-line</pre>
  defines a function-like macro with parameters, whose use is similar syntactically to a
@@ -9034,7 +9034,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
 <p><!--para 1 -->
  A preprocessing directive of the form
 <pre>
 <p><!--para 1 -->
  A preprocessing directive of the form
 <pre>
-    # error pp-tokensopt new-line</pre>
+    # error pp-tokens<sub>opt</sub> new-line</pre>
  causes the implementation to produce a diagnostic message that includes the specified
  sequence of preprocessing tokens.
 
  causes the implementation to produce a diagnostic message that includes the specified
  sequence of preprocessing tokens.
 
@@ -9043,7 +9043,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
 <p><!--para 1 -->
  A preprocessing directive of the form
 <pre>
 <p><!--para 1 -->
  A preprocessing directive of the form
 <pre>
-    # pragma pp-tokensopt new-line</pre>
+    # pragma pp-tokens<sub>opt</sub> new-line</pre>
  where the preprocessing token STDC does not immediately follow pragma in the
  directive (prior to any macro replacement)<sup><a href="#note174"><b>174)</b></a></sup> causes the implementation to behave in an
  implementation-defined manner. The behavior might cause translation to fail or cause the
  where the preprocessing token STDC does not immediately follow pragma in the
  directive (prior to any macro replacement)<sup><a href="#note174"><b>174)</b></a></sup> causes the implementation to behave in an
  implementation-defined manner. The behavior might cause translation to fail or cause the
@@ -16620,7 +16620,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
 <li>  a 0x or 0X, then a nonempty sequence of hexadecimal digits optionally containing a
  decimal-point character, then an optional binary exponent part as defined in <a href="#6.4.4.2">6.4.4.2</a>;
 <li>  INF or INFINITY, ignoring case
 <li>  a 0x or 0X, then a nonempty sequence of hexadecimal digits optionally containing a
  decimal-point character, then an optional binary exponent part as defined in <a href="#6.4.4.2">6.4.4.2</a>;
 <li>  INF or INFINITY, ignoring case
-<li>  NAN or NAN(n-char-sequenceopt), ignoring case in the NAN part, where:
+<li>  NAN or NAN(n-char-sequence<sub>opt</sub>), ignoring case in the NAN part, where:
 <pre>
           n-char-sequence:
                  digit
 <pre>
           n-char-sequence:
                  digit
@@ -16643,7 +16643,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
  the subject sequence begins with a minus sign, the sequence is interpreted as negated.<sup><a href="#note285"><b>285)</b></a></sup>
  A character sequence INF or INFINITY is interpreted as an infinity, if representable in
  the return type, else like a floating constant that is too large for the range of the return
  the subject sequence begins with a minus sign, the sequence is interpreted as negated.<sup><a href="#note285"><b>285)</b></a></sup>
  A character sequence INF or INFINITY is interpreted as an infinity, if representable in
  the return type, else like a floating constant that is too large for the range of the return
- type. A character sequence NAN or NAN(n-char-sequenceopt), is interpreted as a quiet
+ type. A character sequence NAN or NAN(n-char-sequence<sub>opt</sub>), is interpreted as a quiet
  NaN, if supported in the return type, else like a subject sequence part that does not have
  the expected form; the meaning of the n-char sequences is implementation-defined.<sup><a href="#note286"><b>286)</b></a></sup> A
  pointer to the final string is stored in the object pointed to by endptr, provided that
  NaN, if supported in the return type, else like a subject sequence part that does not have
  the expected form; the meaning of the n-char sequences is implementation-defined.<sup><a href="#note286"><b>286)</b></a></sup> A
  pointer to the final string is stored in the object pointed to by endptr, provided that
@@ -20461,7 +20461,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
  decimal-point wide character, then an optional binary exponent part as defined in
  <a href="#6.4.4.2">6.4.4.2</a>;
 <li>  INF or INFINITY, or any other wide string equivalent except for case
  decimal-point wide character, then an optional binary exponent part as defined in
  <a href="#6.4.4.2">6.4.4.2</a>;
 <li>  INF or INFINITY, or any other wide string equivalent except for case
-<li>  NAN or NAN(n-wchar-sequenceopt), or any other wide string equivalent except for
+<li>  NAN or NAN(n-wchar-sequence<sub>opt</sub>), or any other wide string equivalent except for
  case in the NAN part, where:
 <pre>
           n-wchar-sequence:
  case in the NAN part, where:
 <pre>
           n-wchar-sequence:
@@ -20487,7 +20487,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
  sign, the sequence is interpreted as negated.<sup><a href="#note330"><b>330)</b></a></sup> A wide character sequence INF or
  INFINITY is interpreted as an infinity, if representable in the return type, else like a
  floating constant that is too large for the range of the return type. A wide character
  sign, the sequence is interpreted as negated.<sup><a href="#note330"><b>330)</b></a></sup> A wide character sequence INF or
  INFINITY is interpreted as an infinity, if representable in the return type, else like a
  floating constant that is too large for the range of the return type. A wide character
- sequence NAN or NAN(n-wchar-sequenceopt) is interpreted as a quiet NaN, if supported
+ sequence NAN or NAN(n-wchar-sequence<sub>opt</sub>) is interpreted as a quiet NaN, if supported
  in the return type, else like a subject sequence part that does not have the expected form;
  the meaning of the n-wchar sequences is implementation-defined.<sup><a href="#note331"><b>331)</b></a></sup> A pointer to the
  final wide string is stored in the object pointed to by endptr, provided that endptr is
  in the return type, else like a subject sequence part that does not have the expected form;
  the meaning of the n-wchar sequences is implementation-defined.<sup><a href="#note331"><b>331)</b></a></sup> A pointer to the
  final wide string is stored in the object pointed to by endptr, provided that endptr is
@@ -21962,9 +21962,9 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
                character-constant</pre>
  (<a href="#6.4.4.1">6.4.4.1</a>) integer-constant:
 <pre>
                character-constant</pre>
  (<a href="#6.4.4.1">6.4.4.1</a>) integer-constant:
 <pre>
-                decimal-constant integer-suffixopt
-                octal-constant integer-suffixopt
-                hexadecimal-constant integer-suffixopt</pre>
+                decimal-constant integer-suffix<sub>opt</sub>
+                octal-constant integer-suffix<sub>opt</sub>
+                hexadecimal-constant integer-suffix<sub>opt</sub></pre>
  (<a href="#6.4.4.1">6.4.4.1</a>) decimal-constant:
 <pre>
                nonzero-digit
  (<a href="#6.4.4.1">6.4.4.1</a>) decimal-constant:
 <pre>
                nonzero-digit
@@ -21994,10 +21994,10 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
                A B C D E F</pre>
  (<a href="#6.4.4.1">6.4.4.1</a>) integer-suffix:
 <pre>
                A B C D E F</pre>
  (<a href="#6.4.4.1">6.4.4.1</a>) integer-suffix:
 <pre>
-                unsigned-suffix long-suffixopt
+                unsigned-suffix long-suffix<sub>opt</sub>
                 unsigned-suffix long-long-suffix
                 unsigned-suffix long-long-suffix
-                long-suffix unsigned-suffixopt
-                long-long-suffix unsigned-suffixopt</pre>
+                long-suffix unsigned-suffix<sub>opt</sub>
+                long-long-suffix unsigned-suffix<sub>opt</sub></pre>
  (<a href="#6.4.4.1">6.4.4.1</a>) unsigned-suffix: one of
 <pre>
                 u U</pre>
  (<a href="#6.4.4.1">6.4.4.1</a>) unsigned-suffix: one of
 <pre>
                 u U</pre>
@@ -22013,22 +22013,22 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
                 hexadecimal-floating-constant</pre>
  (<a href="#6.4.4.2">6.4.4.2</a>) decimal-floating-constant:
 <pre>
                 hexadecimal-floating-constant</pre>
  (<a href="#6.4.4.2">6.4.4.2</a>) decimal-floating-constant:
 <pre>
-               fractional-constant exponent-partopt floating-suffixopt
-               digit-sequence exponent-part floating-suffixopt</pre>
+               fractional-constant exponent-part<sub>opt</sub> floating-suffix<sub>opt</sub>
+               digit-sequence exponent-part floating-suffix<sub>opt</sub></pre>
  (<a href="#6.4.4.2">6.4.4.2</a>) hexadecimal-floating-constant:
 <pre>
                hexadecimal-prefix hexadecimal-fractional-constant
  (<a href="#6.4.4.2">6.4.4.2</a>) hexadecimal-floating-constant:
 <pre>
                hexadecimal-prefix hexadecimal-fractional-constant
-                             binary-exponent-part floating-suffixopt
+                             binary-exponent-part floating-suffix<sub>opt</sub>
                hexadecimal-prefix hexadecimal-digit-sequence
                hexadecimal-prefix hexadecimal-digit-sequence
-                             binary-exponent-part floating-suffixopt</pre>
+                             binary-exponent-part floating-suffix<sub>opt</sub></pre>
  (<a href="#6.4.4.2">6.4.4.2</a>) fractional-constant:
 <pre>
  (<a href="#6.4.4.2">6.4.4.2</a>) fractional-constant:
 <pre>
-                digit-sequenceopt . digit-sequence
+                digit-sequence<sub>opt</sub> . digit-sequence
                 digit-sequence .</pre>
  (<a href="#6.4.4.2">6.4.4.2</a>) exponent-part:
 <pre>
                 digit-sequence .</pre>
  (<a href="#6.4.4.2">6.4.4.2</a>) exponent-part:
 <pre>
-               e signopt digit-sequence
-               E signopt digit-sequence</pre>
+               e sign<sub>opt</sub> digit-sequence
+               E sign<sub>opt</sub> digit-sequence</pre>
  (<a href="#6.4.4.2">6.4.4.2</a>) sign: one of
 <!--page 476 -->
 <pre>
  (<a href="#6.4.4.2">6.4.4.2</a>) sign: one of
 <!--page 476 -->
 <pre>
@@ -22039,13 +22039,13 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
                 digit-sequence digit</pre>
  (<a href="#6.4.4.2">6.4.4.2</a>) hexadecimal-fractional-constant:
 <pre>
                 digit-sequence digit</pre>
  (<a href="#6.4.4.2">6.4.4.2</a>) hexadecimal-fractional-constant:
 <pre>
-               hexadecimal-digit-sequenceopt .
+               hexadecimal-digit-sequence<sub>opt</sub> .
                               hexadecimal-digit-sequence
                hexadecimal-digit-sequence .</pre>
  (<a href="#6.4.4.2">6.4.4.2</a>) binary-exponent-part:
 <pre>
                               hexadecimal-digit-sequence
                hexadecimal-digit-sequence .</pre>
  (<a href="#6.4.4.2">6.4.4.2</a>) binary-exponent-part:
 <pre>
-                p signopt digit-sequence
-                P signopt digit-sequence</pre>
+                p sign<sub>opt</sub> digit-sequence
+                P sign<sub>opt</sub> digit-sequence</pre>
  (<a href="#6.4.4.2">6.4.4.2</a>) hexadecimal-digit-sequence:
 <pre>
                hexadecimal-digit
  (<a href="#6.4.4.2">6.4.4.2</a>) hexadecimal-digit-sequence:
 <pre>
                hexadecimal-digit
@@ -22095,7 +22095,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
 <h4><a name="A.1.6" href="#A.1.6">A.1.6 String literals</a></h4>
  (<a href="#6.4.5">6.4.5</a>) string-literal:
 <pre>
 <h4><a name="A.1.6" href="#A.1.6">A.1.6 String literals</a></h4>
  (<a href="#6.4.5">6.4.5</a>) string-literal:
 <pre>
-                encoding-prefixopt " s-char-sequenceopt "</pre>
+                encoding-prefix<sub>opt</sub> " s-char-sequence<sub>opt</sub> "</pre>
  (<a href="#6.4.5">6.4.5</a>) encoding-prefix:
 <pre>
                u8
  (<a href="#6.4.5">6.4.5</a>) encoding-prefix:
 <pre>
                u8
@@ -22185,7 +22185,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
 <pre>
                primary-expression
                postfix-expression [ expression ]
 <pre>
                primary-expression
                postfix-expression [ expression ]
-               postfix-expression ( argument-expression-listopt )
+               postfix-expression ( argument-expression-list<sub>opt</sub> )
                postfix-expression . identifier
                postfix-expression -&gt; identifier
                postfix-expression ++
                postfix-expression . identifier
                postfix-expression -&gt; identifier
                postfix-expression ++
@@ -22284,15 +22284,15 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
 <h4><a name="A.2.2" href="#A.2.2">A.2.2 Declarations</a></h4>
  (<a href="#6.7">6.7</a>) declaration:
 <pre>
 <h4><a name="A.2.2" href="#A.2.2">A.2.2 Declarations</a></h4>
  (<a href="#6.7">6.7</a>) declaration:
 <pre>
-                declaration-specifiers init-declarator-listopt ;
+                declaration-specifiers init-declarator-list<sub>opt</sub> ;
                 static_assert-declaration</pre>
  (<a href="#6.7">6.7</a>) declaration-specifiers:
 <pre>
                 static_assert-declaration</pre>
  (<a href="#6.7">6.7</a>) declaration-specifiers:
 <pre>
-                storage-class-specifier declaration-specifiersopt
-                type-specifier declaration-specifiersopt
-                type-qualifier declaration-specifiersopt
-                function-specifier declaration-specifiersopt
-                alignment-specifier declaration-specifiersopt</pre>
+                storage-class-specifier declaration-specifiers<sub>opt</sub>
+                type-specifier declaration-specifiers<sub>opt</sub>
+                type-qualifier declaration-specifiers<sub>opt</sub>
+                function-specifier declaration-specifiers<sub>opt</sub>
+                alignment-specifier declaration-specifiers<sub>opt</sub></pre>
  (<a href="#6.7">6.7</a>) init-declarator-list:
 <!--page 482 -->
 <pre>
  (<a href="#6.7">6.7</a>) init-declarator-list:
 <!--page 482 -->
 <pre>
@@ -22329,7 +22329,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
                 typedef-name</pre>
  (<a href="#6.7.2.1">6.7.2.1</a>) struct-or-union-specifier:
 <pre>
                 typedef-name</pre>
  (<a href="#6.7.2.1">6.7.2.1</a>) struct-or-union-specifier:
 <pre>
-                struct-or-union identifieropt { struct-declaration-list }
+                struct-or-union identifier<sub>opt</sub> { struct-declaration-list }
                 struct-or-union identifier</pre>
  (<a href="#6.7.2.1">6.7.2.1</a>) struct-or-union:
 <pre>
                 struct-or-union identifier</pre>
  (<a href="#6.7.2.1">6.7.2.1</a>) struct-or-union:
 <pre>
@@ -22342,12 +22342,12 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
  (<a href="#6.7.2.1">6.7.2.1</a>) struct-declaration:
 <!--page 483 -->
 <pre>
  (<a href="#6.7.2.1">6.7.2.1</a>) struct-declaration:
 <!--page 483 -->
 <pre>
-                specifier-qualifier-list struct-declarator-listopt ;
+                specifier-qualifier-list struct-declarator-list<sub>opt</sub> ;
                 static_assert-declaration</pre>
  (<a href="#6.7.2.1">6.7.2.1</a>) specifier-qualifier-list:
 <pre>
                 static_assert-declaration</pre>
  (<a href="#6.7.2.1">6.7.2.1</a>) specifier-qualifier-list:
 <pre>
-                type-specifier specifier-qualifier-listopt
-                type-qualifier specifier-qualifier-listopt</pre>
+                type-specifier specifier-qualifier-list<sub>opt</sub>
+                type-qualifier specifier-qualifier-list<sub>opt</sub></pre>
  (<a href="#6.7.2.1">6.7.2.1</a>) struct-declarator-list:
 <pre>
                 struct-declarator
  (<a href="#6.7.2.1">6.7.2.1</a>) struct-declarator-list:
 <pre>
                 struct-declarator
@@ -22355,11 +22355,11 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
  (<a href="#6.7.2.1">6.7.2.1</a>) struct-declarator:
 <pre>
                 declarator
  (<a href="#6.7.2.1">6.7.2.1</a>) struct-declarator:
 <pre>
                 declarator
-                declaratoropt : constant-expression</pre>
+                declarator<sub>opt</sub> : constant-expression</pre>
  (<a href="#6.7.2.2">6.7.2.2</a>) enum-specifier:
 <pre>
  (<a href="#6.7.2.2">6.7.2.2</a>) enum-specifier:
 <pre>
-               enum identifieropt { enumerator-list }
-               enum identifieropt { enumerator-list , }
+               enum identifier<sub>opt</sub> { enumerator-list }
+               enum identifier<sub>opt</sub> { enumerator-list , }
                enum identifier</pre>
  (<a href="#6.7.2.2">6.7.2.2</a>) enumerator-list:
 <pre>
                enum identifier</pre>
  (<a href="#6.7.2.2">6.7.2.2</a>) enumerator-list:
 <pre>
@@ -22389,21 +22389,21 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
  (<a href="#6.7.6">6.7.6</a>) declarator:
 <!--page 484 -->
 <pre>
  (<a href="#6.7.6">6.7.6</a>) declarator:
 <!--page 484 -->
 <pre>
-               pointeropt direct-declarator</pre>
+               pointer<sub>opt</sub> direct-declarator</pre>
  (<a href="#6.7.6">6.7.6</a>) direct-declarator:
 <pre>
                 identifier
                 ( declarator )
  (<a href="#6.7.6">6.7.6</a>) direct-declarator:
 <pre>
                 identifier
                 ( declarator )
-                direct-declarator [ type-qualifier-listopt assignment-expressionopt ]
-                direct-declarator [ static type-qualifier-listopt assignment-expression ]
+                direct-declarator [ type-qualifier-list<sub>opt</sub> assignment-expression<sub>opt</sub> ]
+                direct-declarator [ static type-qualifier-list<sub>opt</sub> assignment-expression ]
                 direct-declarator [ type-qualifier-list static assignment-expression ]
                 direct-declarator [ type-qualifier-list static assignment-expression ]
-                direct-declarator [ type-qualifier-listopt * ]
+                direct-declarator [ type-qualifier-list<sub>opt</sub> * ]
                 direct-declarator ( parameter-type-list )
                 direct-declarator ( parameter-type-list )
-                direct-declarator ( identifier-listopt )</pre>
+                direct-declarator ( identifier-list<sub>opt</sub> )</pre>
  (<a href="#6.7.6">6.7.6</a>) pointer:
 <pre>
  (<a href="#6.7.6">6.7.6</a>) pointer:
 <pre>
-                * type-qualifier-listopt
-                * type-qualifier-listopt pointer</pre>
+                * type-qualifier-list<sub>opt</sub>
+                * type-qualifier-list<sub>opt</sub> pointer</pre>
  (<a href="#6.7.6">6.7.6</a>) type-qualifier-list:
 <pre>
                type-qualifier
  (<a href="#6.7.6">6.7.6</a>) type-qualifier-list:
 <pre>
                type-qualifier
@@ -22419,30 +22419,30 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
  (<a href="#6.7.6">6.7.6</a>) parameter-declaration:
 <pre>
               declaration-specifiers declarator
  (<a href="#6.7.6">6.7.6</a>) parameter-declaration:
 <pre>
               declaration-specifiers declarator
-              declaration-specifiers abstract-declaratoropt</pre>
+              declaration-specifiers abstract-declarator<sub>opt</sub></pre>
  (<a href="#6.7.6">6.7.6</a>) identifier-list:
 <pre>
                 identifier
                 identifier-list , identifier</pre>
  (<a href="#6.7.7">6.7.7</a>) type-name:
 <pre>
  (<a href="#6.7.6">6.7.6</a>) identifier-list:
 <pre>
                 identifier
                 identifier-list , identifier</pre>
  (<a href="#6.7.7">6.7.7</a>) type-name:
 <pre>
-               specifier-qualifier-list abstract-declaratoropt</pre>
+               specifier-qualifier-list abstract-declarator<sub>opt</sub></pre>
  (<a href="#6.7.7">6.7.7</a>) abstract-declarator:
 <!--page 485 -->
 <pre>
                pointer
  (<a href="#6.7.7">6.7.7</a>) abstract-declarator:
 <!--page 485 -->
 <pre>
                pointer
-               pointeropt direct-abstract-declarator</pre>
+               pointer<sub>opt</sub> direct-abstract-declarator</pre>
  (<a href="#6.7.7">6.7.7</a>) direct-abstract-declarator:
 <pre>
                 ( abstract-declarator )
  (<a href="#6.7.7">6.7.7</a>) direct-abstract-declarator:
 <pre>
                 ( abstract-declarator )
-                direct-abstract-declaratoropt [ type-qualifier-listopt
-                               assignment-expressionopt ]
-                direct-abstract-declaratoropt [ static type-qualifier-listopt
+                direct-abstract-declarator<sub>opt</sub> [ type-qualifier-list<sub>opt</sub>
+                               assignment-expression<sub>opt</sub> ]
+                direct-abstract-declarator<sub>opt</sub> [ static type-qualifier-list<sub>opt</sub>
                                assignment-expression ]
                                assignment-expression ]
-                direct-abstract-declaratoropt [ type-qualifier-list static
+                direct-abstract-declarator<sub>opt</sub> [ type-qualifier-list static
                                assignment-expression ]
                                assignment-expression ]
-                direct-abstract-declaratoropt [ * ]
-                direct-abstract-declaratoropt ( parameter-type-listopt )</pre>
+                direct-abstract-declarator<sub>opt</sub> [ * ]
+                direct-abstract-declarator<sub>opt</sub> ( parameter-type-list<sub>opt</sub> )</pre>
  (<a href="#6.7.8">6.7.8</a>) typedef-name:
 <pre>
                identifier</pre>
  (<a href="#6.7.8">6.7.8</a>) typedef-name:
 <pre>
                identifier</pre>
@@ -22453,8 +22453,8 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
                  { initializer-list , }</pre>
  (<a href="#6.7.9">6.7.9</a>) initializer-list:
 <pre>
                  { initializer-list , }</pre>
  (<a href="#6.7.9">6.7.9</a>) initializer-list:
 <pre>
-                 designationopt initializer
-                 initializer-list , designationopt initializer</pre>
+                 designation<sub>opt</sub> initializer
+                 initializer-list , designation<sub>opt</sub> initializer</pre>
  (<a href="#6.7.9">6.7.9</a>) designation:
 <pre>
                designator-list =</pre>
  (<a href="#6.7.9">6.7.9</a>) designation:
 <pre>
                designator-list =</pre>
@@ -22487,7 +22487,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
                 default : statement</pre>
  (<a href="#6.8.2">6.8.2</a>) compound-statement:
 <pre>
                 default : statement</pre>
  (<a href="#6.8.2">6.8.2</a>) compound-statement:
 <pre>
-              { block-item-listopt }</pre>
+              { block-item-list<sub>opt</sub> }</pre>
  (<a href="#6.8.2">6.8.2</a>) block-item-list:
 <pre>
                 block-item
  (<a href="#6.8.2">6.8.2</a>) block-item-list:
 <pre>
                 block-item
@@ -22498,7 +22498,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
                 statement</pre>
  (<a href="#6.8.3">6.8.3</a>) expression-statement:
 <pre>
                 statement</pre>
  (<a href="#6.8.3">6.8.3</a>) expression-statement:
 <pre>
-               expressionopt ;</pre>
+               expression<sub>opt</sub> ;</pre>
  (<a href="#6.8.4">6.8.4</a>) selection-statement:
 <pre>
                 if ( expression ) statement
  (<a href="#6.8.4">6.8.4</a>) selection-statement:
 <pre>
                 if ( expression ) statement
@@ -22508,15 +22508,15 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
 <pre>
                  while ( expression ) statement
                  do statement while ( expression ) ;
 <pre>
                  while ( expression ) statement
                  do statement while ( expression ) ;
-                 for ( expressionopt ; expressionopt ; expressionopt ) statement
-                 for ( declaration expressionopt ; expressionopt ) statement</pre>
+                 for ( expression<sub>opt</sub> ; expression<sub>opt</sub> ; expression<sub>opt</sub> ) statement
+                 for ( declaration expression<sub>opt</sub> ; expression<sub>opt</sub> ) statement</pre>
  (<a href="#6.8.6">6.8.6</a>) jump-statement:
 <!--page 487 -->
 <pre>
                goto identifier ;
                continue ;
                break ;
  (<a href="#6.8.6">6.8.6</a>) jump-statement:
 <!--page 487 -->
 <pre>
                goto identifier ;
                continue ;
                break ;
-               return expressionopt ;</pre>
+               return expression<sub>opt</sub> ;</pre>
 
 <h4><a name="A.2.4" href="#A.2.4">A.2.4 External definitions</a></h4>
  (<a href="#6.9">6.9</a>) translation-unit:
 
 <h4><a name="A.2.4" href="#A.2.4">A.2.4 External definitions</a></h4>
  (<a href="#6.9">6.9</a>) translation-unit:
@@ -22529,7 +22529,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
                 declaration</pre>
  (<a href="#6.9.1">6.9.1</a>) function-definition:
 <pre>
                 declaration</pre>
  (<a href="#6.9.1">6.9.1</a>) function-definition:
 <pre>
-                declaration-specifiers declarator declaration-listopt compound-statement</pre>
+                declaration-specifiers declarator declaration-list<sub>opt</sub> compound-statement</pre>
  (<a href="#6.9.1">6.9.1</a>) declaration-list:
 <pre>
                declaration
  (<a href="#6.9.1">6.9.1</a>) declaration-list:
 <pre>
                declaration
@@ -22538,7 +22538,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
 <h3><a name="A.3" href="#A.3">A.3 Preprocessing directives</a></h3>
  (<a href="#6.10">6.10</a>) preprocessing-file:
 <pre>
 <h3><a name="A.3" href="#A.3">A.3 Preprocessing directives</a></h3>
  (<a href="#6.10">6.10</a>) preprocessing-file:
 <pre>
-               groupopt</pre>
+               group<sub>opt</sub></pre>
  (<a href="#6.10">6.10</a>) group:
 <pre>
                  group-part
  (<a href="#6.10">6.10</a>) group:
 <pre>
                  group-part
@@ -22551,12 +22551,12 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
                # non-directive</pre>
  (<a href="#6.10">6.10</a>) if-section:
 <pre>
                # non-directive</pre>
  (<a href="#6.10">6.10</a>) if-section:
 <pre>
-                 if-group elif-groupsopt else-groupopt endif-line</pre>
+                 if-group elif-groups<sub>opt</sub> else-group<sub>opt</sub> endif-line</pre>
  (<a href="#6.10">6.10</a>) if-group:
 <pre>
  (<a href="#6.10">6.10</a>) if-group:
 <pre>
-                # if     constant-expression new-line groupopt
-                # ifdef identifier new-line groupopt
-                # ifndef identifier new-line groupopt</pre>
+                # if     constant-expression new-line group<sub>opt</sub>
+                # ifdef identifier new-line group<sub>opt</sub>
+                # ifndef identifier new-line group<sub>opt</sub></pre>
  (<a href="#6.10">6.10</a>) elif-groups:
 <pre>
                 elif-group
  (<a href="#6.10">6.10</a>) elif-groups:
 <pre>
                 elif-group
@@ -22564,10 +22564,10 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
  (<a href="#6.10">6.10</a>) elif-group:
 <!--page 488 -->
 <pre>
  (<a href="#6.10">6.10</a>) elif-group:
 <!--page 488 -->
 <pre>
-                # elif       constant-expression new-line groupopt</pre>
+                # elif       constant-expression new-line group<sub>opt</sub></pre>
  (<a href="#6.10">6.10</a>) else-group:
 <pre>
  (<a href="#6.10">6.10</a>) else-group:
 <pre>
-                # else        new-line groupopt</pre>
+                # else        new-line group<sub>opt</sub></pre>
  (<a href="#6.10">6.10</a>) endif-line:
 <pre>
                 # endif       new-line</pre>
  (<a href="#6.10">6.10</a>) endif-line:
 <pre>
                 # endif       new-line</pre>
@@ -22575,19 +22575,19 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
 <pre>
                # include pp-tokens new-line
                # define identifier replacement-list new-line
 <pre>
                # include pp-tokens new-line
                # define identifier replacement-list new-line
-               # define identifier lparen identifier-listopt )
+               # define identifier lparen identifier-list<sub>opt</sub> )
                                                replacement-list new-line
                # define identifier lparen ... ) replacement-list new-line
                # define identifier lparen identifier-list , ... )
                                                replacement-list new-line
                # undef   identifier new-line
                # line    pp-tokens new-line
                                                replacement-list new-line
                # define identifier lparen ... ) replacement-list new-line
                # define identifier lparen identifier-list , ... )
                                                replacement-list new-line
                # undef   identifier new-line
                # line    pp-tokens new-line
-               # error   pp-tokensopt new-line
-               # pragma pp-tokensopt new-line
+               # error   pp-tokens<sub>opt</sub> new-line
+               # pragma pp-tokens<sub>opt</sub> new-line
                #         new-line</pre>
  (<a href="#6.10">6.10</a>) text-line:
 <pre>
                #         new-line</pre>
  (<a href="#6.10">6.10</a>) text-line:
 <pre>
-                pp-tokensopt new-line</pre>
+                pp-tokens<sub>opt</sub> new-line</pre>
  (<a href="#6.10">6.10</a>) non-directive:
 <pre>
                pp-tokens new-line</pre>
  (<a href="#6.10">6.10</a>) non-directive:
 <pre>
                pp-tokens new-line</pre>
@@ -22596,7 +22596,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
                   a ( character not immediately preceded by white-space</pre>
  (<a href="#6.10">6.10</a>) replacement-list:
 <pre>
                   a ( character not immediately preceded by white-space</pre>
  (<a href="#6.10">6.10</a>) replacement-list:
 <pre>
-               pp-tokensopt</pre>
+               pp-tokens<sub>opt</sub></pre>
  (<a href="#6.10">6.10</a>) pp-tokens:
 <pre>
                preprocessing-token
  (<a href="#6.10">6.10</a>) pp-tokens:
 <pre>
                preprocessing-token