Expressions Specific to C

This section gives information on the following C support features:

The debugger has an almost complete understanding of C expressions, given the general restrictions.

expression

: assignment-expression

constant-expression

: conditional-expression

C Identifiers

The lookup rules are almost always correct for C.

identifier-or-typedef-name

: identifier-or-key-word

| TYPEDEFname

C Constants

The numeric constants are treated exactly the same as in C. The enumeration constant identifiers go though the same grammar paths as variable identifiers, which has basically the same effect as the C semantics.

primary-expression

: identifier-or-key-word

| constant

| string-literal-list

| LPAREN expression RPAREN

| process_set

| LPAREN process_range RPAREN

string-literal-list

: string

| string-literal-list string

constant

: FLOATINGconstant

| INTEGERconstant

| CHARACTERconstant

| WIDECHARACTERconstant

| WIDESTRINGliteral

C Rescoped Expressions

The C implementation of rescoped expressions is the following:

qual-typedef-opt

: TYPEDEFname

| qual-typedef-opt TICK TYPEDEFname

whatis-expressions

: expression

| rescoped-expression

| printable-type

C Calls

Following is the C implementation of calls.

call-expression

: expression

function-call

: postfix-expression LPAREN [arg-expression-list] RPAREN

C Addresses

Following is the C implementation of addresses.

address

: AMPERSAND postfix-expression

| line-address

| postfix-expression

address-exp

: address

| address-exp PLUS  address

| address-exp MINUS address

| address-exp STAR  address

C Loc Specifications

The C implementation of loc  is the following:

loc

: expression

| rescoped-expression

C Types

The debugger understands the full C type specification grammar.

type-specifier

: basic-type-specifier

| struct-union-enum-type-specifier

| typedef-type-specifier

basic-type-specifier

: basic-type-name

| type-qualifier-list basic-type-name

| basic-type-specifier type-qualifier

| basic-type-specifier basic-type-name

type-qualifier-list

: type-qualifier

| type-qualifier-list type-qualifier

type-qualifier

: CONST

| VOLATILE

| LE

| _le

| _be

basic-type-name

: VOID

| CHAR

| SHORT

| INT

| LONG

| FLOAT

| DOUBLE

| SIGNED

| UNSIGNED

printable-type

: rescoped_typedef

| type_name

struct-union-enum-type-specifier

: elaborated-type-name

| type-qualifier-list elaborated-type-name

| struct-union-enum-type-specifier type-qualifier

typedef-type-specifier

: TYPEDEFname

| type-qualifier-list TYPEDEFname

| typedef-type-specifier type-qualifier

elaborated-type-name

: struct-or-union-specifier

| enum-specifier

struct-or-union-specifier

: struct-or-union opt-parenthesized-identifier-or-typedef-name

opt-parenthesized-identifier-or-typedef-name

: identifier-or-typedef-name

| LPAREN opt-parenthesized-identifier-or-typedef-name RPAREN

struct-or-union

: STRUCT

| UNION

enum-specifier

: ENUM identifier-or-typedef-name

type-name

: type-specifier

| type-specifier abstract-declarator

| type-qualifier-list                       // Implicit "int"

| type-qualifier-list abstract-declarator   // Implicit "int"

type-name-list

: type-name

| type-name COMMA type-name-list

abstract-declarator

: unary-abstract-declarator

| postfix-abstract-declarator

| postfixing-abstract-declarator

postfixing-abstract-declarator

: array-abstract-declarator

| LPAREN RPAREN

array-abstract-declarator

: BRACKETS

| LBRACKET constant-expression RBRACKET

| array-abstract-declarator LBRACKET constant-expression RBRACKET

unary-abstract-declarator

: STAR

| STAR type-qualifier-list

| STAR abstract-declarator

| STAR type-qualifier-list abstract-declarator

postfix-abstract-declarator

: LPAREN unary-abstract-declarator RPAREN

| LPAREN postfix-abstract-declarator RPAREN

| LPAREN postfixing-abstract-declarator RPAREN

| LPAREN unary-abstract-declarator RPAREN postfixing-abstract-declarator

Other Forms of C Expressions

The following expressions all have their usual C semantics:

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

conditional-expression

: logical-OR-expression

| logical-OR-expression QUESTION expression COLON conditional-expression

logical-OR-expression

: logical-AND-expression

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

logical-AND-expression

: inclusive-OR-expression

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

inclusive-OR-expression

: exclusive-OR-expression

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

exclusive-OR-expression

: AND-expression

| exclusive-OR-expression HAT AND-expression

AND-expression

: equality-expression

| AND-expression AMPERSAND equality-expression

equality-expression

: relational-expression

| equality-expression EQ relational-expression

| equality-expression NE relational-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

shift-expression

: additive-expression

| shift-expression LS additive-expression

| shift-expression RS additive-expression

additive-expression

: multiplicative-expression

| additive-expression PLUS  multiplicative-expression

| additive-expression MINUS multiplicative-expression

multiplicative-expression

: cast-expression

| multiplicative-expression STAR  cast-expression

| multiplicative-expression SLASH cast-expression

| multiplicative-expression MOD   cast-expression

cast-expression

: unary-expression

| LPAREN type-name RPAREN cast-expression

unary-expression

: postfix-expression

| INCR unary-expression

| DECR unary-expression

| AMPERSAND cast-expression

| STAR cast-expression

| PLUS cast-expression

| MINUS cast-expression

| TWIDDLE cast-expression

| NOT cast-expression

| SIZEOF unary-expression

| SIZEOF LPAREN type-name RPAREN

| line-address

postfix-expression

: primary-expression

| postfix-expression LBRACKET expression RBRACKET

| function-call

| postfix-expression LPAREN type-name-list RPAREN

| postfix-expression DOT   identifier-or-typedef-name

| postfix-expression ARROW identifier-or-typedef-name

| postfix-expression INCR

| postfix-expression DECR