zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    1082 射击比赛 (20 分)
    1091 N-自守数 (15 分)
    1064 朋友数 (20 分)
    1031 查验身份证 (15 分)
    1028 人口普查 (20 分)
    1059 C语言竞赛 (20 分)
    1083 是否存在相等的差 (20 分)
    1077 互评成绩计算 (20 分)
    792. 高精度减法
    791. 高精度加法
  • 原文地址:https://www.cnblogs.com/hgf520/p/4920821.html
Copyright © 2011-2022 走看看