Table 2: An EBNF grammar for new-expression

new-expression =
    [ "::" ] "new" [ new-placement ] allocation-type-id
        [ new-initializer ] .

new-placement =
    "(" expression-list ")" .

expression-list =
    expression { "," expression } .

expression =
    name | integer-literal .

allocation-type-id =
    new-type-id | "(" type-id ")" .

new-type-id =
    type-specifier-seq new-declarator .

type-id =
    type-specifier-seq abstract-declarator .

type-specifier-seq =
    type-specifier { type-specifier } .

new-declarator =
    direct-new-declarator |
    ptr-operator new-declarator .

direct-new-declarator =
    [ "[" expression "]" ] { "[" constant-expression "]" } .

new-initializer =
    "(" [ expression-list ] ")" .