Changes in src/Parser/parser.yy [d48e529:f9941ff]
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/Parser/parser.yy
rd48e529 rf9941ff 10 10 // Created On : Sat Sep 1 20:22:55 2001 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Thu Sep 14 23:07:12201713 // Update Count : 28 1512 // Last Modified On : Wed Oct 25 12:28:54 2017 13 // Update Count : 2893 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 45 #define YYERROR_VERBOSE // more information in syntax errors 46 46 47 47 #undef __GNUC_MINOR__ … … 117 117 bool forall = false; // aggregate have one or more forall qualifiers ? 118 118 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) 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 } 135 132 %} 136 133 137 134 %define parse.error verbose 138 135 139 // Types declaration 136 // Types declaration for productions 140 137 %union 141 138 { … … 173 170 %token VOID CHAR SHORT INT LONG FLOAT DOUBLE SIGNED UNSIGNED 174 171 %token BOOL COMPLEX IMAGINARY // C99 172 %token INT128 FLOAT80 FLOAT128 // GCC 175 173 %token ZERO_T ONE_T // CFA 176 174 %token VALIST // GCC … … 182 180 %token ATTRIBUTE EXTENSION // GCC 183 181 %token IF ELSE SWITCH CASE DEFAULT DO WHILE FOR BREAK CONTINUE GOTO RETURN 184 %token CHOOSE DISABLE ENABLE FALLTHRU TRY CATCH CATCHRESUME FINALLY THROW THROWRESUME AT WITH WHEN WAITFOR // CFA182 %token CHOOSE DISABLE ENABLE FALLTHRU FALLTHROUGH TRY CATCH CATCHRESUME FINALLY THROW THROWRESUME AT WITH WHEN WAITFOR // CFA 185 183 %token ASM // C99, extension ISO/IEC 9899:1999 Section J.5.10(1) 186 184 %token ALIGNAS ALIGNOF GENERIC STATICASSERT // C11 … … 252 250 %type<sn> exception_statement handler_clause finally_clause 253 251 %type<catch_kind> handler_key 252 %type<sn> mutex_statement 254 253 %type<en> when_clause when_clause_opt waitfor timeout 255 254 %type<sn> waitfor_statement … … 363 362 %precedence ELSE // token precedence for start of else clause in IF/WAITFOR statement 364 363 365 %locations 364 %locations // support location tracking for error messages 366 365 367 366 %start translation_unit // parse-tree root … … 458 457 | '(' compound_statement ')' // GCC, lambda expression 459 458 { $$ = new ExpressionNode( new StmtExpr( dynamic_cast< CompoundStmt * >(maybeMoveBuild< Statement >($2) ) ) ); } 460 | primary_expression '{' argument_expression_list '}' // CFA, constructor call461 {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 }466 459 | type_name '.' no_attr_identifier // CFA, nested type 467 { $$ = nullptr; } // FIX ME460 { throw SemanticError("Qualified names are currently unimplemented."); $$ = nullptr; } // FIX ME 468 461 | type_name '.' '[' push field_list pop ']' // CFA, nested type / tuple field selector 469 { $$ = nullptr; } // FIX ME462 { throw SemanticError("Qualified names are currently unimplemented."); $$ = nullptr; } // FIX ME 470 463 ; 471 464 … … 478 471 // equivalent to the old x[i,j]. 479 472 { $$ = new ExpressionNode( build_binary_val( OperKinds::Index, $1, $4 ) ); } 473 | postfix_expression '{' argument_expression_list '}' // CFA, constructor call 474 { 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 } 480 479 | postfix_expression '(' argument_expression_list ')' 481 480 { $$ = new ExpressionNode( build_func( $1, $3 ) ); } … … 809 808 | jump_statement 810 809 | with_statement 810 | mutex_statement 811 811 | waitfor_statement 812 812 | exception_statement … … 974 974 ; 975 975 976 fall_through_name: // CFA 977 FALLTHRU 978 | FALLTHROUGH 979 ; 980 976 981 fall_through: // CFA 977 FALLTHRU982 fall_through_name 978 983 { $$ = nullptr; } 979 | FALLTHRU';'984 | fall_through_name ';' 980 985 { $$ = nullptr; } 981 986 ; … … 1033 1038 ; 1034 1039 1040 // If MUTEX becomes a general qualifier, there are shift/reduce conflicts, so change syntax to "with mutex". 1041 mutex_statement: 1042 MUTEX '(' argument_expression_list ')' statement 1043 { $$ = nullptr; } // FIX ME 1044 ; 1045 1035 1046 when_clause: 1036 1047 WHEN '(' comma_expression ')' … … 1551 1562 | VOLATILE 1552 1563 { $$ = DeclarationNode::newTypeQualifier( Type::Volatile ); } 1553 | MUTEX1554 { $$ = DeclarationNode::newTypeQualifier( Type::Mutex ); }1555 1564 | ATOMIC 1556 1565 { $$ = DeclarationNode::newTypeQualifier( Type::Atomic ); } … … 1606 1615 1607 1616 basic_type_name: 1608 CHAR 1617 VOID 1618 { $$ = DeclarationNode::newBasicType( DeclarationNode::Void ); } 1619 | BOOL // C99 1620 { $$ = DeclarationNode::newBasicType( DeclarationNode::Bool ); } 1621 | CHAR 1609 1622 { $$ = DeclarationNode::newBasicType( DeclarationNode::Char ); } 1623 | INT 1624 { $$ = DeclarationNode::newBasicType( DeclarationNode::Int ); } 1625 | INT128 1626 { $$ = DeclarationNode::newBasicType( DeclarationNode::Int128 ); } 1627 | FLOAT 1628 { $$ = DeclarationNode::newBasicType( DeclarationNode::Float ); } 1629 | FLOAT80 1630 { $$ = DeclarationNode::newBasicType( DeclarationNode::Float80 ); } 1631 | FLOAT128 1632 { $$ = DeclarationNode::newBasicType( DeclarationNode::Float128 ); } 1610 1633 | DOUBLE 1611 1634 { $$ = 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 ); } 1635 | COMPLEX // C99 1636 { $$ = DeclarationNode::newComplexType( DeclarationNode::Complex ); } 1637 | IMAGINARY // C99 1638 { $$ = DeclarationNode::newComplexType( DeclarationNode::Imaginary ); } 1620 1639 | SIGNED 1621 1640 { $$ = DeclarationNode::newSignedNess( DeclarationNode::Signed ); } 1622 1641 | UNSIGNED 1623 1642 { $$ = DeclarationNode::newSignedNess( DeclarationNode::Unsigned ); } 1624 | VOID 1625 { $$ = DeclarationNode::newBasicType( DeclarationNode::Void ); } 1626 | BOOL // C99 1627 { $$ = DeclarationNode::newBasicType( DeclarationNode::Bool ); } 1628 | COMPLEX // C99 1629 { $$ = DeclarationNode::newComplexType( DeclarationNode::Complex ); } 1630 | IMAGINARY // C99 1631 { $$ = DeclarationNode::newComplexType( DeclarationNode::Imaginary ); } 1643 | SHORT 1644 { $$ = DeclarationNode::newLength( DeclarationNode::Short ); } 1645 | LONG 1646 { $$ = DeclarationNode::newLength( DeclarationNode::Long ); } 1632 1647 | ZERO_T 1633 1648 { $$ = DeclarationNode::newBuiltinType( DeclarationNode::Zero ); } … … 2476 2491 | TYPEDEFname 2477 2492 | TYPEGENname 2493 | FALLTHROUGH 2494 { $$ = Token{ new string( "fallthrough" ), { nullptr, -1 } }; } 2478 2495 | CONST 2479 2496 { $$ = Token{ new string( "__const__" ), { nullptr, -1 } }; } … … 2699 2716 paren_identifier attribute_list_opt 2700 2717 { $$ = $1->addQualifiers( $2 ); } 2718 | '&' MUTEX paren_identifier attribute_list_opt 2719 { $$ = $3->addPointer( DeclarationNode::newPointer( DeclarationNode::newTypeQualifier( Type::Mutex ), OperKinds::AddressOf ) )->addQualifiers( $4 ); } 2701 2720 | identifier_parameter_ptr 2702 2721 | identifier_parameter_array attribute_list_opt … … 2739 2758 // 2740 2759 // typedef int foo; 2760 // forall( otype T ) struct foo; 2741 2761 // int f( int foo ); // redefine typedef name in new scope 2742 2762 // … … 2746 2766 typedef attribute_list_opt 2747 2767 { $$ = $1->addQualifiers( $2 ); } 2768 | '&' MUTEX typedef attribute_list_opt 2769 { $$ = $3->addPointer( DeclarationNode::newPointer( DeclarationNode::newTypeQualifier( Type::Mutex ), OperKinds::AddressOf ) )->addQualifiers( $4 ); } 2748 2770 | type_parameter_ptr 2749 2771 | type_parameter_array attribute_list_opt … … 2892 2914 abstract_parameter_declarator: 2893 2915 abstract_parameter_ptr 2916 | '&' MUTEX attribute_list_opt 2917 { $$ = DeclarationNode::newPointer( DeclarationNode::newTypeQualifier( Type::Mutex ), OperKinds::AddressOf )->addQualifiers( $3 ); } 2894 2918 | abstract_parameter_array attribute_list_opt 2895 2919 { $$ = $1->addQualifiers( $2 ); }
Note:
See TracChangeset
for help on using the changeset viewer.