United States

Compaq C

# Compaq C
Language Reference Manual

Previous | Contents | Index

# Appendix A
Language Syntax Summary

This section summarizes the syntax of the C language, using the syntax of the ANSI C Standard. Syntactic categories are indicated with bold type, and literal words or characters are indicated with monospaced, nonitalicized type. A colon following a syntactic category introduces its definition. Alternative definitions are listed on separate lines, or are prefaced by the words "one of." An optional element is indicated by the subscript opt. For example, the following line indicates an optional expression enclosed in braces:

`{ expressionopt }`

The section numbers shown in parentheses refer to the section of the American National Standard for Information Systems-Programming Language C (document number: X3.159-1989) that discusses that part of the language.

A.1.1 Lexical Grammar

A.1.1.1 Tokens

token: (§3.1)

`keyword identifier constant string-literal operator punctuator`

preprocessing-token: (§3.1)

`header-name identifier pp-number character-constant string-literal operator punctuator each nonwhite-space character that cannot be one of the above`

A.1.1.2 Keywords

keyword: (§3.1.1) one of

``

        auto        double      int         struct
        break       else        long        switch
        case        enum        register    typedef
        char        extern      return      union
        const       float       short       unsigned
        continue    for         signed      void
        default     goto        sizeof      volatile
        do          if          static      while

        _Bool      _Complex (ALPHA ONLY)

A.1.1.3 Identifiers

identifier: (§3.1.2)

`identifier-nondigit identifier identifier-nondigit identifier digit`

identifier-nondigit:

`nondigit other implementation-defined characters`

nondigit: §3.1.2 one of

``

        a  b  c  d  e  f  g  h  i  j  k  l  m
        n  o  p  q  r  s  t  u  v  w  x  y  z
        A  B  C  D  E  F  G  H  I  J  K  L  M
        N  O  P  Q  R  S  T  U  V  W  X  Y  Z  _

digit: (§3.1.2) one of

``

        0  1  2  3  4  5  6  7  8  9

A.1.1.4 Constants

constant: (§3.1.3)

`floating-constant integer-constant enumeration-constant character-constant`

floating-constant: (§3.1.3.1)

`decimal-floating-constant hexadecimal-floating-constant`

decimal-floating-constant

`fractional-constant exponent-partopt floating-suffixopt digit-sequence exponent-part floating-suffixopt`

hexadecimal-floating-constant

`hexadecimal-prefix hexadecimal-fractional-constant binary-exponent-part floating-suffixopt hexadecimal-prefix hexadecimal-digit-sequence binary-exponent-part floating-suffixopt`

fractional-constant: (§3.1.3.1)

`digit-sequenceopt . digit-sequence digit-sequence .`

exponent-part: (§3.1.3.1)

`e signopt digit-sequence E signopt digit-sequence`

sign: (§3.1.3.1) one of

`+ --`

digit-sequence: (§3.1.3.1)

`digit digit-sequence digit`

hexadecimal-fractional-constant:

`hexadecimal-digit-sequenceopt . hexadecimal-digit-sequence hexadecimal-digit-sequence .`

binary-exponent-part:

`p signopt digit-sequence P signopt digit-sequence`

hexadecimal-digit-sequence:

`hexadecimal-digit hexadecimal-digit-sequence hexadecimal-digit`

floating-suffix: (§3.1.3.1) one of

``

> `f l F L`

integer-constant: (§3.1.3.2)

`decimal-constant integer-suffixopt octal-constant integer-suffixopt hexadecimal-constant integer-suffixopt`

decimal-constant: (§3.1.3.2)

`nonzero-digit decimal-constant digit`

octal-constant: (§3.1.3.2)

`0 octal-constant octal-digit`

hexadecimal-constant: (§3.1.3.2)

`0x hexadecimal-digit 0X hexadecimal-digit hexadecimal-constant hexadecimal-digit`

nonzero-digit: (§3.1.3.2) one of

``

        1  2  3  4  5  6  7  8  9

octal-digit: (§3.1.3.2) one of

``

        0  1  2  3  4  5  6  7

hexadecimal-digit: (§3.1.3.2) one of

``

        0  1  2  3  4  5  6  7  8  9
        a  b  c  d  e  f
        A  B  C  D  E  F

integer-suffix: (§3.1.3.2)

`unsigned-suffix long-suffixopt long-suffix unsigned-suffixopt`

unsigned-suffix: (§3.1.3.2) one of

``

> `u U`

long-suffix: (§3.1.3.2) one of

``

> `l L`

enumeration-constant: (§3.1.3.3)

`identifier`

character-constant: (§3.1.3.4)

`' c-char-sequence' L' c-char-sequence'`

c-char-sequence: (§3.1.3.4)

`c-char c-char-sequence c-char`

c-char: (§3.1.3.4)

`any member of the source character set except the single-quote ('), backslash (\), or new-line character escape-sequence`

escape-sequence: (§3.1.3.4)

`simple-escape-sequence octal-escape-sequence hexadecimal-escape-sequence`

simple-escape-sequence: (§3.1.3.4) one of

``

        \'  \"  \?  \\
        \a  \b  \f  \n  \r  \t  \v

octal-escape-sequence: (§3.1.3.4)

`\ octal-digit \ octal-digit octal-digit \ octal-digit octal-digit octal-digit`

hexadecimal-escape-sequence:(§3.1.3.4)

`\x hexadecimal-digit hexadecimal-escape-sequence hexadecimal-digit`

A.1.1.5 String Literals

string-literal: (§3.1.4)

`"s-char-sequenceopt" L"s-char-sequenceopt"`

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 _Bool _Complex (ALPHA ONLY)`

`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 ;`

Previous | Next | Contents | Index

privacy and legal statement