Changes in src/Parser/parser.yy [135b431:1efa1e1]
- File:
-
- 1 edited
-
src/Parser/parser.yy (modified) (22 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/Parser/parser.yy
r135b431 r1efa1e1 10 10 // Created On : Sat Sep 1 20:22:55 2001 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Aug 23 14:53:20201713 // Update Count : 270 212 // Last Modified On : Wed Aug 23 21:08:08 2017 13 // Update Count : 2704 14 14 // 15 15 … … 97 97 DeclarationNode::TypeClass tclass; 98 98 StatementNode * sn; 99 WaitForStmt * wfs;100 99 ConstantExpr * constant; 101 100 IfCtl * ifctl; … … 120 119 %token RESTRICT // C99 121 120 %token ATOMIC // C11 122 %token FORALL LVALUEMUTEX VIRTUAL // CFA121 %token FORALL MUTEX VIRTUAL // CFA 123 122 %token VOID CHAR SHORT INT LONG FLOAT DOUBLE SIGNED UNSIGNED 124 123 %token BOOL COMPLEX IMAGINARY // C99 … … 188 187 %type<flag> asm_volatile_opt 189 188 %type<en> handler_predicate_opt 190 %type<en> when_clause_opt timeout191 189 192 190 // statements … … 194 192 %type<sn> iteration_statement jump_statement 195 193 %type<sn> with_statement exception_statement asm_statement 196 %type<sn> w aitfor_statement194 %type<sn> when_clause_opt waitfor_statement waitfor_clause waitfor timeout 197 195 %type<sn> fall_through_opt fall_through 198 196 %type<sn> statement statement_list … … 204 202 %type<sn> handler_clause finally_clause 205 203 %type<catch_kind> handler_key 206 %type<wfs> waitfor_clause207 %type<en> waitfor208 204 209 205 // declarations … … 307 303 // Similar issues exit with the waitfor statement. 308 304 309 // Order of these lines matters . THEN is left associative over WOR/TIMEOUT/ELSE, WOR is left associative over310 // TIMEOUT/ELSE, and TIMEOUT is left associative over ELSE.305 // Order of these lines matters (low-to-high precedence). THEN is left associative over WOR/TIMEOUT/ELSE, WOR is left 306 // associative over TIMEOUT/ELSE, and TIMEOUT is left associative over ELSE. 311 307 %precedence THEN // rule precedence for IF/WAITFOR statement 312 308 %precedence WOR // token precedence for start of WOR in WAITFOR statement … … 569 565 | '&' { $$ = OperKinds::AddressOf; } 570 566 // GCC, address of label must be handled by semantic check for ref,ref,label 571 //| ANDAND { $$ = OperKinds::And; }567 | ANDAND { $$ = OperKinds::And; } 572 568 ; 573 569 … … 691 687 conditional_expression 692 688 | unary_expression assignment_operator assignment_expression 693 { $$ = new ExpressionNode( build_binary_ ptr( $2, $1, $3 ) ); }689 { $$ = new ExpressionNode( build_binary_val( $2, $1, $3 ) ); } 694 690 ; 695 691 … … 983 979 when_clause_opt: 984 980 // empty 985 { $$ = nullptr; } 981 { $$ = nullptr; } // FIX ME 986 982 | WHEN '(' comma_expression ')' 987 { $$ = $3; }983 { $$ = nullptr; } // FIX ME 988 984 ; 989 985 990 986 waitfor: 991 987 WAITFOR '(' identifier ')' 992 { 993 $$ = new ExpressionNode( new NameExpr( *$3 ) ); 994 delete $3; 995 } 988 { $$ = nullptr; } // FIX ME 996 989 | WAITFOR '(' identifier ',' argument_expression_list ')' 997 { 998 $$ = new ExpressionNode( new NameExpr( *$3 ) ); 999 $$->set_last( $5 ); 1000 delete $3; 1001 } 990 { $$ = nullptr; } // FIX ME 1002 991 ; 1003 992 1004 993 timeout: 1005 994 TIMEOUT '(' comma_expression ')' 1006 { $$ = $3; }995 { $$ = nullptr; } // FIX ME 1007 996 ; 1008 997 1009 998 waitfor_clause: 1010 999 when_clause_opt waitfor statement %prec THEN 1011 { $$ = build_waitfor( $2, $3, $1 ); }1000 { $$ = nullptr; } // FIX ME 1012 1001 | when_clause_opt waitfor statement WOR waitfor_clause 1013 { $$ = build_waitfor( $2, $3, $1, $5 ); }1002 { $$ = nullptr; } // FIX ME 1014 1003 | when_clause_opt timeout statement %prec THEN 1015 { $$ = build_waitfor_timeout( $2, $3, $1 ); }1004 { $$ = nullptr; } // FIX ME 1016 1005 | when_clause_opt ELSE statement 1017 { $$ = build_waitfor_timeout( nullptr, $3, $1 ); }1006 { $$ = nullptr; } // FIX ME 1018 1007 | when_clause_opt timeout statement WOR when_clause_opt ELSE statement 1019 { $$ = build_waitfor_timeout( $2, $3, $1, $7, $5 ); }1008 { $$ = nullptr; } // FIX ME 1020 1009 ; 1021 1010 1022 1011 waitfor_statement: 1023 1012 when_clause_opt waitfor statement %prec THEN 1024 { $$ = n ew StatementNode( build_waitfor( $2, $3, $1 ) ); }1013 { $$ = nullptr; } // FIX ME 1025 1014 | when_clause_opt waitfor statement WOR waitfor_clause 1026 { $$ = n ew StatementNode( build_waitfor( $2, $3, $1, $5 ) ); }1015 { $$ = nullptr; } // FIX ME 1027 1016 ; 1028 1017 … … 1494 1483 | VOLATILE 1495 1484 { $$ = DeclarationNode::newTypeQualifier( Type::Volatile ); } 1496 | LVALUE // CFA1497 { $$ = DeclarationNode::newTypeQualifier( Type::Lvalue ); }1498 1485 | MUTEX 1499 1486 { $$ = DeclarationNode::newTypeQualifier( Type::Mutex ); } … … 2477 2464 variable_ptr: 2478 2465 ptrref_operator variable_declarator 2479 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); }2466 { $$ = $2->addPointer( DeclarationNode::newPointer( 0, $1 ) ); } 2480 2467 | ptrref_operator type_qualifier_list variable_declarator 2481 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); }2468 { $$ = $3->addPointer( DeclarationNode::newPointer( $2, $1 ) ); } 2482 2469 | '(' variable_ptr ')' attribute_list_opt 2483 2470 { $$ = $2->addQualifiers( $4 ); } // redundant parenthesis … … 2525 2512 function_ptr: 2526 2513 ptrref_operator function_declarator 2527 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); }2514 { $$ = $2->addPointer( DeclarationNode::newPointer( 0, $1 ) ); } 2528 2515 | ptrref_operator type_qualifier_list function_declarator 2529 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); }2516 { $$ = $3->addPointer( DeclarationNode::newPointer( $2, $1 ) ); } 2530 2517 | '(' function_ptr ')' 2531 2518 { $$ = $2; } … … 2565 2552 KR_function_ptr: 2566 2553 ptrref_operator KR_function_declarator 2567 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); }2554 { $$ = $2->addPointer( DeclarationNode::newPointer( 0, $1 ) ); } 2568 2555 | ptrref_operator type_qualifier_list KR_function_declarator 2569 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); }2556 { $$ = $3->addPointer( DeclarationNode::newPointer( $2, $1 ) ); } 2570 2557 | '(' KR_function_ptr ')' 2571 2558 { $$ = $2; } … … 2609 2596 type_ptr: 2610 2597 ptrref_operator variable_type_redeclarator 2611 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); }2598 { $$ = $2->addPointer( DeclarationNode::newPointer( 0, $1 ) ); } 2612 2599 | ptrref_operator type_qualifier_list variable_type_redeclarator 2613 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); }2600 { $$ = $3->addPointer( DeclarationNode::newPointer( $2, $1 ) ); } 2614 2601 | '(' type_ptr ')' attribute_list_opt 2615 2602 { $$ = $2->addQualifiers( $4 ); } … … 2653 2640 identifier_parameter_ptr: 2654 2641 ptrref_operator identifier_parameter_declarator 2655 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); }2642 { $$ = $2->addPointer( DeclarationNode::newPointer( 0, $1 ) ); } 2656 2643 | ptrref_operator type_qualifier_list identifier_parameter_declarator 2657 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); }2644 { $$ = $3->addPointer( DeclarationNode::newPointer( $2, $1 ) ); } 2658 2645 | '(' identifier_parameter_ptr ')' attribute_list_opt 2659 2646 { $$ = $2->addQualifiers( $4 ); } … … 2713 2700 type_parameter_ptr: 2714 2701 ptrref_operator type_parameter_redeclarator 2715 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); }2702 { $$ = $2->addPointer( DeclarationNode::newPointer( 0, $1 ) ); } 2716 2703 | ptrref_operator type_qualifier_list type_parameter_redeclarator 2717 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); }2704 { $$ = $3->addPointer( DeclarationNode::newPointer( $2, $1 ) ); } 2718 2705 | '(' type_parameter_ptr ')' attribute_list_opt 2719 2706 { $$ = $2->addQualifiers( $4 ); } … … 2756 2743 abstract_ptr: 2757 2744 ptrref_operator 2758 { $$ = DeclarationNode::newPointer( 0 ); }2745 { $$ = DeclarationNode::newPointer( 0, $1 ); } 2759 2746 | ptrref_operator type_qualifier_list 2760 { $$ = DeclarationNode::newPointer( $2 ); }2747 { $$ = DeclarationNode::newPointer( $2, $1 ); } 2761 2748 | ptrref_operator abstract_declarator 2762 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); }2749 { $$ = $2->addPointer( DeclarationNode::newPointer( 0, $1 ) ); } 2763 2750 | ptrref_operator type_qualifier_list abstract_declarator 2764 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); }2751 { $$ = $3->addPointer( DeclarationNode::newPointer( $2, $1 ) ); } 2765 2752 | '(' abstract_ptr ')' attribute_list_opt 2766 2753 { $$ = $2->addQualifiers( $4 ); } … … 2845 2832 abstract_parameter_ptr: 2846 2833 ptrref_operator 2847 { $$ = DeclarationNode::newPointer( nullptr ); }2834 { $$ = DeclarationNode::newPointer( nullptr, $1 ); } 2848 2835 | ptrref_operator type_qualifier_list 2849 { $$ = DeclarationNode::newPointer( $2 ); }2836 { $$ = DeclarationNode::newPointer( $2, $1 ); } 2850 2837 | ptrref_operator abstract_parameter_declarator 2851 { $$ = $2->addPointer( DeclarationNode::newPointer( nullptr ) ); }2838 { $$ = $2->addPointer( DeclarationNode::newPointer( nullptr, $1 ) ); } 2852 2839 | ptrref_operator type_qualifier_list abstract_parameter_declarator 2853 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); }2840 { $$ = $3->addPointer( DeclarationNode::newPointer( $2, $1 ) ); } 2854 2841 | '(' abstract_parameter_ptr ')' attribute_list_opt 2855 2842 { $$ = $2->addQualifiers( $4 ); } … … 2924 2911 variable_abstract_ptr: 2925 2912 ptrref_operator 2926 { $$ = DeclarationNode::newPointer( 0 ); }2913 { $$ = DeclarationNode::newPointer( 0, $1 ); } 2927 2914 | ptrref_operator type_qualifier_list 2928 { $$ = DeclarationNode::newPointer( $2 ); }2915 { $$ = DeclarationNode::newPointer( $2, $1 ); } 2929 2916 | ptrref_operator variable_abstract_declarator 2930 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); }2917 { $$ = $2->addPointer( DeclarationNode::newPointer( 0, $1 ) ); } 2931 2918 | ptrref_operator type_qualifier_list variable_abstract_declarator 2932 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); }2919 { $$ = $3->addPointer( DeclarationNode::newPointer( $2, $1 ) ); } 2933 2920 | '(' variable_abstract_ptr ')' attribute_list_opt 2934 2921 { $$ = $2->addQualifiers( $4 ); } … … 2970 2957 // No SUE declaration in parameter list. 2971 2958 ptrref_operator type_specifier_nobody 2972 { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 ) ); }2959 { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0, $1 ) ); } 2973 2960 | type_qualifier_list ptrref_operator type_specifier_nobody 2974 { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 ) ); }2961 { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1, $2 ) ); } 2975 2962 | ptrref_operator cfa_abstract_function 2976 { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 ) ); }2963 { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0, $1 ) ); } 2977 2964 | type_qualifier_list ptrref_operator cfa_abstract_function 2978 { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 ) ); }2965 { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1, $2 ) ); } 2979 2966 | ptrref_operator cfa_identifier_parameter_declarator_tuple 2980 { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 ) ); }2967 { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0, $1 ) ); } 2981 2968 | type_qualifier_list ptrref_operator cfa_identifier_parameter_declarator_tuple 2982 { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 ) ); }2969 { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1, $2 ) ); } 2983 2970 ; 2984 2971 … … 3058 3045 cfa_abstract_ptr: // CFA 3059 3046 ptrref_operator type_specifier 3060 { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 ) ); }3047 { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0, $1 ) ); } 3061 3048 | type_qualifier_list ptrref_operator type_specifier 3062 { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 ) ); }3049 { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1, $2 ) ); } 3063 3050 | ptrref_operator cfa_abstract_function 3064 { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 ) ); }3051 { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0, $1 ) ); } 3065 3052 | type_qualifier_list ptrref_operator cfa_abstract_function 3066 { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 ) ); }3053 { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1, $2 ) ); } 3067 3054 | ptrref_operator cfa_abstract_declarator_tuple 3068 { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 ) ); }3055 { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0, $1 ) ); } 3069 3056 | type_qualifier_list ptrref_operator cfa_abstract_declarator_tuple 3070 { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 ) ); }3057 { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1, $2 ) ); } 3071 3058 ; 3072 3059
Note:
See TracChangeset
for help on using the changeset viewer.