当前位置:编程学习 > C/C++ >>

深入浅出编译原理-1-C语言的文法

编译原理-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
     |

补充:软件开发 , C语言 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,