zoukankan      html  css  js  c++  java
  • 1029语言文法

    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 <‘(‘ 表达式 ‘)‘ 语句 ELSE 语句 >

    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‘:‘语句>

  • 相关阅读:
    HDU 6182 A Math Problem 水题
    HDU 6186 CS Course 位运算 思维
    HDU 6188 Duizi and Shunzi 贪心 思维
    HDU 2824 The Euler function 欧拉函数
    HDU 3037 Saving Beans 多重集合的结合 lucas定理
    HDU 3923 Invoker Polya定理
    FZU 2282 Wand 组合数学 错排公式
    HDU 1452 Happy 2004 数论
    HDU 5778 abs 数论
    欧拉回路【判断连通+度数为偶】
  • 原文地址:https://www.cnblogs.com/babys8023/p/4921115.html
Copyright © 2011-2022 走看看