Freigeben über


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-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: 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-suffix long-suffixopt
unsigned-suffix long-long-suffixopt
long-suffix unsigned-suffixopt
long-long-suffix unsigned-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-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:
eoptsign digit-sequence
Eoptsign digit-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:
poptsign digit-sequence
Poptsign digit-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 einfachen 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 "opts-char-sequence "

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 .

1 binary-constant, binary-prefix und binary-digit sind Microsoft-spezifische Erweiterungen.

Weitere Informationen

Zusammenfassung der C-Sprachsyntax