Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/Parser/lex.ll

    rf1da02c r8551b859  
    1010 * Created On       : Sat Sep 22 08:58:10 2001
    1111 * Last Modified By : Peter A. Buhr
    12  * Last Modified On : Sun Aug  4 20:53:47 2019
    13  * Update Count     : 719
     12 * Last Modified On : Thu Jun  7 08:27:40 2018
     13 * Update Count     : 679
    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 : "";
    3527unsigned 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
    3629
    3730#include <string>
     
    3932using namespace std;
    4033
    41 #include "config.h"                                                                             // configure info
    4234#include "ParseNode.h"
    4335#include "TypedefTable.h"
     
    5749#define NUMERIC_RETURN(x)       rm_underscore(); RETURN_VAL( x ) // numeric constant
    5850#define KEYWORD_RETURN(x)       RETURN_CHAR( x )                        // keyword
    59 #define QKEYWORD_RETURN(x)      RETURN_VAL(x);                          // quasi-keyword
     51#define QKEYWORD_RETURN(x)      typedefTable.isKind( yytext ); RETURN_VAL(x); // quasi-keyword
    6052#define IDENTIFIER_RETURN()     RETURN_VAL( typedefTable.isKind( yytext ) )
    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
     53#define ATTRIBUTE_RETURN()      RETURN_VAL( ATTR_IDENTIFIER )
    6754
    6855void rm_underscore() {
     
    9279identifier ([a-zA-Z_$]|{universal_char})([0-9a-zA-Z_$]|{universal_char})*
    9380
     81                                // attribute identifier, GCC: $ in identifier
     82attr_identifier "@"{identifier}
     83
    9484                                // numeric constants, CFA: '_' in constant
    9585hex_quad {hex}("_"?{hex}){3}
    9686size_opt (8|16|32|64|128)?
    97                                 // CFA: explicit l8/l16/l32/l64/l128, char 'hh', short 'h', int 'n'
    98 length ("ll"|"LL"|[lL]{size_opt})|("hh"|"HH"|[hHnN])
    99                                 // CFA: size_t 'z', pointer 'p', which define a sign and length
    100 integer_suffix_opt ("_"?(([uU]({length}?[iI]?)|([iI]{length}))|([iI]({length}?[uU]?)|([uU]{length}))|({length}([iI]?[uU]?)|([uU][iI]))|[zZ]|[pP]))?
     87length ("ll"|"LL"|[lL]{size_opt})|("hh"|"HH"|[hH])
     88integer_suffix_opt ("_"?(([uU]({length}?[iI]?)|([iI]{length}))|([iI]({length}?[uU]?)|([uU]{length}))|({length}([iI]?[uU]?)|([uU][iI]))|[zZ]))?
    10189
    10290octal_digits ({octal})|({octal}({octal}|"_")*{octal})
     
    117105                                // GCC: D (double) and iI (imaginary) suffixes, and DL (long double)
    118106exponent "_"?[eE]"_"?[+-]?{decimal_digits}
    119 floating_size 16|32|32x|64|64x|80|128|128x
    120 floating_length ([fFdDlLwWqQ]|[fF]{floating_size})
     107floating_size 32|64|80|128
     108floating_length ([fFdDlL]|[lL]{floating_size})
    121109floating_suffix ({floating_length}?[iI]?)|([iI]{floating_length})
    122110floating_suffix_opt ("_"?({floating_suffix}|"DL"))?
     
    214202__attribute__   { KEYWORD_RETURN(ATTRIBUTE); }                  // GCC
    215203auto                    { KEYWORD_RETURN(AUTO); }
    216 __auto_type             { KEYWORD_RETURN(AUTO_TYPE); }
    217 basetypeof              { KEYWORD_RETURN(BASETYPEOF); }                 // CFA
    218204_Bool                   { KEYWORD_RETURN(BOOL); }                               // C99
    219205break                   { KEYWORD_RETURN(BREAK); }
     
    223209char                    { KEYWORD_RETURN(CHAR); }
    224210choose                  { KEYWORD_RETURN(CHOOSE); }                             // CFA
    225 coerce                  { KEYWORD_RETURN(COERCE); }                             // CFA
    226211_Complex                { KEYWORD_RETURN(COMPLEX); }                    // C99
    227212__complex               { KEYWORD_RETURN(COMPLEX); }                    // GCC
     
    247232finally                 { KEYWORD_RETURN(FINALLY); }                    // CFA
    248233float                   { KEYWORD_RETURN(FLOAT); }
    249 __float80               { KEYWORD_RETURN(uuFLOAT80); }                  // GCC
    250 float80                 { KEYWORD_RETURN(uuFLOAT80); }                  // GCC
    251 __float128              { KEYWORD_RETURN(uuFLOAT128); }                 // GCC
    252 float128                { 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
     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
     239float80                 { KEYWORD_RETURN(FLOAT80); }                    // GCC
     240_Float128               { KEYWORD_RETURN(FLOAT128); }                   // GCC
     241_Float128x              { KEYWORD_RETURN(FLOAT128); }                   // GCC
     242__float128              { KEYWORD_RETURN(FLOAT128); }                   // GCC
     243float128                { KEYWORD_RETURN(FLOAT128); }                   // GCC
    260244for                             { KEYWORD_RETURN(FOR); }
    261245forall                  { KEYWORD_RETURN(FORALL); }                             // CFA
    262246fortran                 { KEYWORD_RETURN(FORTRAN); }
    263247ftype                   { KEYWORD_RETURN(FTYPE); }                              // CFA
    264 generator               { KEYWORD_RETURN(GENERATOR); }                  // CFA
    265248_Generic                { KEYWORD_RETURN(GENERIC); }                    // C11
    266249goto                    { KEYWORD_RETURN(GOTO); }
     
    273256__inline__              { KEYWORD_RETURN(INLINE); }                             // GCC
    274257int                             { KEYWORD_RETURN(INT); }
    275 int128                  { KEYWORD_RETURN(INT128); }                             // CFA
    276258__int128                { KEYWORD_RETURN(INT128); }                             // GCC
    277 __int128_t              { KEYWORD_RETURN(INT128); }                             // GCC
     259int128                  { KEYWORD_RETURN(INT128); }                             // GCC
    278260__label__               { KEYWORD_RETURN(LABEL); }                              // GCC
    279261long                    { KEYWORD_RETURN(LONG); }
     
    290272__restrict__    { KEYWORD_RETURN(RESTRICT); }                   // GCC
    291273return                  { KEYWORD_RETURN(RETURN); }
    292         /* resume                       { KEYWORD_RETURN(RESUME); }                             // CFA */
    293274short                   { KEYWORD_RETURN(SHORT); }
    294275signed                  { KEYWORD_RETURN(SIGNED); }
     
    299280_Static_assert  { KEYWORD_RETURN(STATICASSERT); }               // C11
    300281struct                  { KEYWORD_RETURN(STRUCT); }
    301         /* suspend                      { KEYWORD_RETURN(SUSPEND); }                    // CFA */
    302282switch                  { KEYWORD_RETURN(SWITCH); }
    303283thread                  { KEYWORD_RETURN(THREAD); }                             // C11
     
    314294__typeof__              { KEYWORD_RETURN(TYPEOF); }                             // GCC
    315295union                   { KEYWORD_RETURN(UNION); }
    316 __uint128_t             { KEYWORD_RETURN(UINT128); }                    // GCC
    317296unsigned                { KEYWORD_RETURN(UNSIGNED); }
    318297__builtin_va_list { KEYWORD_RETURN(VALIST); }                   // GCC
     
    334313        IDENTIFIER_RETURN();
    335314}
     315{attr_identifier} { ATTRIBUTE_RETURN(); }
    336316
    337317                                /* numeric constants */
     
    424404
    425405"@="                    { NAMEDOP_RETURN(ATassign); }                   // CFA
    426 "~="                    { NAMEDOP_RETURN(ErangeUpEq); }                 // CFA
    427 "-~"                    { NAMEDOP_RETURN(ErangeDown); }                 // CFA
    428 "-~="                   { NAMEDOP_RETURN(ErangeDownEq); }               // CFA
    429406
    430407                                /* CFA, operator identifier */
     
    480457void yyerror( const char * errmsg ) {
    481458        SemanticErrorThrow = true;
    482         cerr << (yyfilename ? yyfilename : "*unknown file*") << ':' << yylineno << ':' << column - yyleng + 1
     459        cout << (yyfilename ? yyfilename : "*unknown file*") << ':' << yylineno << ':' << column - yyleng + 1
    483460                 << ": " << ErrorHelpers::error_str() << errmsg << " at token \"" << (yytext[0] == '\0' ? "EOF" : yytext) << '"' << endl;
    484461}
Note: See TracChangeset for help on using the changeset viewer.