Changeset b067d9b for src/Parser/lex.ll


Ignore:
Timestamp:
Oct 29, 2019, 4:01:24 PM (6 years ago)
Author:
Thierry Delisle <tdelisle@…>
Branches:
ADT, arm-eh, ast-experimental, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, pthread-emulation, qualifiedEnum
Children:
773db65, 9421f3d8
Parents:
7951100 (diff), 8364209 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge branch 'master' of plg.uwaterloo.ca:software/cfa/cfa-cc

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/Parser/lex.ll

    r7951100 rb067d9b  
    1010 * Created On       : Sat Sep 22 08:58:10 2001
    1111 * Last Modified By : Peter A. Buhr
    12  * Last Modified On : Thu Jun  7 08:27:40 2018
    13  * Update Count     : 679
     12 * Last Modified On : Sun Aug  4 20:53:47 2019
     13 * Update Count     : 719
    1414 */
    1515
     
    2525//**************************** Includes and Defines ****************************
    2626
     27// trigger before each matching rule's action
     28#define YY_USER_ACTION \
     29        yylloc.first_line = yylineno; \
     30        yylloc.first_column = column; \
     31        column += yyleng; \
     32        yylloc.last_column = column; \
     33        yylloc.last_line = yylineno; \
     34        yylloc.filename = yyfilename ? yyfilename : "";
    2735unsigned int column = 0;                                                                // position of the end of the last token parsed
    28 #define YY_USER_ACTION yylloc.first_line = yylineno; yylloc.first_column = column; column += yyleng; yylloc.last_column = column; yylloc.last_line = yylineno; yylloc.filename = yyfilename ? yyfilename : "";                          // trigger before each matching rule's action
    2936
    3037#include <string>
     
    3239using namespace std;
    3340
     41#include "config.h"                                                                             // configure info
    3442#include "ParseNode.h"
    3543#include "TypedefTable.h"
     
    4957#define NUMERIC_RETURN(x)       rm_underscore(); RETURN_VAL( x ) // numeric constant
    5058#define KEYWORD_RETURN(x)       RETURN_CHAR( x )                        // keyword
    51 #define QKEYWORD_RETURN(x)      typedefTable.isKind( yytext ); RETURN_VAL(x); // quasi-keyword
     59#define QKEYWORD_RETURN(x)      RETURN_VAL(x);                          // quasi-keyword
    5260#define IDENTIFIER_RETURN()     RETURN_VAL( typedefTable.isKind( yytext ) )
    53 #define ATTRIBUTE_RETURN()      RETURN_VAL( ATTR_IDENTIFIER )
     61
     62#ifdef HAVE_KEYWORDS_FLOATXX                                                            // GCC >= 7 => keyword, otherwise typedef
     63#define FLOATXX(v) KEYWORD_RETURN(v);
     64#else
     65#define FLOATXX(v) IDENTIFIER_RETURN();
     66#endif // HAVE_KEYWORDS_FLOATXX
    5467
    5568void rm_underscore() {
     
    7992identifier ([a-zA-Z_$]|{universal_char})([0-9a-zA-Z_$]|{universal_char})*
    8093
    81                                 // attribute identifier, GCC: $ in identifier
    82 attr_identifier "@"{identifier}
    83 
    8494                                // numeric constants, CFA: '_' in constant
    8595hex_quad {hex}("_"?{hex}){3}
    8696size_opt (8|16|32|64|128)?
    87 length ("ll"|"LL"|[lL]{size_opt})|("hh"|"HH"|[hH])
    88 integer_suffix_opt ("_"?(([uU]({length}?[iI]?)|([iI]{length}))|([iI]({length}?[uU]?)|([uU]{length}))|({length}([iI]?[uU]?)|([uU][iI]))|[zZ]))?
     97                                // CFA: explicit l8/l16/l32/l64/l128, char 'hh', short 'h', int 'n'
     98length ("ll"|"LL"|[lL]{size_opt})|("hh"|"HH"|[hHnN])
     99                                // CFA: size_t 'z', pointer 'p', which define a sign and length
     100integer_suffix_opt ("_"?(([uU]({length}?[iI]?)|([iI]{length}))|([iI]({length}?[uU]?)|([uU]{length}))|({length}([iI]?[uU]?)|([uU][iI]))|[zZ]|[pP]))?
    89101
    90102octal_digits ({octal})|({octal}({octal}|"_")*{octal})
     
    105117                                // GCC: D (double) and iI (imaginary) suffixes, and DL (long double)
    106118exponent "_"?[eE]"_"?[+-]?{decimal_digits}
    107 floating_size 32|64|80|128
    108 floating_length ([fFdDlL]|[lL]{floating_size})
     119floating_size 16|32|32x|64|64x|80|128|128x
     120floating_length ([fFdDlLwWqQ]|[fF]{floating_size})
    109121floating_suffix ({floating_length}?[iI]?)|([iI]{floating_length})
    110122floating_suffix_opt ("_"?({floating_suffix}|"DL"))?
     
    202214__attribute__   { KEYWORD_RETURN(ATTRIBUTE); }                  // GCC
    203215auto                    { KEYWORD_RETURN(AUTO); }
     216__auto_type             { KEYWORD_RETURN(AUTO_TYPE); }
     217basetypeof              { KEYWORD_RETURN(BASETYPEOF); }                 // CFA
    204218_Bool                   { KEYWORD_RETURN(BOOL); }                               // C99
    205219break                   { KEYWORD_RETURN(BREAK); }
     
    209223char                    { KEYWORD_RETURN(CHAR); }
    210224choose                  { KEYWORD_RETURN(CHOOSE); }                             // CFA
     225coerce                  { KEYWORD_RETURN(COERCE); }                             // CFA
    211226_Complex                { KEYWORD_RETURN(COMPLEX); }                    // C99
    212227__complex               { KEYWORD_RETURN(COMPLEX); }                    // GCC
     
    232247finally                 { KEYWORD_RETURN(FINALLY); }                    // CFA
    233248float                   { KEYWORD_RETURN(FLOAT); }
    234 _Float32                { KEYWORD_RETURN(FLOAT); }                              // GCC
    235 _Float32x               { KEYWORD_RETURN(FLOAT); }                              // GCC
    236 _Float64                { KEYWORD_RETURN(DOUBLE); }                             // GCC
    237 _Float64x               { KEYWORD_RETURN(DOUBLE); }                             // GCC
    238 __float80               { KEYWORD_RETURN(FLOAT80); }                    // GCC
    239 float80                 { KEYWORD_RETURN(FLOAT80); }                    // GCC
    240 _Float128               { KEYWORD_RETURN(FLOAT128); }                   // GCC
    241 _Float128x              { KEYWORD_RETURN(FLOAT128); }                   // GCC
    242 __float128              { KEYWORD_RETURN(FLOAT128); }                   // GCC
    243 float128                { KEYWORD_RETURN(FLOAT128); }                   // GCC
     249__float80               { KEYWORD_RETURN(uuFLOAT80); }                  // GCC
     250float80                 { KEYWORD_RETURN(uuFLOAT80); }                  // GCC
     251__float128              { KEYWORD_RETURN(uuFLOAT128); }                 // GCC
     252float128                { KEYWORD_RETURN(uuFLOAT128); }                 // GCC
     253_Float16                { FLOATXX(uFLOAT16); }                                  // GCC
     254_Float32                { FLOATXX(uFLOAT32); }                                  // GCC
     255_Float32x               { FLOATXX(uFLOAT32X); }                                 // GCC
     256_Float64                { FLOATXX(uFLOAT64); }                                  // GCC
     257_Float64x               { FLOATXX(uFLOAT64X); }                                 // GCC
     258_Float128               { FLOATXX(uFLOAT128); }                                 // GCC
     259_Float128x              { FLOATXX(uFLOAT128); }                                 // GCC
    244260for                             { KEYWORD_RETURN(FOR); }
    245261forall                  { KEYWORD_RETURN(FORALL); }                             // CFA
    246262fortran                 { KEYWORD_RETURN(FORTRAN); }
    247263ftype                   { KEYWORD_RETURN(FTYPE); }                              // CFA
     264generator               { KEYWORD_RETURN(GENERATOR); }                  // CFA
    248265_Generic                { KEYWORD_RETURN(GENERIC); }                    // C11
    249266goto                    { KEYWORD_RETURN(GOTO); }
     
    256273__inline__              { KEYWORD_RETURN(INLINE); }                             // GCC
    257274int                             { KEYWORD_RETURN(INT); }
     275int128                  { KEYWORD_RETURN(INT128); }                             // CFA
    258276__int128                { KEYWORD_RETURN(INT128); }                             // GCC
    259 int128                  { KEYWORD_RETURN(INT128); }                             // GCC
     277__int128_t              { KEYWORD_RETURN(INT128); }                             // GCC
    260278__label__               { KEYWORD_RETURN(LABEL); }                              // GCC
    261279long                    { KEYWORD_RETURN(LONG); }
     
    272290__restrict__    { KEYWORD_RETURN(RESTRICT); }                   // GCC
    273291return                  { KEYWORD_RETURN(RETURN); }
     292        /* resume                       { KEYWORD_RETURN(RESUME); }                             // CFA */
    274293short                   { KEYWORD_RETURN(SHORT); }
    275294signed                  { KEYWORD_RETURN(SIGNED); }
     
    280299_Static_assert  { KEYWORD_RETURN(STATICASSERT); }               // C11
    281300struct                  { KEYWORD_RETURN(STRUCT); }
     301        /* suspend                      { KEYWORD_RETURN(SUSPEND); }                    // CFA */
    282302switch                  { KEYWORD_RETURN(SWITCH); }
    283303thread                  { KEYWORD_RETURN(THREAD); }                             // C11
     
    294314__typeof__              { KEYWORD_RETURN(TYPEOF); }                             // GCC
    295315union                   { KEYWORD_RETURN(UNION); }
     316__uint128_t             { KEYWORD_RETURN(UINT128); }                    // GCC
    296317unsigned                { KEYWORD_RETURN(UNSIGNED); }
    297318__builtin_va_list { KEYWORD_RETURN(VALIST); }                   // GCC
     
    313334        IDENTIFIER_RETURN();
    314335}
    315 {attr_identifier} { ATTRIBUTE_RETURN(); }
    316336
    317337                                /* numeric constants */
     
    404424
    405425"@="                    { NAMEDOP_RETURN(ATassign); }                   // CFA
     426"~="                    { NAMEDOP_RETURN(ErangeUpEq); }                 // CFA
     427"-~"                    { NAMEDOP_RETURN(ErangeDown); }                 // CFA
     428"-~="                   { NAMEDOP_RETURN(ErangeDownEq); }               // CFA
    406429
    407430                                /* CFA, operator identifier */
     
    457480void yyerror( const char * errmsg ) {
    458481        SemanticErrorThrow = true;
    459         cout << (yyfilename ? yyfilename : "*unknown file*") << ':' << yylineno << ':' << column - yyleng + 1
     482        cerr << (yyfilename ? yyfilename : "*unknown file*") << ':' << yylineno << ':' << column - yyleng + 1
    460483                 << ": " << ErrorHelpers::error_str() << errmsg << " at token \"" << (yytext[0] == '\0' ? "EOF" : yytext) << '"' << endl;
    461484}
Note: See TracChangeset for help on using the changeset viewer.