From: nsz Date: Fri, 22 Jul 2011 10:53:18 +0000 (+0200) Subject: automatic opt X-Git-Url: http://nsz.repo.hu/git/?p=c-standard;a=commitdiff_plain;h=c8552f228e75429c8c11edb869899f05b70ea1e5 automatic opt --- diff --git a/ann2html.sh b/ann2html.sh index 509e3a2..8999198 100755 --- a/ann2html.sh +++ b/ann2html.sh @@ -1,7 +1,5 @@ #!/bin/sh -# todo: opt - export LC_ALL=C awk ' BEGIN { @@ -213,6 +211,11 @@ seencontents && !seenfore && /^[^@]/ { } s = p s p = "" + # TODO: false positives.. + while (match(s, /[a-z]opt[ )]/)) + s = substr(s,1,RSTART) "opt" substr(s,RSTART+RLENGTH-1) + if (match(s, /[a-z]opt$/)) + s = substr(s,1,RSTART) "opt" for (;;) { while (match(s, noteid-1 "\\)")) { p = p substr(s,1,RSTART-1) diff --git a/n1548.html b/n1548.html index 47d9b1b..5f12277 100644 --- a/n1548.html +++ b/n1548.html @@ -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
-          { expressionopt }
+ { expressionopt } indicates an optional expression enclosed in braces.

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 '' ''.

           integer-constant:
-                  decimal-constant integer-suffixopt
-                  octal-constant integer-suffixopt
-                  hexadecimal-constant integer-suffixopt
+                  decimal-constant integer-suffixopt
+                  octal-constant integer-suffixopt
+                  hexadecimal-constant integer-suffixopt
           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:
-                 unsigned-suffix long-suffixopt
+                 unsigned-suffix long-suffixopt
                  unsigned-suffix long-long-suffix
-                 long-suffix unsigned-suffixopt
-                 long-long-suffix unsigned-suffixopt
+                 long-suffix unsigned-suffixopt
+                 long-long-suffix unsigned-suffixopt
          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:
-                fractional-constant exponent-partopt floating-suffixopt
-                digit-sequence exponent-part floating-suffixopt
+                fractional-constant exponent-partopt floating-suffixopt
+                digit-sequence exponent-part floating-suffixopt
           hexadecimal-floating-constant:
                 hexadecimal-prefix hexadecimal-fractional-constant
-                               binary-exponent-part floating-suffixopt
+                               binary-exponent-part floating-suffixopt
                 hexadecimal-prefix hexadecimal-digit-sequence
-                               binary-exponent-part floating-suffixopt
+                               binary-exponent-part floating-suffixopt
           fractional-constant:
-                  digit-sequenceopt . digit-sequence
+                  digit-sequenceopt . digit-sequence
                   digit-sequence .
           exponent-part:
-                e signopt digit-sequence
-                E signopt digit-sequence
+                e signopt digit-sequence
+                E signopt digit-sequence
           sign: one of
                  + -
           digit-sequence:
                   digit
                   digit-sequence digit
           hexadecimal-fractional-constant:
-                hexadecimal-digit-sequenceopt .
+                hexadecimal-digit-sequenceopt .
                                hexadecimal-digit-sequence
                 hexadecimal-digit-sequence .
           binary-exponent-part:
-                 p signopt digit-sequence
-                 P signopt digit-sequence
+                 p signopt digit-sequence
+                 P signopt digit-sequence
           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 '' ''.
 

           string-literal:
-                  encoding-prefixopt " s-char-sequenceopt "
+                  encoding-prefixopt " s-char-sequenceopt "
           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 ( argument-expression-listopt )
+                 postfix-expression ( argument-expression-listopt )
                  postfix-expression . identifier
                  postfix-expression -> identifier
                  postfix-expression ++
@@ -5833,14 +5833,14 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
 

           declaration:
-                 declaration-specifiers init-declarator-listopt ;
+                 declaration-specifiers init-declarator-listopt ;
                  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-specifiersopt
