Changes in src/Parser/lex.ll [de62360d:08061589]
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/Parser/lex.ll
rde62360d r08061589 9 9 * Author : Peter A. Buhr 10 10 * Created On : Sat Sep 22 08:58:10 2001 11 * Last Modified By : Peter A. Buhr12 * Last Modified On : Fri Jun 19 11:10:14 201513 * Update Count : 39211 * Last Modified By : 12 * Last Modified On : Sun Jul 31 07:19:36 2016 13 * Update Count : 459 14 14 */ 15 15 … … 27 27 28 28 #include "lex.h" 29 #include "parser.h" // YACC generated definitions based on C++ grammar 29 30 #include "ParseNode.h" 30 #include " parser.h" // YACC generated definitions based on C++ grammar31 #include "TypedefTable.h" 31 32 32 33 char *yyfilename; … … 44 45 #define NUMERIC_RETURN(x) rm_underscore(); RETURN_VAL( x ) // numeric constant 45 46 #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 ) ) 47 48 #define ATTRIBUTE_RETURN() RETURN_VAL( ATTR_IDENTIFIER ) 48 49 49 50 void rm_underscore() { 50 // remove underscores in numeric constant51 int j= 0;51 // Remove underscores in numeric constant by copying the non-underscore characters to the front of the string. 52 yyleng = 0; 52 53 for ( int i = 0; yytext[i] != '\0'; i += 1 ) { 53 54 if ( yytext[i] != '_' ) { 54 yytext[ j] = yytext[i];55 j+= 1;55 yytext[yyleng] = yytext[i]; 56 yyleng += 1; 56 57 } // if 57 58 } // for 58 yyleng = j;59 59 yytext[yyleng] = '\0'; 60 60 } … … 95 95 fractional_constant ({decimal_digits}?"."{decimal_digits})|({decimal_digits}".") 96 96 exponent "_"?[eE]"_"?[+-]?{decimal_digits} 97 floating_suffix "_"?[flFL] 97 // GCC: D (double), DL (long double) and iI (imaginary) suffixes 98 floating_suffix "_"?([fFdDlL][iI]?|"DL"|[iI][lLfFdD]?) 99 //floating_suffix "_"?([fFdD]|[lL]|[D][L])|([iI][lLfFdD])|([lLfFdD][iI])) 98 100 floating_constant (({fractional_constant}{exponent}?)|({decimal_digits}{exponent})){floating_suffix}? 99 101 … … 118 120 h_white [ ]|{h_tab} 119 121 120 // o perators122 // overloadable operators 121 123 op_unary_only "~"|"!" 122 124 op_unary_binary "+"|"-"|"*" … … 126 128 op_binary_only "/"|"%"|"^"|"&"|"|"|"<"|">"|"="|"=="|"!="|"<<"|">>"|"<="|">="|"+="|"-="|"*="|"/="|"%="|"&="|"|="|"^="|"<<="|">>=" 127 129 op_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} 130 132 131 133 %x COMMENT … … 136 138 %% 137 139 /* 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" { 139 141 /* " stop highlighting */ 140 142 char *end_num; … … 182 184 __asm { KEYWORD_RETURN(ASM); } // GCC 183 185 __asm__ { KEYWORD_RETURN(ASM); } // GCC 186 _At { KEYWORD_RETURN(AT); } // CFA 184 187 _Atomic { KEYWORD_RETURN(ATOMIC); } // C11 185 188 __attribute { KEYWORD_RETURN(ATTRIBUTE); } // GCC … … 190 193 case { KEYWORD_RETURN(CASE); } 191 194 catch { KEYWORD_RETURN(CATCH); } // CFA 195 catchResume { KEYWORD_RETURN(CATCHRESUME); } // CFA 192 196 char { KEYWORD_RETURN(CHAR); } 193 197 choose { KEYWORD_RETURN(CHOOSE); } // CFA … … 198 202 __const { KEYWORD_RETURN(CONST); } // GCC 199 203 __const__ { KEYWORD_RETURN(CONST); } // GCC 200 context { KEYWORD_RETURN(CONTEXT); } // CFA201 204 continue { KEYWORD_RETURN(CONTINUE); } 202 205 default { KEYWORD_RETURN(DEFAULT); } 206 disable { KEYWORD_RETURN(DISABLE); } // CFA 203 207 do { KEYWORD_RETURN(DO); } 204 208 double { KEYWORD_RETURN(DOUBLE); } 205 209 dtype { KEYWORD_RETURN(DTYPE); } // CFA 206 210 else { KEYWORD_RETURN(ELSE); } 211 enable { KEYWORD_RETURN(ENABLE); } // CFA 207 212 enum { KEYWORD_RETURN(ENUM); } 208 213 __extension__ { KEYWORD_RETURN(EXTENSION); } // GCC 209 214 extern { KEYWORD_RETURN(EXTERN); } 215 fallthrough { KEYWORD_RETURN(FALLTHRU); } // CFA 210 216 fallthru { KEYWORD_RETURN(FALLTHRU); } // CFA 211 217 finally { KEYWORD_RETURN(FINALLY); } // CFA … … 231 237 lvalue { KEYWORD_RETURN(LVALUE); } // CFA 232 238 _Noreturn { KEYWORD_RETURN(NORETURN); } // C11 239 __builtin_offsetof { KEYWORD_RETURN(OFFSETOF); } // GCC 240 otype { KEYWORD_RETURN(OTYPE); } // CFA 233 241 register { KEYWORD_RETURN(REGISTER); } 234 242 restrict { KEYWORD_RETURN(RESTRICT); } // C99 … … 247 255 _Thread_local { KEYWORD_RETURN(THREADLOCAL); } // C11 248 256 throw { KEYWORD_RETURN(THROW); } // CFA 257 throwResume { KEYWORD_RETURN(THROWRESUME); } // CFA 258 trait { KEYWORD_RETURN(TRAIT); } // CFA 249 259 try { KEYWORD_RETURN(TRY); } // CFA 250 type { KEYWORD_RETURN(TYPE); } // CFA251 260 typedef { KEYWORD_RETURN(TYPEDEF); } 252 261 typeof { KEYWORD_RETURN(TYPEOF); } // GCC … … 255 264 union { KEYWORD_RETURN(UNION); } 256 265 unsigned { KEYWORD_RETURN(UNSIGNED); } 266 __builtin_va_list { KEYWORD_RETURN(VALIST); } // GCC 257 267 void { KEYWORD_RETURN(VOID); } 258 268 volatile { KEYWORD_RETURN(VOLATILE); } … … 264 274 {identifier} { IDENTIFIER_RETURN(); } 265 275 {attr_identifier} { ATTRIBUTE_RETURN(); } 266 "`" { BEGIN BKQUOTE; }276 "`" { BEGIN BKQUOTE; } 267 277 <BKQUOTE>{identifier} { IDENTIFIER_RETURN(); } 268 278 <BKQUOTE>"`" { BEGIN 0; } … … 351 361 ">>=" { NAMEDOP_RETURN(RSassign); } 352 362 363 "@=" { NAMEDOP_RETURN(ATassign); } // CFA 364 353 365 /* CFA, operator identifier */ 354 366 {op_unary}"?" { IDENTIFIER_RETURN(); } // unary 355 367 "?"({op_unary_pre_post}|"()"|"[?]"|"{}") { IDENTIFIER_RETURN(); } 368 "^?{}" { IDENTIFIER_RETURN(); } 356 369 "?"{op_binary_over}"?" { IDENTIFIER_RETURN(); } // binary 357 370 /* … … 381 394 an argument list. 382 395 */ 383 {op_unary}"?"( ({op_unary_pre_post}|"[?]")|({op_binary_over}"?")) {396 {op_unary}"?"({op_unary_pre_post}|"[?]"|{op_binary_over}"?") { 384 397 // 1 or 2 character unary operator ? 385 398 int i = yytext[1] == '?' ? 1 : 2;
Note:
See TracChangeset
for help on using the changeset viewer.