文法 分析 2

pro

gram à

       external_declaration

      | program external_declaration

程序-> <外部声明><程序><外部声明>

external_declaration à

      function_definition

      | declaration

      外部声明-> <函数定义>|<声明>

function_definition à type_specifier declarator compound_statement

函数定义-> <函数类型><说明符><复合语句>

type_specifier à

      VOID

      | CHAR

      | INT

      | FLOAT

函数类型-> 无返回值|字符型|整型|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

选择语句-> IF(<表达式>)<陈述语句>|IF(<表达式>)<陈述语句>ELSE<陈述语句>

iteration_statementà

       WHILE '(' expression ')' statement

      | FOR '(' expression_statement expression_statement ')' statement

      | FOR '(' expression_statement expression_statement expression ')' statement

循环语句->WHILE(<表达式>)<陈述语句>|FOR(<表达式语句><表达式语句>)<陈述语句>|FOR(<表达式语句><表达式语句><陈述语句>)<陈述语句>

jump_statement

      | CONTINUE ';'

      | BREAK ';'

      | RETURN ';'

      | RETURN expression ';'

转移语句->CONTINUE;| BREAK; | RETURN; | RETURN <表达式>;

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

包括或表达式à<唯一或表达式>|<包括或表达式><唯一或表达式>

原文地址:https://www.cnblogs.com/wsstzxwx/p/5089270.html