天天看點

C語言文法

源程式〉-〉<外部聲明>|<源程式><外部聲明>

<外部聲明>-><定義函數>|<聲明>

<函數定義>→<類型說明符> <聲明符> <複合語句>

<說明符類型>→<無傳回型> | <字元型> | <整型> | <浮點型>

<聲明符> <指針> <直接聲明符> | <直接聲明符>

<指針>→<'*'> | <'*' 指針>

<直接聲明符> <辨別符> | <直接聲明>[]| <直接聲明><[常量表達式]> | <辨別符>(參數表) | <辨別符>() | <直接聲明>,< 辨別符清單>

<辨別符清單>:<辨別符> | <辨別符清單>,<辨別符>

<常量表達式>→<條件表達式>

<參數清單>→<參數聲明> | <參數清單>,<參數聲明>

<參數聲明>→<說明符聲明>< 辨別符>

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

參數清單→:聲明參數 | 參數清單','聲明參數

上一篇: 0909
下一篇: 1112評論