Grammatica lessicale C

Tokens

token:
keyword
identifier
constant
string-literal
punctuator

preprocessing-token:
header-name
identifier
pp-number
character-constant
string-literal
punctuator
 ogni carattere non di spazio vuoto che non può essere uno dei precedenti

Parole chiave

keyword: uno tra
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

Per un elenco di parole chiave aggiuntive specifiche di Microsoft, vedere Parole chiave C.

Identificatori

identifier:
identifier-nondigit
identifier identifier-nondigit
identifier digit

identifier-nondigit:
nondigit
universal-character-name
 altri caratteri definiti dall'implementazione

nondigit: uno tra
_ 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: uno tra
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

Costanti

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

integer-constant:
decimal-constantinteger-suffixOptare
binary-constant1integer-suffixOptare
octal-constantinteger-suffixOptare
hexadecimal-constantinteger-suffixOptare

decimal-constant:
nonzero-digit
decimal-constant digit

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

binary-prefix1: uno dei
0b 0B

binary-digit1: uno dei
0 1

octal-constant:
0
octal-constant octal-digit

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

hexadecimal-prefix: uno tra
0x 0X

nonzero-digit: uno tra
1 2 3 4 5 6 7 8 9

octal-digit: uno tra
0 1 2 3 4 5 6 7

hexadecimal-digit: uno tra
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-suffixlong-suffixOptare
unsigned-suffixlong-long-suffixOptare
long-suffixunsigned-suffixOptare
long-long-suffixunsigned-suffixOptare

unsigned-suffix: uno tra
u U

long-suffix: uno tra
l L

long-long-suffix: uno tra
ll LL

floating-constant:
decimal-floating-constant
hexadecimal-floating-constant

decimal-floating-constant:
fractional-constantexponent-partOptarefloating-suffixOptare
digit-sequenceexponent-partfloating-suffixOptare

hexadecimal-floating-constant:
hexadecimal-prefixhexadecimal-fractional-constantbinary-exponent-partOptarefloating-suffixOptare
hexadecimal-prefixhexadecimal-digit-sequencebinary-exponent-partfloating-suffixOptare

fractional-constant:
digit-sequenceOptare.digit-sequence
digit-sequence .

exponent-part:
esignOptaredigit-sequence
EsignOptaredigit-sequence

sign: uno tra
+ -

digit-sequence:
digit
digit-sequence digit

hexadecimal-fractional-constant:
hexadecimal-digit-sequenceOptare.hexadecimal-digit-sequence
hexadecimal-digit-sequence .

binary-exponent-part:
psignOptaredigit-sequence
PsignOptaredigit-sequence

hexadecimal-digit-sequence:
hexadecimal-digit
hexadecimal-digit-sequence hexadecimal-digit

floating-suffix: uno tra
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:
 Qualsiasi membro del set di caratteri di origine ad eccezione delle virgolette singole ('), barra rovesciata (\) o carattere di nuova riga
escape-sequence

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

simple-escape-sequence: uno tra
\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

Valori letterali di stringa

string-literal:
encoding-prefix"s-char-sequenceOptare"

encoding-prefix:
u8
u
U
L

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

s-char:
 qualsiasi membro del set di caratteri di origine ad eccezione delle virgolette doppie ("), barra rovesciata (\) o carattere di nuova riga
escape-sequence

Segni di punteggiatura

punctuator: uno tra
[ ] ( ) { } . ->
++ -- & * + - ~ !
/ % << >> < > <= >= ==
!= ^ | && || ? : ; ...
= *= /= %= += -= <<= >>=
&= ^= |= , # ##
<: :> <% %> %: %:%:

Nomi dell'intestazione

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

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

h-char:
 qualsiasi membro del set di caratteri di origine, ad eccezione del carattere di nuova riga e >

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

q-char:
 qualsiasi membro del set di caratteri di origine, ad eccezione del carattere di nuova riga e "

Pre-elaborazione dei numeri

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-prefixe binary-digit sono estensioni specifiche di Microsoft.

Vedi anche

Riepilogo della sintassi del linguaggio C