C Now

C Lexical Grammar

Site Logo
C Lexical Grammar
Program  ::=  ( Token | White-space ) *
Token  ::=  Keyword | Identifier | Literal | Operator | Punctuation | Ambiguous-symbol
Keyword  ::=  auto | break | case | char | const | continue | default | do
| double | else | enum | extern | float | for | goto | if
| int | long | register | return | short | signed | sizeof | static
| struct | switch | typedef | union | unsigned | void | volatile | while
Identifier  ::=  ( Letter | _ ) ( Letter | _ | Digit ) *
Literal  ::=  Numeric-literal | Char-literal | String-literal
Numeric-literal  ::=  Fixed-literal | Float-literal
Fixed-literal  ::=  Cardinal-literal Fixed-suffix
Cardinal-Literal  ::=  Decimal-literal | Octal-literal | Hexadecimal-literal
Decimal-literal  ::=  Non-zero-digit Digit *
Octal-literal  ::=  0 Octal-digit *
Hexadecimal-literal  ::=  ( 0X | 0x ) Hexadecimal-digit *
Fixed-suffix  ::=  ( Size-suffix Unsigned-suffix ) | ( Unsigned-suffix Size-suffix )
Size-suffix  ::=  L | l | ε
Unsigned-suffix  ::=  U | u | ε
Float-literal  ::=  ( Digit * . Digit Digit * ( Exponent | ε ) )
| ( Digit Digit * Exponent )
Exponent  ::=  ( E | e ) ( + | - | ε ) Digit Digit *
Char-Literal  ::=  ' ( Graphic | Escape-sequence ) * '
Wide-char-Literal  ::=  L' ( Graphic | Escape-sequence ) * '
String-Literal  ::=  " ( Graphic | Escape-sequence ) * "
Wide-string-Literal  ::=  L" ( Graphic | Escape-sequence ) * "
Digit  ::=  0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
Non-zero-digit  ::=  1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
Octal-digit  ::=  0 | 1 | 2 | 3 | 4 | 5 | 6 | 7
Hex-Digit  ::=  0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F | a | b | c | d | e | f
Letter  ::=  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
Graphic  ::=  Letter | Digit | Operator-Char | Punctuation
| ! | # | $ | _ | " | ' | ? | space | tab
Escape-sequence  ::=  \\ | \' | \" | \? | \a | \b | \f | \n | \r | \t | \v | \0
| Hex-escape-sequence | octal-excape-sequence
Hex-escape-sequence  ::=  \ ( x | X ) Hex-digit Hex-digit *
Octal-escape-sequence  ::=  \ Octal-digit Octal-digit Octal-digit
Operator  ::=  + | - | * | / | % | = | == | != | <</B> | > | <= | >=
| ++ | -- | << | >> | & | && | | | || | ^ | [ | ] | ? | ! | ~
| += | -= | *= | /= | %= | |= | &= | ^= | <<= | >>=
Punctuation  ::=  ; | . | { | }
Ambiguous-symbol  ::=  : | , | ( | )
White-space  ::=  space | tab | vt | nl | cr | lf | ff | Comment
Comment  ::=  /* ( Graphic | White-space ) * */
C Now Home  C Now Home
Etymology Index  Etymology Index
E-Mail
Valid HTML 4.01 Transitional Valid CSS! Site Logo

copyright 1999-2006, j.h.young, revised 2/13/06