Changeset fb08280 for src/Parser/parser.yy
- Timestamp:
- Jun 8, 2016, 12:58:01 PM (10 years ago)
- Branches:
- ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, ctor, deferred_resn, demangler, enum, forall-pointer-decay, gc_noraii, jacob/cs343-translation, jenkins-sandbox, master, memory, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, resolv-new, with_gc
- Children:
- 9e5f409
- Parents:
- efbca69 (diff), ac78e25 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)links above to see all the changes relative to each parent. - File:
-
- 1 edited
-
src/Parser/parser.yy (modified) (17 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/Parser/parser.yy
refbca69 rfb08280 10 10 // Created On : Sat Sep 1 20:22:55 2001 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Apr 13 16:58:43201613 // Update Count : 15 1912 // Last Modified On : Tue Jun 7 08:08:31 2016 13 // Update Count : 1560 14 14 // 15 15 … … 106 106 %token ANDassign ERassign ORassign // &= ^= |= 107 107 108 %token ATassign // @=108 %token ATassign REFassign // @= := 109 109 110 110 // Types declaration … … 131 131 %type<constant> constant 132 132 %type<en> tuple tuple_expression_list 133 %type<en> unary_operator assignment_operator133 %type<en> ptrref_operator unary_operator assignment_operator 134 134 %type<en> primary_expression postfix_expression unary_expression 135 135 %type<en> cast_expression multiplicative_expression additive_expression shift_expression … … 423 423 unary_expression: 424 424 postfix_expression 425 // first location where constant/string can have operator applied: sizeof 3/sizeof "abc" 426 // still requires semanticschecks, e.g., ++3, 3--, *3, &&3425 // first location where constant/string can have operator applied: sizeof 3/sizeof "abc" still requires semantics 426 // checks, e.g., ++3, 3--, *3, &&3 427 427 | constant 428 428 { $$ = $1; } 429 429 | string_literal_list 430 430 { $$ = $1; } 431 | EXTENSION cast_expression // GCC 432 { $$ = $2; } 433 | ptrref_operator cast_expression // CFA 434 { $$ = new CompositeExprNode( $1, $2 ); } 435 // '*' ('&') is separated from unary_operator because of shift/reduce conflict in: 436 // { * X; } // dereference X 437 // { * int X; } // CFA declaration of pointer to int 438 | unary_operator cast_expression 439 { $$ = new CompositeExprNode( $1, $2 ); } 431 440 | ICR unary_expression 432 441 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Incr ), $2 ); } 433 442 | DECR unary_expression 434 443 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Decr ), $2 ); } 435 | EXTENSION cast_expression // GCC436 { $$ = $2; }437 | unary_operator cast_expression438 { $$ = new CompositeExprNode( $1, $2 ); }439 | '!' cast_expression440 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Neg ), $2 ); }441 | '*' cast_expression // CFA442 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::PointTo ), $2 ); }443 // '*' is is separated from unary_operator because of shift/reduce conflict in:444 // { * X; } // dereference X445 // { * int X; } // CFA declaration of pointer to int446 // '&' must be moved here if C++ reference variables are supported.447 444 | SIZEOF unary_expression 448 445 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::SizeOf ), $2 ); } … … 465 462 ; 466 463 464 ptrref_operator: 465 '*' { $$ = new OperatorNode( OperatorNode::PointTo ); } 466 | '&' { $$ = new OperatorNode( OperatorNode::AddressOf ); } 467 ; 468 467 469 unary_operator: 468 '&' { $$ = new OperatorNode( OperatorNode::AddressOf ); } 469 | '+' { $$ = new OperatorNode( OperatorNode::UnPlus ); } 470 '+' { $$ = new OperatorNode( OperatorNode::UnPlus ); } 470 471 | '-' { $$ = new OperatorNode( OperatorNode::UnMinus ); } 472 | '!' { $$ = new OperatorNode( OperatorNode::Neg ); } 471 473 | '~' { $$ = new OperatorNode( OperatorNode::BitNeg ); } 472 474 ; … … 575 577 | unary_expression '=' assignment_expression 576 578 { $$ =new CompositeExprNode( new OperatorNode( OperatorNode::Assign ), $1, $3 ); } 579 | unary_expression REFassign assignment_expression 580 { $$ =new CompositeExprNode( new OperatorNode( OperatorNode::Assign ), $1, $3 ); } // FIX ME 577 581 | unary_expression assignment_operator assignment_expression 578 582 { $$ =new CompositeExprNode( $2, $1, $3 ); } … … 2175 2179 2176 2180 variable_ptr: 2177 '*'variable_declarator2181 ptrref_operator variable_declarator 2178 2182 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); } 2179 | '*'type_qualifier_list variable_declarator2183 | ptrref_operator type_qualifier_list variable_declarator 2180 2184 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); } 2181 2185 | '(' variable_ptr ')' … … 2224 2228 2225 2229 function_ptr: 2226 '*'function_declarator2230 ptrref_operator function_declarator 2227 2231 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); } 2228 | '*'type_qualifier_list function_declarator2232 | ptrref_operator type_qualifier_list function_declarator 2229 2233 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); } 2230 2234 | '(' function_ptr ')' … … 2261 2265 2262 2266 old_function_ptr: 2263 '*'old_function_declarator2267 ptrref_operator old_function_declarator 2264 2268 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); } 2265 | '*'type_qualifier_list old_function_declarator2269 | ptrref_operator type_qualifier_list old_function_declarator 2266 2270 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); } 2267 2271 | '(' old_function_ptr ')' … … 2305 2309 2306 2310 type_ptr: 2307 '*'type_redeclarator2311 ptrref_operator type_redeclarator 2308 2312 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); } 2309 | '*'type_qualifier_list type_redeclarator2313 | ptrref_operator type_qualifier_list type_redeclarator 2310 2314 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); } 2311 2315 | '(' type_ptr ')' … … 2349 2353 2350 2354 identifier_parameter_ptr: 2351 '*'identifier_parameter_declarator2355 ptrref_operator identifier_parameter_declarator 2352 2356 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); } 2353 | '*'type_qualifier_list identifier_parameter_declarator2357 | ptrref_operator type_qualifier_list identifier_parameter_declarator 2354 2358 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); } 2355 2359 | '(' identifier_parameter_ptr ')' … … 2427 2431 2428 2432 type_parameter_ptr: 2429 '*'type_parameter_redeclarator2433 ptrref_operator type_parameter_redeclarator 2430 2434 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); } 2431 | '*'type_qualifier_list type_parameter_redeclarator2435 | ptrref_operator type_qualifier_list type_parameter_redeclarator 2432 2436 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); } 2433 2437 | '(' type_parameter_ptr ')' … … 2467 2471 2468 2472 abstract_ptr: 2469 '*'2473 ptrref_operator 2470 2474 { $$ = DeclarationNode::newPointer( 0 ); } 2471 | '*'type_qualifier_list2475 | ptrref_operator type_qualifier_list 2472 2476 { $$ = DeclarationNode::newPointer( $2 ); } 2473 | '*'abstract_declarator2477 | ptrref_operator abstract_declarator 2474 2478 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); } 2475 | '*'type_qualifier_list abstract_declarator2479 | ptrref_operator type_qualifier_list abstract_declarator 2476 2480 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); } 2477 2481 | '(' abstract_ptr ')' … … 2536 2540 2537 2541 abstract_parameter_ptr: 2538 '*'2542 ptrref_operator 2539 2543 { $$ = DeclarationNode::newPointer( 0 ); } 2540 | '*'type_qualifier_list2544 | ptrref_operator type_qualifier_list 2541 2545 { $$ = DeclarationNode::newPointer( $2 ); } 2542 | '*'abstract_parameter_declarator2546 | ptrref_operator abstract_parameter_declarator 2543 2547 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); } 2544 | '*'type_qualifier_list abstract_parameter_declarator2548 | ptrref_operator type_qualifier_list abstract_parameter_declarator 2545 2549 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); } 2546 2550 | '(' abstract_parameter_ptr ')' … … 2614 2618 2615 2619 variable_abstract_ptr: 2616 '*'2620 ptrref_operator 2617 2621 { $$ = DeclarationNode::newPointer( 0 ); } 2618 | '*'type_qualifier_list2622 | ptrref_operator type_qualifier_list 2619 2623 { $$ = DeclarationNode::newPointer( $2 ); } 2620 | '*'variable_abstract_declarator2624 | ptrref_operator variable_abstract_declarator 2621 2625 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); } 2622 | '*'type_qualifier_list variable_abstract_declarator2626 | ptrref_operator type_qualifier_list variable_abstract_declarator 2623 2627 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); } 2624 2628 | '(' variable_abstract_ptr ')' … … 2659 2663 2660 2664 new_identifier_parameter_ptr: // CFA 2661 '*'type_specifier2665 ptrref_operator type_specifier 2662 2666 { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 ) ); } 2663 | type_qualifier_list '*'type_specifier2667 | type_qualifier_list ptrref_operator type_specifier 2664 2668 { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 ) ); } 2665 | '*'new_abstract_function2669 | ptrref_operator new_abstract_function 2666 2670 { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 ) ); } 2667 | type_qualifier_list '*'new_abstract_function2671 | type_qualifier_list ptrref_operator new_abstract_function 2668 2672 { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 ) ); } 2669 | '*'new_identifier_parameter_declarator_tuple2673 | ptrref_operator new_identifier_parameter_declarator_tuple 2670 2674 { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 ) ); } 2671 | type_qualifier_list '*'new_identifier_parameter_declarator_tuple2675 | type_qualifier_list ptrref_operator new_identifier_parameter_declarator_tuple 2672 2676 { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 ) ); } 2673 2677 ; … … 2746 2750 2747 2751 new_abstract_ptr: // CFA 2748 '*'type_specifier2752 ptrref_operator type_specifier 2749 2753 { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 ) ); } 2750 | type_qualifier_list '*'type_specifier2754 | type_qualifier_list ptrref_operator type_specifier 2751 2755 { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 ) ); } 2752 | '*'new_abstract_function2756 | ptrref_operator new_abstract_function 2753 2757 { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 ) ); } 2754 | type_qualifier_list '*'new_abstract_function2758 | type_qualifier_list ptrref_operator new_abstract_function 2755 2759 { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 ) ); } 2756 | '*'new_abstract_declarator_tuple2760 | ptrref_operator new_abstract_declarator_tuple 2757 2761 { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 ) ); } 2758 | type_qualifier_list '*'new_abstract_declarator_tuple2762 | type_qualifier_list ptrref_operator new_abstract_declarator_tuple 2759 2763 { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 ) ); } 2760 2764 ;
Note:
See TracChangeset
for help on using the changeset viewer.