欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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