Changeset 5b2edbc for src/Parser
- Timestamp:
- Aug 23, 2017, 3:00:45 PM (7 years ago)
- Branches:
- ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, deferred_resn, demangler, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, resolv-new, with_gc
- Children:
- 66b8773
- Parents:
- 0bfe750
- Location:
- src/Parser
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
src/Parser/lex.ll
r0bfe750 r5b2edbc 10 10 * Created On : Sat Sep 22 08:58:10 2001 11 11 * Last Modified By : Peter A. Buhr 12 * Last Modified On : T hu Jul 27 21:46:06201713 * Update Count : 55 012 * Last Modified On : Tue Aug 22 22:43:39 2017 13 * Update Count : 558 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-keyword 47 48 #define IDENTIFIER_RETURN() RETURN_VAL( typedefTable.isKind( yytext ) ) 48 49 #define ATTRIBUTE_RETURN() RETURN_VAL( ATTR_IDENTIFIER ) … … 261 262 throw { KEYWORD_RETURN(THROW); } // CFA 262 263 throwResume { KEYWORD_RETURN(THROWRESUME); } // CFA 264 timeout { QKEYWORD_RETURN(TIMEOUT); } // CFA 263 265 trait { KEYWORD_RETURN(TRAIT); } // CFA 264 266 try { KEYWORD_RETURN(TRY); } // CFA … … 277 279 __volatile { KEYWORD_RETURN(VOLATILE); } // GCC 278 280 __volatile__ { KEYWORD_RETURN(VOLATILE); } // GCC 281 waitfor { KEYWORD_RETURN(WAITFOR); } 282 or { QKEYWORD_RETURN(WOR); } // CFA 283 when { KEYWORD_RETURN(WHEN); } 279 284 while { KEYWORD_RETURN(WHILE); } 280 285 with { KEYWORD_RETURN(WITH); } // CFA -
src/Parser/parser.yy
r0bfe750 r5b2edbc 10 10 // Created On : Sat Sep 1 20:22:55 2001 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Sun Aug 20 09:21:54201713 // Update Count : 2 57312 // Last Modified On : Wed Aug 23 14:53:20 2017 13 // Update Count : 2702 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 // CFA133 %token CHOOSE DISABLE ENABLE FALLTHRU TRY CATCH CATCHRESUME FINALLY THROW THROWRESUME AT WITH WHEN WAITFOR // 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 WOR 139 140 %token<tok> ATTR_IDENTIFIER ATTR_TYPEDEFname ATTR_TYPEGENname 140 141 %token<tok> INTEGERconstant CHARACTERconstant STRINGliteral … … 161 162 %type<tok> identifier no_attr_identifier 162 163 %type<tok> identifier_or_type_name no_attr_identifier_or_type_name attr_name 164 %type<tok> quasi_keyword 163 165 %type<constant> string_literal 164 166 %type<str> string_literal_list … … 190 192 %type<sn> iteration_statement jump_statement 191 193 %type<sn> with_statement exception_statement asm_statement 194 %type<sn> when_clause_opt waitfor_statement waitfor_clause waitfor timeout 192 195 %type<sn> fall_through_opt fall_through 193 196 %type<sn> statement statement_list … … 197 200 %type<sn> case_clause case_value_list case_label case_label_list 198 201 %type<sn> switch_clause_list_opt switch_clause_list choose_clause_list_opt choose_clause_list 199 %type<sn> /* handler_list */handler_clause finally_clause202 %type<sn> handler_clause finally_clause 200 203 %type<catch_kind> handler_key 201 204 … … 295 298 // Handle single shift/reduce conflict for dangling else by shifting the ELSE token. For example, this string 296 299 // is ambiguous: 297 // .---------. matches IF '(' comma_expression ')' statement 300 // .---------. matches IF '(' comma_expression ')' statement . (reduce) 298 301 // if ( C ) S1 else S2 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 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 303 311 304 312 %start translation_unit // parse-tree root … … 353 361 ; 354 362 363 quasi_keyword: // CFA 364 TIMEOUT 365 | WOR 366 ; 367 355 368 identifier: 356 369 IDENTIFIER 357 370 | ATTR_IDENTIFIER // CFA 371 | quasi_keyword 358 372 ; 359 373 360 374 no_attr_identifier: 361 375 IDENTIFIER 376 | quasi_keyword 362 377 ; 363 378 … … 380 395 primary_expression: 381 396 IDENTIFIER // typedef name cannot be used as a variable name 397 { $$ = new ExpressionNode( build_varref( $1 ) ); } 398 | quasi_keyword 382 399 { $$ = new ExpressionNode( build_varref( $1 ) ); } 383 400 | tuple … … 736 753 | jump_statement 737 754 | with_statement 755 | waitfor_statement 738 756 | exception_statement 739 757 | asm_statement … … 955 973 956 974 with_statement: 957 WITH '(' tuple_expression_list ')' compound_statement 958 { $$ = (StatementNode *)0; } // FIX ME 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 959 1016 ; 960 1017 … … 967 1024 { $$ = new StatementNode( build_try( $2, $3, $4 ) ); } 968 1025 ; 969 970 //handler_list:971 // handler_clause972 // // 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_statement974 // { $$ = new StatementNode( build_catch( 0, $5, true ) ); }975 // | handler_clause CATCH '(' ELLIPSIS ')' compound_statement976 // { $$ = (StatementNode *)$1->set_last( new StatementNode( build_catch( 0, $6, true ) ) ); }977 // | CATCHRESUME '(' ELLIPSIS ')' compound_statement978 // { $$ = new StatementNode( build_catch( 0, $5, true ) ); }979 // | handler_clause CATCHRESUME '(' ELLIPSIS ')' compound_statement980 // { $$ = (StatementNode *)$1->set_last( new StatementNode( build_catch( 0, $6, true ) ) ); }981 // ;982 1026 983 1027 handler_clause: … … 2241 2285 with_clause_opt: 2242 2286 // empty 2243 { $$ = (StatementNode *)0; }// FIX ME2287 { $$ = nullptr; } // FIX ME 2244 2288 | WITH '(' tuple_expression_list ')' 2245 { $$ = (StatementNode *)0; }// FIX ME2289 { $$ = nullptr; } // FIX ME 2246 2290 ; 2247 2291 … … 2363 2407 attr_name: // GCC 2364 2408 IDENTIFIER 2409 | quasi_keyword 2365 2410 | TYPEDEFname 2366 2411 | TYPEGENname
Note: See TracChangeset
for help on using the changeset viewer.