Changes in src/Parser/parser.yy [b048dc3:2f0a0678]
- File:
-
- 1 edited
-
src/Parser/parser.yy (modified) (31 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/Parser/parser.yy
rb048dc3 r2f0a0678 10 10 // Created On : Sat Sep 1 20:22:55 2001 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : T hu May 24 18:11:59201813 // Update Count : 33 6912 // Last Modified On : Tue May 22 08:41:57 2018 13 // Update Count : 3353 14 14 // 15 15 … … 837 837 // '[' push assignment_expression pop ']' 838 838 // { $$ = new ExpressionNode( build_tuple( $3 ) ); } 839 '[' push ',' tuple_expression_list pop']'840 { $$ = new ExpressionNode( build_tuple( (ExpressionNode *)(new ExpressionNode( nullptr ) )->set_last( $ 4) ) ); }841 | '[' push assignment_expression ',' tuple_expression_list pop']'842 { $$ = new ExpressionNode( build_tuple( (ExpressionNode *)$ 3->set_last( $5) ) ); }839 '[' ',' tuple_expression_list ']' 840 { $$ = new ExpressionNode( build_tuple( (ExpressionNode *)(new ExpressionNode( nullptr ) )->set_last( $3 ) ) ); } 841 | '[' assignment_expression ',' tuple_expression_list ']' 842 { $$ = new ExpressionNode( build_tuple( (ExpressionNode *)$2->set_last( $4 ) ) ); } 843 843 ; 844 844 … … 866 866 labeled_statement 867 867 | compound_statement 868 | expression_statement 868 | expression_statement { $$ = $1; } 869 869 | selection_statement 870 870 | iteration_statement … … 1183 1183 type_specifier_nobody 1184 1184 | type_specifier_nobody declarator 1185 { $$ = $2->addType( $1 ); } 1185 { 1186 $$ = $2->addType( $1 ); 1187 } 1186 1188 | type_specifier_nobody variable_abstract_declarator 1187 1189 { $$ = $2->addType( $1 ); } 1188 1190 | cfa_abstract_declarator_tuple no_attr_identifier // CFA 1189 { $$ = $1->addName( $2 ); } 1191 { 1192 $$ = $1->addName( $2 ); 1193 } 1190 1194 | cfa_abstract_declarator_tuple // CFA 1191 1195 ; … … 1265 1269 1266 1270 declaration_list_opt: // used at beginning of switch statement 1267 pop // empty1271 pop 1268 1272 { $$ = nullptr; } 1269 1273 | declaration_list … … 1300 1304 1301 1305 local_label_list: // GCC, local label 1302 no_attr_identifier_or_type_name 1303 | local_label_list ',' no_attr_identifier_or_type_name 1306 no_attr_identifier_or_type_name {} 1307 | local_label_list ',' no_attr_identifier_or_type_name {} 1304 1308 ; 1305 1309 … … 1396 1400 // type_specifier can resolve to just TYPEDEFname (e.g., typedef int T; int f( T );). Therefore this must be 1397 1401 // flattened to allow lookahead to the '(' without having to reduce identifier_or_type_name. 1398 cfa_abstract_tuple identifier_or_type_name '(' push cfa_parameter_type_list_opt pop')'1402 cfa_abstract_tuple identifier_or_type_name '(' cfa_parameter_type_list_opt ')' 1399 1403 // To obtain LR(1 ), this rule must be factored out from function return type (see cfa_abstract_declarator). 1400 { $$ = DeclarationNode::newFunction( $2, $1, $ 5, 0 ); }1401 | cfa_function_return identifier_or_type_name '(' push cfa_parameter_type_list_opt pop')'1402 { $$ = DeclarationNode::newFunction( $2, $1, $ 5, 0 ); }1404 { $$ = DeclarationNode::newFunction( $2, $1, $4, 0 ); } 1405 | cfa_function_return identifier_or_type_name '(' cfa_parameter_type_list_opt ')' 1406 { $$ = DeclarationNode::newFunction( $2, $1, $4, 0 ); } 1403 1407 ; 1404 1408 1405 1409 cfa_function_return: // CFA 1406 '[' push cfa_parameter_list pop ']' 1407 { $$ = DeclarationNode::newTuple( $3 ); } 1408 | '[' push cfa_parameter_list pop ',' push cfa_abstract_parameter_list pop ']' 1409 // To obtain LR(1 ), the last cfa_abstract_parameter_list is added into this flattened rule to lookahead to the ']'. 1410 { $$ = DeclarationNode::newTuple( $3->appendList( $7 ) ); } 1410 '[' cfa_parameter_list ']' 1411 { $$ = DeclarationNode::newTuple( $2 ); } 1412 | '[' cfa_parameter_list ',' cfa_abstract_parameter_list ']' 1413 // To obtain LR(1 ), the last cfa_abstract_parameter_list is added into this flattened rule to lookahead to the 1414 // ']'. 1415 { $$ = DeclarationNode::newTuple( $2->appendList( $4 ) ); } 1411 1416 ; 1412 1417 … … 1582 1587 1583 1588 forall: 1584 FORALL '(' push type_parameter_list pop ')' // CFA 1585 { $$ = DeclarationNode::newForall( $4 ); } 1589 FORALL '(' 1590 { 1591 typedefTable.enterScope(); 1592 } 1593 type_parameter_list ')' // CFA 1594 { 1595 typedefTable.leaveScope(); 1596 $$ = DeclarationNode::newForall( $4 ); 1597 } 1586 1598 ; 1587 1599 … … 1958 1970 | cfa_abstract_parameter_list 1959 1971 | cfa_parameter_list 1960 | cfa_parameter_list pop ',' pushcfa_abstract_parameter_list1961 { $$ = $1->appendList( $ 5); }1962 | cfa_abstract_parameter_list pop ',' pushELLIPSIS1972 | cfa_parameter_list ',' cfa_abstract_parameter_list 1973 { $$ = $1->appendList( $3 ); } 1974 | cfa_abstract_parameter_list ',' ELLIPSIS 1963 1975 { $$ = $1->addVarArgs(); } 1964 | cfa_parameter_list pop ',' pushELLIPSIS1976 | cfa_parameter_list ',' ELLIPSIS 1965 1977 { $$ = $1->addVarArgs(); } 1966 1978 ; … … 1970 1982 // factored out from cfa_parameter_list, flattening the rules to get lookahead to the ']'. 1971 1983 cfa_parameter_declaration 1972 | cfa_abstract_parameter_list pop ',' pushcfa_parameter_declaration1973 { $$ = $1->appendList( $ 5); }1974 | cfa_parameter_list pop ',' pushcfa_parameter_declaration1975 { $$ = $1->appendList( $ 5); }1976 | cfa_parameter_list pop ',' push cfa_abstract_parameter_list pop ',' pushcfa_parameter_declaration1977 { $$ = $1->appendList( $ 5 )->appendList( $9); }1984 | cfa_abstract_parameter_list ',' cfa_parameter_declaration 1985 { $$ = $1->appendList( $3 ); } 1986 | cfa_parameter_list ',' cfa_parameter_declaration 1987 { $$ = $1->appendList( $3 ); } 1988 | cfa_parameter_list ',' cfa_abstract_parameter_list ',' cfa_parameter_declaration 1989 { $$ = $1->appendList( $3 )->appendList( $5 ); } 1978 1990 ; 1979 1991 1980 1992 cfa_abstract_parameter_list: // CFA, new & old style abstract 1981 1993 cfa_abstract_parameter_declaration 1982 | cfa_abstract_parameter_list pop ',' pushcfa_abstract_parameter_declaration1983 { $$ = $1->appendList( $ 5); }1994 | cfa_abstract_parameter_list ',' cfa_abstract_parameter_declaration 1995 { $$ = $1->appendList( $3 ); } 1984 1996 ; 1985 1997 … … 2130 2142 '.' no_attr_identifier // C99, field name 2131 2143 { $$ = new ExpressionNode( build_varref( $2 ) ); } 2132 | '[' push assignment_expression pop ']'// C99, single array element2144 | '[' assignment_expression ']' // C99, single array element 2133 2145 // assignment_expression used instead of constant_expression because of shift/reduce conflicts with tuple. 2146 { $$ = $2; } 2147 | '[' subrange ']' // CFA, multiple array elements 2148 { $$ = $2; } 2149 | '[' constant_expression ELLIPSIS constant_expression ']' // GCC, multiple array elements 2150 { $$ = new ExpressionNode( new RangeExpr( maybeMoveBuild< Expression >( $2 ), maybeMoveBuild< Expression >( $4 ) ) ); } 2151 | '.' '[' field_list ']' // CFA, tuple field selector 2134 2152 { $$ = $3; } 2135 | '[' push subrange pop ']' // CFA, multiple array elements2136 { $$ = $3; }2137 | '[' push constant_expression ELLIPSIS constant_expression pop ']' // GCC, multiple array elements2138 { $$ = new ExpressionNode( new RangeExpr( maybeMoveBuild< Expression >( $3 ), maybeMoveBuild< Expression >( $5 ) ) ); }2139 | '.' '[' push field_list pop ']' // CFA, tuple field selector2140 { $$ = $4; }2141 2153 ; 2142 2154 … … 2257 2269 TRAIT no_attr_identifier_or_type_name '(' push type_parameter_list pop ')' '{' '}' 2258 2270 { $$ = DeclarationNode::newTrait( $2, $5, 0 ); } 2259 | TRAIT no_attr_identifier_or_type_name '(' push type_parameter_list pop ')' '{' push trait_declaration_list '}' 2271 | TRAIT no_attr_identifier_or_type_name '(' push type_parameter_list pop ')' '{' 2272 { typedefTable.enterScope(); } 2273 trait_declaration_list '}' 2260 2274 { $$ = DeclarationNode::newTrait( $2, $5, $10 ); } 2261 2275 ; … … 2274 2288 cfa_trait_declaring_list: // CFA 2275 2289 cfa_variable_specifier 2290 { $$ = $1; } 2276 2291 | cfa_function_specifier 2292 { $$ = $1; } 2277 2293 | cfa_trait_declaring_list pop ',' push identifier_or_type_name 2278 2294 { $$ = $1->appendList( $1->cloneType( $5 ) ); } … … 2333 2349 } 2334 2350 | type_qualifier_list 2335 { if ( $1->type->forall ) xxx = forall = true; } // remember generic type 2351 { 2352 if ( $1->type->forall ) xxx = forall = true; // remember generic type 2353 } 2336 2354 push '{' external_definition_list '}' // CFA, namespace 2337 2355 { … … 2346 2364 } 2347 2365 | declaration_qualifier_list 2348 { if ( $1->type->forall ) xxx = forall = true; } // remember generic type 2366 { 2367 if ( $1->type->forall ) xxx = forall = true; // remember generic type 2368 } 2349 2369 push '{' external_definition_list '}' // CFA, namespace 2350 2370 { … … 2386 2406 // declaration must still have a type_specifier. OBSOLESCENT (see 1) 2387 2407 | function_declarator compound_statement 2388 { $$ = $1->addFunctionBody( $2 ); } 2408 { 2409 typedefTable.leaveScope(); 2410 $$ = $1->addFunctionBody( $2 ); 2411 } 2389 2412 | KR_function_declarator KR_declaration_list_opt compound_statement 2390 { $$ = $1->addOldDeclList( $2 )->addFunctionBody( $3 ); } 2413 { 2414 typedefTable.leaveScope(); 2415 $$ = $1->addOldDeclList( $2 )->addFunctionBody( $3 ); 2416 } 2391 2417 ; 2392 2418 … … 2401 2427 cfa_function_declaration with_clause_opt compound_statement // CFA 2402 2428 { 2429 typedefTable.leaveScope(); 2403 2430 // Add the function body to the last identifier in the function definition list, i.e., foo3: 2404 2431 // [const double] foo1(), foo2( int ), foo3( double ) { return 3.0; } … … 2409 2436 { 2410 2437 rebindForall( $1, $2 ); 2438 typedefTable.leaveScope(); 2411 2439 $$ = $2->addFunctionBody( $4, $3 )->addType( $1 ); 2412 2440 } … … 2414 2442 { 2415 2443 rebindForall( $1, $2 ); 2444 typedefTable.leaveScope(); 2416 2445 $$ = $2->addFunctionBody( $4, $3 )->addType( $1 ); 2417 2446 } 2418 2447 // handles default int return type, OBSOLESCENT (see 1) 2419 2448 | type_qualifier_list function_declarator with_clause_opt compound_statement 2420 { $$ = $2->addFunctionBody( $4, $3 )->addQualifiers( $1 ); } 2449 { 2450 typedefTable.leaveScope(); 2451 $$ = $2->addFunctionBody( $4, $3 )->addQualifiers( $1 ); 2452 } 2421 2453 // handles default int return type, OBSOLESCENT (see 1) 2422 2454 | declaration_qualifier_list function_declarator with_clause_opt compound_statement 2423 { $$ = $2->addFunctionBody( $4, $3 )->addQualifiers( $1 ); } 2455 { 2456 typedefTable.leaveScope(); 2457 $$ = $2->addFunctionBody( $4, $3 )->addQualifiers( $1 ); 2458 } 2424 2459 // handles default int return type, OBSOLESCENT (see 1) 2425 2460 | declaration_qualifier_list type_qualifier_list function_declarator with_clause_opt compound_statement 2426 { $$ = $3->addFunctionBody( $5, $4 )->addQualifiers( $2 )->addQualifiers( $1 ); } 2461 { 2462 typedefTable.leaveScope(); 2463 $$ = $3->addFunctionBody( $5, $4 )->addQualifiers( $2 )->addQualifiers( $1 ); 2464 } 2427 2465 2428 2466 // Old-style K&R function definition, OBSOLESCENT (see 4) … … 2430 2468 { 2431 2469 rebindForall( $1, $2 ); 2470 typedefTable.leaveScope(); 2432 2471 $$ = $2->addOldDeclList( $3 )->addFunctionBody( $5, $4 )->addType( $1 ); 2433 2472 } 2434 2473 // handles default int return type, OBSOLESCENT (see 1) 2435 2474 | type_qualifier_list KR_function_declarator KR_declaration_list_opt with_clause_opt compound_statement 2436 { $$ = $2->addOldDeclList( $3 )->addFunctionBody( $5, $4 )->addQualifiers( $1 ); } 2475 { 2476 typedefTable.leaveScope(); 2477 $$ = $2->addOldDeclList( $3 )->addFunctionBody( $5, $4 )->addQualifiers( $1 ); 2478 } 2437 2479 // handles default int return type, OBSOLESCENT (see 1) 2438 2480 | declaration_qualifier_list KR_function_declarator KR_declaration_list_opt with_clause_opt compound_statement 2439 { $$ = $2->addOldDeclList( $3 )->addFunctionBody( $5, $4 )->addQualifiers( $1 ); } 2481 { 2482 typedefTable.leaveScope(); 2483 $$ = $2->addOldDeclList( $3 )->addFunctionBody( $5, $4 )->addQualifiers( $1 ); 2484 } 2440 2485 // handles default int return type, OBSOLESCENT (see 1) 2441 2486 | declaration_qualifier_list type_qualifier_list KR_function_declarator KR_declaration_list_opt with_clause_opt compound_statement 2442 { $$ = $3->addOldDeclList( $4 )->addFunctionBody( $6, $5 )->addQualifiers( $2 )->addQualifiers( $1 ); } 2487 { 2488 typedefTable.leaveScope(); 2489 $$ = $3->addOldDeclList( $4 )->addFunctionBody( $6, $5 )->addQualifiers( $2 )->addQualifiers( $1 ); 2490 } 2443 2491 ; 2444 2492 … … 2637 2685 paren_identifier '(' identifier_list ')' // function_declarator handles empty parameter 2638 2686 { $$ = $1->addIdList( $3 ); } 2639 | '(' KR_function_ptr ')' '(' p ush parameter_type_list_opt pop')'2640 { $$ = $2->addParamList( $ 6); }2687 | '(' KR_function_ptr ')' '(' parameter_type_list_opt ')' 2688 { $$ = $2->addParamList( $5 ); } 2641 2689 | '(' KR_function_no_ptr ')' // redundant parenthesis 2642 2690 { $$ = $2; } … … 2756 2804 2757 2805 identifier_parameter_function: 2758 paren_identifier '(' p ush parameter_type_list_opt pop ')'// empty parameter list OBSOLESCENT (see 3)2759 { $$ = $1->addParamList( $ 4); }2760 | '(' identifier_parameter_ptr ')' '(' p ush parameter_type_list_opt pop')' // empty parameter list OBSOLESCENT (see 3)2761 { $$ = $2->addParamList( $ 6); }2806 paren_identifier '(' parameter_type_list_opt ')' // empty parameter list OBSOLESCENT (see 3) 2807 { $$ = $1->addParamList( $3 ); } 2808 | '(' identifier_parameter_ptr ')' '(' parameter_type_list_opt ')' // empty parameter list OBSOLESCENT (see 3) 2809 { $$ = $2->addParamList( $5 ); } 2762 2810 | '(' identifier_parameter_function ')' // redundant parenthesis 2763 2811 { $$ = $2; } … … 2809 2857 2810 2858 type_parameter_function: 2811 typedef '(' p ush parameter_type_list_opt pop ')'// empty parameter list OBSOLESCENT (see 3)2812 { $$ = $1->addParamList( $ 4); }2813 | '(' type_parameter_ptr ')' '(' p ush parameter_type_list_opt pop')' // empty parameter list OBSOLESCENT (see 3)2814 { $$ = $2->addParamList( $ 6); }2859 typedef '(' parameter_type_list_opt ')' // empty parameter list OBSOLESCENT (see 3) 2860 { $$ = $1->addParamList( $3 ); } 2861 | '(' type_parameter_ptr ')' '(' parameter_type_list_opt ')' // empty parameter list OBSOLESCENT (see 3) 2862 { $$ = $2->addParamList( $5 ); } 2815 2863 ; 2816 2864 … … 2859 2907 2860 2908 abstract_function: 2861 '(' p ush parameter_type_list_opt pop ')'// empty parameter list OBSOLESCENT (see 3)2862 { $$ = DeclarationNode::newFunction( nullptr, nullptr, $ 3, nullptr ); }2863 | '(' abstract_ptr ')' '(' p ush parameter_type_list_opt pop')' // empty parameter list OBSOLESCENT (see 3)2864 { $$ = $2->addParamList( $ 6); }2909 '(' parameter_type_list_opt ')' // empty parameter list OBSOLESCENT (see 3) 2910 { $$ = DeclarationNode::newFunction( nullptr, nullptr, $2, nullptr ); } 2911 | '(' abstract_ptr ')' '(' parameter_type_list_opt ')' // empty parameter list OBSOLESCENT (see 3) 2912 { $$ = $2->addParamList( $5 ); } 2865 2913 | '(' abstract_function ')' // redundant parenthesis 2866 2914 { $$ = $2; } … … 2877 2925 2878 2926 multi_array_dimension: 2879 '[' push assignment_expression pop']'2880 { $$ = DeclarationNode::newArray( $ 3, 0, false ); }2881 | '[' push '*' pop ']'// C992927 '[' assignment_expression ']' 2928 { $$ = DeclarationNode::newArray( $2, 0, false ); } 2929 | '[' '*' ']' // C99 2882 2930 { $$ = DeclarationNode::newVarArray( 0 ); } 2883 | multi_array_dimension '[' push assignment_expression pop']'2884 { $$ = $1->addArray( DeclarationNode::newArray( $ 4, 0, false ) ); }2885 | multi_array_dimension '[' push '*' pop ']'// C992931 | multi_array_dimension '[' assignment_expression ']' 2932 { $$ = $1->addArray( DeclarationNode::newArray( $3, 0, false ) ); } 2933 | multi_array_dimension '[' '*' ']' // C99 2886 2934 { $$ = $1->addArray( DeclarationNode::newVarArray( 0 ) ); } 2887 2935 ; … … 2950 2998 2951 2999 abstract_parameter_function: 2952 '(' p ush parameter_type_list_opt pop ')'// empty parameter list OBSOLESCENT (see 3)2953 { $$ = DeclarationNode::newFunction( nullptr, nullptr, $ 3, nullptr ); }2954 | '(' abstract_parameter_ptr ')' '(' p ush parameter_type_list_opt pop')' // empty parameter list OBSOLESCENT (see 3)2955 { $$ = $2->addParamList( $ 6); }3000 '(' parameter_type_list_opt ')' // empty parameter list OBSOLESCENT (see 3) 3001 { $$ = DeclarationNode::newFunction( nullptr, nullptr, $2, nullptr ); } 3002 | '(' abstract_parameter_ptr ')' '(' parameter_type_list_opt ')' // empty parameter list OBSOLESCENT (see 3) 3003 { $$ = $2->addParamList( $5 ); } 2956 3004 | '(' abstract_parameter_function ')' // redundant parenthesis 2957 3005 { $$ = $2; } … … 2975 3023 { $$ = DeclarationNode::newArray( 0, 0, false ); } 2976 3024 // multi_array_dimension handles the '[' '*' ']' case 2977 | '[' push type_qualifier_list '*' pop ']'// remaining C992978 { $$ = DeclarationNode::newVarArray( $ 3); }2979 | '[' push type_qualifier_list pop']'2980 { $$ = DeclarationNode::newArray( 0, $ 3, false ); }3025 | '[' type_qualifier_list '*' ']' // remaining C99 3026 { $$ = DeclarationNode::newVarArray( $2 ); } 3027 | '[' type_qualifier_list ']' 3028 { $$ = DeclarationNode::newArray( 0, $2, false ); } 2981 3029 // multi_array_dimension handles the '[' assignment_expression ']' case 2982 | '[' push type_qualifier_list assignment_expression pop']'2983 { $$ = DeclarationNode::newArray( $ 4, $3, false ); }2984 | '[' push STATIC type_qualifier_list_opt assignment_expression pop']'2985 { $$ = DeclarationNode::newArray( $ 5, $4, true ); }2986 | '[' push type_qualifier_list STATIC assignment_expression pop']'2987 { $$ = DeclarationNode::newArray( $ 5, $3, true ); }3030 | '[' type_qualifier_list assignment_expression ']' 3031 { $$ = DeclarationNode::newArray( $3, $2, false ); } 3032 | '[' STATIC type_qualifier_list_opt assignment_expression ']' 3033 { $$ = DeclarationNode::newArray( $4, $3, true ); } 3034 | '[' type_qualifier_list STATIC assignment_expression ']' 3035 { $$ = DeclarationNode::newArray( $4, $2, true ); } 2988 3036 ; 2989 3037 … … 3029 3077 3030 3078 variable_abstract_function: 3031 '(' variable_abstract_ptr ')' '(' p ush parameter_type_list_opt pop')' // empty parameter list OBSOLESCENT (see 3)3032 { $$ = $2->addParamList( $ 6); }3079 '(' variable_abstract_ptr ')' '(' parameter_type_list_opt ')' // empty parameter list OBSOLESCENT (see 3) 3080 { $$ = $2->addParamList( $5 ); } 3033 3081 | '(' variable_abstract_function ')' // redundant parenthesis 3034 3082 { $$ = $2; } … … 3093 3141 3094 3142 cfa_array_parameter_1st_dimension: 3095 '[' push type_qualifier_list '*' pop ']'// remaining C993096 { $$ = DeclarationNode::newVarArray( $ 3); }3097 | '[' push type_qualifier_list assignment_expression pop']'3098 { $$ = DeclarationNode::newArray( $ 4, $3, false ); }3099 | '[' push declaration_qualifier_list assignment_expression pop']'3143 '[' type_qualifier_list '*' ']' // remaining C99 3144 { $$ = DeclarationNode::newVarArray( $2 ); } 3145 | '[' type_qualifier_list assignment_expression ']' 3146 { $$ = DeclarationNode::newArray( $3, $2, false ); } 3147 | '[' declaration_qualifier_list assignment_expression ']' 3100 3148 // declaration_qualifier_list must be used because of shift/reduce conflict with 3101 3149 // assignment_expression, so a semantic check is necessary to preclude them as a type_qualifier cannot 3102 3150 // appear in this context. 3103 { $$ = DeclarationNode::newArray( $ 4, $3, true ); }3104 | '[' push declaration_qualifier_list type_qualifier_list assignment_expression pop']'3105 { $$ = DeclarationNode::newArray( $ 5, $4->addQualifiers( $3 ), true ); }3151 { $$ = DeclarationNode::newArray( $3, $2, true ); } 3152 | '[' declaration_qualifier_list type_qualifier_list assignment_expression ']' 3153 { $$ = DeclarationNode::newArray( $4, $3->addQualifiers( $3 ), true ); } 3106 3154 ; 3107 3155 … … 3172 3220 3173 3221 cfa_abstract_tuple: // CFA 3174 '[' push cfa_abstract_parameter_list pop']'3175 { $$ = DeclarationNode::newTuple( $ 3); }3222 '[' cfa_abstract_parameter_list ']' 3223 { $$ = DeclarationNode::newTuple( $2 ); } 3176 3224 ; 3177 3225 … … 3179 3227 // '[' ']' '(' cfa_parameter_type_list_opt ')' 3180 3228 // { $$ = DeclarationNode::newFunction( nullptr, DeclarationNode::newTuple( nullptr ), $4, nullptr ); } 3181 cfa_abstract_tuple '(' push cfa_parameter_type_list_opt pop')'3182 { $$ = DeclarationNode::newFunction( nullptr, $1, $ 4, nullptr ); }3183 | cfa_function_return '(' push cfa_parameter_type_list_opt pop')'3184 { $$ = DeclarationNode::newFunction( nullptr, $1, $ 4, nullptr ); }3229 cfa_abstract_tuple '(' cfa_parameter_type_list_opt ')' 3230 { $$ = DeclarationNode::newFunction( nullptr, $1, $3, nullptr ); } 3231 | cfa_function_return '(' cfa_parameter_type_list_opt ')' 3232 { $$ = DeclarationNode::newFunction( nullptr, $1, $3, nullptr ); } 3185 3233 ; 3186 3234
Note:
See TracChangeset
for help on using the changeset viewer.