- token
keyword
identifier
constant
string-literal
punctuator
- preprocessing-token
-
header-name
only as part of an#include
directive identifier
pp-number
character-constant
string-literal
punctuator
-
any other character that does not match the other productions
- keyword
_Alignas
_Alignof
_Atomic
_Bool
_Complex
_Generic
_Imaginary
_Noreturn
_Pragma
_Static_
assert _Thread_
local auto
break
case
char
const
continue
default
do
double
else
enum
extern
float
for
goto
if
inline
int
long
register
restrict
return
short
signed
sizeof
static
struct
switch
typedef
union
unsigned
void
volatile
while
- identifier
identifier-nondigit
identifier identifier-nondigit
identifier digit
- identifier-nondigit
nondigit
universal-character-name
-
other implementation-defined characters
- nondigit
-
any 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
-
any of
0 1 2 3 4 5 6 7 8 9
- universal-character-name
\u hex-quad
\U hex-quad hex-quad
- hex-quad
hexadecimal-digit hexadecimal-digit hexadecimal-digit hexadecimal-digit
- constant
integer-constant
floating-constant
enumeration-constant
character-constant
- integer-constant
untyped-integer-constant integer-suffixopt
- decimal-constant
nonzero-digit
decimal-constant digit
- octal-constant
0
octal-constant octal-digit
- hexadecimal-constant
hexadecimal-prefix hexadecimal-digit
hexadecimal-constant hexadecimal-digit
- hexadecimal-prefix
0x
0X
- nonzero-digit
-
any of
1 2 3 4 5 6 7 8 9
- octal-digit
-
any of
0 1 2 3 4 5 6 7
- hexadecimal-digit
-
any 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
unsigned-suffix long-suffixopt
unsigned-suffix long-long-suffix
long-suffix unsigned-suffixopt
long-long-suffix unsigned-suffixopt
- unsigned-suffix
u
U
- long-suffix
l
L
- long-long-suffix
ll
LL
- floating-constant
decimal-floating-constant
-
hexadecimal-floating-constant
from C99 - 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
digit-sequenceopt . digit-sequence
digit-sequence .
- exponent-part
e signopt digit-sequence
E signopt digit-sequence
- sign
+
-
- digit-sequence
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
f
l
F
L
- enumeration-constant
identifier
- character-constant
' c-char-sequence '
L' c-char-sequence '
u' c-char-sequence '
U' c-char-sequence '
- c-char-sequence
c-char
c-char-sequence c-char
- c-char
escape-sequence
- escape-sequence
simple-escape-sequence
octal-escape-sequence
hexadecimal-escape-sequence
universal-character-name
- simple-escape-sequence
\'
\"
\?
\\
\a
\b
\f
\n
\r
\t
\v
- octal-escape-sequence
\ octal-digit
\ octal-digit octal-digit
\ octal-digit octal-digit octal-digit
- hexadecimal-escape-sequence
\x hexadecimal-digit
hexadecimal-escape-sequence hexadecimal-digit
- string-literal
encoding-prefix " s-char-sequenceopt "
- encoding-prefix
u8
u
U
L
- s-char-sequence
s-char
s-char-sequence s-char
- s-char
escape-sequence
- punctuator
- header-name
< h-char-sequence >
" q-char-sequence "
- h-char-sequence
h-char
h-char-sequence h-char
- h-char
-
any member of the source character set except
>
and the new-line character - q-char-sequence
q-char
q-char-sequence q-char
- q-char
-
any member of the source character set except
"
and the new-line character - pp-number
digit
. digit
pp-number digit
pp-number identifier-nondigit
pp-number e sign
pp-number E sign
pp-number p sign
pp-number P sign
pp-number .