Changeset dae881f for src/Parser/parser.yy
- Timestamp:
- Aug 5, 2016, 9:25:34 AM (9 years ago)
- Branches:
- ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, ctor, deferred_resn, demangler, enum, forall-pointer-decay, 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:
- 1b0020a
- Parents:
- 658fafe4 (diff), 51e076e (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
Legend:
- Unmodified
- Added
- Removed
-
src/Parser/parser.yy
r658fafe4 rdae881f 10 10 // Created On : Sat Sep 1 20:22:55 2001 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Thu Aug 4 11:28:18201613 // Update Count : 1 67212 // Last Modified On : Fri Aug 5 08:15:57 2016 13 // Update Count : 1721 14 14 // 15 15 … … 119 119 LabelNode *label; 120 120 InitializerNode *in; 121 OperatorNode::Type op; 121 122 bool flag; 122 123 } … … 129 130 %type<constant> constant 130 131 %type<en> tuple tuple_expression_list 131 %type<en> ptrref_operator unary_operator assignment_operator 132 %type<op> ptrref_operator 133 %type<en> unary_operator assignment_operator 132 134 %type<en> primary_expression postfix_expression unary_expression 133 135 %type<en> cast_expression multiplicative_expression additive_expression shift_expression … … 354 356 // little advantage to this feature and many disadvantages. It is possible to write x[(i,j)] in CFA, which is 355 357 // equivalent to the old x[i,j]. 356 { $$ = new CompositeExprNode ( new OperatorNode( OperatorNode::Index ), $1, $4); }358 { $$ = new CompositeExprNode2( build_opr2( OperatorNode::Index, $1, $4 ) ); } 357 359 | postfix_expression '(' argument_expression_list ')' 358 360 { $$ = new CompositeExprNode( $1, $3 ); } … … 360 362 // struct S { int 0, 1; } s; s. 0 = 0; s. 1 = 1; 361 363 | postfix_expression '.' no_attr_identifier 362 { $$ = new CompositeExprNode ( new OperatorNode( OperatorNode::FieldSel ), $1, new VarRefNode( $3 )); }364 { $$ = new CompositeExprNode2( build_fieldSel( $1, new VarRefNode( $3 ) ) ); } 363 365 | postfix_expression '.' '[' push field_list pop ']' // CFA, tuple field selector 364 366 | postfix_expression ARROW no_attr_identifier 365 { $$ = new CompositeExprNode ( new OperatorNode( OperatorNode::PFieldSel ), $1, new VarRefNode( $3 )); }367 { $$ = new CompositeExprNode2( build_pfieldSel( $1, new VarRefNode( $3 ) ) ); } 366 368 | postfix_expression ARROW '[' push field_list pop ']' // CFA, tuple field selector 367 369 | postfix_expression ICR 368 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::IncrPost ), $1); }370 { $$ = new CompositeExprNode2( build_opr1( OperatorNode::IncrPost, $1 ) ); } 369 371 | postfix_expression DECR 370 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::DecrPost ), $1); }372 { $$ = new CompositeExprNode2( build_opr1( OperatorNode::DecrPost, $1 ) ); } 371 373 | '(' type_name_no_function ')' '{' initializer_list comma_opt '}' // C99 372 374 { $$ = new CompoundLiteralNode( $2, new InitializerNode( $5, true ) ); } … … 410 412 // struct S { int 0, 1; } s; s. 0 = 0; s. 1 = 1; 411 413 | no_attr_identifier '.' field 412 { $$ = new CompositeExprNode ( new OperatorNode( OperatorNode::FieldSel ), new VarRefNode( $1 ), $3); }414 { $$ = new CompositeExprNode2( build_fieldSel( $3, new VarRefNode( $1 ) ) ); } 413 415 | no_attr_identifier '.' '[' push field_list pop ']' 414 { $$ = new CompositeExprNode ( new OperatorNode( OperatorNode::FieldSel ), new VarRefNode( $1 ), $5); }416 { $$ = new CompositeExprNode2( build_fieldSel( $5, new VarRefNode( $1 ) ) ); } 415 417 | no_attr_identifier ARROW field 416 { $$ = new CompositeExprNode ( new OperatorNode( OperatorNode::PFieldSel ), new VarRefNode( $1 ), $3); }418 { $$ = new CompositeExprNode2( build_pfieldSel( $3, new VarRefNode( $1 ) ) ); } 417 419 | no_attr_identifier ARROW '[' push field_list pop ']' 418 { $$ = new CompositeExprNode ( new OperatorNode( OperatorNode::PFieldSel ), new VarRefNode( $1 ), $5); }420 { $$ = new CompositeExprNode2( build_pfieldSel( $5, new VarRefNode( $1 ) ) ); } 419 421 ; 420 422 … … 429 431 | EXTENSION cast_expression // GCC 430 432 { $$ = $2->set_extension( true ); } 431 | ptrref_operator cast_expression // CFA432 { $$ = new CompositeExprNode( $1, $2 ); }433 433 // '*' ('&') is separated from unary_operator because of shift/reduce conflict in: 434 434 // { * X; } // dereference X 435 435 // { * int X; } // CFA declaration of pointer to int 436 | ptrref_operator cast_expression // CFA 437 { $$ = $1 == OperatorNode::AddressOf ? (ExpressionNode*) new CompositeExprNode2( build_addressOf( $2 ) ) 438 : (ExpressionNode*)new CompositeExprNode( new OperatorNode ( $1 ), $2 ); } 436 439 | unary_operator cast_expression 437 440 { $$ = new CompositeExprNode( $1, $2 ); } 438 441 | ICR unary_expression 439 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Incr ), $2); }442 { $$ = new CompositeExprNode2( build_opr1( OperatorNode::Incr, $2 ) ); } 440 443 | DECR unary_expression 441 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Decr ), $2); }444 { $$ = new CompositeExprNode2( build_opr1( OperatorNode::Decr, $2 ) ); } 442 445 | SIZEOF unary_expression 443 { $$ = new CompositeExprNode ( new OperatorNode( OperatorNode::SizeOf ), $2); }446 { $$ = new CompositeExprNode2( build_sizeOf( $2 ) ); } 444 447 | SIZEOF '(' type_name_no_function ')' 445 { $$ = new CompositeExprNode ( new OperatorNode( OperatorNode::SizeOf ), new TypeValueNode( $3 )); }448 { $$ = new CompositeExprNode2( build_sizeOf( new TypeValueNode( $3 ) ) ); } 446 449 | OFFSETOF '(' type_name_no_function ',' no_attr_identifier ')' 447 { $$ = new CompositeExprNode ( new OperatorNode( OperatorNode::OffsetOf ), new TypeValueNode( $3 ), new VarRefNode( $5 )); }450 { $$ = new CompositeExprNode2( build_offsetOf( new TypeValueNode( $3 ), new VarRefNode( $5 ) ) ); } 448 451 | ATTR_IDENTIFIER 449 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( $1 ) ); }452 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( $1 ) ); } 450 453 | ATTR_IDENTIFIER '(' type_name ')' 451 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( $1 ), new TypeValueNode( $3 ) ); }454 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( $1 ), new TypeValueNode( $3 ) ); } 452 455 | ATTR_IDENTIFIER '(' argument_expression ')' 453 456 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( $1 ), $3 ); } 454 457 | ALIGNOF unary_expression // GCC, variable alignment 455 { $$ = new CompositeExprNode ( new OperatorNode( OperatorNode::AlignOf ), $2); }458 { $$ = new CompositeExprNode2( build_alignOf( $2 ) ); } 456 459 | ALIGNOF '(' type_name_no_function ')' // GCC, type alignment 457 { $$ = new CompositeExprNode ( new OperatorNode( OperatorNode::AlignOf ), new TypeValueNode( $3) ); }460 { $$ = new CompositeExprNode2( build_alignOf( new TypeValueNode( $3 ) ) ); } 458 461 // | ANDAND IDENTIFIER // GCC, address of label 459 462 // { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::LabelAddress ), new VarRefNode( $2, true ) ); } … … 461 464 462 465 ptrref_operator: 463 '*' { $$ = new OperatorNode( OperatorNode::PointTo ); }464 | '&' { $$ = new OperatorNode( OperatorNode::AddressOf ); }466 '*' { $$ = OperatorNode::PointTo; } 467 | '&' { $$ = OperatorNode::AddressOf; } 465 468 // GCC, address of label must be handled by semantic check for ref,ref,label 466 | ANDAND { $$ = new OperatorNode( OperatorNode::And ); }469 | ANDAND { $$ = OperatorNode::And; } 467 470 ; 468 471 … … 477 480 unary_expression 478 481 | '(' type_name_no_function ')' cast_expression 479 { $$ = new CompositeExprNode ( new OperatorNode( OperatorNode::Cast ), new TypeValueNode( $2 ), $4); }482 { $$ = new CompositeExprNode2( build_cast( new TypeValueNode( $2 ), $4 ) ); } 480 483 | '(' type_name_no_function ')' tuple 481 { $$ = new CompositeExprNode ( new OperatorNode( OperatorNode::Cast ), new TypeValueNode( $2 ), $4); }484 { $$ = new CompositeExprNode2( build_cast( new TypeValueNode( $2 ), $4 ) ); } 482 485 ; 483 486 … … 485 488 cast_expression 486 489 | multiplicative_expression '*' cast_expression 487 { $$ = new CompositeExprNode ( new OperatorNode( OperatorNode::Mul ), $1, $3); }490 { $$ = new CompositeExprNode2( build_opr2( OperatorNode::Mul, $1, $3 ) ); } 488 491 | multiplicative_expression '/' cast_expression 489 { $$ = new CompositeExprNode ( new OperatorNode( OperatorNode::Div ), $1, $3); }492 { $$ = new CompositeExprNode2( build_opr2( OperatorNode::Div, $1, $3 ) ); } 490 493 | multiplicative_expression '%' cast_expression 491 { $$ = new CompositeExprNode ( new OperatorNode( OperatorNode::Mod ), $1, $3); }494 { $$ = new CompositeExprNode2( build_opr2( OperatorNode::Mod, $1, $3 ) ); } 492 495 ; 493 496 … … 495 498 multiplicative_expression 496 499 | additive_expression '+' multiplicative_expression 497 { $$ = new CompositeExprNode ( new OperatorNode( OperatorNode::Plus ), $1, $3); }500 { $$ = new CompositeExprNode2( build_opr2( OperatorNode::Plus, $1, $3 ) ); } 498 501 | additive_expression '-' multiplicative_expression 499 { $$ = new CompositeExprNode ( new OperatorNode( OperatorNode::Minus ), $1, $3); }502 { $$ = new CompositeExprNode2( build_opr2( OperatorNode::Minus, $1, $3 ) ); } 500 503 ; 501 504 … … 503 506 additive_expression 504 507 | shift_expression LS additive_expression 505 { $$ = new CompositeExprNode ( new OperatorNode( OperatorNode::LShift ), $1, $3); }508 { $$ = new CompositeExprNode2( build_opr2( OperatorNode::LShift, $1, $3 ) ); } 506 509 | shift_expression RS additive_expression 507 { $$ = new CompositeExprNode ( new OperatorNode( OperatorNode::RShift ), $1, $3); }510 { $$ = new CompositeExprNode2( build_opr2( OperatorNode::RShift, $1, $3 ) ); } 508 511 ; 509 512 … … 511 514 shift_expression 512 515 | relational_expression '<' shift_expression 513 { $$ = new CompositeExprNode ( new OperatorNode( OperatorNode::LThan ), $1, $3); }516 { $$ = new CompositeExprNode2( build_opr2( OperatorNode::LThan, $1, $3 ) ); } 514 517 | relational_expression '>' shift_expression 515 { $$ = new CompositeExprNode ( new OperatorNode( OperatorNode::GThan ), $1, $3); }518 { $$ = new CompositeExprNode2( build_opr2( OperatorNode::GThan, $1, $3 ) ); } 516 519 | relational_expression LE shift_expression 517 { $$ = new CompositeExprNode ( new OperatorNode( OperatorNode::LEThan ), $1, $3); }520 { $$ = new CompositeExprNode2( build_opr2( OperatorNode::LEThan, $1, $3 ) ); } 518 521 | relational_expression GE shift_expression 519 { $$ = new CompositeExprNode ( new OperatorNode( OperatorNode::GEThan ), $1, $3); }522 { $$ = new CompositeExprNode2( build_opr2( OperatorNode::GEThan, $1, $3 ) ); } 520 523 ; 521 524 … … 523 526 relational_expression 524 527 | equality_expression EQ relational_expression 525 { $$ = new CompositeExprNode ( new OperatorNode( OperatorNode::Eq ), $1, $3); }528 { $$ = new CompositeExprNode2( build_opr2( OperatorNode::Eq, $1, $3 ) ); } 526 529 | equality_expression NE relational_expression 527 { $$ = new CompositeExprNode ( new OperatorNode( OperatorNode::Neq ), $1, $3); }530 { $$ = new CompositeExprNode2( build_opr2( OperatorNode::Neq, $1, $3 ) ); } 528 531 ; 529 532 … … 531 534 equality_expression 532 535 | AND_expression '&' equality_expression 533 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::BitAnd ), $1, $3); }536 { $$ = new CompositeExprNode2( build_opr2( OperatorNode::BitAnd, $1, $3 ) ); } 534 537 ; 535 538 … … 537 540 AND_expression 538 541 | exclusive_OR_expression '^' AND_expression 539 { $$ = new CompositeExprNode ( new OperatorNode( OperatorNode::Xor ), $1, $3); }542 { $$ = new CompositeExprNode2( build_opr2( OperatorNode::Xor, $1, $3 ) ); } 540 543 ; 541 544 … … 543 546 exclusive_OR_expression 544 547 | inclusive_OR_expression '|' exclusive_OR_expression 545 { $$ = new CompositeExprNode ( new OperatorNode( OperatorNode::BitOr ), $1, $3); }548 { $$ = new CompositeExprNode2( build_opr2( OperatorNode::BitOr, $1, $3 ) ); } 546 549 ; 547 550 … … 549 552 inclusive_OR_expression 550 553 | logical_AND_expression ANDAND inclusive_OR_expression 551 { $$ = new CompositeExprNode ( new OperatorNode( OperatorNode::And ), $1, $3); }554 { $$ = new CompositeExprNode2( build_and_or( $1, $3, true ) ); } 552 555 ; 553 556 … … 555 558 logical_AND_expression 556 559 | logical_OR_expression OROR logical_AND_expression 557 { $$ = new CompositeExprNode ( new OperatorNode( OperatorNode::Or ), $1, $3); }560 { $$ = new CompositeExprNode2( build_and_or( $1, $3, false ) ); } 558 561 ; 559 562 … … 561 564 logical_OR_expression 562 565 | logical_OR_expression '?' comma_expression ':' conditional_expression 563 { $$ = new CompositeExprNode ( new OperatorNode( OperatorNode::Cond ), (ExpressionNode *)mkList( (*$1, *$3, *$5 )) ); }566 { $$ = new CompositeExprNode2( build_cond( $1, $3, $5 ) ); } 564 567 | logical_OR_expression '?' /* empty */ ':' conditional_expression // GCC, omitted first operand 565 { $$ =new CompositeExprNode( new OperatorNode( OperatorNode::NCond ), $1, $4 ); }568 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::NCond ), $1, $4 ); } 566 569 | logical_OR_expression '?' comma_expression ':' tuple // CFA, tuple expression 567 { $$ = new CompositeExprNode ( new OperatorNode( OperatorNode::Cond ), (ExpressionNode *)mkList( (*$1, *$3, *$5 )) ); }570 { $$ = new CompositeExprNode2( build_cond( $1, $3, $5 ) ); } 568 571 ; 569 572 … … 576 579 conditional_expression 577 580 | unary_expression '=' assignment_expression 578 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Assign ), $1, $3 ); }581 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Assign ), $1, $3 ); } 579 582 | unary_expression assignment_operator assignment_expression 580 { $$ = new CompositeExprNode( $2, $1, $3 ); }583 { $$ = new CompositeExprNode( $2, $1, $3 ); } 581 584 | tuple assignment_opt // CFA, tuple expression 582 585 { $$ = ( $2 == 0 ) ? $1 : new CompositeExprNode( new OperatorNode( OperatorNode::Assign ), $1, $2 ); } … … 624 627 assignment_expression 625 628 | comma_expression ',' assignment_expression // { $$ = (ExpressionNode *)$1->add_to_list( $3 ); } 626 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Comma ), $1, $3 ); } 629 //{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Comma ), $1, $3 ); } 630 { $$ = new CompositeExprNode2( build_comma( $1, $3 ) ); } 627 631 ; 628 632 … … 736 740 constant_expression { $$ = $1; } 737 741 | constant_expression ELLIPSIS constant_expression // GCC, subrange 738 { $$ = new CompositeExprNode ( new OperatorNode( OperatorNode::Range ), $1, $3); }742 { $$ = new CompositeExprNode2( build_opr2( OperatorNode::Range, $1, $3 ) ); } 739 743 | subrange // CFA, subrange 740 744 ; … … 742 746 case_value_list: // CFA 743 747 case_value { $$ = new StatementNode( StatementNode::Case, $1, 0 ); } 748 // convert case list, e.g., "case 1, 3, 5:" into "case 1: case 3: case 5" 744 749 | case_value_list ',' case_value { $$ = (StatementNode *)($1->set_link( new StatementNode( StatementNode::Case, $3, 0 ) ) ); } 745 750 ; … … 1776 1781 { $$ = new DesignatorNode( $3, true ); } 1777 1782 | '[' push constant_expression ELLIPSIS constant_expression pop ']' // GCC, multiple array elements 1778 { $$ = new DesignatorNode( new CompositeExprNode ( new OperatorNode( OperatorNode::Range ), $3, $5), true ); }1783 { $$ = new DesignatorNode( new CompositeExprNode2( build_opr2( OperatorNode::Range, $3, $5 ) ), true ); } 1779 1784 | '.' '[' push field_list pop ']' // CFA, tuple field selector 1780 1785 { $$ = new DesignatorNode( $4 ); } … … 2105 2110 subrange: 2106 2111 constant_expression '~' constant_expression // CFA, integer subrange 2107 { $$ = new CompositeExprNode ( new OperatorNode( OperatorNode::Range ), $1, $3); }2112 { $$ = new CompositeExprNode2( build_opr2( OperatorNode::Range, $1, $3 ) ); } 2108 2113 ; 2109 2114
Note:
See TracChangeset
for help on using the changeset viewer.