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