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