1029 C语言文法定义与C程序的推导过程


1 阅读并理解提供给大家的C语言文法文件。


2 参考该文件写出一个自己好理解版的现实版的完整版的C语言文法。


3 给出一段C程序,写出用上述文法产生这段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 有标号语句→标识符':'语句 | CASE常量表达式':'语句 | DEFAULT':'语句

2015-10-29
16:05:16

 

posted @ 2015-10-29 16:06  34黄冠锋  阅读(284)  评论(2编辑  收藏  举报