Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/Parser/parser.yy

    r9fb1367 rec3f9c8  
    1010// Created On       : Sat Sep  1 20:22:55 2001
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Feb 17 09:03:07 2021
    13 // Update Count     : 4722
     12// Last Modified On : Wed Jan 27 08:58:56 2021
     13// Update Count     : 4680
    1414//
    1515
     
    282282%token ATTRIBUTE EXTENSION                                                              // GCC
    283283%token IF ELSE SWITCH CASE DEFAULT DO WHILE FOR BREAK CONTINUE GOTO RETURN
    284 %token CHOOSE DISABLE ENABLE FALLTHRU FALLTHROUGH TRY THROW THROWRESUME AT WITH WHEN WAITFOR // CFA
     284%token CHOOSE DISABLE ENABLE FALLTHRU FALLTHROUGH TRY CATCH CATCHRESUME FINALLY THROW THROWRESUME AT WITH WHEN WAITFOR // CFA
    285285%token ASM                                                                                              // C99, extension ISO/IEC 9899:1999 Section J.5.10(1)
    286286%token ALIGNAS ALIGNOF GENERIC STATICASSERT                             // C11
    287287
    288288// names and constants: lexer differentiates between identifier and typedef names
    289 %token<tok> IDENTIFIER          QUOTED_IDENTIFIER       TYPEDEFname             TYPEGENname
    290 %token<tok> TIMEOUT                     WOR                                     CATCH                   RECOVER                 CATCHRESUME             FIXUP           FINALLY         // CFA
    291 %token<tok> INTEGERconstant     CHARACTERconstant       STRINGliteral
     289%token<tok> IDENTIFIER                  QUOTED_IDENTIFIER               TYPEDEFname                             TYPEGENname
     290%token<tok> TIMEOUT                             WOR
     291%token<tok> INTEGERconstant             CHARACTERconstant               STRINGliteral
    292292%token<tok> DIRECTIVE
    293293// Floating point constant is broken into three kinds of tokens because of the ambiguity with tuple indexing and
     
    462462// Order of these lines matters (low-to-high precedence). THEN is left associative over WOR/TIMEOUT/ELSE, WOR is left
    463463// associative over TIMEOUT/ELSE, and TIMEOUT is left associative over ELSE.
    464 %precedence THEN                // rule precedence for IF/WAITFOR statement
    465 %precedence WOR                 // token precedence for start of WOR in WAITFOR statement
    466 %precedence TIMEOUT             // token precedence for start of TIMEOUT in WAITFOR statement
    467 %precedence CATCH               // token precedence for start of TIMEOUT in WAITFOR statement
    468 %precedence RECOVER             // token precedence for start of TIMEOUT in WAITFOR statement
    469 %precedence CATCHRESUME // token precedence for start of TIMEOUT in WAITFOR statement
    470 %precedence FIXUP               // token precedence for start of TIMEOUT in WAITFOR statement
    471 %precedence FINALLY             // token precedence for start of TIMEOUT in WAITFOR statement
    472 %precedence ELSE                // token precedence for start of else clause in IF/WAITFOR statement
    473 
     464%precedence THEN        // rule precedence for IF/WAITFOR statement
     465%precedence WOR         // token precedence for start of WOR in WAITFOR statement
     466%precedence TIMEOUT     // token precedence for start of TIMEOUT in WAITFOR statement
     467%precedence ELSE        // token precedence for start of else clause in IF/WAITFOR statement
    474468
    475469// Handle shift/reduce conflict for generic type by shifting the '(' token. For example, this string is ambiguous:
     
    550544        TIMEOUT
    551545        | WOR
    552         | CATCH
    553         | RECOVER
    554         | CATCHRESUME
    555         | FIXUP
    556         | FINALLY
    557546        ;
    558547
     
    629618postfix_expression:
    630619        primary_expression
    631         | postfix_expression '[' assignment_expression ',' comma_expression ']'
    632                 // { $$ = new ExpressionNode( build_binary_val( OperKinds::Index, $1, new ExpressionNode( build_binary_val( OperKinds::Index, $3, $5 ) ) ) ); }
    633                 { SemanticError( yylloc, "New array subscript is currently unimplemented." ); $$ = nullptr; }
    634620        | postfix_expression '[' assignment_expression ']'
    635621                // CFA, comma_expression disallowed in this context because it results in a common user error: subscripting a
     
    13771363
    13781364exception_statement:
    1379         TRY compound_statement handler_clause                                   %prec THEN
     1365        TRY compound_statement handler_clause
    13801366                { $$ = new StatementNode( build_try( $2, $3, 0 ) ); }
    13811367        | TRY compound_statement finally_clause
     
    14001386handler_key:
    14011387        CATCH                                                                           { $$ = CatchStmt::Terminate; }
    1402         | RECOVER                                                                       { $$ = CatchStmt::Terminate; }
    14031388        | CATCHRESUME                                                           { $$ = CatchStmt::Resume; }
    1404         | FIXUP                                                                         { $$ = CatchStmt::Resume; }
    14051389        ;
    14061390
     
    32033187        | '[' ']' multi_array_dimension
    32043188                { $$ = DeclarationNode::newArray( 0, 0, false )->addArray( $3 ); }
    3205         | '[' push assignment_expression pop ',' comma_expression ']'
    3206                 { $$ = DeclarationNode::newArray( $3, 0, false )->addArray( DeclarationNode::newArray( $6, 0, false ) ); }
    3207                 // { SemanticError( yylloc, "New array dimension is currently unimplemented." ); $$ = nullptr; }
    32083189        | multi_array_dimension
    32093190        ;
Note: See TracChangeset for help on using the changeset viewer.