Table 1: A grammar for the syntax of C++ declarations recognized by decl


simple-declaration =
    decl-specifier-seq declarator-list .
decl-specifier-seq =
    { decl-specifier } .
decl-specifier =
    type-specifier .
type-specifier =
    cv-qualifier | simple-type-specifier .
simple-type-specifier =
    type-keyword | type-name .
type-name
    = name .
declarator-list =
    declarator { "," declarator } .
declarator =
    direct-declarator | ptr-operator declarator .
direct-declarator =
    ( declarator-id | "(" declarator ")" )
        { array-suffix | function-suffix } .
declarator-id =
    identifier .
array-suffix =
    "[" [ constant-expression ] "]" .
constant-expression =
    name | integer-literal .
function-suffix =
    "(" [ parameter-clause ] ")" cv-qualifier-seq .
ptr-operator =
    "&" | [ class-name "::" ] "*" cv-qualifier-seq .
class-name =
    name .
cv-qualifier-seq =
    { cv-qualifier } .