program →
external_declaration
| program external_declaration
<程式>→ <外部聲明>|<程式><外部聲明>
external_declaration →
function_definition
| declaration
<外部聲明>→ <函數定義>|<聲明>
function_definition à type_specifier declarator compound_statement
<函數定義>→ <類型說明><聲明符><複合語句>
type_specifier →
VOID
| CHAR
| INT
| FLOAT
<類型說明>→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
<參數清單>→<參數聲明>|參數清單’,’<參數聲明>
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‘(‘ 表達式 ‘)‘語句 ><
條件語句>
iteration_statement→
WHILE '(' expression ')' statement
| FOR '(' expression_statement
expression_statement ')' 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 →
| 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
<異或表達式>:<與表達式>|<異或表達式>‘^‘<與表達式>
: equality_expression
| and_expression '&'
equality_expression
<與表達式>:<相等表達式> |< 與表達式>‘&‘<相等表達式>
: relational_expression
| equality_expression EQ_OP
relational_expression
| equality_expression NE_OP
<相等表達式>:<關系表達式> |< 相等表達式等于運算關系表達式> |< 相等表達式不等于運算關系表達式>
: shift_expression
| relational_expression '<'
shift_expression
| relational_expression '>'
| relational_expression LE_OP
| relational_expression GE_OP
<關系表達式>:<移位表達式> |< 關系表達式'<'移位表達式> |< 關系表達式'>'移位表達式>|< 關系表達式等于運算移位表達式> |< 關系表達式不等于運算移位表達式>
: additive_expression
| shift_expression LEFT_OP
additive_expression
| shift_expression RIGHT_OP
<移位表達式>:<加法表達式> |< 移位表達式左運算加法表達式> | <移位表達式右運算加法表達式>
: multiplicative_expression
| additive_expression '+'
multiplicative_expression
| additive_expression '-'
<加法表達式>:<乘法表達式> |< 加法表達式‘+‘乘法表達式> |< 加法表達式‘-‘乘法表達式>
: cast_expression
| multiplicative_expression '*'
cast_expression
| multiplicative_expression '/'
| multiplicative_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 →
| CONSTANT
| STRING_LITERAL
| '(' expression ')'
<基本表達式→辨別符> | <常量> | <字元串常量> | < ‘(‘表達式‘)‘>
argument_expression_list
| argument_expression_list ','
<參數表達式清單>: <指派表達式> | <參數表達式清單‘,‘指派表達式>
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_or_union IDENTIFIER
<結構或聯合說明符>:<結構或聯合辨別符‘{‘結構體聲明清單‘}‘ > |< 結構或聯合‘{‘結構體聲明清單‘}‘ > | <結構或聯合辨別符>
struct_or_union
: STRUCT
| UNION
<結構或聯合>:<結構體> | <聯合>
struct_declaration_list
: struct_declaration
| struct_declaration_list
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
| 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_declaration
<參數清單>→:<聲明參數> |< 參數清單‘,‘聲明參數>
type_name →
specifier_qualifier_list
| specifier_qualifier_list
abstract_declarator
<類型名稱>→<限定說明符清單> | <限定符抽象說明符清單>
abstract_declarator →
pointer
| direct_abstract_declarator
| pointer direct_abstract_declarator
<抽象說明符>→<指針> | <直接抽象說明符> | <指針直接抽象說明符>
direct_abstract_declarator →
'('
abstract_declarator ')'
| '[' ']'
| '[' constant_expression ']'
| direct_abstract_declarator '[' ']'
| direct_abstract_declarator '['
constant_expression ']'
| '(' ')'
| '(' parameter_type_list ')'
| direct_abstract_declarator '(' ')'
| direct_abstract_declarator '('
parameter_type_list ')'
<直接抽象說明符>→ <‘(‘ 抽象說明符 ‘)‘ >| < ‘[‘ ‘]‘ | ‘[‘ 常量表達式‘]‘ >| <直接抽象說明符‘[‘ ‘]‘ >| <直接抽象說明符‘[‘ 常量表達式 ‘]‘ > | < ‘(‘ ‘)‘ >|< ‘(‘參數類型清單‘)‘ >|< 直接抽象說明符‘(‘ ‘)‘
>| <直接抽象說明符‘(‘參數類型清單‘)‘>
labeled_statement →
IDENTIFIER ':' statement
| CASE constant_expression ':' statement
| DEFAULT ':' statement
<有标号語句>→<辨別符‘:‘語句> | <CASE常量表達式‘:‘語句 > | < DEFAULT‘:‘語句>