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
包括或表達式à<唯一或表達式>|<包括或表達式><唯一或表達式>
