Changes in src/Parser/parser.yy [efc8f3e:63b3279e]
- File:
-
- 1 edited
-
src/Parser/parser.yy (modified) (14 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/Parser/parser.yy
refc8f3e r63b3279e 10 10 // Created On : Sat Sep 1 20:22:55 2001 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Fri Oct 15 09:20:17202113 // Update Count : 5 16312 // Last Modified On : Sat Sep 11 08:20:44 2021 13 // Update Count : 5040 14 14 // 15 15 … … 31 31 // from ANSI90 to ANSI11 C are marked with the comment "C99/C11". 32 32 33 // This grammar also has two levels of extensions. The first extensions cover most of the GCC C extensions .All of the33 // This grammar also has two levels of extensions. The first extensions cover most of the GCC C extensions All of the 34 34 // syntactic extensions for GCC C are marked with the comment "GCC". The second extensions are for Cforall (CFA), which 35 35 // fixes several of C's outstanding problems and extends C with many modern language concepts. All of the syntactic … … 69 69 // 2. String encodings are transformed into canonical form (one encoding at start) so the encoding can be found 70 70 // without searching the string, e.g.: "abc" L"def" L"ghi" => L"abc" "def" "ghi". Multiple encodings must match, 71 // e.g., u"a" U"b" L"c" is disallowed.71 // i.e., u"a" U"b" L"c" is disallowed. 72 72 73 73 if ( from[0] != '"' ) { // encoding ? … … 310 310 %token ATassign // @= 311 311 312 %type<tok> identifier identifier_at identifier_or_type_name attr_name 312 %type<tok> identifier 313 %type<tok> identifier_or_type_name attr_name 313 314 %type<tok> quasi_keyword 314 315 %type<constant> string_literal … … 326 327 %type<en> conditional_expression constant_expression assignment_expression assignment_expression_opt 327 328 %type<en> comma_expression comma_expression_opt 328 %type<en> argument_expression_list_opt argument_expression _list argument_expressiondefault_initializer_opt329 %type<en> argument_expression_list_opt argument_expression default_initializer_opt 329 330 %type<ifctl> if_control_expression 330 331 %type<fctl> for_control_expression for_control_expression_list … … 558 559 IDENTIFIER 559 560 | quasi_keyword 560 ;561 562 identifier_at:563 identifier564 561 | '@' // CFA 565 562 { Token tok = { new string( DeclarationNode::anonymous.newName() ), yylval.tok.loc }; $$ = tok; } … … 696 693 // empty 697 694 { $$ = nullptr; } 698 | argument_expression_list 699 ; 700 701 argument_expression_list: 702 argument_expression 695 | argument_expression 703 696 | argument_expression_list_opt ',' argument_expression 704 697 { $$ = (ExpressionNode *)($1->set_last( $3 )); } … … 738 731 | FLOATINGconstant fraction_constants_opt 739 732 { $$ = new ExpressionNode( build_field_name_fraction_constants( build_field_name_FLOATINGconstant( *$1 ), $2 ) ); } 740 | identifier _at fraction_constants_opt // CFA, allow anonymous fields733 | identifier fraction_constants_opt 741 734 { 742 735 $$ = new ExpressionNode( build_field_name_fraction_constants( build_varref( $1 ), $2 ) ); … … 1091 1084 comma_expression_opt ';' 1092 1085 { $$ = new StatementNode( build_expr( $1 ) ); } 1093 | MUTEX '(' ')' comma_expression ';'1094 { $$ = new StatementNode( build_mutex( nullptr, new StatementNode( build_expr( $4 ) ) ) ); }1095 // { SemanticError( yylloc, "Mutex expression is currently unimplemented." ); $$ = nullptr; }1096 1086 ; 1097 1087 … … 1192 1182 1193 1183 iteration_statement: 1194 WHILE '(' ')' statement // CFA => while ( 1 ) 1184 WHILE '(' push if_control_expression ')' statement pop 1185 { $$ = new StatementNode( build_while( $4, maybe_build_compound( $6 ) ) ); } 1186 | WHILE '(' ')' statement // CFA => while ( 1 ) 1195 1187 { $$ = new StatementNode( build_while( new IfCtrl( nullptr, new ExpressionNode( build_constantInteger( *new string( "1" ) ) ) ), maybe_build_compound( $4 ) ) ); } 1196 | WHILE '(' if_control_expression ')' statement %prec THEN 1197 { $$ = new StatementNode( build_while( $3, maybe_build_compound( $5 ) ) ); } 1198 | WHILE '(' if_control_expression ')' statement ELSE statement // CFA 1199 { SemanticError( yylloc, "Loop default block is currently unimplemented." ); $$ = nullptr; } 1188 | DO statement WHILE '(' comma_expression ')' ';' 1189 { $$ = new StatementNode( build_do_while( $5, maybe_build_compound( $2 ) ) ); } 1200 1190 | DO statement WHILE '(' ')' ';' // CFA => do while( 1 ) 1201 1191 { $$ = new StatementNode( build_do_while( new ExpressionNode( build_constantInteger( *new string( "1" ) ) ), maybe_build_compound( $2 ) ) ); } 1202 | DO statement WHILE '(' comma_expression ')' ';' %prec THEN 1203 { $$ = new StatementNode( build_do_while( $5, maybe_build_compound( $2 ) ) ); } 1204 | DO statement WHILE '(' comma_expression ')' ELSE statement // CFA 1205 { SemanticError( yylloc, "Loop default block is currently unimplemented." ); $$ = nullptr; } 1192 | FOR '(' push for_control_expression_list ')' statement pop 1193 { $$ = new StatementNode( build_for( $4, maybe_build_compound( $6 ) ) ); } 1206 1194 | FOR '(' ')' statement // CFA => for ( ;; ) 1207 1195 { $$ = new StatementNode( build_for( new ForCtrl( (ExpressionNode * )nullptr, (ExpressionNode * )nullptr, (ExpressionNode * )nullptr ), maybe_build_compound( $4 ) ) ); } 1208 | FOR '(' for_control_expression_list ')' statement %prec THEN1209 { $$ = new StatementNode( build_for( $3, maybe_build_compound( $5 ) ) ); }1210 | FOR '(' for_control_expression_list ')' statement ELSE statement // CFA1211 { SemanticError( yylloc, "Loop default block is currently unimplemented." ); $$ = nullptr; }1212 1196 ; 1213 1197 … … 1355 1339 with_statement: 1356 1340 WITH '(' tuple_expression_list ')' statement 1357 { $$ = new StatementNode( build_with( $3, $5 ) ); } 1341 { 1342 $$ = new StatementNode( build_with( $3, $5 ) ); 1343 } 1358 1344 ; 1359 1345 1360 1346 // If MUTEX becomes a general qualifier, there are shift/reduce conflicts, so change syntax to "with mutex". 1361 1347 mutex_statement: 1362 MUTEX '(' argument_expression_list ')' statement1348 MUTEX '(' argument_expression_list_opt ')' statement 1363 1349 { $$ = new StatementNode( build_mutex( $3, $5 ) ); } 1364 1350 ; … … 2489 2475 designation: 2490 2476 designator_list ':' // C99, CFA uses ":" instead of "=" 2491 | identifier _at':' // GCC, field name2477 | identifier ':' // GCC, field name 2492 2478 { $$ = new ExpressionNode( build_varref( $1 ) ); } 2493 2479 ; … … 2501 2487 2502 2488 designator: 2503 '.' identifier _at// C99, field name2489 '.' identifier // C99, field name 2504 2490 { $$ = new ExpressionNode( build_varref( $2 ) ); } 2505 2491 | '[' push assignment_expression pop ']' // C99, single array element … … 2933 2919 2934 2920 paren_identifier: 2935 identifier _at2921 identifier 2936 2922 { $$ = DeclarationNode::newName( $1 ); } 2937 2923 | '(' paren_identifier ')' // redundant parenthesis
Note:
See TracChangeset
for help on using the changeset viewer.