C语言文法(BNF)

C语言文法的巴克斯范式(BNF):


program ::= external_declaration | program external_declaration


external_declaration ::= function_definition | declaration


function_definition ::= type_specifier declarator compound_statement


type_specifier ::= VOID | CHAR | INT | FLOAT


declarator ::= pointer direct_declarator | direct_declarator


pointer ::= '*' | '*' pointer


direct_declarator ::= IDENTIFIER | direct_declarator’[‘ ‘]’

| direct_declarator ’[’ constant_expression ’]’

| IDENTIFIER '(' parameter_list ')'

| IDENTIFIER '('')'

|direct_declarator‘,’identifier_list


identifier_list ::= IDENTIFIER | identifier_list ',' IDENTIFIER


constant_expression ::= conditional_expression


parameter_list ::= parameter_declaration

| parameter_list ',' parameter_declaration


parameter_declaration ::= declaration_specifiers IDENTIFIER


compound_statement ::= '{' '}' | '{' statement_list '}'

| '{' declaration_list statement_list '}'


declaration_list ::= declaration | declaration_list declaration


declaration ::= init_declarator | init_declarator_list ',' init_declarator


init_declarator ::= declarator | declarator '=' initializer


initializer ::= assignment_expression | '{' initializer_list '}'

| '{' initializer_list ',' '}'


initializer_list ::= initializer | initializer_list ',' initializer


statement_list ::= statement | statement_list statement


statement ::= compound_statement

| expression_statement

| selection_statement

| iteration_statement

| jump_statement


expression_statement ::= ';' | expression ';'


selection_statement ::= IF '(' expression ')' statement

| IF '(' expression ')' statement ELSE statement


iteration_statement ::= WHILE '(' expression ')' statement

| FOR '(' expression_statement expression_statement ')' statement

| FOR '(' expression_statement expression_statement expression ')' statement


jump_statement ::= CONTINUE ';' | BREAK ';' | RETURN ';' | RETURN expression ';'


expression ::= assignment_expression | expression ',' assignment_expression


assignment_expression ::= conditional_expression

| unary_expression assignment_operator assignment_expression


conditional_expression ::= logical_or_expression

| logical_or_expression '?' expression ':' conditional_expression


logical_or_expression ::= logical_and_expression

| logical_or_expression OR_OP logical_and_expression


logical_and_expression ::= inclusive_or_expression

| logical_and_expression AND_OP inclusive_or_expression


inclusive_or_expression ::= exclusive_or_expression

| inclusive_or_expression '|' exclusive_or_expression


exclusive_or_expression ::= and_expression

| exclusive_or_expression '^' and_expression


and_expression ::= equality_expression

| and_expression '&' equality_expression


equality_expression ::= relational_expression

| equality_expression EQ_OP relational_expression

| equality_expression NE_OP relational_expression


relational_expression ::= shift_expression

| relational_expression '<' shift_expression

| relational_expression '>' shift_expression

| relational_expression LE_OP shift_expression

| relational_expression GE_OP shift_expression


shift_expression ::= additive_expression

| shift_expression LEFT_OP additive_expression

| shift_expression RIGHT_OP additive_expression


additive_expression ::= multiplicative_expression

| additive_expression '+' multiplicative_expression

| additive_expression '-' multiplicative_expression


multiplicative_expression ::= cast_expression

| multiplicative_expression '*' cast_expression

| multiplicative_expression '/' cast_expression

| multiplicative_expression '%' cast_expression


cast_expression ::= unary_expression | '(' type_name ')' cast_expression


unary_expression ::= postfix_expression

| INC_OP unary_expression

| DEC_OP unary_expression

| unary_operator cast_expression

| SIZEOF unary_expression

| SIZEOF '(' type_name ')'


postfix_expression ::= primary_expression

| postfix_expression '[' expression ']'

| postfix_expression '(' ')'

| postfix_expression '(' argument_expression_list ')'

| postfix_expression '.' IDENTIFIER

| postfix_expression PTR_OP IDENTIFIER

| postfix_expression INC_OP

| postfix_expression DEC_OP


primary_expression ::= IDENTIFIER

| CONSTANT

| STRING_LITERAL

| '(' expression ')'


argument_expression_list ::= assignment_expression

| argument_expression_list ',' assignment_expression


unary_operator ::= '&'| '*'| '+'| '-'| '~'| '!'


assignment_operator ::= '='| MUL_ASSIGN| DIV_ASSIGN| MOD_ASSIGN| ADD_ASSIGN

| SUB_ASSIGN| LEFT_ASSIGN

| RIGHT_ASSIGN| AND_ASSIGN| XOR_ASSIGN| OR_ASSIGN


storage_class_specifier::= TYPEDEF| EXTERN| STATIC| AUTO| REGISTER


struct_or_union_specifier ::= struct_or_union IDENTIFIER '{' struct_declaration_list '}'

| struct_or_union '{' struct_declaration_list '}'

| struct_or_union IDENTIFIER


struct_or_union::=STRUCT| UNION


struct_declaration_list::=struct_declaration

| struct_declaration_list struct_declaration


struct_declaration::=specifier_qualifier_list struct_declarator_list ';'


specifier_qualifier_list::=type_specifier specifier_qualifier_list

| type_specifier

| type_qualifier specifier_qualifier_list

| type_qualifier


struct_declarator_list::=struct_declarator

| struct_declarator_list ',' struct_declarator


struct_declarator::= declarator

| ':' constant_expression

| declarator ':' constant_expression


enum_specifier::=ENUM '{' enumerator_list '}'

| ENUM IDENTIFIER '{' enumerator_list '}'

| ENUM IDENTIFIER


enumerator_list::=enumerator

| enumerator_list ',' enumerator


Enumerator::=IDENTIFIER

| IDENTIFIER '=' constant_expression


type_qualifier::=CONST | VOLATILE


type_qualifier_list::=type_qualifier | type_qualifier_list type_qualifier


parameter_type_list::=parameter_list | parameter_list ',' ELLIPSIS


parameter_list::=: parameter_declaration | parameter_list ',' parameter_declaration


type_name::=specifier_qualifier_list | specifier_qualifier_list abstract_declarator


abstract_declarator::=pointer | direct_abstract_declarator

| pointer direct_abstract_declarator


direct_abstract_declarator::='(' abstract_declarator ')'

| '[' ']'

| '[' constant_expression ']'

| direct_abstract_declarator '[' ']'

| direct_abstract_declarator '[' constant_expression ']'

| '(' ')'

| '(' parameter_type_list ')'

| direct_abstract_declarator '(' ')'

| direct_abstract_declarator '(' parameter_type_list ')'


labeled_statement::=IDENTIFIER ':' statement

| CASE constant_expression ':' statement

| DEFAULT ':' statement



参考网页:

https://www.cnblogs.com/baocong/p/9128725.html?share_token=96efc329-6611-43c3-a27a-1c01ba55fb13&tt_from=copy_link&utm_source=copy_link&utm_medium=toutiao_android&utm_campaign=client_share?=

文法   语言   BNF
发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章