Program-
External_declaration
| Program External_declaration
< programs > < external declarations > | < programs > < external declarations >
External_declaration-Function_definition
| Declaration
< external declarations > < function definitions > | < statement >
Function_definition, Type_specifier declarator compound_statement
< function definition > < specifier type > < declaration > < Compound statement >
Type_specifier
VOID
| CHAR
| Int
| FLOAT
< Descriptor Types > < empty classes > | < character > | < floating-point >
Declarator
Pointer direct_declarator
| Direct_declarator
< declarations > < pointers > < direct specifiers > | < direct specifiers >
Pointerà
‘*‘
| ' * ' pointer
< hands > <*> | <* hands >
Direct_declarator
IDENTIFIER
|direct_declarator ' ['] '
|direct_declarator ' [' constant_expression '] '
| IDENTIFIER ' (' parameter_list ') '
| IDENTIFIER ' (') '
|direct_declarator ', ' identifier_list
< direct specifiers > < identifiers > | < direct specifier ' ['] ' > | < direct identifier ' [' constant expression '] ' > | < identifiers ' (' parameter list ') ' > | < identifiers ' (') ' > | < direct specifier '; ' Identification list >
Identifier_list
: IDENTIFIER
| Identifier_list ', ' identifier
< identification list > < identifiers > | < identification list '; ' Identifiers >
Constant_expressionà
Conditional_expression
< constant expression >-< constant expression >
Parameter_listà
Parameter_declaration
| Parameter_list ', ' parameter_declaration
< parameter list > < parameter declaration > | < parameter list '; ' parameter declaration >
Parameter_declarationà
Declaration_specifiers IDENTIFIER
< parameter declaration >->< ' descriptor ' declaration ' identifier ' >
Compound_statementà
‘{‘ ‘}‘
| ' {' Statement_list '} '
| ' {' Declaration_list statement_list '} '
< compound statement >-> < ' {'} ' > | < ' {' statement list '} ' > | < ' {' Declare ' statement list '} ' >
Declaration_listà
Declaration
| Declaration_list Declaration
< declarations _ list > < identifiers > | < identification list identifiers >
Declarationà
Init_declarator
| Init_declarator_list ', ' init_declarator
< identifiers > < initialize the identifier > |< initialize Identifiers ', ' Initialize identifiers >
Init_declaratorà
Declarator
| declarator ' = ' initializer
< initialization identifiers > < identifiers > | < identifier ' = ' initializer >
Initializerà
Assignment_expression
| ' {' Initializer_list '} '
| ' {' Initializer_list ', '} '
< initializers > < Assignment expressions > | < ' {' Initialize list '} ' > | < ' {' initialization list ', '} ' >
Initializer_listà
Initializer
| Initializer_list ', ' initializer
< initialization list > < initialize >| < initialize list ', ' initializer >
Statement_listà
Statement
| Statement_list statement
< statement Tables > < statements > | < statement table Statements >
Statementà
| Compound_statement
| Expression_statement
| Selection_statement
| Iteration_statement
| Jump_statement
< statements > |< compound statements > |< expression Statements >|< SELECT statements >|< iteration statements >|< jump statements >
Expression_statementà
‘;‘
| expression '; '
< expression statements >-< '; ' > |< expression '; ' >
Selection_statement
: IF ' (' expression ') ' statement
| IF ' (' expression ') ' statement ELSE statement
< SELECT 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
< 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
1029 C Language Grammar