- translation-unit:
-
{ external-declaration
}
- external-declaration:
-
function-definition
|
declaration
- function-definition:
-
declaration-specifiers
declarator
[ declaration-list
]
compound-statement
- declaration:
-
declaration-specifiers
[ init-declarator-list
]
";"
|
static-assert-declaration
|
";"
- declaration-specifiers:
-
declaration-specifier
{ declaration-specifier
}
- declaration-specifier:
-
storage-class-specifier
|
type-specifier
|
type-qualifier
|
function-specifier
|
alignment-specifier
- declarator:
-
[ pointer
]
direct-declarator
- declaration-list:
-
declaration
{ declaration
}
- compound-statement:
-
"{"
{ declaration-or-statement
}
"}"
- declaration-or-statement:
-
declaration
|
statement
- init-declarator-list:
-
init-declarator
{ ","
init-declarator
}
- init-declarator:
-
declarator
[ "="
initializer
]
- static-assert-declaration:
-
"_Static_assert"
"("
constant-expression
","
string-literal
")"
";"
- storage-class-specifier:
-
"typedef"
|
"extern"
|
"static"
|
"_Thread_local"
|
"auto"
|
"register"
- type-specifier:
-
"void"
|
"char"
|
"short"
|
"int"
|
"long"
|
"float"
|
"double"
|
"signed"
|
"unsigned"
|
"_Bool"
|
"_Complex"
|
"_Imaginary"
|
atomic-type-specifier
|
struct-or-union-specifier
|
enum-specifier
|
typedef-name
- typedef-name:
-
identifier
- type-qualifier:
-
"const"
|
"restrict"
|
"volatile"
|
"_Atomic"
- function-specifier:
-
"inline"
|
"_Noreturn"
- alignment-specifier:
-
"_Alignas"
"("
type-name
")"
|
"_Alignas"
"("
constant-expression
")"
- pointer:
-
"*"
[ type-qualifier-list
]
[ pointer
]
- direct-declarator:
-
identifier
|
"("
declarator
")"
|
direct-declarator
"["
[ "*"
]
"]"
|
direct-declarator
"["
"static"
[ type-qualifier-list
]
assignment-expression
"]"
|
direct-declarator
"["
type-qualifier-list
[ "*"
]
"]"
|
direct-declarator
"["
type-qualifier-list
[ "static"
]
assignment-expression
"]"
|
direct-declarator
"["
assignment-expression
"]"
|
direct-declarator
"("
parameter-type-list
")"
|
direct-declarator
"("
identifier-list
")"
|
direct-declarator
"("
")"
- identifier-list:
-
identifier
{ ","
identifier
}
- initializer-list:
-
designative-initializer
{ ","
designative-initializer
}
- designative-initializer:
-
[ designation
]
initializer
- initializer:
-
"{"
initializer-list
[ ","
]
"}"
|
assignment-expression
- constant-expression:
-
conditional-expression
- atomic-type-specifier:
-
"_Atomic"
"("
type-name
")"
- struct-or-union-specifier:
-
struct-or-union
"{"
struct-declaration-list
"}"
|
struct-or-union
identifier
[ "{"
struct-declaration-list
"}"
]
- struct-or-union:
-
"struct"
|
"union"
- struct-declaration-list:
-
struct-declaration
{ struct-declaration
}
- struct-declaration:
-
specifier-qualifier-list
";"
|
specifier-qualifier-list
struct-declarator-list
";"
|
static-assert-declaration
- enum-specifier:
-
"enum"
"{"
enumerator-list
[ ","
]
"}"
|
"enum"
identifier
[ "{"
enumerator-list
[ ","
]
"}"
]
- enumerator-list:
-
enumerator
{ ","
enumerator
}
- enumerator:
-
enumeration-constant
[ "="
constant-expression
]
- enumeration-constant:
-
identifier
- type-name:
-
specifier-qualifier-list
[ abstract-declarator
]
- specifier-qualifier-list:
-
specifier-qualifier
{ specifier-qualifier
}
- specifier-qualifier:
-
type-specifier
|
type-qualifier
- abstract-declarator:
-
pointer
[ direct-abstract-declarator
]
|
direct-abstract-declarator
- direct-abstract-declarator:
-
"("
abstract-declarator
")"
|
"("
parameter-type-list
")"
|
"("
")"
|
"["
[ "*"
]
"]"
|
"["
"static"
[ type-qualifier-list
]
assignment-expression
"]"
|
"["
type-qualifier-list
[ [ "static"
]
assignment-expression
]
"]"
|
"["
assignment-expression
"]"
|
direct-abstract-declarator
"["
[ "*"
]
"]"
|
direct-abstract-declarator
"["
"static"
[ type-qualifier-list
]
assignment-expression
"]"
|
direct-abstract-declarator
"["
type-qualifier-list
[ [ "static"
]
assignment-expression
]
"]"
|
direct-abstract-declarator
"["
assignment-expression
"]"
|
direct-abstract-declarator
"("
parameter-type-list
")"
|
direct-abstract-declarator
"("
")"
- struct-declarator-list:
-
struct-declarator
{ ","
struct-declarator
}
- type-qualifier-list:
-
type-qualifier
{ type-qualifier
}
- parameter-type-list:
-
parameter-list
[ ","
"..."
]
- struct-declarator:
-
":"
constant-expression
|
declarator
[ ":"
constant-expression
]
- assignment-operator:
-
"="
|
"*="
|
"/="
|
"%="
|
"+="
|
"-="
|
"<<="
|
">>="
|
"&="
|
"^="
|
"|="
- parameter-list:
-
parameter-declaration
{ ","
parameter-declaration
}
- parameter-declaration:
-
declaration-specifiers
[ declarator
| abstract-declarator
]
- expression:
-
assignment-expression
{ ","
assignment-expression
}
- assignment-expression:
-
conditional-expression
|
unary-expression
assignment-operator
assignment-expression
- conditional-expression:
-
logical-or-expression
[ "?"
expression
":"
conditional-expression
]
- logical-or-expression:
-
logical-and-expression
{ "||"
logical-and-expression
}
- logical-and-expression:
-
inclusive-or-expression
{ "&&"
inclusive-or-expression
}
- inclusive-or-expression:
-
exclusive-or-expression
{ "|"
exclusive-or-expression
}
- exclusive-or-expression:
-
and-expression
{ "^"
and-expression
}
- and-expression:
-
equality-expression
{ "&"
equality-expression
}
- equality-expression:
-
relational-expression
{ ( "=="
| "!="
)
relational-expression
}
- relational-expression:
-
shift-expression
{ ( "<"
| ">"
| "<="
| ">="
)
shift-expression
}
- shift-expression:
-
additive-expression
{ ( "<<"
| ">>"
)
additive-expression
}
- additive-expression:
-
multiplicative-expression
{ ( "+"
| "-"
)
multiplicative-expression
}
- multiplicative-expression:
-
cast-expression
{ ( "*"
| "/"
| "%"
)
cast-expression
}
- cast-expression:
-
unary-expression
|
"("
type-name
")"
cast-expression
- unary-expression:
-
postfix-expression
|
( "++"
| "--"
)
unary-expression
|
unary-operator
cast-expression
|
"sizeof"
unary-expression
|
"sizeof"
"("
type-name
")"
|
"_Alignof"
"("
type-name
")"
- postfix-expression:
-
primary-expression
|
postfix-expression
"["
expression
"]"
|
postfix-expression
"("
[ argument-expression-list
]
")"
|
postfix-expression
( "."
| "->"
)
identifier
|
postfix-expression
( "++"
| "--"
)
|
"("
type-name
")"
"{"
initializer-list
[ ","
]
"}"
- unary-operator:
-
"&"
|
"*"
|
"+"
|
"-"
|
"~"
|
"!"
- primary-expression:
-
identifier
|
constant
|
string
|
"("
expression
")"
|
generic-selection
- argument-expression-list:
-
assignment-expression
{ ","
assignment-expression
}
- constant:
-
integer-constant
|
character-constant
|
floating-constant
|
enumeration-constant
- string:
-
string-literal
|
"__func__"
- generic-selection:
-
"_Generic"
"("
assignment-expression
","
generic-assoc-list
")"
- generic-assoc-list:
-
generic-association
{ ","
generic-association
}
- generic-association:
-
type-name
":"
assignment-expression
|
"default"
":"
assignment-expression
- designation:
-
designator-list
"="
- designator-list:
-
designator
{ designator
}
- designator:
-
"["
constant-expression
"]"
|
"."
identifier
- statement:
-
labeled-statement
|
compound-statement
|
expression-statement
|
selection-statement
|
iteration-statement
|
jump-statement
- labeled-statement:
-
identifier
":"
statement
|
"case"
constant-expression
":"
statement
|
"default"
":"
statement
- expression-statement:
-
[ expression
]
";"
- selection-statement:
-
"if"
"("
expression
")"
statement
"else"
statement
|
"if"
"("
expression
")"
statement
|
"switch"
"("
expression
")"
statement
- iteration-statement:
-
"while"
"("
expression
")"
statement
|
"do"
statement
"while"
"("
expression
")"
";"
|
"for"
"("
[ expression
]
";"
[ expression
]
";"
[ expression
]
")"
statement
|
"for"
"("
declaration
[ expression
]
";"
[ expression
]
")"
statement
- jump-statement:
-
"goto"
identifier
";"
|
"continue"
";"
|
"break"
";"
|
"return"
[ expression
]
";"