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