+                 type-specifier declaration-specifiersopt
+                 type-qualifier declaration-specifiersopt
+                 function-specifier declaration-specifiersopt
+                 alignment-specifier declaration-specifiersopt
           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 '' ''.
 

           struct-or-union-specifier:
-                  struct-or-union identifieropt { struct-declaration-list }
+                  struct-or-union identifieropt { struct-declaration-list }
                   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:
-                  specifier-qualifier-list struct-declarator-listopt ;
+                  specifier-qualifier-list struct-declarator-listopt ;
                   static_assert-declaration
           specifier-qualifier-list:
-                 type-specifier specifier-qualifier-listopt
-                 type-qualifier specifier-qualifier-listopt
+                 type-specifier specifier-qualifier-listopt
+                 type-qualifier specifier-qualifier-listopt
           struct-declarator-list:
                   struct-declarator
                   struct-declarator-list , struct-declarator
           struct-declarator:
                   declarator
-                  declaratoropt : constant-expression
+ declaratoropt : constant-expression
Constraints

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 '' ''.

           enum-specifier:
-                enum identifieropt { enumerator-list }
-                enum identifieropt { enumerator-list , }
+                enum identifieropt { enumerator-list }
+                enum identifieropt { enumerator-list , }
                 enum identifier
           enumerator-list:
                 enumerator
@@ -6339,13 +6339,13 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
  
 
 
-          struct-or-union identifieropt { struct-declaration-list }
+ struct-or-union identifieropt { struct-declaration-list }
or
-          enum identifieropt { enumerator-list }
+ enum identifieropt { enumerator-list }
or
-          enum identifieropt { enumerator-list , }
+ enum identifieropt { enumerator-list , }
declares a structure, union, or enumerated type. The list defines the structure content, union content, or enumeration content. If an identifier is provided,130) 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 '' ''.

           declarator:
-                 pointeropt direct-declarator
+                 pointeropt direct-declarator
           direct-declarator:
                   identifier
                   ( declarator )
-                  direct-declarator [ type-qualifier-listopt assignment-expressionopt ]
-                  direct-declarator [ static type-qualifier-listopt assignment-expression ]
+                  direct-declarator [ type-qualifier-listopt assignment-expressionopt ]
+                  direct-declarator [ static type-qualifier-listopt assignment-expression ]
                   direct-declarator [ type-qualifier-list static assignment-expression ]
-                  direct-declarator [ type-qualifier-listopt * ]
+                  direct-declarator [ type-qualifier-listopt * ]
                   direct-declarator ( parameter-type-list )
-                  direct-declarator ( identifier-listopt )
+                  direct-declarator ( identifier-listopt )
           pointer:
-                 * type-qualifier-listopt
-                 * type-qualifier-listopt pointer
+                 * type-qualifier-listopt
+                 * type-qualifier-listopt pointer
           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
-                declaration-specifiers abstract-declaratoropt
+                declaration-specifiers abstract-declaratoropt
           identifier-list:
                  identifier
                  identifier-list , identifier
@@ -6905,7 +6905,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.

If, in the declaration ''T D1'', D1 has the form

-         * type-qualifier-listopt D
+ * type-qualifier-listopt D 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 '' ''.

If, in the declaration ''T D1'', D1 has one of the forms:

-          D[ type-qualifier-listopt assignment-expressionopt ]
-          D[ static type-qualifier-listopt assignment-expression ]
+          D[ type-qualifier-listopt assignment-expressionopt ]
+          D[ static type-qualifier-listopt assignment-expression ]
           D[ type-qualifier-list static assignment-expression ]
-          D[ type-qualifier-listopt * ]
+ D[ type-qualifier-listopt * ] 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 ''.142) (See 6.7.6.3 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 ) or
-        D( identifier-listopt )
+ D( identifier-listopt ) 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 '' ''.

           type-name:
-                 specifier-qualifier-list abstract-declaratoropt
+                 specifier-qualifier-list abstract-declaratoropt
           abstract-declarator:
                  pointer
-                 pointeropt direct-abstract-declarator
+                 pointeropt direct-abstract-declarator
           direct-abstract-declarator:
                   ( abstract-declarator )
