源程式〉-〉<外部聲明>|<源程式><外部聲明>
<外部聲明>-><定義函數>|<聲明>
<函數定義>→<類型說明符> <聲明符> <複合語句>
<說明符類型>→<無傳回型> | <字元型> | <整型> | <浮點型>
<聲明符> <指針> <直接聲明符> | <直接聲明符>
<指針>→<'*'> | <'*' 指針>
<直接聲明符> <辨別符> | <直接聲明>[]| <直接聲明><[常量表達式]> | <辨別符>(參數表) | <辨別符>() | <直接聲明>,< 辨別符清單>
<辨別符清單>:<辨別符> | <辨別符清單>,<辨別符>
<常量表達式>→<條件表達式>
<參數清單>→<參數聲明> | <參數清單>,<參數聲明>
<參數聲明>→<說明符聲明>< 辨別符>
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'(' 表達式 ')'語句 條件語句
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
邏輯或表達→邏輯與表達 | 邏輯或表達 或運算邏輯表達式
: inclusive_or_expression
| logical_and_expression AND_OP inclusive_or_expression
邏輯與表達:或表達式 | 邏輯表達式 和運算或表達式
inclusive_or_expression→
exclusive_or_expression
| inclusive_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
| unary_operator cast_expression
| SIZEOF unary_expression
| SIZEOF '(' type_name ')'
一進制表達式:字尾表達式 | INC運算一進制表達式 | DEC運算一進制表達式 | 一進制運算符将表達式 | 結構體變量的一進制表達式 | 結構體變量的'(' 類型名稱 ')'
postfix_expression →
: primary_expression
| postfix_expression '[' expression ']'
| postfix_expression '(' ')'
| postfix_expression '(' argument_expression_list ')'
| postfix_expression '.' IDENTIFIER
| postfix_expression PTR_OP IDENTIFIER
| postfix_expression INC_OP
| postfix_expression DEC_OP
字尾表達式:基本表達式 | 字尾表達式'['表達式']' | 字尾表達式'(' ') | 字尾表達式 '('參數表達式清單')' | 字尾表達式'.' 辨別符 | 字尾表達式指針運算辨別符 | 字尾表達式INC運算 | 字尾表達式DEC運算
primary_expression →
IDENTIFIER
| CONSTANT
| STRING_LITERAL
| '(' expression ')'
基本表達式→辨別符 | 常量 | 字元串常量 | '('表達式')'
argument_expression_list
| 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
指派運算符→'=' | 乘法配置設定 | DIV配置設定 | MOD配置設定 | 加法配置設定 | SUB配置設定 | 左配置設定 | 右配置設定 | 與配置設定 | 異或配置設定 | 或配置設定
storage_class_specifier →
TYPEDEF
| EXTERN
| STATIC
| AUTO
| REGISTER
存儲類說明符→定義類型 | 外部變量 | 靜态 | 自動 | 寄存器
struct_or_union_specifier
: struct_or_union IDENTIFIER '{' struct_declaration_list '}'
| struct_or_union '{' struct_declaration_list '}'
| struct_or_union IDENTIFIER
結構或聯合說明符:結構或聯合辨別符'{'結構體聲明清單'}' | 結構或聯合'{'結構體聲明清單'}' | 結構或聯合辨別符
struct_or_union
: STRUCT
| UNION
結構或聯合:結構體 | 聯合
struct_declaration_list
: struct_declaration
| struct_declaration_list struct_declaration
結構體聲明清單:結構體聲明 | 結構體聲明結構體聲明清單
struct_declaration
: specifier_qualifier_list struct_declarator_list ';'
specifier_qualifier_list →
type_specifier specifier_qualifier_list
| type_specifier
| type_qualifier specifier_qualifier_list
| type_qualifier
結構體聲明:說明符限定符清單結構說明符';'說明符→類型說明符說明符限定符清單 | 類型說明符 | 類型限定符說明符限定符清單 | 類型限定符
struct_declarator_list →
struct_declarator
| struct_declarator_list ',' struct_declarator
結構說明符清單→結構體聲明 | 結構說明符清單','結構體聲明
struct_declarator →
: declarator
| ':' constant_expression
| declarator ':' constant_expression
結構體聲明→:聲明 | ':'常量表達式 | 聲明':'常量表達式
enum_specifier →
ENUM '{' enumerator_list '}'
| ENUM IDENTIFIER '{' enumerator_list '}'
| ENUM IDENTIFIER
枚舉聲明→枚舉'{'枚舉器清單'}' | 枚舉辨別符'{'枚舉器清單'}' | 枚舉辨別符
enumerator_list →
enumerator
| enumerator_list ',' enumerator
枚舉器清單→枚舉器 | 枚舉器清單','枚舉器
Enumerator →
| IDENTIFIER '=' constant_expression
枚舉器→辨別符 | 辨別符'='常量表達式
type_qualifier →
CONST
| VOLATILE
類型限定符→常量 | 易失的
type_qualifier_list →
type_qualifier
| type_qualifier_list type_qualifier
類型限定符清單→類型限定符 | 類型限定符清單 類型限定符
parameter_type_list →
parameter_list
| parameter_list ',' ELLIPSIS
參數類型清單→參數清單 | 參數清單','省略符号
parameter_list →
: parameter_declaration
| parameter_list ',' parameter_declaration
參數清單→:聲明參數 | 參數清單','聲明參數