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