Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/Parser/parser.yy

    r5e25953 r2d019af  
    1010// Created On       : Sat Sep  1 20:22:55 2001
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Mon Mar 15 13:34:17 2021
    13 // Update Count     : 4740
     12// Last Modified On : Fri Mar 12 15:21:02 2021
     13// Update Count     : 4728
    1414//
    1515
     
    10301030                { $$ = new StatementNode( build_compound( (StatementNode *)0 ) ); }
    10311031        | '{' push
    1032           local_label_declaration_opt                                           // GCC, local labels appear at start of block
     1032          local_label_declaration_opt                                           // GCC, local labels
    10331033          statement_decl_list                                                           // C99, intermix declarations and statements
    10341034          pop '}'
     
    17791779type_qualifier:
    17801780        type_qualifier_name
    1781         | attribute                                                                                     // trick handles most atrribute locations
     1781        | attribute
    17821782        ;
    17831783
     
    26492649                }
    26502650        | ASM '(' string_literal ')' ';'                                        // GCC, global assembler statement
    2651                 { $$ = DeclarationNode::newAsmStmt( new StatementNode( build_asm( false, $3, 0 ) ) ); }
     2651                {
     2652                        $$ = DeclarationNode::newAsmStmt( new StatementNode( build_asm( false, $3, 0 ) ) );
     2653                }
    26522654        | EXTERN STRINGliteral                                                          // C++-style linkage specifier
    26532655                {
     
    28622864// declaring an array of functions versus a pointer to an array of functions.
    28632865
    2864 paren_identifier:
    2865         identifier
    2866                 { $$ = DeclarationNode::newName( $1 ); }
    2867         | '(' paren_identifier ')'                                                      // redundant parenthesis
    2868                 { $$ = $2; }
    2869         ;
    2870 
    28712866variable_declarator:
    28722867        paren_identifier attribute_list_opt
     
    28792874        ;
    28802875
     2876paren_identifier:
     2877        identifier
     2878                { $$ = DeclarationNode::newName( $1 ); }
     2879        | '(' paren_identifier ')'                                                      // redundant parenthesis
     2880                { $$ = $2; }
     2881        ;
     2882
    28812883variable_ptr:
    28822884        ptrref_operator variable_declarator
     
    28842886        | ptrref_operator type_qualifier_list variable_declarator
    28852887                { $$ = $3->addPointer( DeclarationNode::newPointer( $2, $1 ) ); }
    2886         | '(' variable_ptr ')' attribute_list_opt                       // redundant parenthesis
    2887                 { $$ = $2->addQualifiers( $4 ); }
    2888         | '(' attribute_list variable_ptr ')' attribute_list_opt // redundant parenthesis
    2889                 { $$ = $3->addQualifiers( $2 )->addQualifiers( $5 ); }
     2888        | '(' variable_ptr ')' attribute_list_opt
     2889                { $$ = $2->addQualifiers( $4 ); }                               // redundant parenthesis
    28902890        ;
    28912891
     
    28952895        | '(' variable_ptr ')' array_dimension
    28962896                { $$ = $2->addArray( $4 ); }
    2897         | '(' attribute_list variable_ptr ')' array_dimension
    2898                 { $$ = $3->addQualifiers( $2 )->addArray( $5 ); }
    2899         | '(' variable_array ')' multi_array_dimension          // redundant parenthesis
     2897        | '(' variable_array ')' multi_array_dimension          // redundant parenthesis
    29002898                { $$ = $2->addArray( $4 ); }
    2901         | '(' attribute_list variable_array ')' multi_array_dimension // redundant parenthesis
    2902                 { $$ = $3->addQualifiers( $2 )->addArray( $5 ); }
    29032899        | '(' variable_array ')'                                                        // redundant parenthesis
    29042900                { $$ = $2; }
    2905         | '(' attribute_list variable_array ')'                         // redundant parenthesis
    2906                 { $$ = $3->addQualifiers( $2 ); }
    29072901        ;
    29082902
     
    29102904        '(' variable_ptr ')' '(' push parameter_type_list_opt pop ')' // empty parameter list OBSOLESCENT (see 3)
    29112905                { $$ = $2->addParamList( $6 ); }
    2912         | '(' attribute_list variable_ptr ')' '(' push parameter_type_list_opt pop ')' // empty parameter list OBSOLESCENT (see 3)
    2913                 { $$ = $3->addQualifiers( $2 )->addParamList( $7 ); }
    29142906        | '(' variable_function ')'                                                     // redundant parenthesis
    29152907                { $$ = $2; }
    2916         | '(' attribute_list variable_function ')'                      // redundant parenthesis
    2917                 { $$ = $3->addQualifiers( $2 ); }
    29182908        ;
    29192909
     
    29352925        | '(' function_ptr ')' '(' push parameter_type_list_opt pop ')'
    29362926                { $$ = $2->addParamList( $6 ); }
    2937         | '(' attribute_list function_ptr ')' '(' push parameter_type_list_opt pop ')'
    2938                 { $$ = $3->addQualifiers( $2 )->addParamList( $7 ); }
    29392927        | '(' function_no_ptr ')'                                                       // redundant parenthesis
    29402928                { $$ = $2; }
    2941         | '(' attribute_list function_no_ptr ')'                        // redundant parenthesis
    2942                 { $$ = $3->addQualifiers( $2 ); }
    29432929        ;
    29442930
     
    29482934        | ptrref_operator type_qualifier_list function_declarator
    29492935                { $$ = $3->addPointer( DeclarationNode::newPointer( $2, $1 ) ); }
    2950         | '(' function_ptr ')' attribute_list_opt
    2951                 { $$ = $2->addQualifiers( $4 ); }
    2952         | '(' attribute_list function_ptr ')' attribute_list_opt
    2953                 { $$ = $3->addQualifiers( $2 )->addQualifiers( $5 ); }
     2936        | '(' function_ptr ')'
     2937                { $$ = $2; }
    29542938        ;
    29552939
     
    29572941        '(' function_ptr ')' array_dimension
    29582942                { $$ = $2->addArray( $4 ); }
    2959         | '(' attribute_list function_ptr ')' array_dimension
    2960                 { $$ = $3->addQualifiers( $2 )->addArray( $5 ); }
    29612943        | '(' function_array ')' multi_array_dimension          // redundant parenthesis
    29622944                { $$ = $2->addArray( $4 ); }
    2963         | '(' attribute_list function_array ')' multi_array_dimension // redundant parenthesis
    2964                 { $$ = $3->addQualifiers( $2 )->addArray( $5 ); }
    29652945        | '(' function_array ')'                                                        // redundant parenthesis
    29662946                { $$ = $2; }
    2967         | '(' attribute_list function_array ')'                         // redundant parenthesis
    2968                 { $$ = $3->addQualifiers( $2 ); }
    29692947        ;
    29702948
     
    29872965        | '(' KR_function_ptr ')' '(' push parameter_type_list_opt pop ')'
    29882966                { $$ = $2->addParamList( $6 ); }
    2989         | '(' attribute_list KR_function_ptr ')' '(' push parameter_type_list_opt pop ')'
    2990                 { $$ = $3->addQualifiers( $2 )->addParamList( $7 ); }
    29912967        | '(' KR_function_no_ptr ')'                                            // redundant parenthesis
    29922968                { $$ = $2; }
    2993         | '(' attribute_list KR_function_no_ptr ')'                     // redundant parenthesis
    2994                 { $$ = $3->addQualifiers( $2 ); }
    29952969        ;
    29962970
     
    30022976        | '(' KR_function_ptr ')'
    30032977                { $$ = $2; }
    3004         | '(' attribute_list KR_function_ptr ')'
    3005                 { $$ = $3->addQualifiers( $2 ); }
    30062978        ;
    30072979
     
    30092981        '(' KR_function_ptr ')' array_dimension
    30102982                { $$ = $2->addArray( $4 ); }
    3011         | '(' attribute_list KR_function_ptr ')' array_dimension
    3012                 { $$ = $3->addQualifiers( $2 )->addArray( $5 ); }
    30132983        | '(' KR_function_array ')' multi_array_dimension       // redundant parenthesis
    30142984                { $$ = $2->addArray( $4 ); }
    3015         | '(' attribute_list KR_function_array ')' multi_array_dimension // redundant parenthesis
    3016                 { $$ = $3->addQualifiers( $2 )->addArray( $5 ); }
    30172985        | '(' KR_function_array ')'                                                     // redundant parenthesis
    30182986                { $$ = $2; }
    3019         | '(' attribute_list KR_function_array ')'                      // redundant parenthesis
    3020                 { $$ = $3->addQualifiers( $2 ); }
    30212987        ;
    30222988
     
    30302996// The pattern precludes declaring an array of functions versus a pointer to an array of functions, and returning arrays
    30312997// and functions versus pointers to arrays and functions.
    3032 
    3033 paren_type:
    3034         typedef
    3035                 // hide type name in enclosing scope by variable name
    3036                 {
    3037                         // if ( ! typedefTable.existsCurr( *$1->name ) ) {
    3038                                 typedefTable.addToEnclosingScope( *$1->name, IDENTIFIER, "ID" );
    3039                         // } else {
    3040                         //      SemanticError( yylloc, string("'") + *$1->name + "' redeclared as different kind of symbol." ); $$ = nullptr;
    3041                         // } // if
    3042                 }
    3043         | '(' paren_type ')'
    3044                 { $$ = $2; }
    3045         ;
    30462998
    30472999variable_type_redeclarator:
     
    30553007        ;
    30563008
     3009paren_type:
     3010        typedef
     3011                // hide type name in enclosing scope by variable name
     3012                {
     3013                        // if ( ! typedefTable.existsCurr( *$1->name ) ) {
     3014                                typedefTable.addToEnclosingScope( *$1->name, IDENTIFIER, "ID" );
     3015                        // } else {
     3016                        //      SemanticError( yylloc, string("'") + *$1->name + "' redeclared as different kind of symbol." ); $$ = nullptr;
     3017                        // } // if
     3018                }
     3019        | '(' paren_type ')'
     3020                { $$ = $2; }
     3021        ;
     3022
    30573023type_ptr:
    30583024        ptrref_operator variable_type_redeclarator
     
    30603026        | ptrref_operator type_qualifier_list variable_type_redeclarator
    30613027                { $$ = $3->addPointer( DeclarationNode::newPointer( $2, $1 ) ); }
    3062         | '(' type_ptr ')' attribute_list_opt                           // redundant parenthesis
    3063                 { $$ = $2->addQualifiers( $4 ); }
    3064         | '(' attribute_list type_ptr ')' attribute_list_opt // redundant parenthesis
    3065                 { $$ = $3->addQualifiers( $2 )->addQualifiers( $5 ); }
     3028        | '(' type_ptr ')' attribute_list_opt
     3029                { $$ = $2->addQualifiers( $4 ); }                               // redundant parenthesis
    30663030        ;
    30673031
     
    30713035        | '(' type_ptr ')' array_dimension
    30723036                { $$ = $2->addArray( $4 ); }
    3073         | '(' attribute_list type_ptr ')' array_dimension
    3074                 { $$ = $3->addQualifiers( $2 )->addArray( $5 ); }
    30753037        | '(' type_array ')' multi_array_dimension                      // redundant parenthesis
    30763038                { $$ = $2->addArray( $4 ); }
    3077         | '(' attribute_list type_array ')' multi_array_dimension // redundant parenthesis
    3078                 { $$ = $3->addQualifiers( $2 )->addArray( $5 ); }
    30793039        | '(' type_array ')'                                                            // redundant parenthesis
    30803040                { $$ = $2; }
    3081         | '(' attribute_list type_array ')'                                     // redundant parenthesis
    3082                 { $$ = $3->addQualifiers( $2 ); }
    30833041        ;
    30843042
     
    30883046        | '(' type_ptr ')' '(' push parameter_type_list_opt pop ')' // empty parameter list OBSOLESCENT (see 3)
    30893047                { $$ = $2->addParamList( $6 ); }
    3090         | '(' attribute_list type_ptr ')' '(' push parameter_type_list_opt pop ')' // empty parameter list OBSOLESCENT (see 3)
    3091                 { $$ = $3->addQualifiers( $2 )->addParamList( $7 ); }
    30923048        | '(' type_function ')'                                                         // redundant parenthesis
    30933049                { $$ = $2; }
    3094         | '(' attribute_list type_function ')'                          // redundant parenthesis
    3095                 { $$ = $3->addQualifiers( $2 ); }
    30963050        ;
    30973051
     
    31183072        | ptrref_operator type_qualifier_list identifier_parameter_declarator
    31193073                { $$ = $3->addPointer( DeclarationNode::newPointer( $2, $1 ) ); }
    3120         | '(' identifier_parameter_ptr ')' attribute_list_opt // redundant parenthesis
     3074        | '(' identifier_parameter_ptr ')' attribute_list_opt
    31213075                { $$ = $2->addQualifiers( $4 ); }
    31223076        ;
     
    31753129        | ptrref_operator type_qualifier_list type_parameter_redeclarator
    31763130                { $$ = $3->addPointer( DeclarationNode::newPointer( $2, $1 ) ); }
    3177         | '(' type_parameter_ptr ')' attribute_list_opt         // redundant parenthesis
     3131        | '(' type_parameter_ptr ')' attribute_list_opt
    31783132                { $$ = $2->addQualifiers( $4 ); }
    31793133        ;
     
    33163270        | ptrref_operator type_qualifier_list abstract_parameter_declarator
    33173271                { $$ = $3->addPointer( DeclarationNode::newPointer( $2, $1 ) ); }
    3318         | '(' abstract_parameter_ptr ')' attribute_list_opt     // redundant parenthesis
     3272        | '(' abstract_parameter_ptr ')' attribute_list_opt
    33193273                { $$ = $2->addQualifiers( $4 ); }
    33203274        ;
     
    33953349        | ptrref_operator type_qualifier_list variable_abstract_declarator
    33963350                { $$ = $3->addPointer( DeclarationNode::newPointer( $2, $1 ) ); }
    3397         | '(' variable_abstract_ptr ')' attribute_list_opt      // redundant parenthesis
     3351        | '(' variable_abstract_ptr ')' attribute_list_opt
    33983352                { $$ = $2->addQualifiers( $4 ); }
    33993353        ;
Note: See TracChangeset for help on using the changeset viewer.