Changes in src/Parser/parser.yy [d0ffed1:ca1a547]
- File:
-
- 1 edited
-
src/Parser/parser.yy (modified) (16 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/Parser/parser.yy
rd0ffed1 rca1a547 10 10 // Created On : Sat Sep 1 20:22:55 2001 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : T ue Feb 28 09:58:10201713 // Update Count : 2 20812 // Last Modified On : Thu Feb 23 15:23:49 2017 13 // Update Count : 2187 14 14 // 15 15 … … 196 196 197 197 %type<aggKey> aggregate_key 198 %type<decl> aggregate_type aggregate_type_nobody198 %type<decl> aggregate_type 199 199 200 200 %type<decl> assertion assertion_list_opt … … 207 207 208 208 %type<decl> declaration declaration_list declaration_list_opt declaration_qualifier_list 209 %type<decl> declaration_specifier declarat ion_specifier_nobody declarator declaring_list210 211 %type<decl> elaborated_type elaborated_type_nobody212 213 %type<decl> enumerator_list enum_type enum_type_nobody209 %type<decl> declaration_specifier declarator declaring_list 210 211 %type<decl> elaborated_type 212 213 %type<decl> enumerator_list enum_type 214 214 %type<en> enumerator_value_opt 215 215 … … 251 251 %type<decl> storage_class storage_class_list 252 252 253 %type<decl> sue_declaration_specifier sue_ declaration_specifier_nobody sue_type_specifier sue_type_specifier_nobody253 %type<decl> sue_declaration_specifier sue_type_specifier 254 254 255 255 %type<tclass> type_class … … 268 268 %type<en> type_name_list 269 269 270 %type<decl> type_qualifier type_qualifier_name type_qualifier_list type_qualifier_list_opt type_specifier type_specifier_nobody270 %type<decl> type_qualifier type_qualifier_name type_qualifier_list type_qualifier_list_opt type_specifier 271 271 272 272 %type<decl> variable_declarator variable_ptr variable_array variable_function … … 973 973 974 974 exception_declaration: 975 // No SUE declaration in parameter list. 976 type_specifier_nobody 977 | type_specifier_nobody declarator 975 // A semantic check is required to ensure type_specifier does not create a new type, e.g.: 976 // 977 // catch ( struct { int i; } x ) ... 978 // 979 // This new type cannot catch any thrown type because of name equivalence among types. 980 type_specifier 981 | type_specifier declarator 978 982 { 979 983 typedefTable.addToEnclosingScope( TypedefTable::ID ); 980 984 $$ = $2->addType( $1 ); 981 985 } 982 | type_specifier _nobodyvariable_abstract_declarator986 | type_specifier variable_abstract_declarator 983 987 { $$ = $2->addType( $1 ); } 984 988 | cfa_abstract_declarator_tuple no_attr_identifier // CFA … … 1345 1349 ; 1346 1350 1347 declaration_specifier_nobody: // type specifier + storage class - {...} 1348 // Preclude SUE declarations in restricted scopes: 1349 // 1350 // int f( struct S { int i; } s1, Struct S s2 ) { struct S s3; ... } 1351 // 1352 // because it is impossible to call f due to name equivalence. 1353 basic_declaration_specifier 1354 | sue_declaration_specifier_nobody 1355 | typedef_declaration_specifier 1356 | typegen_declaration_specifier 1357 ; 1358 1359 type_specifier: // type specifier 1351 type_specifier: // declaration specifier - storage class 1360 1352 basic_type_specifier 1361 1353 | sue_type_specifier 1362 | typedef_type_specifier1363 | typegen_type_specifier1364 ;1365 1366 type_specifier_nobody: // type specifier - {...}1367 // Preclude SUE declarations in restricted scopes:1368 //1369 // int f( struct S { int i; } s1, Struct S s2 ) { struct S s3; ... }1370 //1371 // because it is impossible to call f due to name equivalence.1372 basic_type_specifier1373 | sue_type_specifier_nobody1374 1354 | typedef_type_specifier 1375 1355 | typegen_type_specifier … … 1534 1514 ; 1535 1515 1536 sue_declaration_specifier: // struct, union, enum + storage class + type specifier1516 sue_declaration_specifier: 1537 1517 sue_type_specifier 1538 1518 | declaration_qualifier_list sue_type_specifier … … 1544 1524 ; 1545 1525 1546 sue_type_specifier: // struct, union, enum + type specifier1547 elaborated_type 1526 sue_type_specifier: 1527 elaborated_type // struct, union, enum 1548 1528 | type_qualifier_list elaborated_type 1549 1529 { $$ = $2->addQualifiers( $1 ); } 1550 1530 | sue_type_specifier type_qualifier 1551 { $$ = $1->addQualifiers( $2 ); }1552 ;1553 1554 sue_declaration_specifier_nobody: // struct, union, enum - {...} + storage class + type specifier1555 sue_type_specifier_nobody1556 | declaration_qualifier_list sue_type_specifier_nobody1557 { $$ = $2->addQualifiers( $1 ); }1558 | sue_declaration_specifier_nobody storage_class // remaining OBSOLESCENT (see 2)1559 { $$ = $1->addQualifiers( $2 ); }1560 | sue_declaration_specifier_nobody storage_class type_qualifier_list1561 { $$ = $1->addQualifiers( $2 )->addQualifiers( $3 ); }1562 ;1563 1564 sue_type_specifier_nobody: // struct, union, enum - {...} + type specifier1565 elaborated_type_nobody1566 | type_qualifier_list elaborated_type_nobody1567 { $$ = $2->addQualifiers( $1 ); }1568 | sue_type_specifier_nobody type_qualifier1569 1531 { $$ = $1->addQualifiers( $2 ); } 1570 1532 ; … … 1589 1551 ; 1590 1552 1591 elaborated_type: // struct, union, enum1553 elaborated_type: 1592 1554 aggregate_type 1593 1555 | enum_type 1594 1556 ; 1595 1557 1596 elaborated_type_nobody: // struct, union, enum - {...} 1597 aggregate_type_nobody 1598 | enum_type_nobody 1599 ; 1600 1601 aggregate_type: // struct, union 1558 aggregate_type: 1602 1559 aggregate_key attribute_list_opt '{' field_declaration_list '}' 1603 1560 { $$ = DeclarationNode::newAggregate( $1, nullptr, nullptr, $4, true )->addQualifiers( $2 ); } 1561 | aggregate_key attribute_list_opt no_attr_identifier_or_type_name 1562 { 1563 typedefTable.makeTypedef( *$3 ); 1564 $$ = DeclarationNode::newAggregate( $1, $3, nullptr, nullptr, false )->addQualifiers( $2 ); 1565 } 1604 1566 | aggregate_key attribute_list_opt no_attr_identifier_or_type_name 1605 1567 { typedefTable.makeTypedef( *$3 ); } … … 1608 1570 | aggregate_key attribute_list_opt '(' type_name_list ')' '{' field_declaration_list '}' // CFA 1609 1571 { $$ = DeclarationNode::newAggregate( $1, nullptr, $4, $7, false )->addQualifiers( $2 ); } 1610 | aggregate_type_nobody1611 ;1612 1613 aggregate_type_nobody: // struct, union - {...}1614 aggregate_key attribute_list_opt no_attr_identifier_or_type_name1615 {1616 typedefTable.makeTypedef( *$3 );1617 $$ = DeclarationNode::newAggregate( $1, $3, nullptr, nullptr, false )->addQualifiers( $2 );1618 }1619 1572 | aggregate_key attribute_list_opt typegen_name // CFA, S/R conflict 1620 1573 { $$ = $3->addQualifiers( $2 ); } … … 1694 1647 ; 1695 1648 1696 enum_type: // enum1649 enum_type: 1697 1650 ENUM attribute_list_opt '{' enumerator_list comma_opt '}' 1698 1651 { $$ = DeclarationNode::newEnum( nullptr, $4, true )->addQualifiers( $2 ); } 1652 | ENUM attribute_list_opt no_attr_identifier_or_type_name 1653 { 1654 typedefTable.makeTypedef( *$3 ); 1655 $$ = DeclarationNode::newEnum( $3, 0, false )->addQualifiers( $2 ); 1656 } 1699 1657 | ENUM attribute_list_opt no_attr_identifier_or_type_name 1700 1658 { typedefTable.makeTypedef( *$3 ); } 1701 1659 '{' enumerator_list comma_opt '}' 1702 1660 { $$ = DeclarationNode::newEnum( $3, $6, true )->addQualifiers( $2 ); } 1703 | enum_type_nobody1704 ;1705 1706 enum_type_nobody: // enum - {...}1707 ENUM attribute_list_opt no_attr_identifier_or_type_name1708 {1709 typedefTable.makeTypedef( *$3 );1710 $$ = DeclarationNode::newEnum( $3, 0, false )->addQualifiers( $2 );1711 }1712 1661 ; 1713 1662 … … 1810 1759 1811 1760 parameter_declaration: 1812 // No SUE declaration in parameter list. 1813 declaration_specifier_nobody identifier_parameter_declarator assignment_opt 1761 declaration_specifier identifier_parameter_declarator assignment_opt 1814 1762 { 1815 1763 typedefTable.addToEnclosingScope( TypedefTable::ID ); 1816 1764 $$ = $2->addType( $1 )->addInitializer( $3 ? new InitializerNode( $3 ) : nullptr ); 1817 1765 } 1818 | declaration_specifier _nobodytype_parameter_redeclarator assignment_opt1766 | declaration_specifier type_parameter_redeclarator assignment_opt 1819 1767 { 1820 1768 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 1824 1772 1825 1773 abstract_parameter_declaration: 1826 declaration_specifier _nobodyassignment_opt1774 declaration_specifier assignment_opt 1827 1775 { $$ = $1->addInitializer( $2 ? new InitializerNode( $2 ) : nullptr ); } 1828 | declaration_specifier _nobodyabstract_parameter_declarator assignment_opt1776 | declaration_specifier abstract_parameter_declarator assignment_opt 1829 1777 { $$ = $2->addType( $1 )->addInitializer( $3 ? new InitializerNode( $3 ) : nullptr ); } 1830 1778 ; … … 2850 2798 2851 2799 cfa_identifier_parameter_ptr: // CFA 2852 // No SUE declaration in parameter list. 2853 ptrref_operator type_specifier_nobody 2800 ptrref_operator type_specifier 2854 2801 { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 ) ); } 2855 | type_qualifier_list ptrref_operator type_specifier _nobody2802 | type_qualifier_list ptrref_operator type_specifier 2856 2803 { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 ) ); } 2857 2804 | ptrref_operator cfa_abstract_function … … 2868 2815 // Only the first dimension can be empty or have qualifiers. Empty dimension must be factored out due to 2869 2816 // shift/reduce conflict with new-style empty (void) function return type. 2870 '[' ']' type_specifier _nobody2817 '[' ']' type_specifier 2871 2818 { $$ = $3->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); } 2872 | cfa_array_parameter_1st_dimension type_specifier _nobody2819 | cfa_array_parameter_1st_dimension type_specifier 2873 2820 { $$ = $2->addNewArray( $1 ); } 2874 | '[' ']' multi_array_dimension type_specifier _nobody2821 | '[' ']' multi_array_dimension type_specifier 2875 2822 { $$ = $4->addNewArray( $3 )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); } 2876 | cfa_array_parameter_1st_dimension multi_array_dimension type_specifier _nobody2823 | cfa_array_parameter_1st_dimension multi_array_dimension type_specifier 2877 2824 { $$ = $3->addNewArray( $2 )->addNewArray( $1 ); } 2878 | multi_array_dimension type_specifier _nobody2825 | multi_array_dimension type_specifier 2879 2826 { $$ = $2->addNewArray( $1 ); } 2880 2827
Note:
See TracChangeset
for help on using the changeset viewer.