c语言的文法产生式代码实例
程序员文章站
2022-07-05 23:12:57
的文法产生式代码实例
programà
external_declaration
| program external_declaration
e...
的文法产生式代码实例
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