Partager via


Grammaire lexicale C

Jetons

token:
keyword
identifier
constant
string-literal
punctuator

preprocessing-token:
header-name
identifier
pp-number
character-constant
string-literal
punctuator
 chaque caractère autre qu’un espace blanc qui ne peut pas être l’un des éléments ci-dessus

Mots clés

keyword : l'un des éléments suivants :
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 _Alignas
_Alignof _Atomic _Bool _Complex _Generic
_Imaginary _Noreturn _Static_assert
_Thread_local

Pour obtenir la liste des mots clés spécifiques à Microsoft supplémentaires, consultez Mots clés C.

Identificateurs

identifier:
identifier-nondigit
identifier identifier-nondigit
identifier digit

identifier-nondigit:
nondigit
universal-character-name
 autres caractères définis par l’implémentation

nondigit : l'un des éléments suivants :
_ 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 : l'un des éléments suivants :
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

Constantes

constant:
integer-constant
floating-constant
enumeration-constant
character-constant

integer-constant:
decimal-constant integer-suffixopt
binary-constant1 integer-suffixopt
octal-constant integer-suffixopt
hexadecimal-constant integer-suffixopt

decimal-constant:
nonzero-digit
decimal-constant digit

binary-constant:1
binary-prefix binary-digit
binary-constant binary-digit

binary-prefix1 : un sur
0b 0B

binary-digit1 : un sur
0 1

octal-constant:
0
octal-constant octal-digit

hexadecimal-constant:
hexadecimal-prefix hexadecimal-digit
hexadecimal-constant hexadecimal-digit

hexadecimal-prefix : l'un des éléments suivants :
0x 0X

nonzero-digit : l'un des éléments suivants :
1 2 3 4 5 6 7 8 9

octal-digit : l'un des éléments suivants :
0 1 2 3 4 5 6 7

hexadecimal-digit : l'un des éléments suivants :
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-suffixopt
long-suffix unsigned-suffixopt
long-long-suffix unsigned-suffixopt

unsigned-suffix : l'un des éléments suivants :
u U

long-suffix : l'un des éléments suivants :
l L

long-long-suffix : l'un des éléments suivants :
ll LL

floating-constant:
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-partopt 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 : l'un des éléments suivants :
+ -

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 : l'un des éléments suivants :
f l F L

enumeration-constant:
identifier

character-constant:
' c-char-sequence '
L' c-char-sequence '

c-char-sequence:
c-char
c-char-sequence c-char

c-char:
 Tout membre du jeu de caractères source à l’exception du guillemet simple ('), de la barre oblique inverse (\) ou du caractère de saut de ligne
escape-sequence

escape-sequence:
simple-escape-sequence
octal-escape-sequence
hexadecimal-escape-sequence
universal-character-name

simple-escape-sequence : l'un des éléments suivants :
\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

Littéraux de chaîne

string-literal:
encoding-prefix "opts-char-sequence "

encoding-prefix:
u8
u
U
L

s-char-sequence:
s-char
s-char-sequence s-char

s-char:
 tout membre du jeu de caractères source, à l’exception du guillemet double ("), de la barre oblique inverse (\) ou du caractère de saut de ligne
escape-sequence

Signes de ponctuation

punctuator : l'un des éléments suivants :
[ ] ( ) { } . ->
++ -- & * + - ~ !
/ % << >> < > <= >= ==
!= ^ | && || ? : ; ...
= *= /= %= += -= <<= >>=
&= ^= |= , # ##
<: :> <% %> %: %:%:

Noms des en-têtes

header-name:
< h-char-sequence >
" q-char-sequence "

h-char-sequence:
h-char
h-char-sequence h-char

h-char:
 n’importe quel membre du jeu de caractères source, à l’exception du caractère de saut de ligne et de >

q-char-sequence:
q-char
q-char-sequence q-char

q-char:
 n’importe quel membre du jeu de caractères source, à l’exception du caractère de saut de ligne et de "

Prétraitement des nombres

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 .

1binary-constant, binary-prefix et binary-digit sont des extensions spécifiques à Microsoft.

Voir aussi

Résumé de syntaxe du langage C