Changes in src/Parser/parser.yy [8688ce1:064e3ff]
- File:
-
- 1 edited
-
src/Parser/parser.yy (modified) (11 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/Parser/parser.yy
r8688ce1 r064e3ff 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 1 1:28:18 201613 // Update Count : 16 7212 // Last Modified On : Thu Aug 4 16:56:28 2016 13 // Update Count : 1694 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 … … 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 … … 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 … … 430 432 { $$ = $2->set_extension( true ); } 431 433 | ptrref_operator cast_expression // CFA 432 { $$ = new CompositeExprNode( $1, $2 ); }434 { $$ = $1 == OperatorNode::AddressOf ? (ExpressionNode*) new CompositeExprNode2( build_addressOf( $2 ) ) : (ExpressionNode*)new CompositeExprNode( new OperatorNode ( $1 ), $2 ); } 433 435 // '*' ('&') is separated from unary_operator because of shift/reduce conflict in: 434 436 // { * X; } // dereference X … … 441 443 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Decr ), $2 ); } 442 444 | SIZEOF unary_expression 443 { $$ = new CompositeExprNode ( new OperatorNode( OperatorNode::SizeOf ), $2); }445 { $$ = new CompositeExprNode2( build_sizeOf( $2 ) ); } 444 446 | SIZEOF '(' type_name_no_function ')' 445 { $$ = new CompositeExprNode ( new OperatorNode( OperatorNode::SizeOf ), new TypeValueNode( $3 )); }447 { $$ = new CompositeExprNode2( build_sizeOf( new TypeValueNode( $3 ) ) ); } 446 448 | OFFSETOF '(' type_name_no_function ',' no_attr_identifier ')' 447 { $$ = new CompositeExprNode ( new OperatorNode( OperatorNode::OffsetOf ), new TypeValueNode( $3 ), new VarRefNode( $5 )); }449 { $$ = new CompositeExprNode2( build_offsetOf( new TypeValueNode( $3 ), new VarRefNode( $5 ) ) ); } 448 450 | ATTR_IDENTIFIER 449 451 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( $1 )); } … … 453 455 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( $1 ), $3 ); } 454 456 | ALIGNOF unary_expression // GCC, variable alignment 455 { $$ = new CompositeExprNode ( new OperatorNode( OperatorNode::AlignOf ), $2); }457 { $$ = new CompositeExprNode2( build_alignOf( $2 ) ); } 456 458 | ALIGNOF '(' type_name_no_function ')' // GCC, type alignment 457 { $$ = new CompositeExprNode ( new OperatorNode( OperatorNode::AlignOf ), new TypeValueNode( $3) ); }459 { $$ = new CompositeExprNode2( build_alignOf( new TypeValueNode( $3 ) ) ); } 458 460 // | ANDAND IDENTIFIER // GCC, address of label 459 461 // { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::LabelAddress ), new VarRefNode( $2, true ) ); } … … 461 463 462 464 ptrref_operator: 463 '*' { $$ = new OperatorNode( OperatorNode::PointTo ); }464 | '&' { $$ = new OperatorNode( OperatorNode::AddressOf ); }465 '*' { $$ = OperatorNode::PointTo; } 466 | '&' { $$ = OperatorNode::AddressOf; } 465 467 // GCC, address of label must be handled by semantic check for ref,ref,label 466 | ANDAND { $$ = new OperatorNode( OperatorNode::And ); }468 | ANDAND { $$ = OperatorNode::And; } 467 469 ; 468 470 … … 477 479 unary_expression 478 480 | '(' type_name_no_function ')' cast_expression 479 { $$ = new CompositeExprNode ( new OperatorNode( OperatorNode::Cast ), new TypeValueNode( $2 ), $4); }481 { $$ = new CompositeExprNode2( build_cast( new TypeValueNode( $2 ), $4 ) ); } 480 482 | '(' type_name_no_function ')' tuple 481 { $$ = new CompositeExprNode ( new OperatorNode( OperatorNode::Cast ), new TypeValueNode( $2 ), $4); }483 { $$ = new CompositeExprNode2( build_cast( new TypeValueNode( $2 ), $4 ) ); } 482 484 ; 483 485 … … 742 744 case_value_list: // CFA 743 745 case_value { $$ = new StatementNode( StatementNode::Case, $1, 0 ); } 746 // convert case list, e.g., "case 1, 3, 5:" into "case 1: case 3: case 5" 744 747 | case_value_list ',' case_value { $$ = (StatementNode *)($1->set_link( new StatementNode( StatementNode::Case, $3, 0 ) ) ); } 745 748 ;
Note:
See TracChangeset
for help on using the changeset viewer.