C语言文法(BNF)

C语言文法巴克斯范式(BNF)

 

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
 
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

参考网页:

C语言文法 - Flowersea - 博客园

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Alexabc3000

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值