Created
July 19, 2014 07:48
-
-
Save iamsile/29585c893ad2c9dcf1bb to your computer and use it in GitHub Desktop.
c language bnf
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
translation_unit : external_decl | |
| translation_unit external_decl | |
; | |
external_decl : function_definition | |
| decl | |
; | |
function_definition : decl_specs declarator decl_list compound_stat | |
| declarator decl_list compound_stat | |
| decl_specs declarator compound_stat | |
| declarator compound_stat | |
; | |
decl : decl_specs init_declarator_list ';' | |
| decl_specs ';' | |
; | |
decl_list : decl | |
| decl_list decl | |
; | |
decl_specs : storage_class_spec decl_specs | |
| storage_class_spec | |
| type_spec decl_specs | |
| type_spec | |
| type_qualifier decl_specs | |
| type_qualifier | |
; | |
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_or_union id '{' struct_decl_list '}' | |
| struct_or_union '{' struct_decl_list '}' | |
| struct_or_union id | |
; | |
struct_or_union : 'struct' | 'union' | |
; | |
struct_decl_list : struct_decl | |
| struct_decl_list struct_decl | |
; | |
init_declarator_list : init_declarator | |
| init_declarator_list ',' init_declarator | |
; | |
init_declarator : declarator | |
| declarator '=' initializer | |
; | |
struct_decl : spec_qualifier_list struct_declarator_list ';' | |
; | |
spec_qualifier_list : type_spec spec_qualifier_list | |
| type_spec | |
| type_qualifier spec_qualifier_list | |
| type_qualifier | |
; | |
struct_declarator_list : struct_declarator | |
| struct_declarator_list ',' struct_declarator | |
; | |
struct_declarator : declarator | |
| declarator ':' const_exp | |
| ':' const_exp | |
; | |
enum_spec : 'enum' id '{' enumerator_list '}' | |
| 'enum' '{' enumerator_list '}' | |
| 'enum' id | |
; | |
enumerator_list : enumerator | |
| enumerator_list ',' enumerator | |
; | |
enumerator : id | |
| id '=' const_exp | |
; | |
declarator : pointer direct_declarator | |
| direct_declarator | |
; | |
direct_declarator : id | |
| '(' declarator ')' | |
| direct_declarator '[' const_exp ']' | |
| direct_declarator '[' ']' | |
| direct_declarator '(' param_type_list ')' | |
| direct_declarator '(' id_list ')' | |
| direct_declarator '(' ')' | |
; | |
pointer : '*' type_qualifier_list | |
| '*' | |
| '*' type_qualifier_list pointer | |
| '*' pointer | |
; | |
type_qualifier_list : type_qualifier | |
| type_qualifier_list type_qualifier | |
; | |
param_type_list : param_list | |
| param_list ',' '...' | |
; | |
param_list : param_decl | |
| param_list ',' param_decl | |
; | |
param_decl : decl_specs declarator | |
| decl_specs abstract_declarator | |
| decl_specs | |
; | |
id_list : id | |
| id_list ',' id | |
; | |
initializer : assignment_exp | |
| '{' initializer_list '}' | |
| '{' initializer_list ',' '}' | |
; | |
initializer_list : initializer | |
| initializer_list ',' initializer | |
; | |
type_name : spec_qualifier_list abstract_declarator | |
| spec_qualifier_list | |
; | |
abstract_declarator : pointer | |
| pointer direct_abstract_declarator | |
| direct_abstract_declarator | |
; | |
direct_abstract_declarator: '(' abstract_declarator ')' | |
| direct_abstract_declarator '[' const_exp ']' | |
| '[' const_exp ']' | |
| direct_abstract_declarator '[' ']' | |
| '[' ']' | |
| direct_abstract_declarator '(' param_type_list ')' | |
| '(' param_type_list ')' | |
| direct_abstract_declarator '(' ')' | |
| '(' ')' | |
; | |
typedef_name : id | |
; | |
stat : labeled_stat | |
| exp_stat | |
| compound_stat | |
| selection_stat | |
| iteration_stat | |
| jump_stat | |
; | |
labeled_stat : id ':' stat | |
| 'case' const_exp ':' stat | |
| 'default' ':' stat | |
; | |
exp_stat : exp ';' | |
| ';' | |
; | |
compound_stat : '{' decl_list stat_list '}' | |
| '{' stat_list '}' | |
| '{' decl_list '}' | |
| '{' '}' | |
; | |
stat_list : stat | |
| stat_list stat | |
; | |
selection_stat : 'if' '(' exp ')' stat | |
| 'if' '(' exp ')' stat 'else' stat | |
| 'switch' '(' exp ')' stat | |
; | |
iteration_stat : 'while' '(' exp ')' stat | |
| 'do' stat 'while' '(' exp ')' ';' | |
| 'for' '(' exp ';' exp ';' exp ')' stat | |
| 'for' '(' exp ';' exp ';' ')' stat | |
| 'for' '(' exp ';' ';' exp ')' stat | |
| 'for' '(' exp ';' ';' ')' stat | |
| 'for' '(' ';' exp ';' exp ')' stat | |
| 'for' '(' ';' exp ';' ')' stat | |
| 'for' '(' ';' ';' exp ')' stat | |
| 'for' '(' ';' ';' ')' stat | |
; | |
jump_stat : 'goto' id ';' | |
| 'continue' ';' | |
| 'break' ';' | |
| 'return' exp ';' | |
| 'return' ';' | |
; | |
exp : assignment_exp | |
| exp ',' assignment_exp | |
; | |
assignment_exp : conditional_exp | |
| unary_exp assignment_operator assignment_exp | |
; | |
assignment_operator : '=' | '*=' | '/=' | '%=' | '+=' | '-=' | '<<=' | |
| '>>=' | '&=' | '^=' | '|=' | |
; | |
conditional_exp : logical_or_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 : inclusive_or_exp | |
| logical_and_exp '&&' inclusive_or_exp | |
; | |
inclusive_or_exp : exclusive_or_exp | |
| inclusive_or_exp '|' exclusive_or_exp | |
; | |
exclusive_or_exp : and_exp | |
| exclusive_or_exp '^' and_exp | |
; | |
and_exp : equality_exp | |
| and_exp '&' equality_exp | |
; | |
equality_exp : relational_exp | |
| equality_exp '==' relational_exp | |
| equality_exp '!=' relational_exp | |
; | |
relational_exp : shift_expression | |
| relational_exp '<' shift_expression | |
| relational_exp '>' shift_expression | |
| relational_exp '<=' shift_expression | |
| relational_exp '>=' shift_expression | |
; | |
shift_expression : additive_exp | |
| shift_expression '<<' additive_exp | |
| shift_expression '>>' additive_exp | |
; | |
additive_exp : mult_exp | |
| additive_exp '+' mult_exp | |
| additive_exp '-' mult_exp | |
; | |
mult_exp : cast_exp | |
| mult_exp '*' cast_exp | |
| mult_exp '/' cast_exp | |
| mult_exp '%' cast_exp | |
; | |
cast_exp : unary_exp | |
| '(' type_name ')' cast_exp | |
; | |
unary_exp : postfix_exp | |
| '++' unary_exp | |
| '--' unary_exp | |
| unary_operator cast_exp | |
| 'sizeof' unary_exp | |
| 'sizeof' '(' type_name ')' | |
; | |
unary_operator : '&' | '*' | '+' | '-' | '~' | '!' | |
; | |
postfix_exp : primary_exp | |
| postfix_exp '[' exp ']' | |
| postfix_exp '(' argument_exp_list ')' | |
| postfix_exp '(' ')' | |
| postfix_exp '.' id | |
| postfix_exp '->' id | |
| postfix_exp '++' | |
| postfix_exp '--' | |
; | |
primary_exp : id | |
| const | |
| string | |
| '(' exp ')' | |
; | |
argument_exp_list : assignment_exp | |
| argument_exp_list ',' assignment_exp | |
; | |
const : int_const | |
| char_const | |
| float_const | |
| enumeration_const | |
; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment