- translation_unit:
-
[ translation_unit
]
external_decl
- external_decl:
-
function_definition
|
decl
- function_definition:
-
[ decl_specs
]
declarator
[ decl_list
]
compound_stat
- decl_list:
-
[ decl_list
]
decl_specs
[ init_declarator_list
]
";"
- decl_specs:
-
( storage_class_spec
| type_spec
| type_qualifier
)
[ decl_specs
]
- storage_class_spec:
-
"auto"
|
"register"
|
"static"
|
"extern"
|
"typedef"
- type_spec:
-
"void"
|
"char"
|
"short"
|
"int"
|
"long"
|
"float"
|
"double"
|
"signed"
|
"unsigned"
|
struct_or_union_spec
|
enum_spec
|
typedef_name
- type_qualifier:
-
"const"
|
"volatile"
- struct_or_union_spec:
-
( "struct"
| "union"
)
( id
| [ id
]
"{"
struct_decl_list
"}"
)
- struct_decl_list:
-
[ struct_decl_list
]
spec_qualifier_list
struct_declarator_list
";"
- init_declarator_list:
-
[ init_declarator_list
","
]
declarator
[ "="
initializer
]
- spec_qualifier_list:
-
( type_spec
| type_qualifier
)
[ spec_qualifier_list
]
- struct_declarator_list:
-
[ struct_declarator_list
","
]
( declarator
| [ declarator
]
":"
const_exp
)
- enum_spec:
-
"enum"
( id
| [ id
]
"{"
enumerator_list
"}"
)
- enumerator_list:
-
[ enumerator_list
","
]
id
[ "="
const_exp
]
- declarator:
-
[ pointer
]
direct_declarator
- direct_declarator:
-
id
|
"("
declarator
")"
|
direct_declarator
"["
[ const_exp
]
"]"
|
direct_declarator
"("
[ param_type_list
| id_list
]
")"
- pointer:
-
"*"
[ type_qualifier_list
]
[ pointer
]
- type_qualifier_list:
-
[ type_qualifier_list
]
type_qualifier
- param_type_list:
-
param_list
[ ","
"..."
]
- param_list:
-
{ param_decl
","
}
param_decl
- param_decl:
-
decl_specs
[ declarator
| abstract_declarator
]
- id_list:
-
{ id
","
}
id
- initializer:
-
assignment_exp
|
"{"
initializer_list
"}"
|
"{"
initializer_list
","
"}"
- initializer_list:
-
{ initializer
","
}
initializer
- type_name:
-
spec_qualifier_list
[ abstract_declarator
]
- abstract_declarator:
-
pointer
|
pointer
direct_abstract_declarator
|
direct_abstract_declarator
- direct_abstract_declarator:
-
"("
abstract_declarator
")"
|
[ direct_abstract_declarator
]
( "["
const_exp
"]"
| "["
"]"
| "("
[ param_type_list
]
")"
)
- typedef_name:
-
id
- stat:
-
labeled_stat
|
exp_stat
|
compound_stat
|
selection_stat
|
iteration_stat
|
jump_stat
- labeled_stat:
-
( id
| "case"
| "default"
)
":"
stat
- exp_stat:
-
[ exp
]
";"
- compound_stat:
-
"{"
[ decl_list
]
[ stat_list
]
"}"
- stat_list:
-
{ stat
}
stat
- selection_stat:
-
"if"
"("
exp
")"
stat
[ "else"
stat
]
|
"switch"
"("
exp
")"
stat
- iteration_stat:
-
"while"
"("
exp
")"
stat
|
"do"
stat
"while"
"("
exp
")"
";"
|
"for"
"("
[ exp
]
";"
[ exp
]
";"
[ exp
]
")"
stat
- jump_stat:
-
"goto"
id
";"
|
"continue"
";"
|
"break"
";"
|
"return"
[ exp
]
";"
- exp:
-
[ exp
","
]
assignment_exp
- assignment_exp:
-
conditional_exp
|
unary_exp
assignment_operator
assignment_exp
- assignment_operator:
-
"="
|
"*="
|
"/="
|
"%="
|
"+="
|
"-="
|
"<<="
|
">>="
|
"&="
|
"^="
|
"|="
- conditional_exp:
-
logical_or_exp
[ "?"
exp
":"
conditional_exp
]
- const_exp:
-
conditional_exp
- logical_or_exp:
-
logical_and_exp
|
logical_or_exp
[ "||"
logical_and_exp
]
- logical_and_exp:
-
[ logical_and_exp
"&&"
]
inclusive_or_exp
- inclusive_or_exp:
-
[ inclusive_or_exp
"|"
]
exclusive_or_exp
- exclusive_or_exp:
-
[ exclusive_or_exp
"^"
]
and_exp
- and_exp:
-
[ and_exp
"&"
]
equality_exp
- equality_exp:
-
[ equality_exp
( "=="
| "!="
)
]
relational_exp
- relational_exp:
-
[ relational_exp
( "<"
| ">"
| "<="
| ">="
)
]
shift_expression
- shift_expression:
-
[ shift_expression
( "<<"
| ">>"
)
]
additive_exp
- additive_exp:
-
[ additive_exp
( "+"
| "-"
)
]
mult_exp
- mult_exp:
-
[ mult_exp
( "*"
| "/"
| "%"
)
]
cast_exp
- cast_exp:
-
unary_exp
|
"("
type_name
")"
cast_exp
- unary_exp:
-
postfix_exp
|
( "++"
| "--"
)
unary_exp
|
unary_operator
cast_exp
|
"sizeof"
( unary_exp
| "("
type_name
")"
)
- unary_operator:
-
"&"
|
"*"
|
"+"
|
"-"
|
"~"
|
"!"
- postfix_exp:
-
primary_exp
|
postfix_exp
"["
exp
"]"
|
postfix_exp
"("
[ argument_exp_list
]
")"
|
postfix_exp
( "."
| "->"
)
id
|
postfix_exp
( "++"
| "--"
)
- primary_exp:
-
id
|
const
|
string
|
"("
exp
")"
- argument_exp_list:
-
[ argument_exp_list
","
]
assignment_exp
- const:
-
int_const
|
char_const
|
float_const
|
enumeration_const