Changes in src/Parser/parser.yy [24711a3:9380add]
- File:
-
- 1 edited
-
src/Parser/parser.yy (modified) (11 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/Parser/parser.yy
r24711a3 r9380add 10 10 // Created On : Sat Sep 1 20:22:55 2001 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Mon Apr 26 18:41:54202113 // Update Count : 499012 // Last Modified On : Tue Jun 29 09:12:47 2021 13 // Update Count : 5027 14 14 // 15 15 … … 26 26 // The root language for this grammar is ANSI99/11 C. All of ANSI99/11 is parsed, except for: 27 27 // 28 // 1. designation with '=' (use ':' instead) 29 // 30 // Most of the syntactic extensions from ANSI90 to ANSI11 C are marked with the comment "C99/C11". This grammar also has 31 // two levels of extensions. The first extensions cover most of the GCC C extensions, except for: 32 // 33 // 1. designation with and without '=' (use ':' instead) 34 35 // 36 // All of the syntactic extensions for GCC C are marked with the comment "GCC". The second extensions are for Cforall 37 // (CFA), which fixes several of C's outstanding problems and extends C with many modern language concepts. All of the 38 // syntactic extensions for CFA C are marked with the comment "CFA". As noted above, there is one unreconcileable 39 // parsing problem between C99 and CFA with respect to designators; this is discussed in detail before the "designation" 40 // grammar rule. 28 // designation with '=' (use ':' instead) 29 // 30 // This incompatibility is discussed in detail before the "designation" grammar rule. Most of the syntactic extensions 31 // from ANSI90 to ANSI11 C are marked with the comment "C99/C11". 32 33 // This grammar also has two levels of extensions. The first extensions cover most of the GCC C extensions All of the 34 // syntactic extensions for GCC C are marked with the comment "GCC". The second extensions are for Cforall (CFA), which 35 // fixes several of C's outstanding problems and extends C with many modern language concepts. All of the syntactic 36 // extensions for CFA C are marked with the comment "CFA". 41 37 42 38 %{ … … 269 265 %token INT128 UINT128 uuFLOAT80 uuFLOAT128 // GCC 270 266 %token uFLOAT16 uFLOAT32 uFLOAT32X uFLOAT64 uFLOAT64X uFLOAT128 // GCC 267 %token DECIMAL32 DECIMAL64 DECIMAL128 // GCC 271 268 %token ZERO_T ONE_T // CFA 272 269 %token SIZEOF TYPEOF VALIST AUTO_TYPE // GCC … … 287 284 288 285 // names and constants: lexer differentiates between identifier and typedef names 289 %token<tok> IDENTIFIER QUOTED_IDENTIFIER TYPED EFname TYPEGENname286 %token<tok> IDENTIFIER QUOTED_IDENTIFIER TYPEDIMname TYPEDEFname TYPEGENname 290 287 %token<tok> TIMEOUT WOR CATCH RECOVER CATCHRESUME FIXUP FINALLY // CFA 291 288 %token<tok> INTEGERconstant CHARACTERconstant STRINGliteral … … 586 583 | quasi_keyword 587 584 { $$ = new ExpressionNode( build_varref( $1 ) ); } 585 | TYPEDIMname // CFA, generic length argument 586 // { $$ = new ExpressionNode( new TypeExpr( maybeMoveBuildType( DeclarationNode::newFromTypedef( $1 ) ) ) ); } 587 // { $$ = new ExpressionNode( build_varref( $1 ) ); } 588 { $$ = new ExpressionNode( build_dimensionref( $1 ) ); } 588 589 | tuple 589 590 | '(' comma_expression ')' … … 630 631 postfix_expression: 631 632 primary_expression 632 | postfix_expression '[' assignment_expression ',' comma_expression ']' 633 // { $$ = new ExpressionNode( build_binary_val( OperKinds::Index, $1, new ExpressionNode( build_binary_val( OperKinds::Index, $3, $5 ) ) ) ); } 634 { SemanticError( yylloc, "New array subscript is currently unimplemented." ); $$ = nullptr; } 633 | postfix_expression '[' assignment_expression ',' tuple_expression_list ']' 634 // Historic, transitional: Disallow commas in subscripts. 635 // Switching to this behaviour may help check if a C compatibilty case uses comma-exprs in subscripts. 636 // { SemanticError( yylloc, "New array subscript is currently unimplemented." ); $$ = nullptr; } 637 // Current: Commas in subscripts make tuples. 638 { $$ = new ExpressionNode( build_binary_val( OperKinds::Index, $1, new ExpressionNode( build_tuple( (ExpressionNode *)($3->set_last( $5 ) ) )) ) ); } 635 639 | postfix_expression '[' assignment_expression ']' 636 640 // CFA, comma_expression disallowed in this context because it results in a common user error: subscripting a … … 1887 1891 | uFLOAT128 1888 1892 { $$ = DeclarationNode::newBasicType( DeclarationNode::uFloat128 ); } 1893 | DECIMAL32 1894 { SemanticError( yylloc, "_Decimal32 is currently unimplemented." ); $$ = nullptr; } 1895 | DECIMAL64 1896 { SemanticError( yylloc, "_Decimal64 is currently unimplemented." ); $$ = nullptr; } 1897 | DECIMAL128 1898 { SemanticError( yylloc, "_Decimal128 is currently unimplemented." ); $$ = nullptr; } 1889 1899 | COMPLEX // C99 1890 1900 { $$ = DeclarationNode::newComplexType( DeclarationNode::Complex ); } … … 1909 1919 // empty 1910 1920 { $$ = nullptr; } 1911 | vtable ;1921 | vtable 1912 1922 ; 1913 1923 … … 2535 2545 | '[' identifier_or_type_name ']' 2536 2546 { 2537 typedefTable.addToScope( *$2, TYPED EFname, "9" );2538 $$ = DeclarationNode::newTypeParam( TypeDecl:: ALtype, $2 );2547 typedefTable.addToScope( *$2, TYPEDIMname, "9" ); 2548 $$ = DeclarationNode::newTypeParam( TypeDecl::Dimension, $2 ); 2539 2549 } 2540 2550 // | type_specifier identifier_parameter_declarator … … 2550 2560 | '*' 2551 2561 { $$ = TypeDecl::DStype; } // dtype + sized 2562 // | '(' '*' ')' 2563 // { $$ = TypeDecl::Ftype; } 2552 2564 | ELLIPSIS 2553 2565 { $$ = TypeDecl::Ttype; } … … 2590 2602 { $$ = new ExpressionNode( new TypeExpr( maybeMoveBuildType( $1 ) ) ); } 2591 2603 | assignment_expression 2592 { SemanticError( yylloc, toString("Expression generic parameters are currently unimplemented: ", $1->build()) ); $$ = nullptr; }2593 2604 | type_list ',' type 2594 2605 { $$ = (ExpressionNode *)($1->set_last( new ExpressionNode( new TypeExpr( maybeMoveBuildType( $3 ) ) ) )); } 2595 2606 | type_list ',' assignment_expression 2596 { SemanticError( yylloc, toString("Expression generic parameters are currently unimplemented: ", $3->build()) ); $$ = nullptr; } 2597 // { $$ = (ExpressionNode *)( $1->set_last( $3 )); } 2607 { $$ = (ExpressionNode *)( $1->set_last( $3 )); } 2598 2608 ; 2599 2609
Note:
See TracChangeset
for help on using the changeset viewer.