Changes in / [ec55ed5:9aaac6e9]
- Location:
- src/Parser
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
src/Parser/lex.ll
rec55ed5 r9aaac6e9 10 10 * Created On : Sat Sep 22 08:58:10 2001 11 11 * Last Modified By : Peter A. Buhr 12 * Last Modified On : T ue Aug 22 22:43:39201713 * Update Count : 55 812 * Last Modified On : Thu Jul 27 21:46:06 2017 13 * Update Count : 550 14 14 */ 15 15 … … 45 45 #define NUMERIC_RETURN(x) rm_underscore(); RETURN_VAL( x ) // numeric constant 46 46 #define KEYWORD_RETURN(x) RETURN_CHAR( x ) // keyword 47 #define QKEYWORD_RETURN(x) typedefTable.isKind( yytext ); RETURN_VAL(x); // quasi-keyword48 47 #define IDENTIFIER_RETURN() RETURN_VAL( typedefTable.isKind( yytext ) ) 49 48 #define ATTRIBUTE_RETURN() RETURN_VAL( ATTR_IDENTIFIER ) … … 261 260 throw { KEYWORD_RETURN(THROW); } // CFA 262 261 throwResume { KEYWORD_RETURN(THROWRESUME); } // CFA 263 timeout { QKEYWORD_RETURN(TIMEOUT); } // CFA264 262 trait { KEYWORD_RETURN(TRAIT); } // CFA 265 263 try { KEYWORD_RETURN(TRY); } // CFA … … 278 276 __volatile { KEYWORD_RETURN(VOLATILE); } // GCC 279 277 __volatile__ { KEYWORD_RETURN(VOLATILE); } // GCC 280 waitfor { KEYWORD_RETURN(WAITFOR); }281 or { QKEYWORD_RETURN(WOR); } // CFA282 when { KEYWORD_RETURN(WHEN); }283 278 while { KEYWORD_RETURN(WHILE); } 284 279 with { KEYWORD_RETURN(WITH); } // CFA -
src/Parser/parser.yy
rec55ed5 r9aaac6e9 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 : 2 70212 // Last Modified On : Sun Aug 20 09:21:54 2017 13 // Update Count : 2573 14 14 // 15 15 … … 131 131 %token ATTRIBUTE EXTENSION // GCC 132 132 %token IF ELSE SWITCH CASE DEFAULT DO WHILE FOR BREAK CONTINUE GOTO RETURN 133 %token CHOOSE DISABLE ENABLE FALLTHRU TRY CATCH CATCHRESUME FINALLY THROW THROWRESUME AT WITH WHEN WAITFOR// CFA133 %token CHOOSE DISABLE ENABLE FALLTHRU TRY CATCH CATCHRESUME FINALLY THROW THROWRESUME AT WITH // CFA 134 134 %token ASM // C99, extension ISO/IEC 9899:1999 Section J.5.10(1) 135 135 %token ALIGNAS ALIGNOF GENERIC STATICASSERT // C11 … … 137 137 // names and constants: lexer differentiates between identifier and typedef names 138 138 %token<tok> IDENTIFIER QUOTED_IDENTIFIER TYPEDEFname TYPEGENname 139 %token<tok> TIMEOUT WOR140 139 %token<tok> ATTR_IDENTIFIER ATTR_TYPEDEFname ATTR_TYPEGENname 141 140 %token<tok> INTEGERconstant CHARACTERconstant STRINGliteral … … 162 161 %type<tok> identifier no_attr_identifier 163 162 %type<tok> identifier_or_type_name no_attr_identifier_or_type_name attr_name 164 %type<tok> quasi_keyword165 163 %type<constant> string_literal 166 164 %type<str> string_literal_list … … 192 190 %type<sn> iteration_statement jump_statement 193 191 %type<sn> with_statement exception_statement asm_statement 194 %type<sn> when_clause_opt waitfor_statement waitfor_clause waitfor timeout195 192 %type<sn> fall_through_opt fall_through 196 193 %type<sn> statement statement_list … … 200 197 %type<sn> case_clause case_value_list case_label case_label_list 201 198 %type<sn> switch_clause_list_opt switch_clause_list choose_clause_list_opt choose_clause_list 202 %type<sn> handler_clause finally_clause199 %type<sn> /* handler_list */ handler_clause finally_clause 203 200 %type<catch_kind> handler_key 204 201 … … 298 295 // Handle single shift/reduce conflict for dangling else by shifting the ELSE token. For example, this string 299 296 // is ambiguous: 300 // .---------. matches IF '(' comma_expression ')' statement . (reduce)297 // .---------. matches IF '(' comma_expression ')' statement 301 298 // if ( C ) S1 else S2 302 // `-----------------' matches IF '(' comma_expression ')' statement . (shift) ELSE statement */ 303 // Similar issues exit with the waitfor statement. 304 305 // Order of these lines matters. THEN is left associative over WOR/TIMEOUT/ELSE, WOR is left associative over 306 // TIMEOUT/ELSE, and TIMEOUT is left associative over ELSE. 307 %precedence THEN // rule precedence for IF/WAITFOR statement 308 %precedence WOR // token precedence for start of WOR in WAITFOR statement 309 %precedence TIMEOUT // token precedence for start of TIMEOUT in WAITFOR statement 310 %precedence ELSE // token precedence for start of else clause in IF/WAITFOR statement 299 // `-----------------' matches IF '(' comma_expression ')' statement ELSE statement */ 300 301 %nonassoc THEN // rule precedence for IF '(' comma_expression ')' statement 302 %nonassoc ELSE // token precedence for start of else clause in IF statement 311 303 312 304 %start translation_unit // parse-tree root … … 361 353 ; 362 354 363 quasi_keyword: // CFA364 TIMEOUT365 | WOR366 ;367 368 355 identifier: 369 356 IDENTIFIER 370 357 | ATTR_IDENTIFIER // CFA 371 | quasi_keyword372 358 ; 373 359 374 360 no_attr_identifier: 375 361 IDENTIFIER 376 | quasi_keyword377 362 ; 378 363 … … 395 380 primary_expression: 396 381 IDENTIFIER // typedef name cannot be used as a variable name 397 { $$ = new ExpressionNode( build_varref( $1 ) ); }398 | quasi_keyword399 382 { $$ = new ExpressionNode( build_varref( $1 ) ); } 400 383 | tuple … … 753 736 | jump_statement 754 737 | with_statement 755 | waitfor_statement756 738 | exception_statement 757 739 | asm_statement … … 973 955 974 956 with_statement: 975 WITH '(' tuple_expression_list ')' statement 976 { $$ = nullptr; } // FIX ME 977 ; 978 979 when_clause_opt: 980 // empty 981 { $$ = nullptr; } // FIX ME 982 | WHEN '(' comma_expression ')' 983 { $$ = nullptr; } // FIX ME 984 ; 985 986 waitfor: 987 WAITFOR '(' identifier ')' 988 { $$ = nullptr; } // FIX ME 989 | WAITFOR '(' identifier ',' argument_expression_list ')' 990 { $$ = nullptr; } // FIX ME 991 ; 992 993 timeout: 994 TIMEOUT '(' comma_expression ')' 995 { $$ = nullptr; } // FIX ME 996 ; 997 998 waitfor_clause: 999 when_clause_opt waitfor statement %prec THEN 1000 { $$ = nullptr; } // FIX ME 1001 | when_clause_opt waitfor statement WOR waitfor_clause 1002 { $$ = nullptr; } // FIX ME 1003 | when_clause_opt timeout statement %prec THEN 1004 { $$ = nullptr; } // FIX ME 1005 | when_clause_opt ELSE statement 1006 { $$ = nullptr; } // FIX ME 1007 | when_clause_opt timeout statement WOR when_clause_opt ELSE statement 1008 { $$ = nullptr; } // FIX ME 1009 ; 1010 1011 waitfor_statement: 1012 when_clause_opt waitfor statement %prec THEN 1013 { $$ = nullptr; } // FIX ME 1014 | when_clause_opt waitfor statement WOR waitfor_clause 1015 { $$ = nullptr; } // FIX ME 957 WITH '(' tuple_expression_list ')' compound_statement 958 { $$ = (StatementNode *)0; } // FIX ME 1016 959 ; 1017 960 … … 1024 967 { $$ = new StatementNode( build_try( $2, $3, $4 ) ); } 1025 968 ; 969 970 //handler_list: 971 // handler_clause 972 // // ISO/IEC 9899:1999 Section 15.3(6 ) If present, a "..." handler shall be the last handler for its try block. 973 // | CATCH '(' ELLIPSIS ')' compound_statement 974 // { $$ = new StatementNode( build_catch( 0, $5, true ) ); } 975 // | handler_clause CATCH '(' ELLIPSIS ')' compound_statement 976 // { $$ = (StatementNode *)$1->set_last( new StatementNode( build_catch( 0, $6, true ) ) ); } 977 // | CATCHRESUME '(' ELLIPSIS ')' compound_statement 978 // { $$ = new StatementNode( build_catch( 0, $5, true ) ); } 979 // | handler_clause CATCHRESUME '(' ELLIPSIS ')' compound_statement 980 // { $$ = (StatementNode *)$1->set_last( new StatementNode( build_catch( 0, $6, true ) ) ); } 981 // ; 1026 982 1027 983 handler_clause: … … 2283 2239 with_clause_opt: 2284 2240 // empty 2285 { $$ = nullptr; }// FIX ME2241 { $$ = (StatementNode *)0; } // FIX ME 2286 2242 | WITH '(' tuple_expression_list ')' 2287 { $$ = nullptr; }// FIX ME2243 { $$ = (StatementNode *)0; } // FIX ME 2288 2244 ; 2289 2245 … … 2405 2361 attr_name: // GCC 2406 2362 IDENTIFIER 2407 | quasi_keyword2408 2363 | TYPEDEFname 2409 2364 | TYPEGENname
Note: See TracChangeset
for help on using the changeset viewer.