-                  direct-abstract-declaratoropt [ type-qualifier-listopt
-                                 assignment-expressionopt ]
-                  direct-abstract-declaratoropt [ static type-qualifier-listopt
+                  direct-abstract-declaratoropt [ type-qualifier-listopt
+                                 assignment-expressionopt ]
+                  direct-abstract-declaratoropt [ static type-qualifier-listopt
                                  assignment-expression ]
-                  direct-abstract-declaratoropt [ type-qualifier-list static
+                  direct-abstract-declaratoropt [ type-qualifier-list static
                                  assignment-expression ]
-                  direct-abstract-declaratoropt [ * ]
-                  direct-abstract-declaratoropt ( parameter-type-listopt )
+ direct-abstract-declaratoropt [ * ] + direct-abstract-declaratoropt ( parameter-type-listopt )
Semantics

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: - designationopt initializer - initializer-list , designationopt initializer + designationopt initializer + initializer-list , designationopt initializer designation: designator-list = designator-list: @@ -7765,7 +7765,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.

           compound-statement:
-                { block-item-listopt }
+                { block-item-listopt }
           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 '' ''.
 

           expression-statement:
-                 expressionopt ;
+ expressionopt ;
Semantics

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 ) ; - for ( expressionopt ; expressionopt ; expressionopt ) statement - for ( declaration expressionopt ; expressionopt ) statement + for ( expressionopt ; expressionopt ; expressionopt ) statement + for ( declaration expressionopt ; expressionopt ) statement

Constraints

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 ; - return expressionopt ; + return expressionopt ; @@ -8208,7 +8208,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.

           function-definition:
-                 declaration-specifiers declarator declaration-listopt compound-statement
+                 declaration-specifiers declarator declaration-listopt compound-statement
           declaration-list:
                  declaration
                  declaration-list declaration
@@ -8386,7 +8386,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
           preprocessing-file:
-                 groupopt
+                 groupopt
           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:
-                   if-group elif-groupsopt else-groupopt endif-line
+                   if-group elif-groupsopt else-groupopt endif-line
           if-group:
-                  # if     constant-expression new-line groupopt
-                  # ifdef identifier new-line groupopt
-                  # ifndef identifier new-line groupopt
+                  # if     constant-expression new-line groupopt
+                  # ifdef identifier new-line groupopt
+                  # ifndef identifier new-line groupopt
           elif-groups:
                   elif-group
                   elif-groups elif-group
           elif-group:
-                  # elif       constant-expression new-line groupopt
+                  # elif       constant-expression new-line groupopt
           else-group:
-                  # else       new-line groupopt
+                  # else       new-line groupopt
           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-listopt )
                                                  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-tokensopt new-line
+                 # pragma pp-tokensopt new-line
                  #         new-line
           text-line:
