Lexikalische Grammatik von C

Token

token:
keyword
identifier
constant
string-literal
punctuator

preprocessing-token:
header-name
identifier
pp-number
character-constant
string-literal
punctuator
 Alle Zeichen, die kein Leerzeichen sind und keines der oben erwähnten sein können

Keywords

keyword: einer von
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

Eine Liste mit zusätzlichen Microsoft-spezifischen Schlüsselwörtern finden Sie unter C-Schlüsselwörter.

Bezeichner

identifier:
identifier-nondigit
identifier identifier-nondigit
identifier digit

identifier-nondigit:
nondigit
universal-character-name
 andere von der Implementierung definierte Zeichen

nondigit: einer von
_ 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: einer von
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

Konstanten

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

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

decimal-constant:
nonzero-digit
decimal-constant digit

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

binary-prefix1: einer von
0b 0B

binary-digit1: einer von
0 1

octal-constant:
0
octal-constant octal-digit

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

hexadecimal-prefix: einer von
0x 0X

nonzero-digit: einer von
1 2 3 4 5 6 7 8 9

octal-digit: einer von
0 1 2 3 4 5 6 7

hexadecimal-digit: einer von
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-suffixopt
unsigned-suffixlong-long-suffixopt
long-suffixunsigned-suffixopt
long-long-suffixunsigned-suffixopt

unsigned-suffix: einer von
u U

long-suffix: einer von
l L

long-long-suffix: einer von
ll LL

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

decimal-floating-constant:
fractional-constantexponent-partoptfloating-suffixopt
digit-sequenceexponent-partfloating-suffixopt

hexadecimal-floating-constant:
hexadecimal-prefixhexadecimal-fractional-constantbinary-exponent-partoptfloating-suffixopt
hexadecimal-prefixhexadecimal-digit-sequencebinary-exponent-partfloating-suffixopt

fractional-constant:
digit-sequenceopt.digit-sequence
digit-sequence .

exponent-part:
esignoptdigit-sequence
Esignoptdigit-sequence

sign: einer von
+ -

digit-sequence:
digit
digit-sequence digit

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

binary-exponent-part:
psignoptdigit-sequence
Psignoptdigit-sequence

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

floating-suffix: einer von
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:
 Alle Elemente des Quellzeichensatzes mit Ausnahme von einfachem Anführungszeichen ('), umgekehrtem Schrägstrich (\) oder Zeilenumbruchzeichen
escape-sequence

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

simple-escape-sequence: einer von
\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

Zeichenfolgenliterale

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:
 alle Elemente des Quellzeichensatzes mit Ausnahme von doppelten Anführungszeichen ("), umgekehrtem Schrägstrich (\) oder Zeilenumbruchzeichen
escape-sequence

Markierungszeichen

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

Headernamen

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

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

h-char:
 Alle Elemente des Quellzeichensatzes mit Ausnahme des Zeilenumbruchzeichens und von >

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

q-char:
 Alle Elemente des Quellzeichensatzes mit Ausnahme des Zeilenumbruchzeichens und von "

Vorverarbeiten von Zahlen

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 und binary-digit sind Microsoft-spezifische Erweiterungen.

Siehe auch

Zusammenfassung der C-Sprachsyntax