DEC C
Language Reference Manual
s-char-sequence: (§3.1.4)
- s-char
- s-char-sequence s-char
|
s-char: (§3.1.4)
- any member of the source character set except
the double-quote ("), backslash (\), or new-line character
- escape-sequence
|
A.1.1.6 Operators
operator: (§3.1.5) one of
[ ] ( ) . ->
++ -- & * + - ~ ! sizeof
/ % << >> < > <= >= == != ^ | && ||
? :
= *= /= %= += -= <<= >>= &= ^= |=
, # ##
|
A.1.1.7 Punctuators
punctuator: (§3.1.6) one of
[ ] ( ) { } * , : = ; ... #
|
A.1.1.8 Header Names
header-name: (§3.1.7)
- <h-char-sequence>
- "q-char-sequence"
|
h-char-sequence: (§3.1.7)
- h-char
- h-char-sequence h-char
|
h-char: (§3.1.7)
- any member of the source character set except
the new-line character and >
|
q-char-sequence: (§3.1.7)
- q-char
- q-char-sequence q-char
|
q-char: (§3.1.7)
- any member of the source character set except
the new-line character and "
|
A.1.1.9 Preprocessing Numbers
pp-number: (§3.1.8)
- digit
- . digit
- pp-number digit
- pp-number nondigit
- pp-number e sign
- pp-number E sign
- pp-number .
|
A.1.2 Phrase Structure Grammar
A.1.2.1 Expressions
primary-expression: (§3.3.1)
- identifier
- constant
- string-literal
- ( expression )
|
postfix-expression: (§3.3.2)
- primary-expression
- postfix-expression [ expression ]
- postfix-expression (
argument-expression-listopt )
- postfix-expression . identifier
- postfix-expression -> identifier
- postfix-expression ++
- postfix-expression - -
|
argument-expression-list: (§3.3.2)
- assignment-expression
- argument-expression-list , assignment-expression
|
unary-expression: (§3.3.3)
- postfix-expression
- ++ unary-expression
- - - unary-expression
- unary-operator cast-expression
- sizeof unary-expression
- sizeof ( type-name )
|
unary-operator: (§3.3.3) one of
cast-expression: (§3.3.4)
- unary-expression
- ( type-name ) cast-expression
|
multiplicative-expression: (§3.3.5)
- cast-expression
- multiplicative-expression * cast-expression
- multiplicative-expression / cast-expression
- multiplicative-expression % cast-expression
|
additive-expression: (§3.3.6)
- multiplicative-expression
- additive-expression + multiplicative-expression
- additive-expression - multiplicative-expression
|
shift-expression: (§3.3.7)
- additive-expression
- shift-expression << additive-expression
- shift-expression >> additive-expression
|
relational-expression: (§3.3.8)
- shift-expression
- relational-expression < shift-expression
- relational-expression > shift-expression
- relational-expression <= shift-expression
- relational-expression >= shift-expression
|
equality-expression: (§3.3.9)
- relational-expression
- equality-expression :=,= relational-expression
- equality-expression != relational-expression
|
AND-expression: (§3.3.10)
- equality-expression
- AND-expression & equality-expression
|
exclusive-OR-expression: (§3.3.11)
- AND-expression
- exclusive-OR-expression ^ AND-expression
|
inclusive-OR-expression: (§3.3.12)
- exclusive-OR-expression
- inclusive-OR-expression | exclusive-OR-expression
|
logical-AND-expression: (§3.3.13)
- inclusive-OR-expression
- logical-AND-expression && inclusive-OR-expression
|
logical-OR-expression: (§3.3.14)
- logical-AND-expression
- logical-OR-expression || logical-AND-expression
|
conditional-expression: (§3.3.15)
- logical-OR-expression
- logical-OR-expression ? expression : conditional-expression
|
assignment-expression: (§3.3.16)
- conditional-expression
- unary-expression assignment-operator assignment-expression
|
assignment-operator: (§3.3.16) one of
= *= /= %= += -= <<= >>= &= ^= |=
|
expression: (§3.3.17)
- assignment-expression
- expression , assignment-expression
|
constant-expression: (§3.4)
A.1.2.2 Declarations
declaration: (§3.5)
- declaration-specifiers init-declarator-listopt ;
|
declaration-specifiers: (§3.5)
- storage-class-specifier declaration-specifiersopt
- type-specifier declaration-specifiersopt
- type-qualifier declaration-specifiersopt
|
init-declarator-list: (§3.5)
- init-declarator
- init-declarator-list , init-declarator
|
init-declarator: (§3.5)
- declarator
- declarator = initializer
|
storage-class-specifier: (§3.5.1)
- typedef
- extern
- static
- auto
- register
|
type-specifier: (§3.5.2)
- void
- char
- short
- int
- long
- float
- double
- signed
- unsigned
|
- struct-or-union-specifier
- enum-specifier
- typedef-name
|
struct-or-union-specifier: (§3.5.2.1)
- struct-or-union identifieropt { struct-declaration-list }
- struct-or-union identifier
|
struct-or-union: (§3.5.2.1)
struct-declaration-list: (§3.5.2.1)
- struct-declaration
- struct-declaration-list struct-declaration
|
struct-declaration: (§3.5.2.1)
- specifier-qualifier-list struct-declarator-list ;
|
specifier-qualifier-list: (§3.5.2.1)
- type-specifier specifier-qualifier-listopt
- type-qualifier specifier-qualifier-listopt
|
struct-declarator-list: (§3.5.2.1)
- struct-declarator
- struct-declarator-list , struct-declarator
|
struct-declarator: (§3.5.2.1)
- declarator
- declaratoropt :
constant-expression
|
enum-specifier: (§3.5.2.2)
- enum identifieropt { enumerator-list }
- enum identifier
|
enumerator-list: (§3.5.2.2)
- enumerator
- enumerator-list , enumerator
|
enumerator: (§3.5.2.2)
- enumeration-constant
- enumeration-constant = constant-expression
|
type-qualifier: (§3.5.3)
declarator: (§3.5.4)
- pointeropt direct-declarator
|
direct-declarator: (§3.5.4)
- identifier
- ( declarator )
- direct-declarator [
constant-expressionopt ]
- direct-declarator ( parameter-type-list )
- direct-declarator (
identifier-listopt )
|
pointer: (§3.5.4)
- * type-qualifier-listopt
- * type-qualifier-listopt
pointer
|
type-qualifier-list: (§3.5.4)
- type-qualifier
- type-qualifier-list type-qualifier
|
parameter-type-list: (§3.5.4)
- parameter-list
- parameter-list , ...
|
parameter-list: (§3.5.4)
- parameter-declaration
- parameter-list , parameter-declaration
|
parameter-declaration: (§3.5.4)
- declaration-specifiers declarator
- declaration-specifiers abstract-declaratoropt
|
identifier-list: (§3.5.4)
- identifier
- identifier-list , identifier
|
type-name: (§3.5.5)
- specifier-qualifier-list abstract-declaratoropt
|
abstract-declarator: (§3.5.5)
- pointer
- pointeropt direct-abstract-declarator
|
direct-abstract-declarator: (§3.5.5)
- ( abstract-declarator )
- direct-abstract-declaratoropt [
constant-expressionopt ]
- direct-abstract-declaratoropt (
parameter-type-listopt )
|
typedef-name: (§3.5.6)
initializer: (§3.5.7)
- assignment-expression
- { initializer-list }
- { initializer-list , }
|
initializer-list: (§3.5.7)
- initializer
- initializer-list , initializer
|
A.1.2.3 Statements
statement: (§3.6)
- labeled-statement
- compound-statement
- expression-statement
- selection-statement
- iteration-statement
- jump-statement
|
labeled-statement: (§3.6.1)
- identifier : statement
- case constant-expression : statement
- default : statement
|
compound-statement: (§3.6.2)
- { declaration-listopt
statement-listopt }
|
declaration-list: (§3.6.2)
- declaration
- declaration-list declaration
|
statement-list: (§3.6.2)
- statement
- statement-list statement
|
expression-statement: (§3.6.3)
selection-statement: (§3.6.4)
- if ( expression ) statement
- if ( expression ) statement else statement
- switch ( expression) statement
|
iteration-statement: (§3.6.5)
- while ( expression ) statement
- do statement while ( expression ) ;
- for ( expressionopt ;
expressionopt ;
expressionopt ) statement
|
jump-statement: (§3.6.6)
- goto identifier ;
- continue ;
- break ;
- return expressionopt ;
|
A.1.2.4 External Definitions
translation-unit: (§3.7)
- external-declaration
- translation-unit external-declaration
|
external-declaration: (§3.7)
- function-definition
- declaration
|
function-definition: (§3.7.1)
- declaration-specifiersopt
declarator declaration-listopt
compound-statement
|
A.1.3 Preprocessing Directives
preprocessing-file: (§3.8)
group: (§3.8)
- group-part
- group group-part
|
group-part: (§3.8)
- pp-tokensopt new-line
- if-section
- control-line
|
if-section: (§3.8.1)
- if-group elif-groupsopt
else-groupopt endif-line
|
if-group: (§3.8.1)
- #if constant-expression new-line groupopt
- #ifdef identifier new-line groupopt
- #ifndef identifier new-line groupopt
|
elif-groups: (§3.8.1)
- elif-group
- elif-groups elif-group
|
elif-group: (§3.8.1)
- #elif constant-expression new-line groupopt
|
else-group: (§3.8.1)
endif-line: (§3.8.1)
control-line:
- #include pp-tokens new-line (§3.8.2)
- #define identifier replacement-list new-line (§3.8.3)
- #define identifier (identifier-list)opt replacement-list new-line (§3.8.3)
- #undef identifier new-line (§3.8.3)
- #line pp-tokens new-line (§3.8.4)
- #error pp-tokensopt new-line (§3.8.5)
- #pragma
pp-tokensopt new-line (§3.8.6)
- # new-line (§3.8.7)
|
lparen: (§3.8.3)
- the left parenthesis character without preceding white space
|
replacement-list: (§3.8.3)
pp-tokens: (§3.8)
- preprocessing-token
- pp-tokens preprocessing-token
|
new-line: (§3.8)