Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/Parser/parser.yy

    r4cc585b r936e9f4  
    1010// Created On       : Sat Sep  1 20:22:55 2001
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Sun Aug 20 09:21:54 2017
    13 // Update Count     : 2573
     12// Last Modified On : Wed Aug 16 18:09:14 2017
     13// Update Count     : 2485
    1414//
    1515
     
    131131%token ATTRIBUTE EXTENSION                                                              // GCC
    132132%token IF ELSE SWITCH CASE DEFAULT DO WHILE FOR BREAK CONTINUE GOTO RETURN
    133 %token CHOOSE DISABLE ENABLE FALLTHRU TRY CATCH CATCHRESUME FINALLY THROW THROWRESUME AT WITH // CFA
     133%token CHOOSE DISABLE ENABLE FALLTHRU TRY CATCH CATCHRESUME FINALLY THROW THROWRESUME AT WITH   // CFA
    134134%token ASM                                                                                              // C99, extension ISO/IEC 9899:1999 Section J.5.10(1)
    135135%token ALIGNAS ALIGNOF GENERIC STATICASSERT                             // C11
     
    796796
    797797selection_statement:
    798         IF '(' push if_control_expression ')' statement                         %prec THEN
     798        IF '(' if_control_expression ')' statement                              %prec THEN
    799799                // explicitly deal with the shift/reduce conflict on if/else
    800                 { $$ = new StatementNode( build_if( $4, $6, nullptr ) ); }
    801         | IF '(' push if_control_expression ')' statement ELSE statement
    802                 { $$ = new StatementNode( build_if( $4, $6, $8 ) ); }
    803         | SWITCH '(' comma_expression ')' case_clause
     800                { $$ = new StatementNode( build_if( $3, $5, nullptr ) ); }
     801        | IF '(' if_control_expression ')' statement ELSE statement
     802                { $$ = new StatementNode( build_if( $3, $5, $7 ) ); }
     803        | SWITCH '(' comma_expression ')' case_clause           // CFA
    804804                { $$ = new StatementNode( build_switch( $3, $5 ) ); }
    805805        | SWITCH '(' comma_expression ')' '{' push declaration_list_opt switch_clause_list_opt '}' // CFA
     
    823823
    824824if_control_expression:
    825         comma_expression pop
     825        comma_expression
    826826                { $$ = new IfCtl( nullptr, $1 ); }
    827         | c_declaration pop                                                                     // no semi-colon
     827        | c_declaration                                                                         // no semi-coln
    828828                { $$ = new IfCtl( $1, nullptr ); }
    829         | cfa_declaration pop                                                           // no semi-colon
     829        | cfa_declaration                                                                       // no semi-colon
    830830                { $$ = new IfCtl( $1, nullptr ); }
    831         | declaration comma_expression                                          // semi-colon separated
     831        | declaration comma_expression
    832832                { $$ = new IfCtl( $1, $2 ); }
    833833        ;
     
    11041104
    11051105KR_declaration_list_opt:                                                                // used to declare parameter types in K&R style functions
    1106         // empty
     1106        pop
    11071107                { $$ = nullptr; }
    11081108        | KR_declaration_list
     
    11101110
    11111111KR_declaration_list:
    1112         push c_declaration pop ';'
    1113                 { $$ = $2; }
    1114         | KR_declaration_list push c_declaration pop ';'
     1112        c_declaration ';'
     1113        | KR_declaration_list push c_declaration ';'
    11151114                { $$ = $1->appendList( $3 ); }
    11161115        ;
     
    11321131
    11331132declaration:                                                                                    // old & new style declarations
    1134         c_declaration pop ';'
    1135         | cfa_declaration pop ';'                                                       // CFA
     1133        c_declaration ';'
     1134        | cfa_declaration ';'                                                           // CFA
    11361135        ;
    11371136
     
    11481147
    11491148cfa_declaration:                                                                                // CFA
    1150         cfa_variable_declaration
    1151         | cfa_typedef_declaration
    1152         | cfa_function_declaration
    1153         | type_declaring_list
    1154         | trait_specifier
     1149        cfa_variable_declaration pop
     1150        | cfa_typedef_declaration pop
     1151        | cfa_function_declaration pop
     1152        | type_declaring_list pop
     1153        | trait_specifier pop
    11551154        ;
    11561155
     
    13521351
    13531352c_declaration:
    1354         declaration_specifier declaring_list
     1353        declaration_specifier declaring_list pop
    13551354                {
    13561355                        $$ = distAttr( $1, $2 );
    13571356                }
    1358         | typedef_declaration
    1359         | typedef_expression                                                            // GCC, naming expression type
    1360         | sue_declaration_specifier
     1357        | typedef_declaration pop
     1358        | typedef_expression pop                                                        // GCC, naming expression type
     1359        | sue_declaration_specifier pop
    13611360        ;
    13621361
     
    22312230                        $$ = $1->addFunctionBody( $2 );
    22322231                }
    2233         | KR_function_declarator KR_declaration_list_opt compound_statement
     2232        | KR_function_declarator push KR_declaration_list_opt compound_statement
    22342233                {
    22352234                        typedefTable.addToEnclosingScope( TypedefTable::ID );
    22362235                        typedefTable.leaveScope();
    2237                         $$ = $1->addOldDeclList( $2 )->addFunctionBody( $3 );
     2236                        $$ = $1->addOldDeclList( $3 )->addFunctionBody( $4 );
    22382237                }
    22392238        ;
     
    22792278
    22802279                // Old-style K&R function definition, OBSOLESCENT (see 4)
    2281         | declaration_specifier KR_function_declarator KR_declaration_list_opt with_clause_opt compound_statement
     2280        | declaration_specifier KR_function_declarator push KR_declaration_list_opt with_clause_opt compound_statement
    22822281                {
    22832282                        typedefTable.addToEnclosingScope( TypedefTable::ID );
    22842283                        typedefTable.leaveScope();
    2285                         $$ = $2->addOldDeclList( $3 )->addFunctionBody( $5 )->addType( $1 );
    2286                 }
    2287         | type_qualifier_list KR_function_declarator KR_declaration_list_opt with_clause_opt compound_statement
     2284                        $$ = $2->addOldDeclList( $4 )->addFunctionBody( $6 )->addType( $1 );
     2285                }
     2286        | type_qualifier_list KR_function_declarator push KR_declaration_list_opt with_clause_opt compound_statement
    22882287                {
    22892288                        typedefTable.addToEnclosingScope( TypedefTable::ID );
    22902289                        typedefTable.leaveScope();
    2291                         $$ = $2->addOldDeclList( $3 )->addFunctionBody( $5 )->addQualifiers( $1 );
     2290                        $$ = $2->addOldDeclList( $4 )->addFunctionBody( $6 )->addQualifiers( $1 );
    22922291                }
    22932292
    22942293                // Old-style K&R function definition with "implicit int" type_specifier, OBSOLESCENT (see 4)
    2295         | declaration_qualifier_list KR_function_declarator KR_declaration_list_opt with_clause_opt compound_statement
     2294        | declaration_qualifier_list KR_function_declarator push KR_declaration_list_opt with_clause_opt compound_statement
    22962295                {
    22972296                        typedefTable.addToEnclosingScope( TypedefTable::ID );
    22982297                        typedefTable.leaveScope();
    2299                         $$ = $2->addOldDeclList( $3 )->addFunctionBody( $5 )->addQualifiers( $1 );
    2300                 }
    2301         | declaration_qualifier_list type_qualifier_list KR_function_declarator KR_declaration_list_opt with_clause_opt compound_statement
     2298                        $$ = $2->addOldDeclList( $4 )->addFunctionBody( $6 )->addQualifiers( $1 );
     2299                }
     2300        | declaration_qualifier_list type_qualifier_list KR_function_declarator push KR_declaration_list_opt with_clause_opt compound_statement
    23022301                {
    23032302                        typedefTable.addToEnclosingScope( TypedefTable::ID );
    23042303                        typedefTable.leaveScope();
    2305                         $$ = $3->addOldDeclList( $4 )->addFunctionBody( $6 )->addQualifiers( $2 )->addQualifiers( $1 );
     2304                        $$ = $3->addOldDeclList( $5 )->addFunctionBody( $7 )->addQualifiers( $2 )->addQualifiers( $1 );
    23062305                }
    23072306        ;
Note: See TracChangeset for help on using the changeset viewer.