Table 1: A simplified grammar for C++ object and
function declarations
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 =
concrete-declarator { "," concrete-declarator } .
concrete-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 =
constant-name | integer-literal .
constant-name =
name .
function-suffix =
"(" [ parameter-list ] ")" cv-qualifier-seq .
parameter-list =
parameter-declaration { "," parameter-declaration } .
parameter-declaration =
decl-specifier-seq declarator .
ptr-operator =
"&" | [ class-name "::" ] "*" cv-qualifier-seq .
class-name =
name .
cv-qualifier-seq =
{ cv-qualifier } .