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