• LL(1)文法


    文法如下:

    <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_program_list>-><initializer_program>| <initializer_program_list>< ','> <initializer_program>

    <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>-> <:>< '&'> | <'*'> | <'+'> | <'-'>| <'~'> | <'!'>

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

  • 相关阅读:
    Comet OJ CCPC-Wannafly Winter Camp Day1 (Div2, online mirror) F.爬爬爬山-最短路(Dijkstra)(两个板子)+思维(mdzz...) zhixincode
    Codeforces 1104 D. Game with modulo-交互题-二分-woshizhizhang(Codeforces Round #534 (Div. 2))
    POJ 1655.Balancing Act-树的重心(DFS) 模板(vector存图)
    Codeforces gym102058 J. Rising Sun-简单的计算几何+二分 (2018-2019 XIX Open Cup, Grand Prix of Korea (Division 2))
    BZOJ 3261: 最大异或和位置-贪心+可持久化01Trie树
    51nod 1295 XOR key-区间异或最大值-可持久化01Trie树(模板)
    BZOJ 2588: Spoj 10628. Count on a tree-可持久化线段树+LCA(点权)(树上的操作) 无语(为什么我的LCA的板子不对)
    Codeforces 1099 D. Sum in the tree-构造最小点权和有根树 贪心+DFS(Codeforces Round #530 (Div. 2))
    Codeforces 586D. Phillip and Trains 搜索
    Codeforces 734E. Anton and Tree 搜索
  • 原文地址:https://www.cnblogs.com/1940370572QQ/p/6139712.html
Copyright © 2020-2023  润新知