-                  pp-tokensopt new-line
+                  pp-tokensopt new-line
           non-directive:
                  pp-tokens new-line
           lparen:
                     a ( character not immediately preceded by white-space
           replacement-list:
-                 pp-tokensopt
+                 pp-tokensopt
           pp-tokens:
                  preprocessing-token
                  pp-tokens preprocessing-token
@@ -8511,8 +8511,8 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
 

Preprocessing directives of the forms

-    # if   constant-expression new-line groupopt
-    # elif constant-expression new-line groupopt
+ # if constant-expression new-line groupopt + # elif constant-expression new-line groupopt
check whether the controlling constant expression evaluates to nonzero.

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 '' ''.

Preprocessing directives of the forms

-    # ifdef identifier new-line groupopt
-    # ifndef identifier new-line groupopt
+ # ifdef identifier new-line groupopt + # ifndef identifier new-line groupopt 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 '' ''.

A preprocessing directive of the form

-    # define identifier lparen identifier-listopt ) replacement-list new-line
+    # define identifier lparen identifier-listopt ) replacement-list new-line
     # define identifier lparen ... ) replacement-list new-line
     # define identifier lparen identifier-list , ... ) replacement-list new-line
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 '' ''.

A preprocessing directive of the form

-    # error pp-tokensopt new-line
+ # error pp-tokensopt new-line 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 '' ''.

A preprocessing directive of the form

-    # pragma pp-tokensopt new-line
+ # pragma pp-tokensopt new-line where the preprocessing token STDC does not immediately follow pragma in the directive (prior to any macro replacement)174) 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 '' ''.
  • 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 6.4.4.2;
  • INF or INFINITY, ignoring case -
  • NAN or NAN(n-char-sequenceopt), ignoring case in the NAN part, where: +
  • NAN or NAN(n-char-sequenceopt), ignoring case in the NAN part, where:
               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.285)
      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-sequenceopt), 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.286) 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
      6.4.4.2;
     
  • INF or INFINITY, or any other wide string equivalent except for case -
  • NAN or NAN(n-wchar-sequenceopt), or any other wide string equivalent except for +
  • NAN or NAN(n-wchar-sequenceopt), or any other wide string equivalent except for case in the NAN part, where:
               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.330) 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-sequenceopt) 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.331) 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
    (6.4.4.1) integer-constant:
    -                decimal-constant integer-suffixopt
    -                octal-constant integer-suffixopt
    -                hexadecimal-constant integer-suffixopt
    + decimal-constant integer-suffixopt + octal-constant integer-suffixopt + hexadecimal-constant integer-suffixopt
  • (6.4.4.1) decimal-constant:
                    nonzero-digit
    @@ -21994,10 +21994,10 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
                    A B C D E F
    (6.4.4.1) integer-suffix:
    -                unsigned-suffix long-suffixopt
    +                unsigned-suffix long-suffixopt
                     unsigned-suffix long-long-suffix
    -                long-suffix unsigned-suffixopt
    -                long-long-suffix unsigned-suffixopt
    + long-suffix unsigned-suffixopt + long-long-suffix unsigned-suffixopt (6.4.4.1) unsigned-suffix: one of
                     u U
    @@ -22013,22 +22013,22 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''. hexadecimal-floating-constant (6.4.4.2) decimal-floating-constant:
    -               fractional-constant exponent-partopt floating-suffixopt
    -               digit-sequence exponent-part floating-suffixopt
    + fractional-constant exponent-partopt floating-suffixopt + digit-sequence exponent-part floating-suffixopt (6.4.4.2) hexadecimal-floating-constant:
                    hexadecimal-prefix hexadecimal-fractional-constant
    -                             binary-exponent-part floating-suffixopt
    +                             binary-exponent-part floating-suffixopt
                    hexadecimal-prefix hexadecimal-digit-sequence
    -                             binary-exponent-part floating-suffixopt
    + binary-exponent-part floating-suffixopt (6.4.4.2) fractional-constant:
    -                digit-sequenceopt . digit-sequence
    +                digit-sequenceopt . digit-sequence
                     digit-sequence .
    (6.4.4.2) exponent-part:
    -               e signopt digit-sequence
    -               E signopt digit-sequence
    + e signopt digit-sequence + E signopt digit-sequence (6.4.4.2) sign: one of
    @@ -22039,13 +22039,13 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
                     digit-sequence digit
    (6.4.4.2) hexadecimal-fractional-constant:
    -               hexadecimal-digit-sequenceopt .
    +               hexadecimal-digit-sequenceopt .
                                   hexadecimal-digit-sequence
                    hexadecimal-digit-sequence .
    (6.4.4.2) binary-exponent-part:
    -                p signopt digit-sequence
    -                P signopt digit-sequence
    + p signopt digit-sequence + P signopt digit-sequence (6.4.4.2) hexadecimal-digit-sequence:
                    hexadecimal-digit
    @@ -22095,7 +22095,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
     

    A.1.6 String literals

    (6.4.5) string-literal:
    -                encoding-prefixopt " s-char-sequenceopt "
    + encoding-prefixopt " s-char-sequenceopt "
    (6.4.5) encoding-prefix:
                    u8
    @@ -22185,7 +22185,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
     
                    primary-expression
                    postfix-expression [ expression ]
    -               postfix-expression ( argument-expression-listopt )
    +               postfix-expression ( argument-expression-listopt )
                    postfix-expression . identifier
                    postfix-expression -> identifier
                    postfix-expression ++
    @@ -22284,15 +22284,15 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
     

    A.2.2 Declarations

    (6.7) declaration:
    -                declaration-specifiers init-declarator-listopt ;
    +                declaration-specifiers init-declarator-listopt ;
                     static_assert-declaration
    (6.7) 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-specifiersopt + type-specifier declaration-specifiersopt + type-qualifier declaration-specifiersopt + function-specifier declaration-specifiersopt + alignment-specifier declaration-specifiersopt
    (6.7) init-declarator-list:
    @@ -22329,7 +22329,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
                     typedef-name
    (6.7.2.1) struct-or-union-specifier:
    -                struct-or-union identifieropt { struct-declaration-list }
    +                struct-or-union identifieropt { struct-declaration-list }
                     struct-or-union identifier
    (6.7.2.1) struct-or-union:
    @@ -22342,12 +22342,12 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
      (6.7.2.1) struct-declaration:
     
     
    -                specifier-qualifier-list struct-declarator-listopt ;
    +                specifier-qualifier-list struct-declarator-listopt ;
                     static_assert-declaration
    (6.7.2.1) specifier-qualifier-list:
    -                type-specifier specifier-qualifier-listopt
    -                type-qualifier specifier-qualifier-listopt
    + type-specifier specifier-qualifier-listopt + type-qualifier specifier-qualifier-listopt
    (6.7.2.1) struct-declarator-list:
                     struct-declarator
    @@ -22355,11 +22355,11 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
      (6.7.2.1) struct-declarator:
     
                     declarator
    -                declaratoropt : constant-expression
    + declaratoropt : constant-expression
    (6.7.2.2) enum-specifier:
    -               enum identifieropt { enumerator-list }
    -               enum identifieropt { enumerator-list , }
    +               enum identifieropt { enumerator-list }
    +               enum identifieropt { enumerator-list , }
                    enum identifier
    (6.7.2.2) enumerator-list:
    @@ -22389,21 +22389,21 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
      (6.7.6) declarator:
     
     
    -               pointeropt direct-declarator
    + pointeropt direct-declarator
    (6.7.6) direct-declarator:
                     identifier
                     ( declarator )
    -                direct-declarator [ type-qualifier-listopt assignment-expressionopt ]
    -                direct-declarator [ static type-qualifier-listopt assignment-expression ]
    +                direct-declarator [ type-qualifier-listopt assignment-expressionopt ]
    +                direct-declarator [ static type-qualifier-listopt assignment-expression ]
                     direct-declarator [ type-qualifier-list static assignment-expression ]
    -                direct-declarator [ type-qualifier-listopt * ]
    +                direct-declarator [ type-qualifier-listopt * ]
                     direct-declarator ( parameter-type-list )
    -                direct-declarator ( identifier-listopt )
    + direct-declarator ( identifier-listopt )
    (6.7.6) pointer:
    -                * type-qualifier-listopt
    -                * type-qualifier-listopt pointer
    + * type-qualifier-listopt + * type-qualifier-listopt pointer (6.7.6) type-qualifier-list:
                    type-qualifier
    @@ -22419,30 +22419,30 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
      (6.7.6) parameter-declaration:
     
                   declaration-specifiers declarator
    -              declaration-specifiers abstract-declaratoropt
    + declaration-specifiers abstract-declaratoropt
    (6.7.6) identifier-list:
                     identifier
                     identifier-list , identifier
    (6.7.7) type-name:
    -               specifier-qualifier-list abstract-declaratoropt
    + specifier-qualifier-list abstract-declaratoropt (6.7.7) abstract-declarator:
                    pointer
    -               pointeropt direct-abstract-declarator
    + pointeropt direct-abstract-declarator (6.7.7) direct-abstract-declarator:
                     ( abstract-declarator )
    -                direct-abstract-declaratoropt [ type-qualifier-listopt
    -                               assignment-expressionopt ]
    -                direct-abstract-declaratoropt [ static type-qualifier-listopt
    +                direct-abstract-declaratoropt [ type-qualifier-listopt
    +                               assignment-expressionopt ]
    +                direct-abstract-declaratoropt [ static type-qualifier-listopt
                                    assignment-expression ]
    -                direct-abstract-declaratoropt [ type-qualifier-list static
    +                direct-abstract-declaratoropt [ type-qualifier-list static
                                    assignment-expression ]
    -                direct-abstract-declaratoropt [ * ]
    -                direct-abstract-declaratoropt ( parameter-type-listopt )
    + direct-abstract-declaratoropt [ * ] + direct-abstract-declaratoropt ( parameter-type-listopt ) (6.7.8) typedef-name:
                    identifier
    @@ -22453,8 +22453,8 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''. { initializer-list , } (6.7.9) initializer-list:
    -                 designationopt initializer
    -                 initializer-list , designationopt initializer
    + designationopt initializer + initializer-list , designationopt initializer (6.7.9) designation:
                    designator-list =
    @@ -22487,7 +22487,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''. default : statement (6.8.2) compound-statement:
    -              { block-item-listopt }
    + { block-item-listopt } (6.8.2) block-item-list:
                     block-item
    @@ -22498,7 +22498,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
                     statement
    (6.8.3) expression-statement:
    -               expressionopt ;
    + expressionopt ; (6.8.4) selection-statement:
                     if ( expression ) statement
    @@ -22508,15 +22508,15 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
     
                      while ( expression ) statement
                      do statement while ( expression ) ;
    -                 for ( expressionopt ; expressionopt ; expressionopt ) statement
    -                 for ( declaration expressionopt ; expressionopt ) statement
    + for ( expressionopt ; expressionopt ; expressionopt ) statement + for ( declaration expressionopt ; expressionopt ) statement
    (6.8.6) jump-statement:
                    goto identifier ;
                    continue ;
                    break ;
    -               return expressionopt ;
    + return expressionopt ;

    A.2.4 External definitions

    (6.9) translation-unit: @@ -22529,7 +22529,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''. declaration (6.9.1) function-definition:
    -                declaration-specifiers declarator declaration-listopt compound-statement
    + declaration-specifiers declarator declaration-listopt compound-statement (6.9.1) declaration-list:
                    declaration
    @@ -22538,7 +22538,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
     

    A.3 Preprocessing directives

    (6.10) preprocessing-file:
    -               groupopt
    + groupopt
    (6.10) group:
                      group-part
    @@ -22551,12 +22551,12 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
                    # non-directive
    (6.10) if-section:
    -                 if-group elif-groupsopt else-groupopt endif-line
    + if-group elif-groupsopt else-groupopt endif-line (6.10) if-group:
    -                # if     constant-expression new-line groupopt
    -                # ifdef identifier new-line groupopt
    -                # ifndef identifier new-line groupopt
    + # if constant-expression new-line groupopt + # ifdef identifier new-line groupopt + # ifndef identifier new-line groupopt (6.10) elif-groups:
                     elif-group
    @@ -22564,10 +22564,10 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
      (6.10) elif-group:
     
     
    -                # elif       constant-expression new-line groupopt
    + # elif constant-expression new-line groupopt
    (6.10) else-group:
    -                # else        new-line groupopt
    + # else new-line groupopt (6.10) endif-line:
                     # endif       new-line
    @@ -22575,19 +22575,19 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
                    # include pp-tokens new-line
                    # define identifier replacement-list new-line
    -               # define identifier lparen identifier-listopt )
    +               # define identifier lparen identifier-listopt )
                                                    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-tokensopt new-line
    +               # pragma pp-tokensopt new-line
                    #         new-line
    (6.10) text-line:
    -                pp-tokensopt new-line
    + pp-tokensopt new-line (6.10) non-directive:
                    pp-tokens new-line
    @@ -22596,7 +22596,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''. a ( character not immediately preceded by white-space (6.10) replacement-list:
    -               pp-tokensopt
    + pp-tokensopt (6.10) pp-tokens:
                    preprocessing-token