Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/Parser/parser.yy

    r51e076e r8688ce1  
    1010// Created On       : Sat Sep  1 20:22:55 2001
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Fri Aug  5 08:15:57 2016
    13 // Update Count     : 1721
     12// Last Modified On : Thu Aug  4 11:28:18 2016
     13// Update Count     : 1672
    1414//
    1515
     
    119119        LabelNode *label;
    120120        InitializerNode *in;
    121         OperatorNode::Type op;
    122121        bool flag;
    123122}
     
    130129%type<constant> constant
    131130%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
    134132%type<en> primary_expression                    postfix_expression                      unary_expression
    135133%type<en> cast_expression                               multiplicative_expression       additive_expression                     shift_expression
     
    356354                // little advantage to this feature and many disadvantages. It is possible to write x[(i,j)] in CFA, which is
    357355                // equivalent to the old x[i,j].
    358                 { $$ = new CompositeExprNode2( build_opr2( OperatorNode::Index, $1, $4 ) ); }
     356                { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Index ), $1, $4 ); }
    359357        | postfix_expression '(' argument_expression_list ')'
    360358                { $$ = new CompositeExprNode( $1, $3 ); }
     
    362360                //   struct S { int 0, 1; } s; s. 0 = 0; s. 1 = 1;
    363361        | postfix_expression '.' no_attr_identifier
    364                 { $$ = new CompositeExprNode2( build_fieldSel( $1, new VarRefNode( $3 ) ) ); }
     362                { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::FieldSel ), $1, new VarRefNode( $3 )); }
    365363        | postfix_expression '.' '[' push field_list pop ']' // CFA, tuple field selector
    366364        | postfix_expression ARROW no_attr_identifier
    367                 { $$ = new CompositeExprNode2( build_pfieldSel( $1, new VarRefNode( $3 ) ) ); }
     365                { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::PFieldSel ), $1, new VarRefNode( $3 )); }
    368366        | postfix_expression ARROW '[' push field_list pop ']' // CFA, tuple field selector
    369367        | postfix_expression ICR
    370                 { $$ = new CompositeExprNode2( build_opr1( OperatorNode::IncrPost, $1 ) ); }
     368                { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::IncrPost ), $1 ); }
    371369        | postfix_expression DECR
    372                 { $$ = new CompositeExprNode2( build_opr1( OperatorNode::DecrPost, $1 ) ); }
     370                { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::DecrPost ), $1 ); }
    373371        | '(' type_name_no_function ')' '{' initializer_list comma_opt '}' // C99
    374372                { $$ = new CompoundLiteralNode( $2, new InitializerNode( $5, true ) ); }
     
    412410                //   struct S { int 0, 1; } s; s. 0 = 0; s. 1 = 1;
    413411        | no_attr_identifier '.' field
    414                 { $$ = new CompositeExprNode2( build_fieldSel( $3, new VarRefNode( $1 ) ) ); }
     412                { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::FieldSel ), new VarRefNode( $1 ), $3 ); }
    415413        | no_attr_identifier '.' '[' push field_list pop ']'
    416                 { $$ = new CompositeExprNode2( build_fieldSel( $5, new VarRefNode( $1 ) ) ); }
     414                { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::FieldSel ), new VarRefNode( $1 ), $5 ); }
    417415        | no_attr_identifier ARROW field
    418                 { $$ = new CompositeExprNode2( build_pfieldSel( $3, new VarRefNode( $1 ) ) ); }
     416                { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::PFieldSel ), new VarRefNode( $1 ), $3 ); }
    419417        | no_attr_identifier ARROW '[' push field_list pop ']'
    420                 { $$ = new CompositeExprNode2( build_pfieldSel( $5, new VarRefNode( $1 ) ) ); }
     418                { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::PFieldSel ), new VarRefNode( $1 ), $5 ); }
    421419        ;
    422420
     
    431429        | EXTENSION cast_expression                                                     // GCC
    432430                { $$ = $2->set_extension( true ); }
     431        | ptrref_operator cast_expression                                       // CFA
     432                { $$ = new CompositeExprNode( $1, $2 ); }
    433433                // '*' ('&') is separated from unary_operator because of shift/reduce conflict in:
    434434                //              { * X; }         // dereference X
    435435                //              { * 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 ); }
    439436        | unary_operator cast_expression
    440437                { $$ = new CompositeExprNode( $1, $2 ); }
    441438        | ICR unary_expression
    442                 { $$ = new CompositeExprNode2( build_opr1( OperatorNode::Incr, $2 ) ); }
     439                { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Incr ), $2 ); }
    443440        | DECR unary_expression
    444                 { $$ = new CompositeExprNode2( build_opr1( OperatorNode::Decr, $2 ) ); }
     441                { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Decr ), $2 ); }
    445442        | SIZEOF unary_expression
    446                 { $$ = new CompositeExprNode2( build_sizeOf( $2 ) ); }
     443                { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::SizeOf ), $2 ); }
    447444        | SIZEOF '(' type_name_no_function ')'
    448                 { $$ = new CompositeExprNode2( build_sizeOf( new TypeValueNode( $3 ) ) ); }
     445                { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::SizeOf ), new TypeValueNode( $3 )); }
    449446        | OFFSETOF '(' type_name_no_function ',' no_attr_identifier ')'
    450                 { $$ = new CompositeExprNode2( build_offsetOf( new TypeValueNode( $3 ), new VarRefNode( $5 ) ) ); }
     447                { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::OffsetOf ), new TypeValueNode( $3 ), new VarRefNode( $5 )); }
    451448        | ATTR_IDENTIFIER
    452                 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( $1 ) ); }
     449                { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( $1 )); }
    453450        | 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 )); }
    455452        | ATTR_IDENTIFIER '(' argument_expression ')'
    456453                { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( $1 ), $3 ); }
    457454        | ALIGNOF unary_expression                                                      // GCC, variable alignment
    458                 { $$ = new CompositeExprNode2( build_alignOf( $2 ) ); }
     455                { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::AlignOf ), $2 ); }
    459456        | ALIGNOF '(' type_name_no_function ')'                         // GCC, type alignment
    460                 { $$ = new CompositeExprNode2( build_alignOf( new TypeValueNode( $3 ) ) ); }
     457                { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::AlignOf ), new TypeValueNode( $3 ) ); }
    461458//      | ANDAND IDENTIFIER                                                                     // GCC, address of label
    462459//              { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::LabelAddress ), new VarRefNode( $2, true ) ); }
     
    464461
    465462ptrref_operator:
    466         '*'                                                                                     { $$ = OperatorNode::PointTo; }
    467         | '&'                                                                           { $$ = OperatorNode::AddressOf; }
     463        '*'                                                                                     { $$ = new OperatorNode( OperatorNode::PointTo ); }
     464        | '&'                                                                           { $$ = new OperatorNode( OperatorNode::AddressOf ); }
    468465                // GCC, address of label must be handled by semantic check for ref,ref,label
    469         | ANDAND                                                                        { $$ = OperatorNode::And; }
     466        | ANDAND                                                                        { $$ = new OperatorNode( OperatorNode::And ); }
    470467        ;
    471468
     
    480477        unary_expression
    481478        | '(' type_name_no_function ')' cast_expression
    482                 { $$ = new CompositeExprNode2( build_cast( new TypeValueNode( $2 ), $4 ) ); }
     479                { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Cast ), new TypeValueNode( $2 ), $4 ); }
    483480        | '(' type_name_no_function ')' tuple
    484                 { $$ = new CompositeExprNode2( build_cast( new TypeValueNode( $2 ), $4 ) ); }
     481                { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Cast ), new TypeValueNode( $2 ), $4 ); }
    485482        ;
    486483
     
    488485        cast_expression
    489486        | multiplicative_expression '*' cast_expression
    490                 { $$ = new CompositeExprNode2( build_opr2( OperatorNode::Mul, $1, $3 ) ); }
     487                { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Mul ), $1, $3 ); }
    491488        | multiplicative_expression '/' cast_expression
    492                 { $$ = new CompositeExprNode2( build_opr2( OperatorNode::Div, $1, $3 ) ); }
     489                { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Div ), $1, $3 ); }
    493490        | multiplicative_expression '%' cast_expression
    494                 { $$ = new CompositeExprNode2( build_opr2( OperatorNode::Mod, $1, $3 ) ); }
     491                { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Mod ), $1, $3 ); }
    495492        ;
    496493
     
    498495        multiplicative_expression
    499496        | additive_expression '+' multiplicative_expression
    500                 { $$ = new CompositeExprNode2( build_opr2( OperatorNode::Plus, $1, $3 ) ); }
     497                { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Plus ), $1, $3 ); }
    501498        | additive_expression '-' multiplicative_expression
    502                 { $$ = new CompositeExprNode2( build_opr2( OperatorNode::Minus, $1, $3 ) ); }
     499                { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Minus ), $1, $3 ); }
    503500        ;
    504501
     
    506503        additive_expression
    507504        | shift_expression LS additive_expression
    508                 { $$ = new CompositeExprNode2( build_opr2( OperatorNode::LShift, $1, $3 ) ); }
     505                { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::LShift ), $1, $3 ); }
    509506        | shift_expression RS additive_expression
    510                 { $$ = new CompositeExprNode2( build_opr2( OperatorNode::RShift, $1, $3 ) ); }
     507                { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::RShift ), $1, $3 ); }
    511508        ;
    512509
     
    514511        shift_expression
    515512        | relational_expression '<' shift_expression
    516                 { $$ = new CompositeExprNode2( build_opr2( OperatorNode::LThan, $1, $3 ) ); }
     513                { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::LThan ), $1, $3 ); }
    517514        | relational_expression '>' shift_expression
    518                 { $$ = new CompositeExprNode2( build_opr2( OperatorNode::GThan, $1, $3 ) ); }
     515                { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::GThan ), $1, $3 ); }
    519516        | relational_expression LE shift_expression
    520                 { $$ = new CompositeExprNode2( build_opr2( OperatorNode::LEThan, $1, $3 ) ); }
     517                { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::LEThan ), $1, $3 ); }
    521518        | relational_expression GE shift_expression
    522                 { $$ = new CompositeExprNode2( build_opr2( OperatorNode::GEThan, $1, $3 ) ); }
     519                { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::GEThan ), $1, $3 ); }
    523520        ;
    524521
     
    526523        relational_expression
    527524        | equality_expression EQ relational_expression
    528                 { $$ = new CompositeExprNode2( build_opr2( OperatorNode::Eq, $1, $3 ) ); }
     525                { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Eq ), $1, $3 ); }
    529526        | equality_expression NE relational_expression
    530                 { $$ = new CompositeExprNode2( build_opr2( OperatorNode::Neq, $1, $3 ) ); }
     527                { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Neq ), $1, $3 ); }
    531528        ;
    532529
     
    534531        equality_expression
    535532        | AND_expression '&' equality_expression
    536                 { $$ = new CompositeExprNode2( build_opr2( OperatorNode::BitAnd, $1, $3 ) ); }
     533                { $$ =new CompositeExprNode( new OperatorNode( OperatorNode::BitAnd ), $1, $3 ); }
    537534        ;
    538535
     
    540537        AND_expression
    541538        | exclusive_OR_expression '^' AND_expression
    542                 { $$ = new CompositeExprNode2( build_opr2( OperatorNode::Xor, $1, $3 ) ); }
     539                { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Xor ), $1, $3 ); }
    543540        ;
    544541
     
    546543        exclusive_OR_expression
    547544        | inclusive_OR_expression '|' exclusive_OR_expression
    548                 { $$ = new CompositeExprNode2( build_opr2( OperatorNode::BitOr, $1, $3 ) ); }
     545                { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::BitOr ), $1, $3 ); }
    549546        ;
    550547
     
    552549        inclusive_OR_expression
    553550        | logical_AND_expression ANDAND inclusive_OR_expression
    554                 { $$ = new CompositeExprNode2( build_and_or( $1, $3, true ) ); }
     551                { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::And ), $1, $3 ); }
    555552        ;
    556553
     
    558555        logical_AND_expression
    559556        | logical_OR_expression OROR logical_AND_expression
    560                 { $$ = new CompositeExprNode2( build_and_or( $1, $3, false ) ); }
     557                { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Or ), $1, $3 ); }
    561558        ;
    562559
     
    564561        logical_OR_expression
    565562        | logical_OR_expression '?' comma_expression ':' conditional_expression
    566                 { $$ = new CompositeExprNode2( build_cond( $1, $3, $5 ) ); }
     563                { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Cond ), (ExpressionNode *)mkList( (*$1, *$3, *$5 ) ) ); }
    567564        | 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 ); }
    569566        | logical_OR_expression '?' comma_expression ':' tuple // CFA, tuple expression
    570                 { $$ = new CompositeExprNode2( build_cond( $1, $3, $5 ) ); }
     567                { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Cond ), (ExpressionNode *)mkList( (*$1, *$3, *$5 ) ) ); }
    571568        ;
    572569
     
    579576        conditional_expression
    580577        | unary_expression '=' assignment_expression
    581                 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Assign ), $1, $3 ); }
     578                { $$ =new CompositeExprNode( new OperatorNode( OperatorNode::Assign ), $1, $3 ); }
    582579        | unary_expression assignment_operator assignment_expression
    583                 { $$ = new CompositeExprNode( $2, $1, $3 ); }
     580                { $$ =new CompositeExprNode( $2, $1, $3 ); }
    584581        | tuple assignment_opt                                                          // CFA, tuple expression
    585582                { $$ = ( $2 == 0 ) ? $1 : new CompositeExprNode( new OperatorNode( OperatorNode::Assign ), $1, $2 ); }
     
    627624        assignment_expression
    628625        | 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 ); }
    631627        ;
    632628
     
    740736        constant_expression                                                     { $$ = $1; }
    741737        | constant_expression ELLIPSIS constant_expression      // GCC, subrange
    742                 { $$ = new CompositeExprNode2( build_opr2( OperatorNode::Range, $1, $3 ) ); }
     738                { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Range ), $1, $3 ); }
    743739        | subrange                                                                                      // CFA, subrange
    744740        ;
     
    746742case_value_list:                                                                                // CFA
    747743        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"
    749744        | case_value_list ',' case_value                        { $$ = (StatementNode *)($1->set_link( new StatementNode( StatementNode::Case, $3, 0 ) ) ); }
    750745        ;
     
    17811776                { $$ = new DesignatorNode( $3, true ); }
    17821777        | '[' push constant_expression ELLIPSIS constant_expression pop ']' // GCC, multiple array elements
    1783                 { $$ = new DesignatorNode( new CompositeExprNode2( build_opr2( OperatorNode::Range, $3, $5 ) ), true ); }
     1778                { $$ = new DesignatorNode( new CompositeExprNode( new OperatorNode( OperatorNode::Range ), $3, $5 ), true ); }
    17841779        | '.' '[' push field_list pop ']'                                       // CFA, tuple field selector
    17851780                { $$ = new DesignatorNode( $4 ); }
     
    21102105subrange:
    21112106        constant_expression '~' constant_expression                     // CFA, integer subrange
    2112                 { $$ = new CompositeExprNode2( build_opr2( OperatorNode::Range, $1, $3 ) ); }
     2107                { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Range ), $1, $3 ); }
    21132108        ;
    21142109
Note: See TracChangeset for help on using the changeset viewer.