Changeset 5e25953 for src/Parser
- Timestamp:
- Mar 15, 2021, 2:06:06 PM (4 years ago)
- Branches:
- ADT, arm-eh, ast-experimental, enum, forall-pointer-decay, jacob/cs343-translation, master, new-ast-unique-expr, pthread-emulation, qualifiedEnum
- Children:
- ea837e94
- Parents:
- fcd01432
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/Parser/parser.yy
rfcd01432 r5e25953 10 10 // Created On : Sat Sep 1 20:22:55 2001 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Fri Mar 12 15:21:02202113 // Update Count : 47 2812 // Last Modified On : Mon Mar 15 13:34:17 2021 13 // Update Count : 4740 14 14 // 15 15 … … 1030 1030 { $$ = new StatementNode( build_compound( (StatementNode *)0 ) ); } 1031 1031 | '{' push 1032 local_label_declaration_opt // GCC, local labels 1032 local_label_declaration_opt // GCC, local labels appear at start of block 1033 1033 statement_decl_list // C99, intermix declarations and statements 1034 1034 pop '}' … … 1779 1779 type_qualifier: 1780 1780 type_qualifier_name 1781 | attribute 1781 | attribute // trick handles most atrribute locations 1782 1782 ; 1783 1783 … … 2649 2649 } 2650 2650 | ASM '(' string_literal ')' ';' // GCC, global assembler statement 2651 { 2652 $$ = DeclarationNode::newAsmStmt( new StatementNode( build_asm( false, $3, 0 ) ) ); 2653 } 2651 { $$ = DeclarationNode::newAsmStmt( new StatementNode( build_asm( false, $3, 0 ) ) ); } 2654 2652 | EXTERN STRINGliteral // C++-style linkage specifier 2655 2653 { … … 2864 2862 // declaring an array of functions versus a pointer to an array of functions. 2865 2863 2864 paren_identifier: 2865 identifier 2866 { $$ = DeclarationNode::newName( $1 ); } 2867 | '(' paren_identifier ')' // redundant parenthesis 2868 { $$ = $2; } 2869 ; 2870 2866 2871 variable_declarator: 2867 2872 paren_identifier attribute_list_opt … … 2874 2879 ; 2875 2880 2876 paren_identifier:2877 identifier2878 { $$ = DeclarationNode::newName( $1 ); }2879 | '(' paren_identifier ')' // redundant parenthesis2880 { $$ = $2; }2881 ;2882 2883 2881 variable_ptr: 2884 2882 ptrref_operator variable_declarator … … 2886 2884 | ptrref_operator type_qualifier_list variable_declarator 2887 2885 { $$ = $3->addPointer( DeclarationNode::newPointer( $2, $1 ) ); } 2888 | '(' variable_ptr ')' attribute_list_opt 2889 { $$ = $2->addQualifiers( $4 ); } // redundant parenthesis 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 ); } 2890 2890 ; 2891 2891 … … 2895 2895 | '(' variable_ptr ')' array_dimension 2896 2896 { $$ = $2->addArray( $4 ); } 2897 | '(' variable_array ')' multi_array_dimension // redundant parenthesis 2897 | '(' attribute_list variable_ptr ')' array_dimension 2898 { $$ = $3->addQualifiers( $2 )->addArray( $5 ); } 2899 | '(' variable_array ')' multi_array_dimension // redundant parenthesis 2898 2900 { $$ = $2->addArray( $4 ); } 2901 | '(' attribute_list variable_array ')' multi_array_dimension // redundant parenthesis 2902 { $$ = $3->addQualifiers( $2 )->addArray( $5 ); } 2899 2903 | '(' variable_array ')' // redundant parenthesis 2900 2904 { $$ = $2; } 2905 | '(' attribute_list variable_array ')' // redundant parenthesis 2906 { $$ = $3->addQualifiers( $2 ); } 2901 2907 ; 2902 2908 … … 2904 2910 '(' variable_ptr ')' '(' push parameter_type_list_opt pop ')' // empty parameter list OBSOLESCENT (see 3) 2905 2911 { $$ = $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 ); } 2906 2914 | '(' variable_function ')' // redundant parenthesis 2907 2915 { $$ = $2; } 2916 | '(' attribute_list variable_function ')' // redundant parenthesis 2917 { $$ = $3->addQualifiers( $2 ); } 2908 2918 ; 2909 2919 … … 2925 2935 | '(' function_ptr ')' '(' push parameter_type_list_opt pop ')' 2926 2936 { $$ = $2->addParamList( $6 ); } 2937 | '(' attribute_list function_ptr ')' '(' push parameter_type_list_opt pop ')' 2938 { $$ = $3->addQualifiers( $2 )->addParamList( $7 ); } 2927 2939 | '(' function_no_ptr ')' // redundant parenthesis 2928 2940 { $$ = $2; } 2941 | '(' attribute_list function_no_ptr ')' // redundant parenthesis 2942 { $$ = $3->addQualifiers( $2 ); } 2929 2943 ; 2930 2944 … … 2934 2948 | ptrref_operator type_qualifier_list function_declarator 2935 2949 { $$ = $3->addPointer( DeclarationNode::newPointer( $2, $1 ) ); } 2936 | '(' function_ptr ')' 2937 { $$ = $2; } 2950 | '(' function_ptr ')' attribute_list_opt 2951 { $$ = $2->addQualifiers( $4 ); } 2952 | '(' attribute_list function_ptr ')' attribute_list_opt 2953 { $$ = $3->addQualifiers( $2 )->addQualifiers( $5 ); } 2938 2954 ; 2939 2955 … … 2941 2957 '(' function_ptr ')' array_dimension 2942 2958 { $$ = $2->addArray( $4 ); } 2959 | '(' attribute_list function_ptr ')' array_dimension 2960 { $$ = $3->addQualifiers( $2 )->addArray( $5 ); } 2943 2961 | '(' function_array ')' multi_array_dimension // redundant parenthesis 2944 2962 { $$ = $2->addArray( $4 ); } 2963 | '(' attribute_list function_array ')' multi_array_dimension // redundant parenthesis 2964 { $$ = $3->addQualifiers( $2 )->addArray( $5 ); } 2945 2965 | '(' function_array ')' // redundant parenthesis 2946 2966 { $$ = $2; } 2967 | '(' attribute_list function_array ')' // redundant parenthesis 2968 { $$ = $3->addQualifiers( $2 ); } 2947 2969 ; 2948 2970 … … 2965 2987 | '(' KR_function_ptr ')' '(' push parameter_type_list_opt pop ')' 2966 2988 { $$ = $2->addParamList( $6 ); } 2989 | '(' attribute_list KR_function_ptr ')' '(' push parameter_type_list_opt pop ')' 2990 { $$ = $3->addQualifiers( $2 )->addParamList( $7 ); } 2967 2991 | '(' KR_function_no_ptr ')' // redundant parenthesis 2968 2992 { $$ = $2; } 2993 | '(' attribute_list KR_function_no_ptr ')' // redundant parenthesis 2994 { $$ = $3->addQualifiers( $2 ); } 2969 2995 ; 2970 2996 … … 2976 3002 | '(' KR_function_ptr ')' 2977 3003 { $$ = $2; } 3004 | '(' attribute_list KR_function_ptr ')' 3005 { $$ = $3->addQualifiers( $2 ); } 2978 3006 ; 2979 3007 … … 2981 3009 '(' KR_function_ptr ')' array_dimension 2982 3010 { $$ = $2->addArray( $4 ); } 3011 | '(' attribute_list KR_function_ptr ')' array_dimension 3012 { $$ = $3->addQualifiers( $2 )->addArray( $5 ); } 2983 3013 | '(' KR_function_array ')' multi_array_dimension // redundant parenthesis 2984 3014 { $$ = $2->addArray( $4 ); } 3015 | '(' attribute_list KR_function_array ')' multi_array_dimension // redundant parenthesis 3016 { $$ = $3->addQualifiers( $2 )->addArray( $5 ); } 2985 3017 | '(' KR_function_array ')' // redundant parenthesis 2986 3018 { $$ = $2; } 3019 | '(' attribute_list KR_function_array ')' // redundant parenthesis 3020 { $$ = $3->addQualifiers( $2 ); } 2987 3021 ; 2988 3022 … … 2996 3030 // The pattern precludes declaring an array of functions versus a pointer to an array of functions, and returning arrays 2997 3031 // 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 ; 2998 3046 2999 3047 variable_type_redeclarator: … … 3007 3055 ; 3008 3056 3009 paren_type:3010 typedef3011 // hide type name in enclosing scope by variable name3012 {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 // } // if3018 }3019 | '(' paren_type ')'3020 { $$ = $2; }3021 ;3022 3023 3057 type_ptr: 3024 3058 ptrref_operator variable_type_redeclarator … … 3026 3060 | ptrref_operator type_qualifier_list variable_type_redeclarator 3027 3061 { $$ = $3->addPointer( DeclarationNode::newPointer( $2, $1 ) ); } 3028 | '(' type_ptr ')' attribute_list_opt 3029 { $$ = $2->addQualifiers( $4 ); } // redundant parenthesis 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 ); } 3030 3066 ; 3031 3067 … … 3035 3071 | '(' type_ptr ')' array_dimension 3036 3072 { $$ = $2->addArray( $4 ); } 3073 | '(' attribute_list type_ptr ')' array_dimension 3074 { $$ = $3->addQualifiers( $2 )->addArray( $5 ); } 3037 3075 | '(' type_array ')' multi_array_dimension // redundant parenthesis 3038 3076 { $$ = $2->addArray( $4 ); } 3077 | '(' attribute_list type_array ')' multi_array_dimension // redundant parenthesis 3078 { $$ = $3->addQualifiers( $2 )->addArray( $5 ); } 3039 3079 | '(' type_array ')' // redundant parenthesis 3040 3080 { $$ = $2; } 3081 | '(' attribute_list type_array ')' // redundant parenthesis 3082 { $$ = $3->addQualifiers( $2 ); } 3041 3083 ; 3042 3084 … … 3046 3088 | '(' type_ptr ')' '(' push parameter_type_list_opt pop ')' // empty parameter list OBSOLESCENT (see 3) 3047 3089 { $$ = $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 ); } 3048 3092 | '(' type_function ')' // redundant parenthesis 3049 3093 { $$ = $2; } 3094 | '(' attribute_list type_function ')' // redundant parenthesis 3095 { $$ = $3->addQualifiers( $2 ); } 3050 3096 ; 3051 3097 … … 3072 3118 | ptrref_operator type_qualifier_list identifier_parameter_declarator 3073 3119 { $$ = $3->addPointer( DeclarationNode::newPointer( $2, $1 ) ); } 3074 | '(' identifier_parameter_ptr ')' attribute_list_opt 3120 | '(' identifier_parameter_ptr ')' attribute_list_opt // redundant parenthesis 3075 3121 { $$ = $2->addQualifiers( $4 ); } 3076 3122 ; … … 3129 3175 | ptrref_operator type_qualifier_list type_parameter_redeclarator 3130 3176 { $$ = $3->addPointer( DeclarationNode::newPointer( $2, $1 ) ); } 3131 | '(' type_parameter_ptr ')' attribute_list_opt 3177 | '(' type_parameter_ptr ')' attribute_list_opt // redundant parenthesis 3132 3178 { $$ = $2->addQualifiers( $4 ); } 3133 3179 ; … … 3270 3316 | ptrref_operator type_qualifier_list abstract_parameter_declarator 3271 3317 { $$ = $3->addPointer( DeclarationNode::newPointer( $2, $1 ) ); } 3272 | '(' abstract_parameter_ptr ')' attribute_list_opt 3318 | '(' abstract_parameter_ptr ')' attribute_list_opt // redundant parenthesis 3273 3319 { $$ = $2->addQualifiers( $4 ); } 3274 3320 ; … … 3349 3395 | ptrref_operator type_qualifier_list variable_abstract_declarator 3350 3396 { $$ = $3->addPointer( DeclarationNode::newPointer( $2, $1 ) ); } 3351 | '(' variable_abstract_ptr ')' attribute_list_opt 3397 | '(' variable_abstract_ptr ')' attribute_list_opt // redundant parenthesis 3352 3398 { $$ = $2->addQualifiers( $4 ); } 3353 3399 ;
Note: See TracChangeset
for help on using the changeset viewer.