深入淺出編譯原理-1-C語言的文法

Rill發表於2012-06-29

編譯原理-1-C語言的文法

c語言的文法產生式:

 

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

相關文章