Changes in src/Parser/parser.yy [9bd6105:135b431]
- File:
-
- 1 edited
-
src/Parser/parser.yy (modified) (25 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/Parser/parser.yy
r9bd6105 r135b431 10 10 // Created On : Sat Sep 1 20:22:55 2001 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Sat Aug 26 17:50:19201713 // Update Count : 27 1212 // Last Modified On : Wed Aug 23 14:53:20 2017 13 // Update Count : 2702 14 14 // 15 15 … … 120 120 %token RESTRICT // C99 121 121 %token ATOMIC // C11 122 %token FORALL MUTEX VIRTUAL// CFA122 %token FORALL LVALUE MUTEX VIRTUAL // CFA 123 123 %token VOID CHAR SHORT INT LONG FLOAT DOUBLE SIGNED UNSIGNED 124 124 %token BOOL COMPLEX IMAGINARY // C99 … … 188 188 %type<flag> asm_volatile_opt 189 189 %type<en> handler_predicate_opt 190 %type<en> when_clause_opt timeout 190 191 191 192 // statements 192 %type<sn> statement labeled_statement compound_statement 193 %type<sn> statement_decl statement_decl_list statement_list_nodecl 194 %type<sn> selection_statement 195 %type<sn> switch_clause_list_opt switch_clause_list choose_clause_list_opt choose_clause_list 193 %type<sn> labeled_statement compound_statement expression_statement selection_statement 194 %type<sn> iteration_statement jump_statement 195 %type<sn> with_statement exception_statement asm_statement 196 %type<sn> waitfor_statement 197 %type<sn> fall_through_opt fall_through 198 %type<sn> statement statement_list 199 %type<sn> block_item_list block_item 200 %type<sn> with_clause_opt 196 201 %type<en> case_value 197 202 %type<sn> case_clause case_value_list case_label case_label_list 198 %type<sn> fall_through fall_through_opt 199 %type<sn> iteration_statement jump_statement 200 %type<sn> expression_statement asm_statement 201 %type<sn> with_statement with_clause_opt 202 %type<sn> exception_statement handler_clause finally_clause 203 %type<sn> switch_clause_list_opt switch_clause_list choose_clause_list_opt choose_clause_list 204 %type<sn> handler_clause finally_clause 203 205 %type<catch_kind> handler_key 204 %type<en> when_clause when_clause_opt waitfor timeout205 %type<sn> waitfor_statement206 206 %type<wfs> waitfor_clause 207 %type<en> waitfor 207 208 208 209 // declarations … … 306 307 // Similar issues exit with the waitfor statement. 307 308 308 // Order of these lines matters (low-to-high precedence). THEN is left associative over WOR/TIMEOUT/ELSE, WOR is left309 // associative overTIMEOUT/ELSE, and TIMEOUT is left associative over ELSE.309 // Order of these lines matters. THEN is left associative over WOR/TIMEOUT/ELSE, WOR is left associative over 310 // TIMEOUT/ELSE, and TIMEOUT is left associative over ELSE. 310 311 %precedence THEN // rule precedence for IF/WAITFOR statement 311 312 %precedence WOR // token precedence for start of WOR in WAITFOR statement … … 568 569 | '&' { $$ = OperKinds::AddressOf; } 569 570 // GCC, address of label must be handled by semantic check for ref,ref,label 570 | ANDAND { $$ = OperKinds::And; }571 // | ANDAND { $$ = OperKinds::And; } 571 572 ; 572 573 … … 690 691 conditional_expression 691 692 | unary_expression assignment_operator assignment_expression 692 { $$ = new ExpressionNode( build_binary_ val( $2, $1, $3 ) ); }693 { $$ = new ExpressionNode( build_binary_ptr( $2, $1, $3 ) ); } 693 694 ; 694 695 … … 776 777 push push 777 778 local_label_declaration_opt // GCC, local labels 778 statement_decl_list// C99, intermix declarations and statements779 block_item_list // C99, intermix declarations and statements 779 780 pop '}' 780 781 { $$ = new StatementNode( build_compound( $5 ) ); } 781 782 ; 782 783 783 statement_decl_list:// C99784 statement_decl785 | statement_decl_list push statement_decl784 block_item_list: // C99 785 block_item 786 | block_item_list push block_item 786 787 { if ( $1 != 0 ) { $1->set_last( $3 ); $$ = $1; } } 787 788 ; 788 789 789 statement_decl:790 block_item: 790 791 declaration // CFA, new & old style declarations 791 792 { $$ = new StatementNode( $1 ); } … … 805 806 ; 806 807 807 statement_list _nodecl:808 statement_list: 808 809 statement 809 | statement_list _nodeclstatement810 | statement_list statement 810 811 { if ( $1 != 0 ) { $1->set_last( $2 ); $$ = $1; } } 811 812 ; … … 817 818 818 819 selection_statement: 819 IF '(' push if_control_expression ')' statement %prec THEN820 IF '(' push if_control_expression ')' statement %prec THEN 820 821 // explicitly deal with the shift/reduce conflict on if/else 821 822 { $$ = new StatementNode( build_if( $4, $6, nullptr ) ); } … … 892 893 893 894 switch_clause_list: // CFA 894 case_label_list statement_list _nodecl895 case_label_list statement_list 895 896 { $$ = $1->append_last_case( new StatementNode( build_compound( $2 ) ) ); } 896 | switch_clause_list case_label_list statement_list _nodecl897 | switch_clause_list case_label_list statement_list 897 898 { $$ = (StatementNode *)( $1->set_last( $2->append_last_case( new StatementNode( build_compound( $3 ) ) ) ) ); } 898 899 ; … … 907 908 case_label_list fall_through 908 909 { $$ = $1->append_last_case( $2 ); } 909 | case_label_list statement_list _nodeclfall_through_opt910 | case_label_list statement_list fall_through_opt 910 911 { $$ = $1->append_last_case( new StatementNode( build_compound( (StatementNode *)$2->set_last( $3 ) ) ) ); } 911 912 | choose_clause_list case_label_list fall_through 912 913 { $$ = (StatementNode *)( $1->set_last( $2->append_last_case( $3 ))); } 913 | choose_clause_list case_label_list statement_list _nodeclfall_through_opt914 | choose_clause_list case_label_list statement_list fall_through_opt 914 915 { $$ = (StatementNode *)( $1->set_last( $2->append_last_case( new StatementNode( build_compound( (StatementNode *)$3->set_last( $4 ) ) ) ) ) ); } 915 916 ; … … 980 981 ; 981 982 982 when_clause:983 WHEN '(' comma_expression ')'984 { $$ = $3; }985 ;986 987 983 when_clause_opt: 988 984 // empty 989 985 { $$ = nullptr; } 990 | when_clause 986 | WHEN '(' comma_expression ')' 987 { $$ = $3; } 991 988 ; 992 989 … … 1011 1008 1012 1009 waitfor_clause: 1013 when_clause_opt waitfor statement %prec THEN1010 when_clause_opt waitfor statement %prec THEN 1014 1011 { $$ = build_waitfor( $2, $3, $1 ); } 1015 1012 | when_clause_opt waitfor statement WOR waitfor_clause 1016 1013 { $$ = build_waitfor( $2, $3, $1, $5 ); } 1017 | when_clause_opt timeout statement %prec THEN1014 | when_clause_opt timeout statement %prec THEN 1018 1015 { $$ = build_waitfor_timeout( $2, $3, $1 ); } 1019 1016 | when_clause_opt ELSE statement 1020 1017 { $$ = build_waitfor_timeout( nullptr, $3, $1 ); } 1021 // "else" must be conditional after timeout or timeout is never triggered (i.e., it is meaningless) 1022 | when_clause_opt timeout statement WOR when_clause ELSE statement 1018 | when_clause_opt timeout statement WOR when_clause_opt ELSE statement 1023 1019 { $$ = build_waitfor_timeout( $2, $3, $1, $7, $5 ); } 1024 1020 ; 1025 1021 1026 1022 waitfor_statement: 1027 when_clause_opt waitfor statement %prec THEN1023 when_clause_opt waitfor statement %prec THEN 1028 1024 { $$ = new StatementNode( build_waitfor( $2, $3, $1 ) ); } 1029 1025 | when_clause_opt waitfor statement WOR waitfor_clause … … 1498 1494 | VOLATILE 1499 1495 { $$ = DeclarationNode::newTypeQualifier( Type::Volatile ); } 1496 | LVALUE // CFA 1497 { $$ = DeclarationNode::newTypeQualifier( Type::Lvalue ); } 1500 1498 | MUTEX 1501 1499 { $$ = DeclarationNode::newTypeQualifier( Type::Mutex ); } … … 2479 2477 variable_ptr: 2480 2478 ptrref_operator variable_declarator 2481 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 , $1) ); }2479 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); } 2482 2480 | ptrref_operator type_qualifier_list variable_declarator 2483 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 , $1) ); }2481 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); } 2484 2482 | '(' variable_ptr ')' attribute_list_opt 2485 2483 { $$ = $2->addQualifiers( $4 ); } // redundant parenthesis … … 2527 2525 function_ptr: 2528 2526 ptrref_operator function_declarator 2529 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 , $1) ); }2527 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); } 2530 2528 | ptrref_operator type_qualifier_list function_declarator 2531 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 , $1) ); }2529 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); } 2532 2530 | '(' function_ptr ')' 2533 2531 { $$ = $2; } … … 2567 2565 KR_function_ptr: 2568 2566 ptrref_operator KR_function_declarator 2569 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 , $1) ); }2567 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); } 2570 2568 | ptrref_operator type_qualifier_list KR_function_declarator 2571 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 , $1) ); }2569 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); } 2572 2570 | '(' KR_function_ptr ')' 2573 2571 { $$ = $2; } … … 2611 2609 type_ptr: 2612 2610 ptrref_operator variable_type_redeclarator 2613 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 , $1) ); }2611 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); } 2614 2612 | ptrref_operator type_qualifier_list variable_type_redeclarator 2615 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 , $1) ); }2613 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); } 2616 2614 | '(' type_ptr ')' attribute_list_opt 2617 2615 { $$ = $2->addQualifiers( $4 ); } … … 2655 2653 identifier_parameter_ptr: 2656 2654 ptrref_operator identifier_parameter_declarator 2657 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 , $1) ); }2655 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); } 2658 2656 | ptrref_operator type_qualifier_list identifier_parameter_declarator 2659 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 , $1) ); }2657 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); } 2660 2658 | '(' identifier_parameter_ptr ')' attribute_list_opt 2661 2659 { $$ = $2->addQualifiers( $4 ); } … … 2715 2713 type_parameter_ptr: 2716 2714 ptrref_operator type_parameter_redeclarator 2717 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 , $1) ); }2715 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); } 2718 2716 | ptrref_operator type_qualifier_list type_parameter_redeclarator 2719 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 , $1) ); }2717 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); } 2720 2718 | '(' type_parameter_ptr ')' attribute_list_opt 2721 2719 { $$ = $2->addQualifiers( $4 ); } … … 2758 2756 abstract_ptr: 2759 2757 ptrref_operator 2760 { $$ = DeclarationNode::newPointer( 0 , $1); }2758 { $$ = DeclarationNode::newPointer( 0 ); } 2761 2759 | ptrref_operator type_qualifier_list 2762 { $$ = DeclarationNode::newPointer( $2 , $1); }2760 { $$ = DeclarationNode::newPointer( $2 ); } 2763 2761 | ptrref_operator abstract_declarator 2764 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 , $1) ); }2762 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); } 2765 2763 | ptrref_operator type_qualifier_list abstract_declarator 2766 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 , $1) ); }2764 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); } 2767 2765 | '(' abstract_ptr ')' attribute_list_opt 2768 2766 { $$ = $2->addQualifiers( $4 ); } … … 2847 2845 abstract_parameter_ptr: 2848 2846 ptrref_operator 2849 { $$ = DeclarationNode::newPointer( nullptr , $1); }2847 { $$ = DeclarationNode::newPointer( nullptr ); } 2850 2848 | ptrref_operator type_qualifier_list 2851 { $$ = DeclarationNode::newPointer( $2 , $1); }2849 { $$ = DeclarationNode::newPointer( $2 ); } 2852 2850 | ptrref_operator abstract_parameter_declarator 2853 { $$ = $2->addPointer( DeclarationNode::newPointer( nullptr , $1) ); }2851 { $$ = $2->addPointer( DeclarationNode::newPointer( nullptr ) ); } 2854 2852 | ptrref_operator type_qualifier_list abstract_parameter_declarator 2855 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 , $1) ); }2853 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); } 2856 2854 | '(' abstract_parameter_ptr ')' attribute_list_opt 2857 2855 { $$ = $2->addQualifiers( $4 ); } … … 2926 2924 variable_abstract_ptr: 2927 2925 ptrref_operator 2928 { $$ = DeclarationNode::newPointer( 0 , $1); }2926 { $$ = DeclarationNode::newPointer( 0 ); } 2929 2927 | ptrref_operator type_qualifier_list 2930 { $$ = DeclarationNode::newPointer( $2 , $1); }2928 { $$ = DeclarationNode::newPointer( $2 ); } 2931 2929 | ptrref_operator variable_abstract_declarator 2932 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 , $1) ); }2930 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); } 2933 2931 | ptrref_operator type_qualifier_list variable_abstract_declarator 2934 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 , $1) ); }2932 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); } 2935 2933 | '(' variable_abstract_ptr ')' attribute_list_opt 2936 2934 { $$ = $2->addQualifiers( $4 ); } … … 2972 2970 // No SUE declaration in parameter list. 2973 2971 ptrref_operator type_specifier_nobody 2974 { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 , $1) ); }2972 { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 ) ); } 2975 2973 | type_qualifier_list ptrref_operator type_specifier_nobody 2976 { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 , $2) ); }2974 { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 ) ); } 2977 2975 | ptrref_operator cfa_abstract_function 2978 { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 , $1) ); }2976 { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 ) ); } 2979 2977 | type_qualifier_list ptrref_operator cfa_abstract_function 2980 { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 , $2) ); }2978 { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 ) ); } 2981 2979 | ptrref_operator cfa_identifier_parameter_declarator_tuple 2982 { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 , $1) ); }2980 { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 ) ); } 2983 2981 | type_qualifier_list ptrref_operator cfa_identifier_parameter_declarator_tuple 2984 { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 , $2) ); }2982 { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 ) ); } 2985 2983 ; 2986 2984 … … 3060 3058 cfa_abstract_ptr: // CFA 3061 3059 ptrref_operator type_specifier 3062 { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 , $1) ); }3060 { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 ) ); } 3063 3061 | type_qualifier_list ptrref_operator type_specifier 3064 { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 , $2) ); }3062 { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 ) ); } 3065 3063 | ptrref_operator cfa_abstract_function 3066 { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 , $1) ); }3064 { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 ) ); } 3067 3065 | type_qualifier_list ptrref_operator cfa_abstract_function 3068 { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 , $2) ); }3066 { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 ) ); } 3069 3067 | ptrref_operator cfa_abstract_declarator_tuple 3070 { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 , $1) ); }3068 { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 ) ); } 3071 3069 | type_qualifier_list ptrref_operator cfa_abstract_declarator_tuple 3072 { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 , $2) ); }3070 { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 ) ); } 3073 3071 ; 3074 3072
Note:
See TracChangeset
for help on using the changeset viewer.