DEC C
Language Reference Manual


Previous Contents Index

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)

  • conditional-expression

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
  • union

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)

  • const
  • volatile

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)

  • identifier

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)

  • expressionopt ;

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)

  • groupopt

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)

  • #else new-line groupopt

endif-line: (§3.8.1)

  • #endif new-line

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-tokensopt

pp-tokens: (§3.8)

  • preprocessing-token
  • pp-tokens preprocessing-token

new-line: (§3.8)

  • the new-line character


Previous Next Contents Index