Other Forms of C++ Expressions

The following expressions all have the usual C++ semantics:

 

primary-expression

        : constant

        | string-literal-list

        | THIS

        | LPAREN expression RPAREN

        | operator-function-name

        | identifier-or-key-word

        | qualified-id

        | process_set

        | LPAREN process_range RPAREN

 

operator-function-name

        : OPERATOR operator-predefined

        | OPERATOR basic-type-name

        | OPERATOR TYPEDEFname

        | OPERATOR LPAREN type-name RPAREN

        | OPERATOR type-qualifier

        | OPERATOR qualified-type

 

operator-predefined

        : PLUS

        | MINUS

        | STAR

        | ...

        | DELETE

        | COMMA

 

type-qualifier-list-opt

        : [ type-qualifier-list ]

 

postfix-expression

        : primary-expression

        | primary-expression LBRACKET expression RBRACKET

        | postfix-expression PARENS

        | postfix-expression LPAREN  argument-expression-list RPAREN

        | postfix-expression LPAREN  type-name-list RPAREN

        | postfix-expression DOT  id-expression

        | postfix-expression ARROW id-expression

        | postfix-expression INCR

        | postfix-expression DECR

        | TYPEDEFname LPAREN argument-expression-list RPAREN

        | TYPEDEFname LPAREN type-name-list RPAREN

        | basic-type-name LPAREN assignment-expression RPAREN

 

type-name-list

        : type-name

        | type-name COMMA type-name-list

        | type-name comma-opt-ellipsis

        | ELLIPSIS

 

comma-opt-ellipsis

        : ELLIPSIS

        | COMMA ELLIPSIS

 

unary-expression

        : postfix-expression

        | INCR unary-expression

        | DECR unary-expression

        | line-address

        | AMPERSAND cast-expression

        | STAR cast-expression

        | MINUS cast-expression

        | PLUS cast-expression

        | TWIDDLE LPAREN cast-expression RPAREN

        | NOT cast-expression

        | SIZEOF unary-expression

        | SIZEOF LPAREN type-name RPAREN

        | allocation-expression

 

allocation-expression

        : operator-new LPAREN type-name RPAREN operator-new-initializer

        | operator-new LPAREN argument-expression-list RPAREN LPAREN type-name RPAREN operator-new-initializer

 

operator-new

        : NEW

        | CLCL NEW

 

operator-new-initializer

        : [ PARENS ]

        | [ LPAREN argument-expression-list RPAREN ]

 

cast-expression

        : unary-expression

        | LPAREN type-name RPAREN cast-expression

 

deallocation-expression

        : cast-expression

        | DELETE               deallocation-expression

        | CLCL DELETE          deallocation-expression

        | DELETE BRACKETS      deallocation-expression

        | CLCL DELETE BRACKETS deallocation-expression

 

point-member-expression

        : deallocation-expression

        | point-member-expression DOTstar    deallocation-expression

        | point-member-expression ARROWstar  deallocation-expression

 

multiplicative-expression

        : point-member-expression

        | multiplicative-expression STAR  point-member-expression

        | multiplicative-expression SLASH point-member-expression

        | multiplicative-expression MOD   point-member-expression

 

additive-expression

        : multiplicative-expression

        | additive-expression PLUS  multiplicative-expression

        | additive-expression MINUS multiplicative-expression

 

shift-expression

        : additive-expression

        | shift-expression LS additive-expression

        | shift-expression RS additive-expression

 

relational-expression

        : shift-expression

        | relational-expression LESS    shift-expression

        | relational-expression GREATER shift-expression

        | relational-expression LE      shift-expression

        | relational-expression GE     shift-expression

 

equality-expression

        : relational-expression

        | equality-expression EQ relational-expression

        | equality-expression NE relational-expression

 

AND-expression

        : equality-expression

        | AND-expression AMPERSAND equality-expression

 

exclusive-OR-expression

        : AND-expression

        | exclusive-OR-expression HAT AND-expression

 

inclusive-OR-expression

        : exclusive-OR-expression

        | inclusive-OR-expression OR exclusive-OR-expression

 

logical-AND-expression

        : inclusive-OR-expression

        | logical-AND-expression ANDAND inclusive-OR-expression

 

logical-OR-expression

        : logical-AND-expression

        | logical-OR-expression OROR logical-AND-expression

 

conditional-expression

        : logical-AND-expression

        | logical-AND-expression QUESTION expression COLON conditional-expression

 

assignment-expression

        : conditional-expression

        | unary-expression ASSIGNOP    assignment-expression

        | unary-expression MULTassign  assignment-expression

        | unary-expression DIVassign   assignment-expression

        | unary-expression MODassign   assignment-expression

        | unary-expression PLUSassign  assignment-expression

        | unary-expression MINUSassign assignment-expression

        | unary-expression LSassign    assignment-expression

        | unary-expression RSassign    assignment-expression

        | unary-expression ANDassign   assignment-expression

        | unary-expression ERassign    assignment-expression

        | unary-expression ORassign    assignment-expression