文法分析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
包括或表达式à<唯一或表达式>|<包括或表达式><唯一或表达式>