Changes in src/Parser/parser.yy [b6b3c42:d48e529]
- File:
-
- 1 edited
-
src/Parser/parser.yy (modified) (15 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/Parser/parser.yy
rb6b3c42 rd48e529 10 10 // Created On : Sat Sep 1 20:22:55 2001 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Mon Oct 16 11:07:29201713 // Update Count : 28 9212 // Last Modified On : Thu Sep 14 23:07:12 2017 13 // Update Count : 2815 14 14 // 15 15 … … 43 43 #define YYDEBUG_LEXER_TEXT (yylval) // lexer loads this up each time 44 44 #define YYDEBUG 1 // get the pretty debugging code to compile 45 #define YYERROR_VERBOSE // more information in syntax errors45 #define YYERROR_VERBOSE 46 46 47 47 #undef __GNUC_MINOR__ … … 117 117 bool forall = false; // aggregate have one or more forall qualifiers ? 118 118 119 // https://www.gnu.org/software/bison/manual/bison.html#Location-Type 120 #define YYLLOC_DEFAULT(Cur, Rhs, N) \ 121 if ( N ) { \ 122 (Cur).first_line = YYRHSLOC( Rhs, 1 ).first_line; \ 123 (Cur).first_column = YYRHSLOC( Rhs, 1 ).first_column; \ 124 (Cur).last_line = YYRHSLOC( Rhs, N ).last_line; \ 125 (Cur).last_column = YYRHSLOC( Rhs, N ).last_column; \ 126 (Cur).filename = YYRHSLOC( Rhs, 1 ).filename; \ 127 } else { \ 128 (Cur).first_line = (Cur).last_line = YYRHSLOC( Rhs, 0 ).last_line; \ 129 (Cur).first_column = (Cur).last_column = YYRHSLOC( Rhs, 0 ).last_column; \ 130 (Cur).filename = YYRHSLOC( Rhs, 0 ).filename; \ 131 } 119 # define YYLLOC_DEFAULT(Cur, Rhs, N) \ 120 do \ 121 if (N) { \ 122 (Cur).first_line = YYRHSLOC(Rhs, 1).first_line; \ 123 (Cur).first_column = YYRHSLOC(Rhs, 1).first_column; \ 124 (Cur).last_line = YYRHSLOC(Rhs, N).last_line; \ 125 (Cur).last_column = YYRHSLOC(Rhs, N).last_column; \ 126 (Cur).filename = YYRHSLOC(Rhs, 1).filename; \ 127 } else { \ 128 (Cur).first_line = (Cur).last_line = \ 129 YYRHSLOC(Rhs, 0).last_line; \ 130 (Cur).first_column = (Cur).last_column = \ 131 YYRHSLOC(Rhs, 0).last_column; \ 132 (Cur).filename = YYRHSLOC(Rhs, 0).filename; \ 133 } \ 134 while (0) 132 135 %} 133 136 134 137 %define parse.error verbose 135 138 136 // Types declaration for productions139 // Types declaration 137 140 %union 138 141 { … … 170 173 %token VOID CHAR SHORT INT LONG FLOAT DOUBLE SIGNED UNSIGNED 171 174 %token BOOL COMPLEX IMAGINARY // C99 172 %token INT128 FLOAT80 FLOAT128 // GCC173 175 %token ZERO_T ONE_T // CFA 174 176 %token VALIST // GCC … … 250 252 %type<sn> exception_statement handler_clause finally_clause 251 253 %type<catch_kind> handler_key 252 %type<sn> mutex_statement253 254 %type<en> when_clause when_clause_opt waitfor timeout 254 255 %type<sn> waitfor_statement … … 457 458 | '(' compound_statement ')' // GCC, lambda expression 458 459 { $$ = new ExpressionNode( new StmtExpr( dynamic_cast< CompoundStmt * >(maybeMoveBuild< Statement >($2) ) ) ); } 460 | primary_expression '{' argument_expression_list '}' // CFA, constructor call 461 { 462 Token fn; 463 fn.str = new std::string( "?{}" ); // location undefined - use location of '{'? 464 $$ = new ExpressionNode( new ConstructorExpr( build_func( new ExpressionNode( build_varref( fn ) ), (ExpressionNode *)( $1 )->set_last( $3 ) ) ) ); 465 } 459 466 | type_name '.' no_attr_identifier // CFA, nested type 460 467 { $$ = nullptr; } // FIX ME … … 471 478 // equivalent to the old x[i,j]. 472 479 { $$ = new ExpressionNode( build_binary_val( OperKinds::Index, $1, $4 ) ); } 473 | postfix_expression '{' argument_expression_list '}' // CFA, constructor call474 {475 Token fn;476 fn.str = new std::string( "?{}" ); // location undefined - use location of '{'?477 $$ = new ExpressionNode( new ConstructorExpr( build_func( new ExpressionNode( build_varref( fn ) ), (ExpressionNode *)( $1 )->set_last( $3 ) ) ) );478 }479 480 | postfix_expression '(' argument_expression_list ')' 480 481 { $$ = new ExpressionNode( build_func( $1, $3 ) ); } … … 808 809 | jump_statement 809 810 | with_statement 810 | mutex_statement811 811 | waitfor_statement 812 812 | exception_statement … … 1033 1033 ; 1034 1034 1035 // If MUTEX becomes a general qualifier, there are shift/reduce conflicts, so change syntax to "with mutex".1036 mutex_statement:1037 MUTEX '(' argument_expression_list ')' statement1038 { $$ = nullptr; } // FIX ME1039 ;1040 1041 1035 when_clause: 1042 1036 WHEN '(' comma_expression ')' … … 1557 1551 | VOLATILE 1558 1552 { $$ = DeclarationNode::newTypeQualifier( Type::Volatile ); } 1553 | MUTEX 1554 { $$ = DeclarationNode::newTypeQualifier( Type::Mutex ); } 1559 1555 | ATOMIC 1560 1556 { $$ = DeclarationNode::newTypeQualifier( Type::Atomic ); } … … 1610 1606 1611 1607 basic_type_name: 1612 VOID 1608 CHAR 1609 { $$ = DeclarationNode::newBasicType( DeclarationNode::Char ); } 1610 | DOUBLE 1611 { $$ = DeclarationNode::newBasicType( DeclarationNode::Double ); } 1612 | FLOAT 1613 { $$ = DeclarationNode::newBasicType( DeclarationNode::Float ); } 1614 | INT 1615 { $$ = DeclarationNode::newBasicType( DeclarationNode::Int ); } 1616 | LONG 1617 { $$ = DeclarationNode::newLength( DeclarationNode::Long ); } 1618 | SHORT 1619 { $$ = DeclarationNode::newLength( DeclarationNode::Short ); } 1620 | SIGNED 1621 { $$ = DeclarationNode::newSignedNess( DeclarationNode::Signed ); } 1622 | UNSIGNED 1623 { $$ = DeclarationNode::newSignedNess( DeclarationNode::Unsigned ); } 1624 | VOID 1613 1625 { $$ = DeclarationNode::newBasicType( DeclarationNode::Void ); } 1614 1626 | BOOL // C99 1615 1627 { $$ = DeclarationNode::newBasicType( DeclarationNode::Bool ); } 1616 | CHAR1617 { $$ = DeclarationNode::newBasicType( DeclarationNode::Char ); }1618 | INT1619 { $$ = DeclarationNode::newBasicType( DeclarationNode::Int ); }1620 | INT1281621 { $$ = DeclarationNode::newBasicType( DeclarationNode::Int128 ); }1622 | FLOAT1623 { $$ = DeclarationNode::newBasicType( DeclarationNode::Float ); }1624 | FLOAT801625 { $$ = DeclarationNode::newBasicType( DeclarationNode::Float80 ); }1626 | FLOAT1281627 { $$ = DeclarationNode::newBasicType( DeclarationNode::Float128 ); }1628 | DOUBLE1629 { $$ = DeclarationNode::newBasicType( DeclarationNode::Double ); }1630 1628 | COMPLEX // C99 1631 1629 { $$ = DeclarationNode::newComplexType( DeclarationNode::Complex ); } 1632 1630 | IMAGINARY // C99 1633 1631 { $$ = DeclarationNode::newComplexType( DeclarationNode::Imaginary ); } 1634 | SIGNED1635 { $$ = DeclarationNode::newSignedNess( DeclarationNode::Signed ); }1636 | UNSIGNED1637 { $$ = DeclarationNode::newSignedNess( DeclarationNode::Unsigned ); }1638 | SHORT1639 { $$ = DeclarationNode::newLength( DeclarationNode::Short ); }1640 | LONG1641 { $$ = DeclarationNode::newLength( DeclarationNode::Long ); }1642 1632 | ZERO_T 1643 1633 { $$ = DeclarationNode::newBuiltinType( DeclarationNode::Zero ); } … … 2709 2699 paren_identifier attribute_list_opt 2710 2700 { $$ = $1->addQualifiers( $2 ); } 2711 | '&' MUTEX paren_identifier attribute_list_opt2712 { $$ = $3->addPointer( DeclarationNode::newPointer( DeclarationNode::newTypeQualifier( Type::Mutex ), OperKinds::AddressOf ) )->addQualifiers( $4 ); }2713 2701 | identifier_parameter_ptr 2714 2702 | identifier_parameter_array attribute_list_opt … … 2751 2739 // 2752 2740 // typedef int foo; 2753 // forall( otype T ) foo( T );2754 2741 // int f( int foo ); // redefine typedef name in new scope 2755 2742 // … … 2759 2746 typedef attribute_list_opt 2760 2747 { $$ = $1->addQualifiers( $2 ); } 2761 | '&' MUTEX typedef attribute_list_opt2762 { $$ = $3->addPointer( DeclarationNode::newPointer( DeclarationNode::newTypeQualifier( Type::Mutex ), OperKinds::AddressOf ) )->addQualifiers( $4 ); }2763 2748 | type_parameter_ptr 2764 2749 | type_parameter_array attribute_list_opt … … 2907 2892 abstract_parameter_declarator: 2908 2893 abstract_parameter_ptr 2909 | '&' MUTEX attribute_list_opt2910 { $$ = DeclarationNode::newPointer( DeclarationNode::newTypeQualifier( Type::Mutex ), OperKinds::AddressOf )->addQualifiers( $3 ); }2911 2894 | abstract_parameter_array attribute_list_opt 2912 2895 { $$ = $1->addQualifiers( $2 ); }
Note:
See TracChangeset
for help on using the changeset viewer.