Thanks to visit codestin.com
Credit goes to katef.github.io
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
]
";"