1029 C语言文法定义
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 à
????? ?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
<邏輯或表達> -> <邏輯與表達> ?| <邏輯或表達? 或運算邏輯表達式>
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 ')'
<一元表達式> :<后綴表達式> | 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
????? : 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
<賦值運算符> -> <‘=‘>? | <乘法分配> | <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
????? | 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
轉載于:https://www.cnblogs.com/Leey0917/p/4921546.html
總結
以上是生活随笔為你收集整理的1029 C语言文法定义的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 空间triangle和AABB的相交判定
- 下一篇: ios 地图