| 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 ) * */ |