<源函数> → <外部声明> | <源程序> <外部声明>
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
<参数声明> → <说明符声明><标识符>
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
<语句列表> → <语句> | <语句列表> <语句>
statement_listà statement | statement_list statement
<语句> | <复合语句> | <表达式语句> | <选择语句> | <循环语句> |<跳转语句>
Statement à | compound_statement | expression_statement | selection_statement | iteration_statement | jump_statement
<表达式语句> → <表达式;>
expression_statement à ';' | expression ';'
<选择语句> : < IF(表达式)语句> | < IF(表达式)语句 > < ELSE 语句>
selection_statement : IF '(' expression ')' statement | IF '(' expression ')' statement ELSE statement
<循环语句> → < WHILE(表达式)语句> | < FOR(表达式语句表达式语句)语句> | < FOR(表达式语句表达式语句表达式)语句>
iteration_statementà WHILE '(' expression ')' statement
| FOR '(' expression_statement expression_statement ')' statement
| FOR '(' expression_statement expression_statement expression ')' statement
<跳转语句> | <continue;> |<breack;> | <return;> | <return 表达式; >
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
<基本表达式> → <标识符> | <常量> | <字符串> | <(表达式)>
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
<结构体或共用体> : <结构体> | <共同体>
struct_or_union : STRUCT | UNION
<结构体声明列表> : <结构体声明> | <结构体声明列表> <结构体声明>
struct_declaration_list : struct_declaration | struct_declaration_list struct_declaration
<结构体声明> : <说明符限定符列表> <结构体声明列表;>
struct_declaration : specifier_qualifier_list struct_declarator_list ';'