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
參數列 引數宣告
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 à
declaratory //宣告符
| 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
iteration_statementà //迴圈語句
WHILE '(' expression ')' statement
| FOR '(' expression_statement expression_statement ')' statement
| FOR '(' expression_statement expression_statement expression ')' statement
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
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 ')' //型別名稱
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
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
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
| 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
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