Changes in / [ec55ed5:9aaac6e9]


Ignore:
Location:
src/Parser
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • src/Parser/lex.ll

    rec55ed5 r9aaac6e9  
    1010 * Created On       : Sat Sep 22 08:58:10 2001
    1111 * Last Modified By : Peter A. Buhr
    12  * Last Modified On : Tue Aug 22 22:43:39 2017
    13  * Update Count     : 558
     12 * Last Modified On : Thu Jul 27 21:46:06 2017
     13 * Update Count     : 550
    1414 */
    1515
     
    4545#define NUMERIC_RETURN(x)       rm_underscore(); RETURN_VAL( x ) // numeric constant
    4646#define KEYWORD_RETURN(x)       RETURN_CHAR( x )                        // keyword
    47 #define QKEYWORD_RETURN(x)      typedefTable.isKind( yytext ); RETURN_VAL(x); // quasi-keyword
    4847#define IDENTIFIER_RETURN()     RETURN_VAL( typedefTable.isKind( yytext ) )
    4948#define ATTRIBUTE_RETURN()      RETURN_VAL( ATTR_IDENTIFIER )
     
    261260throw                   { KEYWORD_RETURN(THROW); }                              // CFA
    262261throwResume             { KEYWORD_RETURN(THROWRESUME); }                // CFA
    263 timeout                 { QKEYWORD_RETURN(TIMEOUT); }                   // CFA
    264262trait                   { KEYWORD_RETURN(TRAIT); }                              // CFA
    265263try                             { KEYWORD_RETURN(TRY); }                                // CFA
     
    278276__volatile              { KEYWORD_RETURN(VOLATILE); }                   // GCC
    279277__volatile__    { KEYWORD_RETURN(VOLATILE); }                   // GCC
    280 waitfor                 { KEYWORD_RETURN(WAITFOR); }
    281 or                              { QKEYWORD_RETURN(WOR); }                               // CFA
    282 when                    { KEYWORD_RETURN(WHEN); }
    283278while                   { KEYWORD_RETURN(WHILE); }
    284279with                    { KEYWORD_RETURN(WITH); }                               // CFA
  • src/Parser/parser.yy

    rec55ed5 r9aaac6e9  
    1010// Created On       : Sat Sep  1 20:22:55 2001
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Aug 23 14:53:20 2017
    13 // Update Count     : 2702
     12// Last Modified On : Sun Aug 20 09:21:54 2017
     13// Update Count     : 2573
    1414//
    1515
     
    131131%token ATTRIBUTE EXTENSION                                                              // GCC
    132132%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 // CFA
     133%token CHOOSE DISABLE ENABLE FALLTHRU TRY CATCH CATCHRESUME FINALLY THROW THROWRESUME AT WITH // CFA
    134134%token ASM                                                                                              // C99, extension ISO/IEC 9899:1999 Section J.5.10(1)
    135135%token ALIGNAS ALIGNOF GENERIC STATICASSERT                             // C11
     
    137137// names and constants: lexer differentiates between identifier and typedef names
    138138%token<tok> IDENTIFIER                  QUOTED_IDENTIFIER               TYPEDEFname                             TYPEGENname
    139 %token<tok> TIMEOUT                             WOR
    140139%token<tok> ATTR_IDENTIFIER             ATTR_TYPEDEFname                ATTR_TYPEGENname
    141140%token<tok> INTEGERconstant             CHARACTERconstant               STRINGliteral
     
    162161%type<tok> identifier  no_attr_identifier
    163162%type<tok> identifier_or_type_name  no_attr_identifier_or_type_name  attr_name
    164 %type<tok> quasi_keyword
    165163%type<constant> string_literal
    166164%type<str> string_literal_list
     
    192190%type<sn> iteration_statement                   jump_statement
    193191%type<sn> with_statement                                exception_statement                     asm_statement
    194 %type<sn> when_clause_opt                               waitfor_statement                       waitfor_clause                          waitfor                         timeout
    195192%type<sn> fall_through_opt                              fall_through
    196193%type<sn> statement                                             statement_list
     
    200197%type<sn> case_clause                                   case_value_list                         case_label                                      case_label_list
    201198%type<sn> switch_clause_list_opt                switch_clause_list                      choose_clause_list_opt          choose_clause_list
    202 %type<sn> handler_clause                                finally_clause
     199%type<sn> /* handler_list */                    handler_clause                          finally_clause
    203200%type<catch_kind> handler_key
    204201
     
    298295// Handle single shift/reduce conflict for dangling else by shifting the ELSE token. For example, this string
    299296// is ambiguous:
    300 // .---------.                          matches IF '(' comma_expression ')' statement . (reduce)
     297// .---------.                          matches IF '(' comma_expression ')' statement
    301298// 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
    311303
    312304%start translation_unit                                                                 // parse-tree root
     
    361353        ;
    362354
    363 quasi_keyword:                                                                                  // CFA
    364         TIMEOUT
    365         | WOR
    366         ;
    367 
    368355identifier:
    369356        IDENTIFIER
    370357        | ATTR_IDENTIFIER                                                                       // CFA
    371         | quasi_keyword
    372358        ;
    373359
    374360no_attr_identifier:
    375361        IDENTIFIER
    376         | quasi_keyword
    377362        ;
    378363
     
    395380primary_expression:
    396381        IDENTIFIER                                                                                      // typedef name cannot be used as a variable name
    397                 { $$ = new ExpressionNode( build_varref( $1 ) ); }
    398         | quasi_keyword
    399382                { $$ = new ExpressionNode( build_varref( $1 ) ); }
    400383        | tuple
     
    753736        | jump_statement
    754737        | with_statement
    755         | waitfor_statement
    756738        | exception_statement
    757739        | asm_statement
     
    973955
    974956with_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
    1016959        ;
    1017960
     
    1024967                { $$ = new StatementNode( build_try( $2, $3, $4 ) ); }
    1025968        ;
     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//      ;
    1026982
    1027983handler_clause:
     
    22832239with_clause_opt:
    22842240        // empty
    2285                 { $$ = nullptr; }                                                               // FIX ME
     2241                { $$ = (StatementNode *)0; }                                    // FIX ME
    22862242        | WITH '(' tuple_expression_list ')'
    2287                 { $$ = nullptr; }                                                               // FIX ME
     2243                { $$ = (StatementNode *)0; }                                    // FIX ME
    22882244        ;
    22892245
     
    24052361attr_name:                                                                                              // GCC
    24062362        IDENTIFIER
    2407         | quasi_keyword
    24082363        | TYPEDEFname
    24092364        | TYPEGENname
Note: See TracChangeset for help on using the changeset viewer.