Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/Parser/lex.ll

    rde62360d r08061589  
    99 * Author           : Peter A. Buhr
    1010 * Created On       : Sat Sep 22 08:58:10 2001
    11  * Last Modified By : Peter A. Buhr
    12  * Last Modified On : Fri Jun 19 11:10:14 2015
    13  * Update Count     : 392
     11 * Last Modified By :
     12 * Last Modified On : Sun Jul 31 07:19:36 2016
     13 * Update Count     : 459
    1414 */
    1515
     
    2727
    2828#include "lex.h"
     29#include "parser.h"                                                                             // YACC generated definitions based on C++ grammar
    2930#include "ParseNode.h"
    30 #include "parser.h"                                                                             // YACC generated definitions based on C++ grammar
     31#include "TypedefTable.h"
    3132
    3233char *yyfilename;
     
    4445#define NUMERIC_RETURN(x)       rm_underscore(); RETURN_VAL( x ) // numeric constant
    4546#define KEYWORD_RETURN(x)       RETURN_CHAR( x )                        // keyword
    46 #define IDENTIFIER_RETURN()     RETURN_VAL( (typedefTable.isIdentifier( yytext ) ? IDENTIFIER : typedefTable.isTypedef( yytext ) ? TYPEDEFname : TYPEGENname ) )
     47#define IDENTIFIER_RETURN()     RETURN_VAL( typedefTable.isKind( yytext ) )
    4748#define ATTRIBUTE_RETURN()      RETURN_VAL( ATTR_IDENTIFIER )
    4849
    4950void rm_underscore() {
    50         // remove underscores in numeric constant
    51         int j = 0;
     51        // Remove underscores in numeric constant by copying the non-underscore characters to the front of the string.
     52        yyleng = 0;
    5253        for ( int i = 0; yytext[i] != '\0'; i += 1 ) {
    5354                if ( yytext[i] != '_' ) {
    54                         yytext[j] = yytext[i];
    55                         j += 1;
     55                        yytext[yyleng] = yytext[i];
     56                        yyleng += 1;
    5657                } // if
    5758        } // for
    58         yyleng = j;
    5959        yytext[yyleng] = '\0';
    6060}
     
    9595fractional_constant ({decimal_digits}?"."{decimal_digits})|({decimal_digits}".")
    9696exponent "_"?[eE]"_"?[+-]?{decimal_digits}
    97 floating_suffix "_"?[flFL]
     97                                // GCC: D (double), DL (long double) and iI (imaginary) suffixes
     98floating_suffix "_"?([fFdDlL][iI]?|"DL"|[iI][lLfFdD]?)
     99                                //floating_suffix "_"?([fFdD]|[lL]|[D][L])|([iI][lLfFdD])|([lLfFdD][iI]))
    98100floating_constant (({fractional_constant}{exponent}?)|({decimal_digits}{exponent})){floating_suffix}?
    99101
     
    118120h_white [ ]|{h_tab}
    119121
    120                                 // operators
     122                                // overloadable operators
    121123op_unary_only "~"|"!"
    122124op_unary_binary "+"|"-"|"*"
     
    126128op_binary_only "/"|"%"|"^"|"&"|"|"|"<"|">"|"="|"=="|"!="|"<<"|">>"|"<="|">="|"+="|"-="|"*="|"/="|"%="|"&="|"|="|"^="|"<<="|">>="
    127129op_binary_over {op_unary_binary}|{op_binary_only}
    128 op_binary_not_over "?"|"->"|"&&"|"||"
    129 operator {op_unary_pre_post}|{op_binary_over}|{op_binary_not_over}
     130                                // op_binary_not_over "?"|"->"|"."|"&&"|"||"|"@="
     131                                // operator {op_unary_pre_post}|{op_binary_over}|{op_binary_not_over}
    130132
    131133%x COMMENT
     
    136138%%
    137139                                   /* line directives */
    138 ^{h_white}*"#"{h_white}*[0-9]+{h_white}*["][^"\n]+["][^\n]*"\n" {
     140^{h_white}*"#"{h_white}*[0-9]+{h_white}*["][^"\n]+["].*"\n" {
    139141        /* " stop highlighting */
    140142        char *end_num;
     
    182184__asm                   { KEYWORD_RETURN(ASM); }                                // GCC
    183185__asm__                 { KEYWORD_RETURN(ASM); }                                // GCC
     186_At                             { KEYWORD_RETURN(AT); }                                 // CFA
    184187_Atomic                 { KEYWORD_RETURN(ATOMIC); }                             // C11
    185188__attribute             { KEYWORD_RETURN(ATTRIBUTE); }                  // GCC
     
    190193case                    { KEYWORD_RETURN(CASE); }
    191194catch                   { KEYWORD_RETURN(CATCH); }                              // CFA
     195catchResume             { KEYWORD_RETURN(CATCHRESUME); }                // CFA
    192196char                    { KEYWORD_RETURN(CHAR); }
    193197choose                  { KEYWORD_RETURN(CHOOSE); }                             // CFA
     
    198202__const                 { KEYWORD_RETURN(CONST); }                              // GCC
    199203__const__               { KEYWORD_RETURN(CONST); }                              // GCC
    200 context                 { KEYWORD_RETURN(CONTEXT); }                    // CFA
    201204continue                { KEYWORD_RETURN(CONTINUE); }
    202205default                 { KEYWORD_RETURN(DEFAULT); }
     206disable                 { KEYWORD_RETURN(DISABLE); }                    // CFA
    203207do                              { KEYWORD_RETURN(DO); }
    204208double                  { KEYWORD_RETURN(DOUBLE); }
    205209dtype                   { KEYWORD_RETURN(DTYPE); }                              // CFA
    206210else                    { KEYWORD_RETURN(ELSE); }
     211enable                  { KEYWORD_RETURN(ENABLE); }                             // CFA
    207212enum                    { KEYWORD_RETURN(ENUM); }
    208213__extension__   { KEYWORD_RETURN(EXTENSION); }                  // GCC
    209214extern                  { KEYWORD_RETURN(EXTERN); }
     215fallthrough             { KEYWORD_RETURN(FALLTHRU); }                   // CFA
    210216fallthru                { KEYWORD_RETURN(FALLTHRU); }                   // CFA
    211217finally                 { KEYWORD_RETURN(FINALLY); }                    // CFA
     
    231237lvalue                  { KEYWORD_RETURN(LVALUE); }                             // CFA
    232238_Noreturn               { KEYWORD_RETURN(NORETURN); }                   // C11
     239__builtin_offsetof { KEYWORD_RETURN(OFFSETOF); }                // GCC
     240otype                   { KEYWORD_RETURN(OTYPE); }                              // CFA
    233241register                { KEYWORD_RETURN(REGISTER); }
    234242restrict                { KEYWORD_RETURN(RESTRICT); }                   // C99
     
    247255_Thread_local   { KEYWORD_RETURN(THREADLOCAL); }                // C11
    248256throw                   { KEYWORD_RETURN(THROW); }                              // CFA
     257throwResume             { KEYWORD_RETURN(THROWRESUME); }                // CFA
     258trait                   { KEYWORD_RETURN(TRAIT); }                              // CFA
    249259try                             { KEYWORD_RETURN(TRY); }                                // CFA
    250 type                    { KEYWORD_RETURN(TYPE); }                               // CFA
    251260typedef                 { KEYWORD_RETURN(TYPEDEF); }
    252261typeof                  { KEYWORD_RETURN(TYPEOF); }                             // GCC
     
    255264union                   { KEYWORD_RETURN(UNION); }
    256265unsigned                { KEYWORD_RETURN(UNSIGNED); }
     266__builtin_va_list { KEYWORD_RETURN(VALIST); }                   // GCC
    257267void                    { KEYWORD_RETURN(VOID); }
    258268volatile                { KEYWORD_RETURN(VOLATILE); }
     
    264274{identifier}    { IDENTIFIER_RETURN(); }
    265275{attr_identifier} { ATTRIBUTE_RETURN(); }
    266 "`"                     { BEGIN BKQUOTE; }
     276"`"                             { BEGIN BKQUOTE; }
    267277<BKQUOTE>{identifier} { IDENTIFIER_RETURN(); }
    268278<BKQUOTE>"`"    { BEGIN 0; }
     
    351361">>="                   { NAMEDOP_RETURN(RSassign); }
    352362
     363"@="                    { NAMEDOP_RETURN(ATassign); }                   // CFA
     364
    353365                                /* CFA, operator identifier */
    354366{op_unary}"?"   { IDENTIFIER_RETURN(); }                                // unary
    355367"?"({op_unary_pre_post}|"()"|"[?]"|"{}") { IDENTIFIER_RETURN(); }
     368"^?{}" { IDENTIFIER_RETURN(); }
    356369"?"{op_binary_over}"?"  { IDENTIFIER_RETURN(); }                // binary
    357370        /*
     
    381394          an argument list.
    382395        */
    383 {op_unary}"?"(({op_unary_pre_post}|"[?]")|({op_binary_over}"?")) {
     396{op_unary}"?"({op_unary_pre_post}|"[?]"|{op_binary_over}"?") {
    384397        // 1 or 2 character unary operator ?
    385398        int i = yytext[1] == '?' ? 1 : 2;
Note: See TracChangeset for help on using the changeset viewer.