Ignore:
Timestamp:
Jun 8, 2016, 12:58:01 PM (10 years ago)
Author:
Thierry Delisle <tdelisle@…>
Branches:
ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, ctor, deferred_resn, demangler, enum, forall-pointer-decay, gc_noraii, 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:
9e5f409
Parents:
efbca69 (diff), ac78e25 (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.
Message:

Merge branch 'master' of plg.uwaterloo.ca:software/cfa/cfa-cc

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/Parser/parser.yy

    refbca69 rfb08280  
    1010// Created On       : Sat Sep  1 20:22:55 2001
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Apr 13 16:58:43 2016
    13 // Update Count     : 1519
     12// Last Modified On : Tue Jun  7 08:08:31 2016
     13// Update Count     : 1560
    1414//
    1515
     
    106106%token ANDassign        ERassign        ORassign                                // &=   ^=      |=
    107107
    108 %token ATassign                                                                                 // @=
     108%token ATassign         REFassign                                                       // @=   :=
    109109
    110110// Types declaration
     
    131131%type<constant> constant
    132132%type<en> tuple                                                 tuple_expression_list
    133 %type<en> unary_operator                                assignment_operator
     133%type<en> ptrref_operator                               unary_operator                          assignment_operator
    134134%type<en> primary_expression                    postfix_expression                      unary_expression
    135135%type<en> cast_expression                               multiplicative_expression       additive_expression                     shift_expression
     
    423423unary_expression:
    424424        postfix_expression
    425         // first location where constant/string can have operator applied: sizeof 3/sizeof "abc"
    426         // still requires semantics checks, e.g., ++3, 3--, *3, &&3
     425        // first location where constant/string can have operator applied: sizeof 3/sizeof "abc" still requires semantics
     426        // checks, e.g., ++3, 3--, *3, &&3
    427427        | constant
    428428                { $$ = $1; }
    429429        | string_literal_list
    430430                { $$ = $1; }
     431        | EXTENSION cast_expression                                                     // GCC
     432                { $$ = $2; }
     433        | ptrref_operator cast_expression                                       // CFA
     434                { $$ = new CompositeExprNode( $1, $2 ); }
     435        // '*' ('&') is separated from unary_operator because of shift/reduce conflict in:
     436        //              { * X; }         // dereference X
     437        //              { * int X; } // CFA declaration of pointer to int
     438        | unary_operator cast_expression
     439                { $$ = new CompositeExprNode( $1, $2 ); }
    431440        | ICR unary_expression
    432441                { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Incr ), $2 ); }
    433442        | DECR unary_expression
    434443                { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Decr ), $2 ); }
    435         | EXTENSION cast_expression                                                     // GCC
    436                 { $$ = $2; }
    437         | unary_operator cast_expression
    438                 { $$ = new CompositeExprNode( $1, $2 ); }
    439         | '!' cast_expression
    440                 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Neg ), $2 ); }
    441         | '*' cast_expression                                                           // CFA
    442                 { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::PointTo ), $2 ); }
    443                 // '*' is is separated from unary_operator because of shift/reduce conflict in:
    444                 //              { * X; } // dereference X
    445                 //              { * int X; } // CFA declaration of pointer to int
    446                 // '&' must be moved here if C++ reference variables are supported.
    447444        | SIZEOF unary_expression
    448445                { $$ = new CompositeExprNode( new OperatorNode( OperatorNode::SizeOf ), $2 ); }
     
    465462        ;
    466463
     464ptrref_operator:
     465        '*'                                                                                     { $$ = new OperatorNode( OperatorNode::PointTo ); }
     466        | '&'                                                                           { $$ = new OperatorNode( OperatorNode::AddressOf ); }
     467        ;
     468
    467469unary_operator:
    468         '&'                                                                                     { $$ = new OperatorNode( OperatorNode::AddressOf ); }
    469         | '+'                                                                           { $$ = new OperatorNode( OperatorNode::UnPlus ); }
     470        '+'                                                                                     { $$ = new OperatorNode( OperatorNode::UnPlus ); }
    470471        | '-'                                                                           { $$ = new OperatorNode( OperatorNode::UnMinus ); }
     472        | '!'                                                                           { $$ = new OperatorNode( OperatorNode::Neg ); }
    471473        | '~'                                                                           { $$ = new OperatorNode( OperatorNode::BitNeg ); }
    472474        ;
     
    575577        | unary_expression '=' assignment_expression
    576578                { $$ =new CompositeExprNode( new OperatorNode( OperatorNode::Assign ), $1, $3 ); }
     579        | unary_expression REFassign assignment_expression
     580                { $$ =new CompositeExprNode( new OperatorNode( OperatorNode::Assign ), $1, $3 ); } // FIX ME
    577581        | unary_expression assignment_operator assignment_expression
    578582                { $$ =new CompositeExprNode( $2, $1, $3 ); }
     
    21752179
    21762180variable_ptr:
    2177         '*' variable_declarator
     2181        ptrref_operator variable_declarator
    21782182                { $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); }
    2179         | '*' type_qualifier_list variable_declarator
     2183        | ptrref_operator type_qualifier_list variable_declarator
    21802184                { $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); }
    21812185        | '(' variable_ptr ')'
     
    22242228
    22252229function_ptr:
    2226         '*' function_declarator
     2230        ptrref_operator function_declarator
    22272231                { $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); }
    2228         | '*' type_qualifier_list function_declarator
     2232        | ptrref_operator type_qualifier_list function_declarator
    22292233                { $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); }
    22302234        | '(' function_ptr ')'
     
    22612265
    22622266old_function_ptr:
    2263         '*' old_function_declarator
     2267        ptrref_operator old_function_declarator
    22642268                { $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); }
    2265         | '*' type_qualifier_list old_function_declarator
     2269        | ptrref_operator type_qualifier_list old_function_declarator
    22662270                { $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); }
    22672271        | '(' old_function_ptr ')'
     
    23052309
    23062310type_ptr:
    2307         '*' type_redeclarator
     2311        ptrref_operator type_redeclarator
    23082312                { $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); }
    2309         | '*' type_qualifier_list type_redeclarator
     2313        | ptrref_operator type_qualifier_list type_redeclarator
    23102314                { $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); }
    23112315        | '(' type_ptr ')'
     
    23492353
    23502354identifier_parameter_ptr:
    2351         '*' identifier_parameter_declarator
     2355        ptrref_operator identifier_parameter_declarator
    23522356                { $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); }
    2353         | '*' type_qualifier_list identifier_parameter_declarator
     2357        | ptrref_operator type_qualifier_list identifier_parameter_declarator
    23542358                { $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); }
    23552359        | '(' identifier_parameter_ptr ')'
     
    24272431
    24282432type_parameter_ptr:
    2429         '*' type_parameter_redeclarator
     2433        ptrref_operator type_parameter_redeclarator
    24302434                { $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); }
    2431         | '*' type_qualifier_list type_parameter_redeclarator
     2435        | ptrref_operator type_qualifier_list type_parameter_redeclarator
    24322436                { $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); }
    24332437        | '(' type_parameter_ptr ')'
     
    24672471
    24682472abstract_ptr:
    2469         '*'
     2473        ptrref_operator
    24702474                { $$ = DeclarationNode::newPointer( 0 ); }
    2471         | '*' type_qualifier_list
     2475        | ptrref_operator type_qualifier_list
    24722476                { $$ = DeclarationNode::newPointer( $2 ); }
    2473         | '*' abstract_declarator
     2477        | ptrref_operator abstract_declarator
    24742478                { $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); }
    2475         | '*' type_qualifier_list abstract_declarator
     2479        | ptrref_operator type_qualifier_list abstract_declarator
    24762480                { $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); }
    24772481        | '(' abstract_ptr ')'
     
    25362540
    25372541abstract_parameter_ptr:
    2538         '*'
     2542        ptrref_operator
    25392543                { $$ = DeclarationNode::newPointer( 0 ); }
    2540         | '*' type_qualifier_list
     2544        | ptrref_operator type_qualifier_list
    25412545                { $$ = DeclarationNode::newPointer( $2 ); }
    2542         | '*' abstract_parameter_declarator
     2546        | ptrref_operator abstract_parameter_declarator
    25432547                { $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); }
    2544         | '*' type_qualifier_list abstract_parameter_declarator
     2548        | ptrref_operator type_qualifier_list abstract_parameter_declarator
    25452549                { $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); }
    25462550        | '(' abstract_parameter_ptr ')'
     
    26142618
    26152619variable_abstract_ptr:
    2616         '*'
     2620        ptrref_operator
    26172621                { $$ = DeclarationNode::newPointer( 0 ); }
    2618         | '*' type_qualifier_list
     2622        | ptrref_operator type_qualifier_list
    26192623                { $$ = DeclarationNode::newPointer( $2 ); }
    2620         | '*' variable_abstract_declarator
     2624        | ptrref_operator variable_abstract_declarator
    26212625                { $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); }
    2622         | '*' type_qualifier_list variable_abstract_declarator
     2626        | ptrref_operator type_qualifier_list variable_abstract_declarator
    26232627                { $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); }
    26242628        | '(' variable_abstract_ptr ')'
     
    26592663
    26602664new_identifier_parameter_ptr:                                                   // CFA
    2661         '*' type_specifier
     2665        ptrref_operator type_specifier
    26622666                { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
    2663         | type_qualifier_list '*' type_specifier
     2667        | type_qualifier_list ptrref_operator type_specifier
    26642668                { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 ) ); }
    2665         | '*' new_abstract_function
     2669        | ptrref_operator new_abstract_function
    26662670                { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
    2667         | type_qualifier_list '*' new_abstract_function
     2671        | type_qualifier_list ptrref_operator new_abstract_function
    26682672                { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 ) ); }
    2669         | '*' new_identifier_parameter_declarator_tuple
     2673        | ptrref_operator new_identifier_parameter_declarator_tuple
    26702674                { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
    2671         | type_qualifier_list '*' new_identifier_parameter_declarator_tuple
     2675        | type_qualifier_list ptrref_operator new_identifier_parameter_declarator_tuple
    26722676                { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 ) ); }
    26732677        ;
     
    27462750
    27472751new_abstract_ptr:                                                                               // CFA
    2748         '*' type_specifier
     2752        ptrref_operator type_specifier
    27492753                { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
    2750         | type_qualifier_list '*' type_specifier
     2754        | type_qualifier_list ptrref_operator type_specifier
    27512755                { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 ) ); }
    2752         | '*' new_abstract_function
     2756        | ptrref_operator new_abstract_function
    27532757                { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
    2754         | type_qualifier_list '*' new_abstract_function
     2758        | type_qualifier_list ptrref_operator new_abstract_function
    27552759                { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 ) ); }
    2756         | '*' new_abstract_declarator_tuple
     2760        | ptrref_operator new_abstract_declarator_tuple
    27572761                { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
    2758         | type_qualifier_list '*' new_abstract_declarator_tuple
     2762        | type_qualifier_list ptrref_operator new_abstract_declarator_tuple
    27592763                { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 ) ); }
    27602764        ;
Note: See TracChangeset for help on using the changeset viewer.