1 #line 25 "./glslang.l" 2 // Copyright 2016 The SwiftShader Authors. All Rights Reserved. 3 // 4 // Licensed under the Apache License, Version 2.0 (the "License"); 5 // you may not use this file except in compliance with the License. 6 // You may obtain a copy of the License at 7 // 8 // http://www.apache.org/licenses/LICENSE-2.0 9 // 10 // Unless required by applicable law or agreed to in writing, software 11 // distributed under the License is distributed on an "AS IS" BASIS, 12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 // See the License for the specific language governing permissions and 14 // limitations under the License. 15 16 // This file is auto-generated by generate_parser.sh. DO NOT EDIT! 17 18 // Ignore errors in auto-generated code. 19 #if defined(__GNUC__) 20 #pragma GCC diagnostic ignored "-Wunused-function" 21 #pragma GCC diagnostic ignored "-Wunused-variable" 22 #pragma GCC diagnostic ignored "-Wswitch-enum" 23 #elif defined(_MSC_VER) 24 #pragma warning(disable: 4065) 25 #pragma warning(disable: 4189) 26 #pragma warning(disable: 4505) 27 #pragma warning(disable: 4701) 28 #endif 29 30 31 32 #define YY_INT_ALIGNED short int 33 34 /* A lexical scanner generated by flex */ 35 36 37 38 39 40 41 42 43 44 45 #define FLEX_SCANNER 46 #define YY_FLEX_MAJOR_VERSION 2 47 #define YY_FLEX_MINOR_VERSION 6 48 #define YY_FLEX_SUBMINOR_VERSION 4 49 #if YY_FLEX_SUBMINOR_VERSION > 0 50 #define FLEX_BETA 51 #endif 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 #ifdef yyget_lval 71 #define yyget_lval_ALREADY_DEFINED 72 #else 73 #define yyget_lval yyget_lval 74 #endif 75 76 77 #ifdef yyset_lval 78 #define yyset_lval_ALREADY_DEFINED 79 #else 80 #define yyset_lval yyset_lval 81 #endif 82 83 84 85 86 87 #ifdef yyget_lloc 88 #define yyget_lloc_ALREADY_DEFINED 89 #else 90 #define yyget_lloc yyget_lloc 91 #endif 92 93 94 #ifdef yyset_lloc 95 #define yyset_lloc_ALREADY_DEFINED 96 #else 97 #define yyset_lloc yyset_lloc 98 #endif 99 100 101 102 103 104 105 106 107 108 109 110 /* First, we deal with platform-specific or compiler-specific issues. */ 111 112 /* begin standard C headers. */ 113 #include <stdio.h> 114 #include <string.h> 115 #include <errno.h> 116 #include <stdlib.h> 117 118 /* end standard C headers. */ 119 120 /* flex integer type definitions */ 121 122 #ifndef FLEXINT_H 123 #define FLEXINT_H 124 125 /* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */ 126 127 #if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L 128 129 /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, 130 * if you want the limit (max/min) macros for int types. 131 */ 132 #ifndef __STDC_LIMIT_MACROS 133 #define __STDC_LIMIT_MACROS 1 134 #endif 135 136 #include <inttypes.h> 137 typedef int8_t flex_int8_t; 138 typedef uint8_t flex_uint8_t; 139 typedef int16_t flex_int16_t; 140 typedef uint16_t flex_uint16_t; 141 typedef int32_t flex_int32_t; 142 typedef uint32_t flex_uint32_t; 143 #else 144 typedef signed char flex_int8_t; 145 typedef short int flex_int16_t; 146 typedef int flex_int32_t; 147 typedef unsigned char flex_uint8_t; 148 typedef unsigned short int flex_uint16_t; 149 typedef unsigned int flex_uint32_t; 150 151 /* Limits of integral types. */ 152 #ifndef INT8_MIN 153 #define INT8_MIN (-128) 154 #endif 155 #ifndef INT16_MIN 156 #define INT16_MIN (-32767-1) 157 #endif 158 #ifndef INT32_MIN 159 #define INT32_MIN (-2147483647-1) 160 #endif 161 #ifndef INT8_MAX 162 #define INT8_MAX (127) 163 #endif 164 #ifndef INT16_MAX 165 #define INT16_MAX (32767) 166 #endif 167 #ifndef INT32_MAX 168 #define INT32_MAX (2147483647) 169 #endif 170 #ifndef UINT8_MAX 171 #define UINT8_MAX (255U) 172 #endif 173 #ifndef UINT16_MAX 174 #define UINT16_MAX (65535U) 175 #endif 176 #ifndef UINT32_MAX 177 #define UINT32_MAX (4294967295U) 178 #endif 179 180 #ifndef SIZE_MAX 181 #define SIZE_MAX (~(size_t)0) 182 #endif 183 184 #endif /* ! C99 */ 185 186 #endif /* ! FLEXINT_H */ 187 188 189 /* begin standard C++ headers. */ 190 191 /* TODO: this is always defined, so inline it */ 192 #define yyconst const 193 194 #if defined(__GNUC__) && __GNUC__ >= 3 195 #define yynoreturn __attribute__((__noreturn__)) 196 #else 197 #define yynoreturn 198 #endif 199 200 /* Returned upon end-of-file. */ 201 #define YY_NULL 0 202 203 204 /* Promotes a possibly negative, possibly signed char to an 205 * integer in range [0..255] for use as an array index. 206 */ 207 #define YY_SC_TO_UI(c) ((YY_CHAR) (c)) 208 209 210 211 212 213 /* An opaque pointer. */ 214 #ifndef YY_TYPEDEF_YY_SCANNER_T 215 #define YY_TYPEDEF_YY_SCANNER_T 216 typedef void* yyscan_t; 217 #endif 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 /* For convenience, these vars (plus the bison vars far below) 236 are macros in the reentrant scanner. */ 237 #define yyin yyg->yyin_r 238 #define yyout yyg->yyout_r 239 #define yyextra yyg->yyextra_r 240 #define yyleng yyg->yyleng_r 241 #define yytext yyg->yytext_r 242 #define yylineno (YY_CURRENT_BUFFER_LVALUE->yy_bs_lineno) 243 #define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column) 244 #define yy_flex_debug yyg->yy_flex_debug_r 245 246 247 248 249 250 251 252 253 254 255 256 257 258 /* Enter a start condition. This macro really ought to take a parameter, 259 * but we do it the disgusting crufty way forced on us by the ()-less 260 * definition of BEGIN. 261 */ 262 #define BEGIN yyg->yy_start = 1 + 2 * 263 /* Translate the current start state into a value that can be later handed 264 * to BEGIN to return to the state. The YYSTATE alias is for lex 265 * compatibility. 266 */ 267 #define YY_START ((yyg->yy_start - 1) / 2) 268 #define YYSTATE YY_START 269 /* Action number for EOF rule of a given start state. */ 270 #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) 271 /* Special action meaning "start processing a new file". */ 272 #define YY_NEW_FILE yyrestart( yyin , yyscanner ) 273 #define YY_END_OF_BUFFER_CHAR 0 274 275 276 /* Size of default input buffer. */ 277 #ifndef YY_BUF_SIZE 278 #ifdef __ia64__ 279 /* On IA-64, the buffer size is 16k, not 8k. 280 * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case. 281 * Ditto for the __ia64__ case accordingly. 282 */ 283 #define YY_BUF_SIZE 32768 284 #else 285 #define YY_BUF_SIZE 16384 286 #endif /* __ia64__ */ 287 #endif 288 289 290 /* The state buf must be large enough to hold one state per character in the main buffer. 291 */ 292 #define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) 293 294 295 296 #ifndef YY_TYPEDEF_YY_BUFFER_STATE 297 #define YY_TYPEDEF_YY_BUFFER_STATE 298 typedef struct yy_buffer_state *YY_BUFFER_STATE; 299 #endif 300 301 #ifndef YY_TYPEDEF_YY_SIZE_T 302 #define YY_TYPEDEF_YY_SIZE_T 303 typedef size_t yy_size_t; 304 #endif 305 306 307 308 309 #define EOB_ACT_CONTINUE_SCAN 0 310 #define EOB_ACT_END_OF_FILE 1 311 #define EOB_ACT_LAST_MATCH 2 312 313 /* Note: We specifically omit the test for yy_rule_can_match_eol because it requires 314 * access to the local variable yy_act. Since yyless() is a macro, it would break 315 * existing scanners that call yyless() from OUTSIDE yylex. 316 * One obvious solution it to make yy_act a global. I tried that, and saw 317 * a 5% performance hit in a non-yylineno scanner, because yy_act is 318 * normally declared as a register variable-- so it is not worth it. 319 */ 320 #define YY_LESS_LINENO(n) \ 321 do { \ 322 int yyl;\ 323 for ( yyl = n; yyl < yyleng; ++yyl )\ 324 if ( yytext[yyl] == '\n' )\ 325 --yylineno;\ 326 }while(0) 327 #define YY_LINENO_REWIND_TO(dst) \ 328 do {\ 329 const char *p;\ 330 for ( p = yy_cp-1; p >= (dst); --p)\ 331 if ( *p == '\n' )\ 332 --yylineno;\ 333 }while(0) 334 335 /* Return all but the first "n" matched characters back to the input stream. */ 336 #define yyless(n) \ 337 do \ 338 { \ 339 /* Undo effects of setting up yytext. */ \ 340 int yyless_macro_arg = (n); \ 341 YY_LESS_LINENO(yyless_macro_arg);\ 342 *yy_cp = yyg->yy_hold_char; \ 343 YY_RESTORE_YY_MORE_OFFSET \ 344 yyg->yy_c_buf_p = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ 345 YY_DO_BEFORE_ACTION; /* set up yytext again */ \ 346 } \ 347 while ( 0 ) 348 #define unput(c) yyunput( c, yyg->yytext_ptr , yyscanner ) 349 350 351 #ifndef YY_STRUCT_YY_BUFFER_STATE 352 #define YY_STRUCT_YY_BUFFER_STATE 353 struct yy_buffer_state 354 { 355 FILE *yy_input_file; 356 357 358 359 char *yy_ch_buf; /* input buffer */ 360 char *yy_buf_pos; /* current position in input buffer */ 361 362 /* Size of input buffer in bytes, not including room for EOB 363 * characters. 364 */ 365 int yy_buf_size; 366 367 /* Number of characters read into yy_ch_buf, not including EOB 368 * characters. 369 */ 370 int yy_n_chars; 371 372 /* Whether we "own" the buffer - i.e., we know we created it, 373 * and can realloc() it to grow it, and should free() it to 374 * delete it. 375 */ 376 int yy_is_our_buffer; 377 378 /* Whether this is an "interactive" input source; if so, and 379 * if we're using stdio for input, then we want to use getc() 380 * instead of fread(), to make sure we stop fetching input after 381 * each newline. 382 */ 383 int yy_is_interactive; 384 385 /* Whether we're considered to be at the beginning of a line. 386 * If so, '^' rules will be active on the next match, otherwise 387 * not. 388 */ 389 int yy_at_bol; 390 391 int yy_bs_lineno; /**< The line count. */ 392 int yy_bs_column; /**< The column count. */ 393 394 395 /* Whether to try to fill the input buffer when we reach the 396 * end of it. 397 */ 398 int yy_fill_buffer; 399 400 int yy_buffer_status; 401 402 #define YY_BUFFER_NEW 0 403 #define YY_BUFFER_NORMAL 1 404 /* When an EOF's been seen but there's still some text to process 405 * then we mark the buffer as YY_EOF_PENDING, to indicate that we 406 * shouldn't try reading from the input source any more. We might 407 * still have a bunch of tokens to match, though, because of 408 * possible backing-up. 409 * 410 * When we actually see the EOF, we change the status to "new" 411 * (via yyrestart()), so that the user can continue scanning by 412 * just pointing yyin at a new input file. 413 */ 414 #define YY_BUFFER_EOF_PENDING 2 415 416 }; 417 #endif /* !YY_STRUCT_YY_BUFFER_STATE */ 418 419 420 421 422 /* We provide macros for accessing buffer states in case in the 423 * future we want to put the buffer states in a more general 424 * "scanner state". 425 * 426 * Returns the top of the stack, or NULL. 427 */ 428 #define YY_CURRENT_BUFFER ( yyg->yy_buffer_stack \ 429 ? yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] \ 430 : NULL) 431 /* Same as previous macro, but useful when we know that the buffer stack is not 432 * NULL or when we need an lvalue. For internal use only. 433 */ 434 #define YY_CURRENT_BUFFER_LVALUE yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] 435 436 437 438 439 440 void yyrestart ( FILE *input_file , yyscan_t yyscanner ); 441 void yy_switch_to_buffer ( YY_BUFFER_STATE new_buffer , yyscan_t yyscanner ); 442 YY_BUFFER_STATE yy_create_buffer ( FILE *file, int size , yyscan_t yyscanner ); 443 void yy_delete_buffer ( YY_BUFFER_STATE b , yyscan_t yyscanner ); 444 void yy_flush_buffer ( YY_BUFFER_STATE b , yyscan_t yyscanner ); 445 void yypush_buffer_state ( YY_BUFFER_STATE new_buffer , yyscan_t yyscanner ); 446 void yypop_buffer_state ( yyscan_t yyscanner ); 447 448 449 static void yyensure_buffer_stack ( yyscan_t yyscanner ); 450 static void yy_load_buffer_state ( yyscan_t yyscanner ); 451 static void yy_init_buffer ( YY_BUFFER_STATE b, FILE *file , yyscan_t yyscanner ); 452 #define YY_FLUSH_BUFFER yy_flush_buffer( YY_CURRENT_BUFFER , yyscanner) 453 454 455 YY_BUFFER_STATE yy_scan_buffer ( char *base, yy_size_t size , yyscan_t yyscanner ); 456 YY_BUFFER_STATE yy_scan_string ( const char *yy_str , yyscan_t yyscanner ); 457 YY_BUFFER_STATE yy_scan_bytes ( const char *bytes, int len , yyscan_t yyscanner ); 458 459 460 void *yyalloc ( yy_size_t , yyscan_t yyscanner ); 461 void *yyrealloc ( void *, yy_size_t , yyscan_t yyscanner ); 462 void yyfree ( void * , yyscan_t yyscanner ); 463 464 465 #define yy_new_buffer yy_create_buffer 466 #define yy_set_interactive(is_interactive) \ 467 { \ 468 if ( ! YY_CURRENT_BUFFER ){ \ 469 yyensure_buffer_stack (yyscanner); \ 470 YY_CURRENT_BUFFER_LVALUE = \ 471 yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner); \ 472 } \ 473 YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ 474 } 475 #define yy_set_bol(at_bol) \ 476 { \ 477 if ( ! YY_CURRENT_BUFFER ){\ 478 yyensure_buffer_stack (yyscanner); \ 479 YY_CURRENT_BUFFER_LVALUE = \ 480 yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner); \ 481 } \ 482 YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ 483 } 484 #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) 485 486 487 /* Begin user sect3 */ 488 489 #define yywrap(yyscanner) (/*CONSTCOND*/1) 490 #define YY_SKIP_YYWRAP 491 typedef flex_uint8_t YY_CHAR; 492 493 494 typedef int yy_state_type; 495 496 #define yytext_ptr yytext_r 497 498 499 500 501 502 503 static yy_state_type yy_get_previous_state ( yyscan_t yyscanner ); 504 static yy_state_type yy_try_NUL_trans ( yy_state_type current_state , yyscan_t yyscanner); 505 static int yy_get_next_buffer ( yyscan_t yyscanner ); 506 static void yynoreturn yy_fatal_error ( const char* msg , yyscan_t yyscanner ); 507 508 509 510 511 /* Done after the current pattern has been matched and before the 512 * corresponding action - sets up yytext. 513 */ 514 #define YY_DO_BEFORE_ACTION \ 515 yyg->yytext_ptr = yy_bp; \ 516 yyleng = (int) (yy_cp - yy_bp); \ 517 yyg->yy_hold_char = *yy_cp; \ 518 *yy_cp = '\0'; \ 519 yyg->yy_c_buf_p = yy_cp; 520 #define YY_NUM_RULES 239 521 #define YY_END_OF_BUFFER 240 522 /* This struct is not used in this scanner, 523 but its presence is necessary. */ 524 struct yy_trans_info 525 { 526 flex_int32_t yy_verify; 527 flex_int32_t yy_nxt; 528 }; 529 static const flex_int16_t yy_accept[821] = 530 { 0, 531 0, 0, 0, 0, 0, 0, 240, 238, 237, 237, 532 222, 228, 233, 217, 218, 226, 225, 214, 223, 221, 533 227, 180, 180, 215, 211, 229, 216, 230, 234, 177, 534 219, 220, 232, 177, 177, 177, 177, 177, 177, 177, 535 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 536 177, 177, 177, 212, 231, 213, 224, 239, 236, 235, 537 208, 194, 213, 202, 197, 192, 200, 190, 201, 191, 538 186, 193, 185, 179, 180, 0, 183, 0, 220, 212, 539 219, 209, 205, 207, 206, 210, 177, 198, 204, 177, 540 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 541 542 177, 12, 177, 177, 177, 177, 177, 177, 177, 177, 543 177, 177, 177, 177, 177, 15, 177, 177, 23, 177, 544 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 545 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 546 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 547 177, 177, 199, 203, 235, 0, 189, 185, 0, 188, 548 182, 0, 184, 178, 195, 196, 177, 136, 177, 177, 549 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 550 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 551 177, 13, 177, 177, 177, 177, 177, 177, 177, 177, 552 553 177, 177, 27, 177, 177, 177, 177, 177, 177, 177, 554 177, 177, 177, 177, 24, 177, 177, 177, 177, 177, 555 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 556 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 557 177, 177, 177, 177, 177, 177, 177, 177, 177, 0, 558 186, 0, 185, 187, 181, 177, 177, 177, 30, 177, 559 177, 18, 174, 177, 177, 177, 177, 177, 177, 177, 560 177, 177, 177, 16, 139, 177, 177, 177, 177, 21, 561 177, 177, 143, 155, 177, 177, 177, 177, 177, 177, 562 177, 177, 177, 177, 177, 177, 152, 4, 35, 36, 563 564 37, 177, 177, 177, 177, 177, 177, 177, 177, 177, 565 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 566 177, 177, 177, 177, 177, 142, 31, 177, 177, 28, 567 177, 177, 177, 177, 177, 177, 177, 47, 48, 49, 568 29, 177, 177, 177, 177, 177, 177, 10, 56, 57, 569 58, 177, 137, 177, 177, 7, 177, 177, 177, 177, 570 164, 165, 166, 177, 32, 177, 156, 26, 167, 168, 571 169, 2, 161, 162, 163, 177, 177, 177, 25, 159, 572 177, 177, 177, 50, 51, 52, 177, 177, 177, 177, 573 177, 177, 177, 177, 177, 177, 177, 86, 177, 177, 574 575 177, 177, 177, 177, 177, 153, 177, 177, 177, 177, 576 177, 177, 177, 177, 177, 177, 177, 138, 177, 177, 577 176, 53, 54, 55, 177, 177, 14, 177, 91, 177, 578 177, 177, 177, 89, 177, 177, 177, 154, 149, 92, 579 177, 177, 177, 177, 177, 177, 144, 177, 177, 177, 580 78, 38, 41, 43, 42, 39, 45, 44, 46, 40, 581 177, 177, 177, 177, 160, 135, 177, 177, 147, 177, 582 177, 177, 34, 87, 173, 22, 148, 77, 177, 158, 583 17, 177, 177, 177, 177, 177, 177, 177, 177, 177, 584 177, 177, 177, 177, 177, 19, 33, 177, 177, 177, 585 586 177, 177, 177, 93, 94, 95, 177, 177, 177, 177, 587 177, 3, 177, 177, 177, 177, 177, 177, 177, 177, 588 177, 177, 177, 140, 177, 177, 177, 177, 177, 8, 589 177, 177, 9, 177, 177, 177, 177, 20, 79, 11, 590 150, 97, 98, 99, 177, 177, 177, 177, 177, 177, 591 177, 177, 177, 177, 177, 177, 145, 177, 177, 177, 592 81, 83, 80, 177, 177, 177, 177, 177, 177, 177, 593 141, 101, 102, 103, 177, 177, 157, 177, 146, 177, 594 177, 6, 177, 177, 177, 177, 177, 177, 177, 177, 595 177, 96, 151, 1, 177, 177, 177, 177, 177, 175, 596 597 177, 90, 5, 170, 59, 63, 177, 177, 177, 177, 598 177, 177, 177, 177, 177, 177, 177, 177, 177, 82, 599 177, 177, 177, 177, 100, 177, 177, 177, 177, 177, 600 120, 66, 67, 177, 177, 177, 177, 177, 177, 177, 601 177, 177, 177, 177, 177, 177, 88, 177, 177, 177, 602 104, 122, 70, 71, 177, 177, 84, 177, 177, 177, 603 177, 177, 177, 177, 115, 177, 177, 177, 177, 177, 604 177, 177, 177, 177, 177, 129, 177, 177, 177, 177, 605 60, 177, 177, 177, 177, 177, 177, 177, 177, 177, 606 177, 177, 177, 116, 105, 177, 106, 177, 177, 177, 607 608 130, 177, 177, 68, 177, 177, 177, 177, 177, 177, 609 177, 177, 177, 177, 177, 177, 177, 117, 177, 177, 610 131, 177, 177, 72, 107, 108, 177, 111, 177, 112, 611 177, 177, 177, 177, 177, 85, 177, 177, 177, 177, 612 61, 177, 64, 126, 177, 177, 109, 110, 177, 177, 613 177, 177, 177, 177, 177, 177, 177, 177, 124, 127, 614 118, 177, 65, 177, 177, 177, 177, 177, 177, 177, 615 177, 125, 128, 177, 177, 121, 69, 177, 177, 171, 616 177, 177, 177, 74, 177, 177, 123, 73, 177, 177, 617 177, 177, 177, 177, 132, 177, 177, 177, 177, 177, 618 619 177, 133, 177, 177, 177, 75, 177, 134, 113, 114, 620 177, 177, 177, 62, 177, 177, 172, 119, 76, 0 621 } ; 622 623 static const YY_CHAR yy_ec[256] = 624 { 0, 625 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 626 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 627 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 628 1, 2, 4, 1, 1, 1, 5, 6, 1, 7, 629 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 630 18, 19, 20, 20, 20, 21, 21, 22, 23, 24, 631 25, 26, 27, 1, 28, 29, 30, 31, 32, 33, 632 34, 34, 34, 34, 34, 34, 35, 34, 36, 34, 633 34, 37, 38, 34, 39, 34, 34, 40, 34, 34, 634 41, 1, 42, 43, 44, 1, 45, 46, 47, 48, 635 636 49, 50, 51, 52, 53, 34, 54, 55, 56, 57, 637 58, 59, 34, 60, 61, 62, 63, 64, 65, 66, 638 67, 68, 69, 70, 71, 72, 1, 1, 1, 1, 639 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 640 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 641 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 642 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 643 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 644 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 645 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 646 647 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 648 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 649 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 650 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 651 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 652 1, 1, 1, 1, 1 653 } ; 654 655 static const YY_CHAR yy_meta[73] = 656 { 0, 657 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 658 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 659 2, 1, 1, 1, 1, 1, 1, 3, 3, 3, 660 3, 2, 2, 4, 4, 4, 4, 4, 4, 4, 661 1, 1, 1, 4, 3, 3, 3, 3, 2, 2, 662 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 663 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 664 1, 1 665 } ; 666 667 static const flex_int16_t yy_base[827] = 668 { 0, 669 0, 0, 1019, 1018, 72, 0, 1020, 1023, 1023, 1023, 670 994, 120, 141, 1023, 1023, 993, 138, 1023, 137, 135, 671 992, 154, 208, 990, 1023, 154, 990, 132, 1023, 0, 672 1023, 1023, 139, 130, 123, 140, 147, 133, 177, 956, 673 186, 151, 139, 116, 161, 950, 173, 963, 193, 199, 674 208, 215, 108, 1023, 184, 1023, 1023, 1023, 1023, 0, 675 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 676 230, 1023, 235, 235, 0, 271, 1023, 0, 1023, 1023, 677 1023, 986, 1023, 1023, 1023, 985, 0, 1023, 1023, 947, 678 952, 152, 949, 957, 956, 943, 946, 957, 243, 951, 679 680 939, 936, 949, 936, 933, 933, 939, 147, 248, 933, 681 943, 929, 935, 938, 939, 0, 931, 941, 249, 940, 682 935, 916, 177, 920, 933, 924, 184, 917, 250, 929, 683 931, 257, 920, 917, 906, 915, 249, 257, 919, 915, 684 917, 906, 909, 196, 217, 269, 918, 906, 918, 262, 685 911, 910, 1023, 1023, 0, 311, 1023, 292, 328, 1023, 686 1023, 335, 342, 257, 1023, 1023, 909, 0, 905, 900, 687 904, 913, 910, 315, 894, 894, 905, 897, 215, 907, 688 904, 904, 902, 899, 891, 897, 884, 882, 894, 880, 689 896, 0, 893, 881, 888, 885, 889, 890, 883, 880, 690 691 869, 868, 881, 884, 872, 880, 868, 874, 865, 316, 692 870, 873, 864, 871, 860, 864, 855, 869, 868, 859, 693 865, 307, 849, 852, 850, 860, 850, 845, 843, 845, 694 855, 841, 843, 840, 851, 850, 853, 835, 316, 843, 695 839, 837, 846, 825, 353, 843, 845, 834, 826, 363, 696 370, 378, 389, 1023, 1023, 823, 833, 832, 0, 830, 697 383, 0, 0, 823, 821, 821, 822, 817, 825, 814, 698 831, 820, 394, 0, 0, 814, 824, 823, 823, 0, 699 808, 397, 0, 0, 810, 400, 817, 818, 809, 803, 700 802, 803, 802, 802, 406, 797, 0, 0, 793, 792, 701 702 791, 793, 794, 799, 793, 789, 802, 797, 797, 795, 703 794, 788, 782, 784, 783, 787, 779, 782, 777, 785, 704 790, 778, 775, 787, 778, 0, 0, 784, 780, 0, 705 772, 772, 777, 768, 775, 409, 772, 0, 0, 0, 706 0, 762, 774, 773, 772, 773, 773, 0, 0, 0, 707 0, 760, 0, 768, 759, 0, 758, 759, 753, 763, 708 0, 0, 0, 754, 0, 750, 0, 0, 0, 0, 709 0, 0, 0, 0, 0, 760, 413, 759, 0, 0, 710 757, 753, 750, 0, 0, 0, 742, 415, 418, 427, 711 747, 743, 748, 739, 737, 750, 735, 0, 735, 748, 712 713 737, 733, 739, 734, 741, 0, 739, 736, 740, 724, 714 722, 725, 731, 737, 732, 731, 719, 0, 721, 722, 715 0, 0, 0, 0, 719, 722, 0, 716, 0, 729, 716 709, 718, 713, 0, 706, 706, 719, 0, 721, 0, 717 431, 734, 733, 732, 699, 698, 0, 715, 714, 709, 718 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 719 698, 711, 698, 695, 0, 0, 700, 699, 0, 696, 720 703, 702, 0, 688, 0, 0, 0, 0, 685, 0, 721 0, 684, 695, 434, 688, 694, 693, 690, 685, 682, 722 675, 675, 688, 673, 685, 0, 0, 678, 701, 700, 723 724 699, 666, 665, 427, 428, 0, 677, 680, 678, 667, 725 663, 0, 675, 672, 671, 661, 660, 650, 667, 653, 726 441, 661, 664, 0, 681, 680, 679, 646, 645, 0, 727 659, 646, 0, 656, 649, 650, 653, 0, 0, 0, 728 0, 673, 672, 0, 649, 652, 637, 644, 635, 642, 729 643, 643, 642, 628, 451, 640, 0, 641, 630, 629, 730 0, 0, 0, 654, 653, 652, 619, 618, 614, 622, 731 0, 650, 649, 0, 626, 629, 0, 458, 0, 607, 732 616, 0, 612, 611, 620, 620, 608, 622, 606, 620, 733 615, 0, 0, 0, 632, 631, 630, 597, 596, 0, 734 735 596, 0, 0, 434, 454, 620, 606, 609, 592, 604, 736 592, 591, 600, 600, 617, 616, 615, 582, 581, 0, 737 581, 582, 581, 591, 0, 594, 590, 592, 588, 575, 738 606, 449, 0, 583, 586, 578, 570, 577, 568, 589, 739 577, 573, 575, 573, 573, 572, 0, 560, 559, 569, 740 0, 589, 462, 0, 566, 569, 0, 569, 568, 552, 741 544, 552, 542, 550, 0, 547, 546, 567, 555, 553, 742 553, 537, 540, 554, 538, 569, 549, 550, 547, 544, 743 554, 531, 545, 544, 528, 527, 526, 547, 535, 533, 744 533, 514, 513, 0, 541, 513, 539, 511, 515, 514, 745 746 545, 525, 522, 0, 521, 524, 520, 522, 506, 503, 747 516, 501, 502, 509, 503, 492, 491, 0, 497, 496, 748 527, 507, 504, 0, 0, 0, 500, 0, 499, 0, 749 505, 504, 488, 485, 486, 0, 478, 486, 476, 482, 750 503, 482, 0, 0, 494, 493, 0, 0, 492, 491, 751 475, 472, 473, 487, 486, 463, 462, 468, 0, 0, 752 489, 461, 487, 479, 128, 151, 196, 227, 238, 269, 753 277, 0, 0, 291, 319, 0, 0, 323, 321, 0, 754 324, 354, 393, 0, 382, 405, 0, 0, 408, 396, 755 420, 412, 438, 440, 0, 445, 429, 463, 429, 433, 756 757 435, 0, 453, 454, 445, 0, 466, 0, 0, 0, 758 447, 448, 442, 0, 443, 444, 0, 0, 0, 1023, 759 509, 512, 515, 518, 519, 520 760 } ; 761 762 static const flex_int16_t yy_def[827] = 763 { 0, 764 820, 1, 821, 821, 820, 5, 820, 820, 820, 820, 765 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 766 820, 820, 820, 820, 820, 820, 820, 820, 820, 822, 767 820, 820, 820, 822, 822, 822, 822, 822, 822, 822, 768 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 769 822, 822, 822, 820, 820, 820, 820, 820, 820, 823, 770 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 771 824, 820, 825, 22, 23, 820, 820, 826, 820, 820, 772 820, 820, 820, 820, 820, 820, 822, 820, 820, 822, 773 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 774 775 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 776 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 777 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 778 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 779 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 780 822, 822, 820, 820, 823, 820, 820, 825, 820, 820, 781 820, 820, 820, 826, 820, 820, 822, 822, 822, 822, 782 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 783 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 784 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 785 786 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 787 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 788 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 789 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 790 822, 822, 822, 822, 822, 822, 822, 822, 822, 820, 791 820, 820, 820, 820, 820, 822, 822, 822, 822, 822, 792 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 793 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 794 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 795 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 796 797 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 798 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 799 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 800 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 801 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 802 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 803 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 804 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 805 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 806 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 807 808 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 809 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 810 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 811 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 812 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 813 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 814 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 815 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 816 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 817 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 818 819 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 820 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 821 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 823 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 824 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 825 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 826 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 827 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 828 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 829 830 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 831 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 832 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 833 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 834 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 835 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 836 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 837 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 838 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 839 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 840 841 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 842 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 843 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 844 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 845 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 846 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 847 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 848 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 849 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 850 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 851 852 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 853 822, 822, 822, 822, 822, 822, 822, 822, 822, 0, 854 820, 820, 820, 820, 820, 820 855 } ; 856 857 static const flex_int16_t yy_nxt[1096] = 858 { 0, 859 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 860 18, 19, 20, 21, 22, 23, 23, 23, 23, 23, 861 23, 24, 25, 26, 27, 28, 29, 30, 30, 30, 862 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 863 31, 32, 33, 30, 34, 35, 36, 37, 38, 39, 864 40, 41, 42, 30, 43, 44, 45, 46, 47, 48, 865 49, 50, 51, 52, 53, 30, 30, 30, 54, 55, 866 56, 57, 8, 59, 58, 8, 8, 8, 8, 8, 867 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 868 8, 8, 8, 8, 8, 8, 8, 8, 8, 60, 869 870 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 871 60, 60, 8, 8, 8, 60, 60, 60, 60, 60, 872 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 873 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 874 8, 8, 8, 8, 62, 63, 64, 67, 69, 71, 875 71, 71, 71, 71, 71, 71, 85, 86, 80, 151, 876 124, 70, 68, 88, 125, 65, 73, 152, 74, 74, 877 74, 74, 74, 74, 75, 81, 90, 82, 83, 783, 878 93, 89, 94, 122, 96, 76, 95, 104, 97, 105, 879 91, 92, 77, 78, 98, 100, 123, 99, 106, 101, 880 881 116, 188, 76, 117, 102, 126, 118, 119, 153, 169, 882 103, 120, 189, 170, 121, 784, 77, 129, 127, 78, 883 73, 107, 75, 75, 75, 75, 75, 75, 75, 108, 884 113, 109, 130, 208, 110, 131, 213, 133, 114, 76, 885 111, 209, 214, 785, 134, 135, 77, 140, 136, 115, 886 141, 237, 238, 154, 137, 138, 76, 139, 142, 148, 887 144, 156, 157, 149, 145, 143, 159, 160, 146, 239, 888 77, 147, 150, 161, 820, 268, 269, 240, 156, 157, 889 162, 786, 162, 159, 160, 163, 163, 163, 163, 163, 890 163, 163, 190, 228, 177, 255, 216, 161, 178, 179, 891 892 820, 221, 230, 200, 787, 191, 201, 202, 229, 217, 893 203, 218, 204, 241, 246, 231, 247, 222, 223, 255, 894 250, 242, 250, 159, 160, 251, 251, 251, 251, 251, 895 251, 251, 299, 300, 301, 788, 789, 252, 790, 252, 896 159, 160, 253, 253, 253, 253, 253, 253, 253, 163, 897 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 898 163, 163, 163, 262, 313, 331, 791, 792, 314, 338, 899 339, 340, 793, 332, 254, 794, 263, 251, 251, 251, 900 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 901 251, 254, 253, 253, 253, 253, 253, 253, 253, 349, 902 903 350, 351, 157, 253, 253, 253, 253, 253, 253, 253, 904 361, 362, 363, 369, 370, 371, 373, 374, 375, 157, 905 795, 160, 384, 385, 386, 422, 423, 424, 442, 443, 906 444, 452, 453, 454, 455, 456, 457, 796, 160, 797, 907 798, 445, 446, 458, 459, 460, 499, 500, 501, 525, 908 526, 527, 799, 800, 547, 549, 564, 565, 566, 502, 909 503, 637, 528, 529, 548, 550, 595, 596, 597, 567, 910 568, 638, 569, 615, 616, 617, 667, 801, 802, 598, 911 599, 639, 803, 668, 804, 669, 618, 619, 640, 687, 912 641, 642, 805, 806, 807, 808, 688, 809, 689, 810, 913 914 811, 812, 813, 814, 815, 816, 817, 818, 819, 8, 915 8, 8, 8, 87, 87, 87, 155, 155, 155, 71, 916 158, 164, 164, 782, 781, 780, 779, 778, 777, 776, 917 775, 774, 773, 772, 771, 770, 769, 768, 767, 766, 918 765, 764, 763, 762, 761, 760, 759, 758, 757, 756, 919 755, 754, 753, 752, 751, 750, 749, 748, 747, 746, 920 745, 744, 743, 742, 741, 740, 739, 738, 737, 736, 921 735, 734, 733, 732, 731, 730, 729, 728, 727, 726, 922 725, 724, 723, 722, 721, 720, 719, 718, 717, 716, 923 715, 714, 713, 712, 711, 710, 709, 708, 707, 706, 924 925 705, 704, 703, 702, 701, 700, 699, 698, 697, 696, 926 695, 694, 693, 692, 691, 690, 686, 685, 684, 683, 927 682, 681, 680, 679, 678, 677, 676, 675, 674, 673, 928 672, 671, 670, 666, 665, 664, 663, 662, 661, 660, 929 659, 658, 657, 656, 655, 654, 653, 652, 651, 650, 930 649, 648, 647, 646, 645, 644, 643, 636, 635, 634, 931 633, 632, 631, 630, 629, 628, 627, 626, 625, 624, 932 623, 622, 621, 620, 614, 613, 612, 611, 610, 609, 933 608, 607, 606, 605, 604, 603, 602, 601, 600, 594, 934 593, 592, 591, 590, 589, 588, 587, 586, 585, 584, 935 936 583, 582, 581, 580, 579, 578, 577, 576, 575, 574, 937 573, 572, 571, 570, 563, 562, 561, 560, 559, 558, 938 557, 556, 555, 554, 553, 552, 551, 546, 545, 544, 939 543, 542, 541, 540, 539, 538, 537, 536, 535, 534, 940 533, 532, 531, 530, 524, 523, 522, 521, 520, 519, 941 518, 517, 516, 515, 514, 513, 512, 511, 510, 509, 942 508, 507, 506, 505, 504, 498, 497, 496, 495, 494, 943 493, 492, 491, 490, 489, 488, 487, 486, 485, 484, 944 483, 482, 481, 480, 479, 478, 477, 476, 475, 474, 945 473, 472, 471, 470, 469, 468, 467, 466, 465, 464, 946 947 463, 462, 461, 451, 450, 449, 448, 447, 441, 440, 948 439, 438, 437, 436, 435, 434, 433, 432, 431, 430, 949 429, 428, 427, 426, 425, 421, 420, 419, 418, 417, 950 416, 415, 414, 413, 412, 411, 410, 409, 408, 407, 951 406, 405, 404, 403, 402, 401, 400, 399, 398, 397, 952 396, 395, 394, 393, 392, 391, 390, 389, 388, 387, 953 383, 382, 381, 380, 379, 378, 377, 376, 372, 368, 954 367, 366, 365, 364, 360, 359, 358, 357, 356, 355, 955 354, 353, 352, 348, 347, 346, 345, 344, 343, 342, 956 341, 337, 336, 335, 334, 333, 330, 329, 328, 327, 957 958 326, 325, 324, 323, 322, 321, 320, 319, 318, 317, 959 316, 315, 312, 311, 310, 309, 308, 307, 306, 305, 960 304, 303, 302, 298, 297, 296, 295, 294, 293, 292, 961 291, 290, 289, 288, 287, 286, 285, 284, 283, 282, 962 281, 280, 279, 278, 277, 276, 275, 274, 273, 272, 963 271, 270, 267, 266, 265, 264, 261, 260, 259, 258, 964 257, 256, 249, 248, 245, 244, 243, 236, 235, 234, 965 233, 232, 227, 226, 225, 224, 220, 219, 215, 212, 966 211, 210, 207, 206, 205, 199, 198, 197, 196, 195, 967 194, 193, 192, 187, 186, 185, 184, 183, 182, 181, 968 969 180, 176, 175, 174, 173, 172, 171, 168, 167, 166, 970 165, 132, 128, 112, 84, 79, 72, 66, 61, 820, 971 58, 58, 7, 820, 820, 820, 820, 820, 820, 820, 972 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 973 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 974 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 975 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 976 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 977 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 978 820, 820, 820, 820, 820 979 980 } ; 981 982 static const flex_int16_t yy_chk[1096] = 983 { 0, 984 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 985 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 986 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 987 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 988 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 989 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 990 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 991 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 992 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 993 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 994 995 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 996 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 997 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 998 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 999 5, 5, 5, 5, 12, 12, 13, 17, 19, 20, 1000 20, 20, 20, 20, 20, 20, 28, 28, 26, 53, 1001 44, 19, 17, 33, 44, 13, 22, 53, 22, 22, 1002 22, 22, 22, 22, 22, 26, 34, 26, 26, 765, 1003 35, 33, 35, 43, 36, 22, 35, 38, 36, 38, 1004 34, 34, 22, 22, 36, 37, 43, 36, 38, 37, 1005 1006 42, 108, 22, 42, 37, 45, 42, 42, 55, 92, 1007 37, 42, 108, 92, 42, 766, 22, 47, 45, 22, 1008 23, 39, 23, 23, 23, 23, 23, 23, 23, 39, 1009 41, 39, 47, 123, 39, 47, 127, 49, 41, 23, 1010 39, 123, 127, 767, 49, 49, 23, 50, 49, 41, 1011 50, 144, 144, 55, 49, 49, 23, 49, 50, 52, 1012 51, 71, 71, 52, 51, 50, 73, 73, 51, 145, 1013 23, 51, 52, 74, 74, 179, 179, 145, 71, 71, 1014 76, 768, 76, 73, 73, 76, 76, 76, 76, 76, 1015 76, 76, 109, 137, 99, 164, 129, 74, 99, 99, 1016 1017 74, 132, 138, 119, 769, 109, 119, 119, 137, 129, 1018 119, 129, 119, 146, 150, 138, 150, 132, 132, 164, 1019 156, 146, 156, 158, 158, 156, 156, 156, 156, 156, 1020 156, 156, 210, 210, 210, 770, 771, 159, 774, 159, 1021 158, 158, 159, 159, 159, 159, 159, 159, 159, 162, 1022 162, 162, 162, 162, 162, 162, 163, 163, 163, 163, 1023 163, 163, 163, 174, 222, 239, 775, 778, 222, 245, 1024 245, 245, 779, 239, 163, 781, 174, 250, 250, 250, 1025 250, 250, 250, 250, 251, 251, 251, 251, 251, 251, 1026 251, 163, 252, 252, 252, 252, 252, 252, 252, 261, 1027 1028 261, 261, 251, 253, 253, 253, 253, 253, 253, 253, 1029 273, 273, 273, 282, 282, 282, 286, 286, 286, 251, 1030 782, 253, 295, 295, 295, 336, 336, 336, 377, 377, 1031 377, 388, 388, 388, 389, 389, 389, 783, 253, 785, 1032 786, 377, 377, 390, 390, 390, 441, 441, 441, 484, 1033 484, 484, 789, 790, 504, 505, 521, 521, 521, 441, 1034 441, 604, 484, 484, 504, 505, 555, 555, 555, 521, 1035 521, 604, 521, 578, 578, 578, 632, 791, 792, 555, 1036 555, 605, 793, 632, 794, 632, 578, 578, 605, 653, 1037 605, 605, 796, 797, 798, 799, 653, 800, 653, 801, 1038 1039 803, 804, 805, 807, 811, 812, 813, 815, 816, 821, 1040 821, 821, 821, 822, 822, 822, 823, 823, 823, 824, 1041 825, 826, 826, 764, 763, 762, 761, 758, 757, 756, 1042 755, 754, 753, 752, 751, 750, 749, 746, 745, 742, 1043 741, 740, 739, 738, 737, 735, 734, 733, 732, 731, 1044 729, 727, 723, 722, 721, 720, 719, 717, 716, 715, 1045 714, 713, 712, 711, 710, 709, 708, 707, 706, 705, 1046 703, 702, 701, 700, 699, 698, 697, 696, 695, 693, 1047 692, 691, 690, 689, 688, 687, 686, 685, 684, 683, 1048 682, 681, 680, 679, 678, 677, 676, 675, 674, 673, 1049 1050 672, 671, 670, 669, 668, 667, 666, 664, 663, 662, 1051 661, 660, 659, 658, 656, 655, 652, 650, 649, 648, 1052 646, 645, 644, 643, 642, 641, 640, 639, 638, 637, 1053 636, 635, 634, 631, 630, 629, 628, 627, 626, 624, 1054 623, 622, 621, 619, 618, 617, 616, 615, 614, 613, 1055 612, 611, 610, 609, 608, 607, 606, 601, 599, 598, 1056 597, 596, 595, 591, 590, 589, 588, 587, 586, 585, 1057 584, 583, 581, 580, 576, 575, 573, 572, 570, 569, 1058 568, 567, 566, 565, 564, 560, 559, 558, 556, 554, 1059 553, 552, 551, 550, 549, 548, 547, 546, 545, 543, 1060 1061 542, 537, 536, 535, 534, 532, 531, 529, 528, 527, 1062 526, 525, 523, 522, 520, 519, 518, 517, 516, 515, 1063 514, 513, 511, 510, 509, 508, 507, 503, 502, 501, 1064 500, 499, 498, 495, 494, 493, 492, 491, 490, 489, 1065 488, 487, 486, 485, 483, 482, 479, 474, 472, 471, 1066 470, 468, 467, 464, 463, 462, 461, 450, 449, 448, 1067 446, 445, 444, 443, 442, 439, 437, 436, 435, 433, 1068 432, 431, 430, 428, 426, 425, 420, 419, 417, 416, 1069 415, 414, 413, 412, 411, 410, 409, 408, 407, 405, 1070 404, 403, 402, 401, 400, 399, 397, 396, 395, 394, 1071 1072 393, 392, 391, 387, 383, 382, 381, 378, 376, 366, 1073 364, 360, 359, 358, 357, 355, 354, 352, 347, 346, 1074 345, 344, 343, 342, 337, 335, 334, 333, 332, 331, 1075 329, 328, 325, 324, 323, 322, 321, 320, 319, 318, 1076 317, 316, 315, 314, 313, 312, 311, 310, 309, 308, 1077 307, 306, 305, 304, 303, 302, 301, 300, 299, 296, 1078 294, 293, 292, 291, 290, 289, 288, 287, 285, 281, 1079 279, 278, 277, 276, 272, 271, 270, 269, 268, 267, 1080 266, 265, 264, 260, 258, 257, 256, 249, 248, 247, 1081 246, 244, 243, 242, 241, 240, 238, 237, 236, 235, 1082 1083 234, 233, 232, 231, 230, 229, 228, 227, 226, 225, 1084 224, 223, 221, 220, 219, 218, 217, 216, 215, 214, 1085 213, 212, 211, 209, 208, 207, 206, 205, 204, 203, 1086 202, 201, 200, 199, 198, 197, 196, 195, 194, 193, 1087 191, 190, 189, 188, 187, 186, 185, 184, 183, 182, 1088 181, 180, 178, 177, 176, 175, 173, 172, 171, 170, 1089 169, 167, 152, 151, 149, 148, 147, 143, 142, 141, 1090 140, 139, 136, 135, 134, 133, 131, 130, 128, 126, 1091 125, 124, 122, 121, 120, 118, 117, 115, 114, 113, 1092 112, 111, 110, 107, 106, 105, 104, 103, 102, 101, 1093 1094 100, 98, 97, 96, 95, 94, 93, 91, 90, 86, 1095 82, 48, 46, 40, 27, 24, 21, 16, 11, 7, 1096 4, 3, 820, 820, 820, 820, 820, 820, 820, 820, 1097 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 1098 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 1099 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 1100 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 1101 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 1102 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 1103 820, 820, 820, 820, 820 1104 1105 } ; 1106 1107 1108 /* Table of booleans, true if rule could match eol. */ 1109 static const flex_int32_t yy_rule_can_match_eol[240] = 1110 { 0, 1111 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1112 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1113 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1114 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1115 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1116 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1117 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1118 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1119 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1120 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1121 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1122 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1123 }; 1124 1125 /* The intent behind this definition is that it'll catch 1126 * any uses of REJECT which flex missed. 1127 */ 1128 #define REJECT reject_used_but_not_detected 1129 #define yymore() yymore_used_but_not_detected 1130 #define YY_MORE_ADJ 0 1131 #define YY_RESTORE_YY_MORE_OFFSET 1132 /* 1133 // Copyright 2016 The SwiftShader Authors. All Rights Reserved. 1134 // 1135 // Licensed under the Apache License, Version 2.0 (the "License"); 1136 // you may not use this file except in compliance with the License. 1137 // You may obtain a copy of the License at 1138 // 1139 // http://www.apache.org/licenses/LICENSE-2.0 1140 // 1141 // Unless required by applicable law or agreed to in writing, software 1142 // distributed under the License is distributed on an "AS IS" BASIS, 1143 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1144 // See the License for the specific language governing permissions and 1145 // limitations under the License. 1146 1147 This file contains the Lex specification for GLSL ES. 1148 Based on ANSI C grammar, Lex specification: 1149 http://www.lysator.liu.se/c/ANSI-C-grammar-l.html 1150 1151 IF YOU MODIFY THIS FILE YOU ALSO NEED TO RUN generate_parser.sh, 1152 WHICH GENERATES THE GLSL ES LEXER (glslang_lex.cpp). 1153 */ 1154 1155 #include "glslang.h" 1156 #include "ParseHelper.h" 1157 #include "preprocessor/Token.h" 1158 #include "util.h" 1159 #include "glslang_tab.h" 1160 1161 /* windows only pragma */ 1162 #ifdef _MSC_VER 1163 #pragma warning(disable : 4102) 1164 #endif 1165 1166 #define YY_USER_ACTION \ 1167 yylloc->first_file = yylloc->last_file = yycolumn; \ 1168 yylloc->first_line = yylloc->last_line = yylineno; 1169 1170 #define YY_INPUT(buf, result, max_size) \ 1171 result = string_input(buf, max_size, yyscanner); 1172 1173 static yy_size_t string_input(char* buf, yy_size_t max_size, yyscan_t yyscanner); 1174 static int check_type(yyscan_t yyscanner); 1175 static int reserved_word(yyscan_t yyscanner); 1176 static int ES2_reserved_ES3_keyword(TParseContext *context, int token); 1177 static int ES2_keyword_ES3_reserved(TParseContext *context, int token); 1178 static int ES2_identifier_ES3_keyword(TParseContext *context, int token); 1179 static int uint_constant(TParseContext *context); 1180 static int int_constant(yyscan_t yyscanner); 1181 static int float_constant(yyscan_t yyscanner); 1182 static int floatsuffix_check(TParseContext* context); 1183 1184 1185 1186 1187 #define INITIAL 0 1188 #define COMMENT 1 1189 #define FIELDS 2 1190 1191 1192 1193 1194 1195 1196 #define YY_EXTRA_TYPE TParseContext* 1197 1198 1199 1200 1201 /* Holds the entire state of the reentrant scanner. */ 1202 struct yyguts_t 1203 { 1204 1205 /* User-defined. Not touched by flex. */ 1206 YY_EXTRA_TYPE yyextra_r; 1207 1208 /* The rest are the same as the globals declared in the non-reentrant scanner. */ 1209 FILE *yyin_r, *yyout_r; 1210 size_t yy_buffer_stack_top; /**< index of top of stack. */ 1211 size_t yy_buffer_stack_max; /**< capacity of stack. */ 1212 YY_BUFFER_STATE * yy_buffer_stack; /**< Stack as an array. */ 1213 char yy_hold_char; 1214 int yy_n_chars; 1215 int yyleng_r; 1216 char *yy_c_buf_p; 1217 int yy_init; 1218 int yy_start; 1219 int yy_did_buffer_switch_on_eof; 1220 int yy_start_stack_ptr; 1221 int yy_start_stack_depth; 1222 int *yy_start_stack; 1223 yy_state_type yy_last_accepting_state; 1224 char* yy_last_accepting_cpos; 1225 1226 int yylineno_r; 1227 int yy_flex_debug_r; 1228 1229 1230 1231 1232 char *yytext_r; 1233 int yy_more_flag; 1234 int yy_more_len; 1235 1236 1237 1238 YYSTYPE * yylval_r; 1239 1240 1241 1242 YYLTYPE * yylloc_r; 1243 1244 1245 }; /* end struct yyguts_t */ 1246 1247 1248 1249 1250 static int yy_init_globals ( yyscan_t yyscanner ); 1251 1252 1253 1254 1255 1256 /* This must go here because YYSTYPE and YYLTYPE are included 1257 * from bison output in section 1.*/ 1258 # define yylval yyg->yylval_r 1259 1260 1261 1262 # define yylloc yyg->yylloc_r 1263 1264 1265 1266 int yylex_init (yyscan_t* scanner); 1267 1268 int yylex_init_extra ( YY_EXTRA_TYPE user_defined, yyscan_t* scanner); 1269 1270 1271 1272 /* Accessor methods to globals. 1273 These are made visible to non-reentrant scanners for convenience. */ 1274 1275 1276 int yylex_destroy ( yyscan_t yyscanner ); 1277 1278 1279 1280 int yyget_debug ( yyscan_t yyscanner ); 1281 1282 1283 1284 void yyset_debug ( int debug_flag , yyscan_t yyscanner ); 1285 1286 1287 1288 YY_EXTRA_TYPE yyget_extra ( yyscan_t yyscanner ); 1289 1290 1291 1292 void yyset_extra ( YY_EXTRA_TYPE user_defined , yyscan_t yyscanner ); 1293 1294 1295 1296 FILE *yyget_in ( yyscan_t yyscanner ); 1297 1298 1299 1300 void yyset_in ( FILE * _in_str , yyscan_t yyscanner ); 1301 1302 1303 1304 FILE *yyget_out ( yyscan_t yyscanner ); 1305 1306 1307 1308 void yyset_out ( FILE * _out_str , yyscan_t yyscanner ); 1309 1310 1311 1312 int yyget_leng ( yyscan_t yyscanner ); 1313 1314 1315 1316 char *yyget_text ( yyscan_t yyscanner ); 1317 1318 1319 1320 int yyget_lineno ( yyscan_t yyscanner ); 1321 1322 1323 1324 void yyset_lineno ( int _line_number , yyscan_t yyscanner ); 1325 1326 1327 1328 1329 int yyget_column ( yyscan_t yyscanner ); 1330 1331 1332 1333 1334 1335 void yyset_column ( int _column_no , yyscan_t yyscanner ); 1336 1337 1338 1339 1340 YYSTYPE * yyget_lval ( yyscan_t yyscanner ); 1341 1342 1343 void yyset_lval ( YYSTYPE * yylval_param , yyscan_t yyscanner ); 1344 1345 1346 1347 YYLTYPE *yyget_lloc ( yyscan_t yyscanner ); 1348 1349 1350 1351 void yyset_lloc ( YYLTYPE * yylloc_param , yyscan_t yyscanner ); 1352 1353 1354 1355 /* Macros after this point can all be overridden by user definitions in 1356 * section 1. 1357 */ 1358 1359 #ifndef YY_SKIP_YYWRAP 1360 #ifdef __cplusplus 1361 extern "C" int yywrap ( yyscan_t yyscanner ); 1362 #else 1363 extern int yywrap ( yyscan_t yyscanner ); 1364 #endif 1365 #endif 1366 1367 #ifndef YY_NO_UNPUT 1368 1369 #endif 1370 1371 1372 #ifndef yytext_ptr 1373 static void yy_flex_strncpy ( char *, const char *, int , yyscan_t yyscanner); 1374 #endif 1375 1376 #ifdef YY_NEED_STRLEN 1377 static int yy_flex_strlen ( const char * , yyscan_t yyscanner); 1378 #endif 1379 1380 #ifndef YY_NO_INPUT 1381 #ifdef __cplusplus 1382 static int yyinput ( yyscan_t yyscanner ); 1383 #else 1384 static int input ( yyscan_t yyscanner ); 1385 #endif 1386 1387 #endif 1388 1389 1390 1391 1392 1393 1394 1395 1396 /* Amount of stuff to slurp up with each read. */ 1397 #ifndef YY_READ_BUF_SIZE 1398 #ifdef __ia64__ 1399 /* On IA-64, the buffer size is 16k, not 8k */ 1400 #define YY_READ_BUF_SIZE 16384 1401 #else 1402 #define YY_READ_BUF_SIZE 8192 1403 #endif /* __ia64__ */ 1404 #endif 1405 1406 1407 /* Copy whatever the last rule matched to the standard output. */ 1408 #ifndef ECHO 1409 /* This used to be an fputs(), but since the string might contain NUL's, 1410 * we now use fwrite(). 1411 */ 1412 #define ECHO do { if (fwrite( yytext, (size_t) yyleng, 1, yyout )) {} } while (0) 1413 #endif 1414 1415 1416 1417 /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, 1418 * is returned in "result". 1419 */ 1420 #ifndef YY_INPUT 1421 #define YY_INPUT(buf,result,max_size) \ 1422 if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ 1423 { \ 1424 int c = '*'; \ 1425 int n; \ 1426 for ( n = 0; n < max_size && \ 1427 (c = getc( yyin )) != EOF && c != '\n'; ++n ) \ 1428 buf[n] = (char) c; \ 1429 if ( c == '\n' ) \ 1430 buf[n++] = (char) c; \ 1431 if ( c == EOF && ferror( yyin ) ) \ 1432 YY_FATAL_ERROR( "input in flex scanner failed" ); \ 1433 result = n; \ 1434 } \ 1435 else \ 1436 { \ 1437 errno=0; \ 1438 while ( (result = (int) fread(buf, 1, (yy_size_t) max_size, yyin)) == 0 && ferror(yyin)) \ 1439 { \ 1440 if( errno != EINTR) \ 1441 { \ 1442 YY_FATAL_ERROR( "input in flex scanner failed" ); \ 1443 break; \ 1444 } \ 1445 errno=0; \ 1446 clearerr(yyin); \ 1447 } \ 1448 }\ 1449 \ 1450 1451 #endif 1452 1453 1454 1455 /* No semi-colon after return; correct usage is to write "yyterminate();" - 1456 * we don't want an extra ';' after the "return" because that will cause 1457 * some compilers to complain about unreachable statements. 1458 */ 1459 #ifndef yyterminate 1460 #define yyterminate() return YY_NULL 1461 #endif 1462 1463 1464 /* Number of entries by which start-condition stack grows. */ 1465 #ifndef YY_START_STACK_INCR 1466 #define YY_START_STACK_INCR 25 1467 #endif 1468 1469 1470 /* Report a fatal error. */ 1471 #ifndef YY_FATAL_ERROR 1472 #define YY_FATAL_ERROR(msg) yy_fatal_error( msg , yyscanner) 1473 #endif 1474 1475 1476 1477 /* end tables serialization structures and prototypes */ 1478 1479 1480 1481 /* Default declaration of generated scanner - a define so the user can 1482 * easily add parameters. 1483 */ 1484 #ifndef YY_DECL 1485 #define YY_DECL_IS_OURS 1 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 extern int yylex \ 1504 (YYSTYPE * yylval_param, YYLTYPE * yylloc_param , yyscan_t yyscanner); 1505 1506 #define YY_DECL int yylex \ 1507 (YYSTYPE * yylval_param, YYLTYPE * yylloc_param , yyscan_t yyscanner) 1508 #endif /* !YY_DECL */ 1509 1510 1511 /* Code executed at the beginning of each rule, after yytext and yyleng 1512 * have been set up. 1513 */ 1514 #ifndef YY_USER_ACTION 1515 #define YY_USER_ACTION 1516 #endif 1517 1518 1519 1520 /* Code executed at the end of each rule. */ 1521 #ifndef YY_BREAK 1522 #define YY_BREAK /*LINTED*/break; 1523 #endif 1524 1525 1526 1527 #define YY_RULE_SETUP \ 1528 YY_USER_ACTION 1529 1530 1531 /** The main scanner function which does all the work. 1532 */ 1533 YY_DECL 1534 { 1535 yy_state_type yy_current_state; 1536 char *yy_cp, *yy_bp; 1537 int yy_act; 1538 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; 1539 1540 1541 1542 1543 yylval = yylval_param; 1544 1545 1546 1547 yylloc = yylloc_param; 1548 1549 1550 if ( !yyg->yy_init ) 1551 { 1552 yyg->yy_init = 1; 1553 1554 #ifdef YY_USER_INIT 1555 YY_USER_INIT; 1556 #endif 1557 1558 1559 1560 if ( ! yyg->yy_start ) 1561 yyg->yy_start = 1; /* first start state */ 1562 1563 if ( ! yyin ) 1564 yyin = stdin; 1565 1566 if ( ! yyout ) 1567 yyout = stdout; 1568 1569 if ( ! YY_CURRENT_BUFFER ) { 1570 yyensure_buffer_stack (yyscanner); 1571 YY_CURRENT_BUFFER_LVALUE = 1572 yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner); 1573 } 1574 1575 yy_load_buffer_state( yyscanner ); 1576 } 1577 1578 { 1579 1580 1581 1582 TParseContext* context = yyextra; 1583 1584 1585 1586 while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ 1587 { 1588 yy_cp = yyg->yy_c_buf_p; 1589 1590 /* Support of yytext. */ 1591 *yy_cp = yyg->yy_hold_char; 1592 1593 /* yy_bp points to the position in yy_ch_buf of the start of 1594 * the current run. 1595 */ 1596 yy_bp = yy_cp; 1597 1598 yy_current_state = yyg->yy_start; 1599 yy_match: 1600 do 1601 { 1602 YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)] ; 1603 if ( yy_accept[yy_current_state] ) 1604 { 1605 yyg->yy_last_accepting_state = yy_current_state; 1606 yyg->yy_last_accepting_cpos = yy_cp; 1607 } 1608 while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) 1609 { 1610 yy_current_state = (int) yy_def[yy_current_state]; 1611 if ( yy_current_state >= 821 ) 1612 yy_c = yy_meta[yy_c]; 1613 } 1614 yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; 1615 ++yy_cp; 1616 } 1617 while ( yy_current_state != 820 ); 1618 yy_cp = yyg->yy_last_accepting_cpos; 1619 yy_current_state = yyg->yy_last_accepting_state; 1620 1621 yy_find_action: 1622 yy_act = yy_accept[yy_current_state]; 1623 1624 YY_DO_BEFORE_ACTION; 1625 1626 1627 if ( yy_act != YY_END_OF_BUFFER && yy_rule_can_match_eol[yy_act] ) 1628 { 1629 int yyl; 1630 for ( yyl = 0; yyl < yyleng; ++yyl ) 1631 if ( yytext[yyl] == '\n' ) 1632 1633 do{ yylineno++; 1634 yycolumn=0; 1635 }while(0) 1636 ; 1637 } 1638 1639 1640 do_action: /* This label is used only to access EOF actions. */ 1641 1642 1643 switch ( yy_act ) 1644 { /* beginning of action switch */ 1645 case 0: /* must back up */ 1646 /* undo the effects of YY_DO_BEFORE_ACTION */ 1647 *yy_cp = yyg->yy_hold_char; 1648 yy_cp = yyg->yy_last_accepting_cpos; 1649 yy_current_state = yyg->yy_last_accepting_state; 1650 goto yy_find_action; 1651 1652 case 1: 1653 YY_RULE_SETUP 1654 { return(INVARIANT); } 1655 YY_BREAK 1656 case 2: 1657 YY_RULE_SETUP 1658 { return(HIGH_PRECISION); } 1659 YY_BREAK 1660 case 3: 1661 YY_RULE_SETUP 1662 { return(MEDIUM_PRECISION); } 1663 YY_BREAK 1664 case 4: 1665 YY_RULE_SETUP 1666 { return(LOW_PRECISION); } 1667 YY_BREAK 1668 case 5: 1669 YY_RULE_SETUP 1670 { return(PRECISION); } 1671 YY_BREAK 1672 case 6: 1673 YY_RULE_SETUP 1674 { return ES2_keyword_ES3_reserved(context, ATTRIBUTE); } 1675 YY_BREAK 1676 case 7: 1677 YY_RULE_SETUP 1678 { return(CONST_QUAL); } 1679 YY_BREAK 1680 case 8: 1681 YY_RULE_SETUP 1682 { return(UNIFORM); } 1683 YY_BREAK 1684 case 9: 1685 YY_RULE_SETUP 1686 { return ES2_keyword_ES3_reserved(context, VARYING); } 1687 YY_BREAK 1688 case 10: 1689 YY_RULE_SETUP 1690 { return(BREAK); } 1691 YY_BREAK 1692 case 11: 1693 YY_RULE_SETUP 1694 { return(CONTINUE); } 1695 YY_BREAK 1696 case 12: 1697 YY_RULE_SETUP 1698 { return(DO); } 1699 YY_BREAK 1700 case 13: 1701 YY_RULE_SETUP 1702 { return(FOR); } 1703 YY_BREAK 1704 case 14: 1705 YY_RULE_SETUP 1706 { return(WHILE); } 1707 YY_BREAK 1708 case 15: 1709 YY_RULE_SETUP 1710 { return(IF); } 1711 YY_BREAK 1712 case 16: 1713 YY_RULE_SETUP 1714 { return(ELSE); } 1715 YY_BREAK 1716 case 17: 1717 YY_RULE_SETUP 1718 { return ES2_reserved_ES3_keyword(context, SWITCH); } 1719 YY_BREAK 1720 case 18: 1721 YY_RULE_SETUP 1722 { return ES2_reserved_ES3_keyword(context, CASE); } 1723 YY_BREAK 1724 case 19: 1725 YY_RULE_SETUP 1726 { return ES2_reserved_ES3_keyword(context, DEFAULT); } 1727 YY_BREAK 1728 case 20: 1729 YY_RULE_SETUP 1730 { return ES2_reserved_ES3_keyword(context, CENTROID); } 1731 YY_BREAK 1732 case 21: 1733 YY_RULE_SETUP 1734 { return ES2_reserved_ES3_keyword(context, FLAT); } 1735 YY_BREAK 1736 case 22: 1737 YY_RULE_SETUP 1738 { return ES2_reserved_ES3_keyword(context, SMOOTH); } 1739 YY_BREAK 1740 case 23: 1741 YY_RULE_SETUP 1742 { return(IN_QUAL); } 1743 YY_BREAK 1744 case 24: 1745 YY_RULE_SETUP 1746 { return(OUT_QUAL); } 1747 YY_BREAK 1748 case 25: 1749 YY_RULE_SETUP 1750 { return(INOUT_QUAL); } 1751 YY_BREAK 1752 case 26: 1753 YY_RULE_SETUP 1754 { context->lexAfterType = true; return(FLOAT_TYPE); } 1755 YY_BREAK 1756 case 27: 1757 YY_RULE_SETUP 1758 { context->lexAfterType = true; return(INT_TYPE); } 1759 YY_BREAK 1760 case 28: 1761 YY_RULE_SETUP 1762 { return ES2_identifier_ES3_keyword(context, UINT_TYPE); } 1763 YY_BREAK 1764 case 29: 1765 YY_RULE_SETUP 1766 { context->lexAfterType = true; return(VOID_TYPE); } 1767 YY_BREAK 1768 case 30: 1769 YY_RULE_SETUP 1770 { context->lexAfterType = true; return(BOOL_TYPE); } 1771 YY_BREAK 1772 case 31: 1773 YY_RULE_SETUP 1774 { yylval->lex.b = true; return(BOOLCONSTANT); } 1775 YY_BREAK 1776 case 32: 1777 YY_RULE_SETUP 1778 { yylval->lex.b = false; return(BOOLCONSTANT); } 1779 YY_BREAK 1780 case 33: 1781 YY_RULE_SETUP 1782 { return(DISCARD); } 1783 YY_BREAK 1784 case 34: 1785 YY_RULE_SETUP 1786 { return(RETURN); } 1787 YY_BREAK 1788 case 35: 1789 YY_RULE_SETUP 1790 { context->lexAfterType = true; return(MATRIX2); } 1791 YY_BREAK 1792 case 36: 1793 YY_RULE_SETUP 1794 { context->lexAfterType = true; return(MATRIX3); } 1795 YY_BREAK 1796 case 37: 1797 YY_RULE_SETUP 1798 { context->lexAfterType = true; return(MATRIX4); } 1799 YY_BREAK 1800 case 38: 1801 YY_RULE_SETUP 1802 { return ES2_identifier_ES3_keyword(context, MATRIX2); } 1803 YY_BREAK 1804 case 39: 1805 YY_RULE_SETUP 1806 { return ES2_identifier_ES3_keyword(context, MATRIX3); } 1807 YY_BREAK 1808 case 40: 1809 YY_RULE_SETUP 1810 { return ES2_identifier_ES3_keyword(context, MATRIX4); } 1811 YY_BREAK 1812 case 41: 1813 YY_RULE_SETUP 1814 { return ES2_identifier_ES3_keyword(context, MATRIX2x3); } 1815 YY_BREAK 1816 case 42: 1817 YY_RULE_SETUP 1818 { return ES2_identifier_ES3_keyword(context, MATRIX3x2); } 1819 YY_BREAK 1820 case 43: 1821 YY_RULE_SETUP 1822 { return ES2_identifier_ES3_keyword(context, MATRIX2x4); } 1823 YY_BREAK 1824 case 44: 1825 YY_RULE_SETUP 1826 { return ES2_identifier_ES3_keyword(context, MATRIX4x2); } 1827 YY_BREAK 1828 case 45: 1829 YY_RULE_SETUP 1830 { return ES2_identifier_ES3_keyword(context, MATRIX3x4); } 1831 YY_BREAK 1832 case 46: 1833 YY_RULE_SETUP 1834 { return ES2_identifier_ES3_keyword(context, MATRIX4x3); } 1835 YY_BREAK 1836 case 47: 1837 YY_RULE_SETUP 1838 { context->lexAfterType = true; return (VEC2); } 1839 YY_BREAK 1840 case 48: 1841 YY_RULE_SETUP 1842 { context->lexAfterType = true; return (VEC3); } 1843 YY_BREAK 1844 case 49: 1845 YY_RULE_SETUP 1846 { context->lexAfterType = true; return (VEC4); } 1847 YY_BREAK 1848 case 50: 1849 YY_RULE_SETUP 1850 { context->lexAfterType = true; return (IVEC2); } 1851 YY_BREAK 1852 case 51: 1853 YY_RULE_SETUP 1854 { context->lexAfterType = true; return (IVEC3); } 1855 YY_BREAK 1856 case 52: 1857 YY_RULE_SETUP 1858 { context->lexAfterType = true; return (IVEC4); } 1859 YY_BREAK 1860 case 53: 1861 YY_RULE_SETUP 1862 { return ES2_identifier_ES3_keyword(context, UVEC2); } 1863 YY_BREAK 1864 case 54: 1865 YY_RULE_SETUP 1866 { return ES2_identifier_ES3_keyword(context, UVEC3); } 1867 YY_BREAK 1868 case 55: 1869 YY_RULE_SETUP 1870 { return ES2_identifier_ES3_keyword(context, UVEC4); } 1871 YY_BREAK 1872 case 56: 1873 YY_RULE_SETUP 1874 { context->lexAfterType = true; return (BVEC2); } 1875 YY_BREAK 1876 case 57: 1877 YY_RULE_SETUP 1878 { context->lexAfterType = true; return (BVEC3); } 1879 YY_BREAK 1880 case 58: 1881 YY_RULE_SETUP 1882 { context->lexAfterType = true; return (BVEC4); } 1883 YY_BREAK 1884 case 59: 1885 YY_RULE_SETUP 1886 { context->lexAfterType = true; return SAMPLER2D; } 1887 YY_BREAK 1888 case 60: 1889 YY_RULE_SETUP 1890 { context->lexAfterType = true; return SAMPLERCUBE; } 1891 YY_BREAK 1892 case 61: 1893 YY_RULE_SETUP 1894 { context->lexAfterType = true; return SAMPLER2DRECT; } 1895 YY_BREAK 1896 case 62: 1897 YY_RULE_SETUP 1898 { context->lexAfterType = true; return SAMPLER_EXTERNAL_OES; } 1899 YY_BREAK 1900 case 63: 1901 YY_RULE_SETUP 1902 { context->lexAfterType = true; return SAMPLER3D; } 1903 YY_BREAK 1904 case 64: 1905 YY_RULE_SETUP 1906 { return ES2_reserved_ES3_keyword(context, SAMPLER3DRECT); } 1907 YY_BREAK 1908 case 65: 1909 YY_RULE_SETUP 1910 { return ES2_identifier_ES3_keyword(context, SAMPLER2DARRAY); } 1911 YY_BREAK 1912 case 66: 1913 YY_RULE_SETUP 1914 { return ES2_identifier_ES3_keyword(context, ISAMPLER2D); } 1915 YY_BREAK 1916 case 67: 1917 YY_RULE_SETUP 1918 { return ES2_identifier_ES3_keyword(context, ISAMPLER3D); } 1919 YY_BREAK 1920 case 68: 1921 YY_RULE_SETUP 1922 { return ES2_identifier_ES3_keyword(context, ISAMPLERCUBE); } 1923 YY_BREAK 1924 case 69: 1925 YY_RULE_SETUP 1926 { return ES2_identifier_ES3_keyword(context, ISAMPLER2DARRAY); } 1927 YY_BREAK 1928 case 70: 1929 YY_RULE_SETUP 1930 { return ES2_identifier_ES3_keyword(context, USAMPLER2D); } 1931 YY_BREAK 1932 case 71: 1933 YY_RULE_SETUP 1934 { return ES2_identifier_ES3_keyword(context, USAMPLER3D); } 1935 YY_BREAK 1936 case 72: 1937 YY_RULE_SETUP 1938 { return ES2_identifier_ES3_keyword(context, USAMPLERCUBE); } 1939 YY_BREAK 1940 case 73: 1941 YY_RULE_SETUP 1942 { return ES2_identifier_ES3_keyword(context, USAMPLER2DARRAY); } 1943 YY_BREAK 1944 case 74: 1945 YY_RULE_SETUP 1946 { return ES2_reserved_ES3_keyword(context, SAMPLER2DSHADOW); } 1947 YY_BREAK 1948 case 75: 1949 YY_RULE_SETUP 1950 { return ES2_identifier_ES3_keyword(context, SAMPLERCUBESHADOW); } 1951 YY_BREAK 1952 case 76: 1953 YY_RULE_SETUP 1954 { return ES2_identifier_ES3_keyword(context, SAMPLER2DARRAYSHADOW); } 1955 YY_BREAK 1956 case 77: 1957 YY_RULE_SETUP 1958 { context->lexAfterType = true; return(STRUCT); } 1959 YY_BREAK 1960 case 78: 1961 YY_RULE_SETUP 1962 { return ES2_identifier_ES3_keyword(context, LAYOUT); } 1963 YY_BREAK 1964 /* Reserved keywords for GLSL ES 3.00 that are not reserved for GLSL ES 1.00 */ 1965 case 79: 1966 case 80: 1967 case 81: 1968 case 82: 1969 case 83: 1970 case 84: 1971 case 85: 1972 case 86: 1973 case 87: 1974 case 88: 1975 case 89: 1976 case 90: 1977 case 91: 1978 case 92: 1979 case 93: 1980 case 94: 1981 case 95: 1982 case 96: 1983 case 97: 1984 case 98: 1985 case 99: 1986 case 100: 1987 case 101: 1988 case 102: 1989 case 103: 1990 case 104: 1991 case 105: 1992 case 106: 1993 case 107: 1994 case 108: 1995 case 109: 1996 case 110: 1997 case 111: 1998 case 112: 1999 case 113: 2000 case 114: 2001 case 115: 2002 case 116: 2003 case 117: 2004 case 118: 2005 case 119: 2006 case 120: 2007 case 121: 2008 case 122: 2009 case 123: 2010 case 124: 2011 case 125: 2012 case 126: 2013 case 127: 2014 case 128: 2015 case 129: 2016 case 130: 2017 case 131: 2018 case 132: 2019 case 133: 2020 case 134: 2021 YY_RULE_SETUP 2022 { 2023 if (context->getShaderVersion() < 300) { 2024 yylval->lex.string = NewPoolTString(yytext); 2025 return check_type(yyscanner); 2026 } 2027 return reserved_word(yyscanner); 2028 } 2029 YY_BREAK 2030 /* Reserved keywords in GLSL ES 1.00 that are not reserved in GLSL ES 3.00 */ 2031 case 135: 2032 YY_RULE_SETUP 2033 { 2034 if (context->getShaderVersion() >= 300) 2035 { 2036 yylval->lex.string = NewPoolTString(yytext); 2037 return check_type(yyscanner); 2038 } 2039 2040 return reserved_word(yyscanner); 2041 } 2042 YY_BREAK 2043 /* Reserved keywords */ 2044 case 136: 2045 case 137: 2046 case 138: 2047 case 139: 2048 case 140: 2049 case 141: 2050 case 142: 2051 case 143: 2052 case 144: 2053 case 145: 2054 case 146: 2055 case 147: 2056 case 148: 2057 case 149: 2058 case 150: 2059 case 151: 2060 case 152: 2061 case 153: 2062 case 154: 2063 case 155: 2064 case 156: 2065 case 157: 2066 case 158: 2067 case 159: 2068 case 160: 2069 case 161: 2070 case 162: 2071 case 163: 2072 case 164: 2073 case 165: 2074 case 166: 2075 case 167: 2076 case 168: 2077 case 169: 2078 case 170: 2079 case 171: 2080 case 172: 2081 case 173: 2082 case 174: 2083 case 175: 2084 case 176: 2085 YY_RULE_SETUP 2086 { return reserved_word(yyscanner); } 2087 YY_BREAK 2088 case 177: 2089 YY_RULE_SETUP 2090 { 2091 yylval->lex.string = NewPoolTString(yytext); 2092 return check_type(yyscanner); 2093 } 2094 YY_BREAK 2095 case 178: 2096 YY_RULE_SETUP 2097 { return int_constant(yyscanner); } 2098 YY_BREAK 2099 case 179: 2100 YY_RULE_SETUP 2101 { return int_constant(yyscanner); } 2102 YY_BREAK 2103 case 180: 2104 YY_RULE_SETUP 2105 { return int_constant(yyscanner); } 2106 YY_BREAK 2107 case 181: 2108 YY_RULE_SETUP 2109 { return uint_constant(context); } 2110 YY_BREAK 2111 case 182: 2112 YY_RULE_SETUP 2113 { return uint_constant(context); } 2114 YY_BREAK 2115 case 183: 2116 YY_RULE_SETUP 2117 { return uint_constant(context); } 2118 YY_BREAK 2119 case 184: 2120 YY_RULE_SETUP 2121 { return float_constant(yyscanner); } 2122 YY_BREAK 2123 case 185: 2124 YY_RULE_SETUP 2125 { return float_constant(yyscanner); } 2126 YY_BREAK 2127 case 186: 2128 YY_RULE_SETUP 2129 { return float_constant(yyscanner); } 2130 YY_BREAK 2131 case 187: 2132 YY_RULE_SETUP 2133 { return floatsuffix_check(context); } 2134 YY_BREAK 2135 case 188: 2136 YY_RULE_SETUP 2137 { return floatsuffix_check(context); } 2138 YY_BREAK 2139 case 189: 2140 YY_RULE_SETUP 2141 { return floatsuffix_check(context); } 2142 YY_BREAK 2143 case 190: 2144 YY_RULE_SETUP 2145 { return(ADD_ASSIGN); } 2146 YY_BREAK 2147 case 191: 2148 YY_RULE_SETUP 2149 { return(SUB_ASSIGN); } 2150 YY_BREAK 2151 case 192: 2152 YY_RULE_SETUP 2153 { return(MUL_ASSIGN); } 2154 YY_BREAK 2155 case 193: 2156 YY_RULE_SETUP 2157 { return(DIV_ASSIGN); } 2158 YY_BREAK 2159 case 194: 2160 YY_RULE_SETUP 2161 { return(MOD_ASSIGN); } 2162 YY_BREAK 2163 case 195: 2164 YY_RULE_SETUP 2165 { return(LEFT_ASSIGN); } 2166 YY_BREAK 2167 case 196: 2168 YY_RULE_SETUP 2169 { return(RIGHT_ASSIGN); } 2170 YY_BREAK 2171 case 197: 2172 YY_RULE_SETUP 2173 { return(AND_ASSIGN); } 2174 YY_BREAK 2175 case 198: 2176 YY_RULE_SETUP 2177 { return(XOR_ASSIGN); } 2178 YY_BREAK 2179 case 199: 2180 YY_RULE_SETUP 2181 { return(OR_ASSIGN); } 2182 YY_BREAK 2183 case 200: 2184 YY_RULE_SETUP 2185 { return(INC_OP); } 2186 YY_BREAK 2187 case 201: 2188 YY_RULE_SETUP 2189 { return(DEC_OP); } 2190 YY_BREAK 2191 case 202: 2192 YY_RULE_SETUP 2193 { return(AND_OP); } 2194 YY_BREAK 2195 case 203: 2196 YY_RULE_SETUP 2197 { return(OR_OP); } 2198 YY_BREAK 2199 case 204: 2200 YY_RULE_SETUP 2201 { return(XOR_OP); } 2202 YY_BREAK 2203 case 205: 2204 YY_RULE_SETUP 2205 { return(LE_OP); } 2206 YY_BREAK 2207 case 206: 2208 YY_RULE_SETUP 2209 { return(GE_OP); } 2210 YY_BREAK 2211 case 207: 2212 YY_RULE_SETUP 2213 { return(EQ_OP); } 2214 YY_BREAK 2215 case 208: 2216 YY_RULE_SETUP 2217 { return(NE_OP); } 2218 YY_BREAK 2219 case 209: 2220 YY_RULE_SETUP 2221 { return(LEFT_OP); } 2222 YY_BREAK 2223 case 210: 2224 YY_RULE_SETUP 2225 { return(RIGHT_OP); } 2226 YY_BREAK 2227 case 211: 2228 YY_RULE_SETUP 2229 { context->lexAfterType = false; return(SEMICOLON); } 2230 YY_BREAK 2231 case 212: 2232 YY_RULE_SETUP 2233 { context->lexAfterType = false; return(LEFT_BRACE); } 2234 YY_BREAK 2235 case 213: 2236 YY_RULE_SETUP 2237 { return(RIGHT_BRACE); } 2238 YY_BREAK 2239 case 214: 2240 YY_RULE_SETUP 2241 { if (context->inTypeParen) context->lexAfterType = false; return(COMMA); } 2242 YY_BREAK 2243 case 215: 2244 YY_RULE_SETUP 2245 { return(COLON); } 2246 YY_BREAK 2247 case 216: 2248 YY_RULE_SETUP 2249 { context->lexAfterType = false; return(EQUAL); } 2250 YY_BREAK 2251 case 217: 2252 YY_RULE_SETUP 2253 { context->lexAfterType = false; context->inTypeParen = true; return(LEFT_PAREN); } 2254 YY_BREAK 2255 case 218: 2256 YY_RULE_SETUP 2257 { context->inTypeParen = false; return(RIGHT_PAREN); } 2258 YY_BREAK 2259 case 219: 2260 YY_RULE_SETUP 2261 { return(LEFT_BRACKET); } 2262 YY_BREAK 2263 case 220: 2264 YY_RULE_SETUP 2265 { return(RIGHT_BRACKET); } 2266 YY_BREAK 2267 case 221: 2268 YY_RULE_SETUP 2269 { BEGIN(FIELDS); return(DOT); } 2270 YY_BREAK 2271 case 222: 2272 YY_RULE_SETUP 2273 { return(BANG); } 2274 YY_BREAK 2275 case 223: 2276 YY_RULE_SETUP 2277 { return(DASH); } 2278 YY_BREAK 2279 case 224: 2280 YY_RULE_SETUP 2281 { return(TILDE); } 2282 YY_BREAK 2283 case 225: 2284 YY_RULE_SETUP 2285 { return(PLUS); } 2286 YY_BREAK 2287 case 226: 2288 YY_RULE_SETUP 2289 { return(STAR); } 2290 YY_BREAK 2291 case 227: 2292 YY_RULE_SETUP 2293 { return(SLASH); } 2294 YY_BREAK 2295 case 228: 2296 YY_RULE_SETUP 2297 { return(PERCENT); } 2298 YY_BREAK 2299 case 229: 2300 YY_RULE_SETUP 2301 { return(LEFT_ANGLE); } 2302 YY_BREAK 2303 case 230: 2304 YY_RULE_SETUP 2305 { return(RIGHT_ANGLE); } 2306 YY_BREAK 2307 case 231: 2308 YY_RULE_SETUP 2309 { return(VERTICAL_BAR); } 2310 YY_BREAK 2311 case 232: 2312 YY_RULE_SETUP 2313 { return(CARET); } 2314 YY_BREAK 2315 case 233: 2316 YY_RULE_SETUP 2317 { return(AMPERSAND); } 2318 YY_BREAK 2319 case 234: 2320 YY_RULE_SETUP 2321 { return(QUESTION); } 2322 YY_BREAK 2323 case 235: 2324 YY_RULE_SETUP 2325 { 2326 BEGIN(INITIAL); 2327 yylval->lex.string = NewPoolTString(yytext); 2328 return FIELD_SELECTION; 2329 } 2330 YY_BREAK 2331 case 236: 2332 YY_RULE_SETUP 2333 {} 2334 YY_BREAK 2335 case 237: 2336 /* rule 237 can match eol */ 2337 YY_RULE_SETUP 2338 { } 2339 YY_BREAK 2340 case YY_STATE_EOF(INITIAL): 2341 case YY_STATE_EOF(COMMENT): 2342 case YY_STATE_EOF(FIELDS): 2343 { context->AfterEOF = true; yyterminate(); } 2344 YY_BREAK 2345 case 238: 2346 YY_RULE_SETUP 2347 { context->warning(*yylloc, "Unknown char", yytext, ""); return 0; } 2348 YY_BREAK 2349 case 239: 2350 YY_RULE_SETUP 2351 ECHO; 2352 YY_BREAK 2353 2354 case YY_END_OF_BUFFER: 2355 { 2356 /* Amount of text matched not including the EOB char. */ 2357 int yy_amount_of_matched_text = (int) (yy_cp - yyg->yytext_ptr) - 1; 2358 2359 /* Undo the effects of YY_DO_BEFORE_ACTION. */ 2360 *yy_cp = yyg->yy_hold_char; 2361 YY_RESTORE_YY_MORE_OFFSET 2362 2363 if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) 2364 { 2365 /* We're scanning a new file or input source. It's 2366 * possible that this happened because the user 2367 * just pointed yyin at a new source and called 2368 * yylex(). If so, then we have to assure 2369 * consistency between YY_CURRENT_BUFFER and our 2370 * globals. Here is the right place to do so, because 2371 * this is the first action (other than possibly a 2372 * back-up) that will match for the new input source. 2373 */ 2374 yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; 2375 YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin; 2376 YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; 2377 } 2378 2379 /* Note that here we test for yy_c_buf_p "<=" to the position 2380 * of the first EOB in the buffer, since yy_c_buf_p will 2381 * already have been incremented past the NUL character 2382 * (since all states make transitions on EOB to the 2383 * end-of-buffer state). Contrast this with the test 2384 * in input(). 2385 */ 2386 if ( yyg->yy_c_buf_p <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] ) 2387 { /* This was really a NUL. */ 2388 yy_state_type yy_next_state; 2389 2390 yyg->yy_c_buf_p = yyg->yytext_ptr + yy_amount_of_matched_text; 2391 2392 yy_current_state = yy_get_previous_state( yyscanner ); 2393 2394 /* Okay, we're now positioned to make the NUL 2395 * transition. We couldn't have 2396 * yy_get_previous_state() go ahead and do it 2397 * for us because it doesn't know how to deal 2398 * with the possibility of jamming (and we don't 2399 * want to build jamming into it because then it 2400 * will run more slowly). 2401 */ 2402 2403 yy_next_state = yy_try_NUL_trans( yy_current_state , yyscanner); 2404 2405 yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; 2406 2407 if ( yy_next_state ) 2408 { 2409 /* Consume the NUL. */ 2410 yy_cp = ++yyg->yy_c_buf_p; 2411 yy_current_state = yy_next_state; 2412 goto yy_match; 2413 } 2414 2415 else 2416 { 2417 yy_cp = yyg->yy_last_accepting_cpos; 2418 yy_current_state = yyg->yy_last_accepting_state; 2419 goto yy_find_action; 2420 } 2421 } 2422 2423 else switch ( yy_get_next_buffer( yyscanner ) ) 2424 { 2425 case EOB_ACT_END_OF_FILE: 2426 { 2427 yyg->yy_did_buffer_switch_on_eof = 0; 2428 2429 if ( yywrap( yyscanner ) ) 2430 { 2431 /* Note: because we've taken care in 2432 * yy_get_next_buffer() to have set up 2433 * yytext, we can now set up 2434 * yy_c_buf_p so that if some total 2435 * hoser (like flex itself) wants to 2436 * call the scanner after we return the 2437 * YY_NULL, it'll still work - another 2438 * YY_NULL will get returned. 2439 */ 2440 yyg->yy_c_buf_p = yyg->yytext_ptr + YY_MORE_ADJ; 2441 2442 yy_act = YY_STATE_EOF(YY_START); 2443 goto do_action; 2444 } 2445 2446 else 2447 { 2448 if ( ! yyg->yy_did_buffer_switch_on_eof ) 2449 YY_NEW_FILE; 2450 } 2451 break; 2452 } 2453 2454 case EOB_ACT_CONTINUE_SCAN: 2455 yyg->yy_c_buf_p = 2456 yyg->yytext_ptr + yy_amount_of_matched_text; 2457 2458 yy_current_state = yy_get_previous_state( yyscanner ); 2459 2460 yy_cp = yyg->yy_c_buf_p; 2461 yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; 2462 goto yy_match; 2463 2464 case EOB_ACT_LAST_MATCH: 2465 yyg->yy_c_buf_p = 2466 &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars]; 2467 2468 yy_current_state = yy_get_previous_state( yyscanner ); 2469 2470 yy_cp = yyg->yy_c_buf_p; 2471 yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; 2472 goto yy_find_action; 2473 } 2474 break; 2475 } 2476 2477 default: 2478 YY_FATAL_ERROR( 2479 "fatal flex scanner internal error--no action found" ); 2480 } /* end of action switch */ 2481 } /* end of scanning one token */ 2482 } /* end of user's declarations */ 2483 } /* end of yylex */ 2484 2485 2486 2487 2488 2489 /* yy_get_next_buffer - try to read in a new buffer 2490 * 2491 * Returns a code representing an action: 2492 * EOB_ACT_LAST_MATCH - 2493 * EOB_ACT_CONTINUE_SCAN - continue scanning from current position 2494 * EOB_ACT_END_OF_FILE - end of file 2495 */ 2496 static int yy_get_next_buffer (yyscan_t yyscanner) 2497 { 2498 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; 2499 char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; 2500 char *source = yyg->yytext_ptr; 2501 int number_to_move, i; 2502 int ret_val; 2503 2504 if ( yyg->yy_c_buf_p > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] ) 2505 YY_FATAL_ERROR( 2506 "fatal flex scanner internal error--end of buffer missed" ); 2507 2508 if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) 2509 { /* Don't try to fill the buffer, so this is an EOF. */ 2510 if ( yyg->yy_c_buf_p - yyg->yytext_ptr - YY_MORE_ADJ == 1 ) 2511 { 2512 /* We matched a single character, the EOB, so 2513 * treat this as a final EOF. 2514 */ 2515 return EOB_ACT_END_OF_FILE; 2516 } 2517 2518 else 2519 { 2520 /* We matched some text prior to the EOB, first 2521 * process it. 2522 */ 2523 return EOB_ACT_LAST_MATCH; 2524 } 2525 } 2526 2527 /* Try to read more data. */ 2528 2529 /* First move last chars to start of buffer. */ 2530 number_to_move = (int) (yyg->yy_c_buf_p - yyg->yytext_ptr - 1); 2531 2532 for ( i = 0; i < number_to_move; ++i ) 2533 *(dest++) = *(source++); 2534 2535 if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) 2536 /* don't do the read, it's not guaranteed to return an EOF, 2537 * just force an EOF 2538 */ 2539 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars = 0; 2540 2541 else 2542 { 2543 int num_to_read = 2544 YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; 2545 2546 while ( num_to_read <= 0 ) 2547 { /* Not enough room in the buffer - grow it. */ 2548 2549 /* just a shorter name for the current buffer */ 2550 YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE; 2551 2552 int yy_c_buf_p_offset = 2553 (int) (yyg->yy_c_buf_p - b->yy_ch_buf); 2554 2555 if ( b->yy_is_our_buffer ) 2556 { 2557 int new_size = b->yy_buf_size * 2; 2558 2559 if ( new_size <= 0 ) 2560 b->yy_buf_size += b->yy_buf_size / 8; 2561 else 2562 b->yy_buf_size *= 2; 2563 2564 b->yy_ch_buf = (char *) 2565 /* Include room in for 2 EOB chars. */ 2566 yyrealloc( (void *) b->yy_ch_buf, 2567 (yy_size_t) (b->yy_buf_size + 2) , yyscanner ); 2568 } 2569 else 2570 /* Can't grow it, we don't own it. */ 2571 b->yy_ch_buf = NULL; 2572 2573 if ( ! b->yy_ch_buf ) 2574 YY_FATAL_ERROR( 2575 "fatal error - scanner input buffer overflow" ); 2576 2577 yyg->yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset]; 2578 2579 num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - 2580 number_to_move - 1; 2581 2582 } 2583 2584 if ( num_to_read > YY_READ_BUF_SIZE ) 2585 num_to_read = YY_READ_BUF_SIZE; 2586 2587 /* Read in more data. */ 2588 YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), 2589 yyg->yy_n_chars, num_to_read ); 2590 2591 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; 2592 } 2593 2594 if ( yyg->yy_n_chars == 0 ) 2595 { 2596 if ( number_to_move == YY_MORE_ADJ ) 2597 { 2598 ret_val = EOB_ACT_END_OF_FILE; 2599 yyrestart( yyin , yyscanner); 2600 } 2601 2602 else 2603 { 2604 ret_val = EOB_ACT_LAST_MATCH; 2605 YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = 2606 YY_BUFFER_EOF_PENDING; 2607 } 2608 } 2609 2610 else 2611 ret_val = EOB_ACT_CONTINUE_SCAN; 2612 2613 if ((yyg->yy_n_chars + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { 2614 /* Extend the array by 50%, plus the number we really need. */ 2615 int new_size = yyg->yy_n_chars + number_to_move + (yyg->yy_n_chars >> 1); 2616 YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc( 2617 (void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf, (yy_size_t) new_size , yyscanner ); 2618 if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) 2619 YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); 2620 /* "- 2" to take care of EOB's */ 2621 YY_CURRENT_BUFFER_LVALUE->yy_buf_size = (int) (new_size - 2); 2622 } 2623 2624 yyg->yy_n_chars += number_to_move; 2625 YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] = YY_END_OF_BUFFER_CHAR; 2626 YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR; 2627 2628 yyg->yytext_ptr = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; 2629 2630 return ret_val; 2631 } 2632 2633 2634 /* yy_get_previous_state - get the state just before the EOB char was reached */ 2635 2636 static yy_state_type yy_get_previous_state (yyscan_t yyscanner) 2637 { 2638 yy_state_type yy_current_state; 2639 char *yy_cp; 2640 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; 2641 2642 yy_current_state = yyg->yy_start; 2643 2644 for ( yy_cp = yyg->yytext_ptr + YY_MORE_ADJ; yy_cp < yyg->yy_c_buf_p; ++yy_cp ) 2645 { 2646 YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); 2647 if ( yy_accept[yy_current_state] ) 2648 { 2649 yyg->yy_last_accepting_state = yy_current_state; 2650 yyg->yy_last_accepting_cpos = yy_cp; 2651 } 2652 while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) 2653 { 2654 yy_current_state = (int) yy_def[yy_current_state]; 2655 if ( yy_current_state >= 821 ) 2656 yy_c = yy_meta[yy_c]; 2657 } 2658 yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; 2659 } 2660 2661 return yy_current_state; 2662 } 2663 2664 2665 /* yy_try_NUL_trans - try to make a transition on the NUL character 2666 * 2667 * synopsis 2668 * next_state = yy_try_NUL_trans( current_state ); 2669 */ 2670 static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state , yyscan_t yyscanner) 2671 { 2672 int yy_is_jam; 2673 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; /* This var may be unused depending upon options. */ 2674 char *yy_cp = yyg->yy_c_buf_p; 2675 2676 YY_CHAR yy_c = 1; 2677 if ( yy_accept[yy_current_state] ) 2678 { 2679 yyg->yy_last_accepting_state = yy_current_state; 2680 yyg->yy_last_accepting_cpos = yy_cp; 2681 } 2682 while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) 2683 { 2684 yy_current_state = (int) yy_def[yy_current_state]; 2685 if ( yy_current_state >= 821 ) 2686 yy_c = yy_meta[yy_c]; 2687 } 2688 yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; 2689 yy_is_jam = (yy_current_state == 820); 2690 2691 (void)yyg; 2692 return yy_is_jam ? 0 : yy_current_state; 2693 } 2694 2695 2696 #ifndef YY_NO_UNPUT 2697 2698 #endif 2699 2700 #ifndef YY_NO_INPUT 2701 #ifdef __cplusplus 2702 static int yyinput (yyscan_t yyscanner) 2703 #else 2704 static int input (yyscan_t yyscanner) 2705 #endif 2706 2707 { 2708 int c; 2709 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; 2710 2711 *yyg->yy_c_buf_p = yyg->yy_hold_char; 2712 2713 if ( *yyg->yy_c_buf_p == YY_END_OF_BUFFER_CHAR ) 2714 { 2715 /* yy_c_buf_p now points to the character we want to return. 2716 * If this occurs *before* the EOB characters, then it's a 2717 * valid NUL; if not, then we've hit the end of the buffer. 2718 */ 2719 if ( yyg->yy_c_buf_p < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] ) 2720 /* This was really a NUL. */ 2721 *yyg->yy_c_buf_p = '\0'; 2722 2723 else 2724 { /* need more input */ 2725 int offset = (int) (yyg->yy_c_buf_p - yyg->yytext_ptr); 2726 ++yyg->yy_c_buf_p; 2727 2728 switch ( yy_get_next_buffer( yyscanner ) ) 2729 { 2730 case EOB_ACT_LAST_MATCH: 2731 /* This happens because yy_g_n_b() 2732 * sees that we've accumulated a 2733 * token and flags that we need to 2734 * try matching the token before 2735 * proceeding. But for input(), 2736 * there's no matching to consider. 2737 * So convert the EOB_ACT_LAST_MATCH 2738 * to EOB_ACT_END_OF_FILE. 2739 */ 2740 2741 /* Reset buffer status. */ 2742 yyrestart( yyin , yyscanner); 2743 2744 /*FALLTHROUGH*/ 2745 2746 case EOB_ACT_END_OF_FILE: 2747 { 2748 if ( yywrap( yyscanner ) ) 2749 return 0; 2750 2751 if ( ! yyg->yy_did_buffer_switch_on_eof ) 2752 YY_NEW_FILE; 2753 #ifdef __cplusplus 2754 return yyinput(yyscanner); 2755 #else 2756 return input(yyscanner); 2757 #endif 2758 } 2759 2760 case EOB_ACT_CONTINUE_SCAN: 2761 yyg->yy_c_buf_p = yyg->yytext_ptr + offset; 2762 break; 2763 } 2764 } 2765 } 2766 2767 c = *(unsigned char *) yyg->yy_c_buf_p; /* cast for 8-bit char's */ 2768 *yyg->yy_c_buf_p = '\0'; /* preserve yytext */ 2769 yyg->yy_hold_char = *++yyg->yy_c_buf_p; 2770 2771 if ( c == '\n' ) 2772 2773 do{ yylineno++; 2774 yycolumn=0; 2775 }while(0) 2776 ; 2777 2778 return c; 2779 } 2780 #endif /* ifndef YY_NO_INPUT */ 2781 2782 /** Immediately switch to a different input stream. 2783 * @param input_file A readable stream. 2784 * @param yyscanner The scanner object. 2785 * @note This function does not reset the start condition to @c INITIAL . 2786 */ 2787 void yyrestart (FILE * input_file , yyscan_t yyscanner) 2788 { 2789 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; 2790 2791 if ( ! YY_CURRENT_BUFFER ){ 2792 yyensure_buffer_stack (yyscanner); 2793 YY_CURRENT_BUFFER_LVALUE = 2794 yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner); 2795 } 2796 2797 yy_init_buffer( YY_CURRENT_BUFFER, input_file , yyscanner); 2798 yy_load_buffer_state( yyscanner ); 2799 } 2800 2801 2802 /** Switch to a different input buffer. 2803 * @param new_buffer The new input buffer. 2804 * @param yyscanner The scanner object. 2805 */ 2806 void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner) 2807 { 2808 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; 2809 2810 /* TODO. We should be able to replace this entire function body 2811 * with 2812 * yypop_buffer_state(); 2813 * yypush_buffer_state(new_buffer); 2814 */ 2815 yyensure_buffer_stack (yyscanner); 2816 if ( YY_CURRENT_BUFFER == new_buffer ) 2817 return; 2818 2819 if ( YY_CURRENT_BUFFER ) 2820 { 2821 /* Flush out information for old buffer. */ 2822 *yyg->yy_c_buf_p = yyg->yy_hold_char; 2823 YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p; 2824 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; 2825 } 2826 2827 YY_CURRENT_BUFFER_LVALUE = new_buffer; 2828 yy_load_buffer_state( yyscanner ); 2829 2830 /* We don't actually know whether we did this switch during 2831 * EOF (yywrap()) processing, but the only time this flag 2832 * is looked at is after yywrap() is called, so it's safe 2833 * to go ahead and always set it. 2834 */ 2835 yyg->yy_did_buffer_switch_on_eof = 1; 2836 } 2837 2838 2839 static void yy_load_buffer_state (yyscan_t yyscanner) 2840 { 2841 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; 2842 yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; 2843 yyg->yytext_ptr = yyg->yy_c_buf_p = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; 2844 yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; 2845 yyg->yy_hold_char = *yyg->yy_c_buf_p; 2846 } 2847 2848 /** Allocate and initialize an input buffer state. 2849 * @param file A readable stream. 2850 * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. 2851 * @param yyscanner The scanner object. 2852 * @return the allocated buffer state. 2853 */ 2854 YY_BUFFER_STATE yy_create_buffer (FILE * file, int size , yyscan_t yyscanner) 2855 { 2856 YY_BUFFER_STATE b; 2857 2858 b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) , yyscanner ); 2859 if ( ! b ) 2860 YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); 2861 2862 b->yy_buf_size = size; 2863 2864 /* yy_ch_buf has to be 2 characters longer than the size given because 2865 * we need to put in 2 end-of-buffer characters. 2866 */ 2867 b->yy_ch_buf = (char *) yyalloc( (yy_size_t) (b->yy_buf_size + 2) , yyscanner ); 2868 if ( ! b->yy_ch_buf ) 2869 YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); 2870 2871 b->yy_is_our_buffer = 1; 2872 2873 yy_init_buffer( b, file , yyscanner); 2874 2875 return b; 2876 } 2877 2878 2879 /** Destroy the buffer. 2880 * @param b a buffer created with yy_create_buffer() 2881 * @param yyscanner The scanner object. 2882 */ 2883 void yy_delete_buffer (YY_BUFFER_STATE b , yyscan_t yyscanner) 2884 { 2885 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; 2886 2887 if ( ! b ) 2888 return; 2889 2890 if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ 2891 YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; 2892 2893 if ( b->yy_is_our_buffer ) 2894 yyfree( (void *) b->yy_ch_buf , yyscanner ); 2895 2896 yyfree( (void *) b , yyscanner ); 2897 } 2898 2899 2900 /* Initializes or reinitializes a buffer. 2901 * This function is sometimes called more than once on the same buffer, 2902 * such as during a yyrestart() or at EOF. 2903 */ 2904 static void yy_init_buffer (YY_BUFFER_STATE b, FILE * file , yyscan_t yyscanner) 2905 2906 { 2907 int oerrno = errno; 2908 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; 2909 2910 yy_flush_buffer( b , yyscanner); 2911 2912 b->yy_input_file = file; 2913 b->yy_fill_buffer = 1; 2914 2915 /* If b is the current buffer, then yy_init_buffer was _probably_ 2916 * called from yyrestart() or through yy_get_next_buffer. 2917 * In that case, we don't want to reset the lineno or column. 2918 */ 2919 if (b != YY_CURRENT_BUFFER){ 2920 b->yy_bs_lineno = 1; 2921 b->yy_bs_column = 0; 2922 } 2923 2924 2925 2926 b->yy_is_interactive = 0; 2927 2928 2929 errno = oerrno; 2930 } 2931 2932 /** Discard all buffered characters. On the next scan, YY_INPUT will be called. 2933 * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. 2934 * @param yyscanner The scanner object. 2935 */ 2936 void yy_flush_buffer (YY_BUFFER_STATE b , yyscan_t yyscanner) 2937 { 2938 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; 2939 if ( ! b ) 2940 return; 2941 2942 b->yy_n_chars = 0; 2943 2944 /* We always need two end-of-buffer characters. The first causes 2945 * a transition to the end-of-buffer state. The second causes 2946 * a jam in that state. 2947 */ 2948 b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; 2949 b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; 2950 2951 b->yy_buf_pos = &b->yy_ch_buf[0]; 2952 2953 b->yy_at_bol = 1; 2954 b->yy_buffer_status = YY_BUFFER_NEW; 2955 2956 if ( b == YY_CURRENT_BUFFER ) 2957 yy_load_buffer_state( yyscanner ); 2958 } 2959 2960 /** Pushes the new state onto the stack. The new state becomes 2961 * the current state. This function will allocate the stack 2962 * if necessary. 2963 * @param new_buffer The new state. 2964 * @param yyscanner The scanner object. 2965 */ 2966 void yypush_buffer_state (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner) 2967 { 2968 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; 2969 if (new_buffer == NULL) 2970 return; 2971 2972 yyensure_buffer_stack(yyscanner); 2973 2974 /* This block is copied from yy_switch_to_buffer. */ 2975 if ( YY_CURRENT_BUFFER ) 2976 { 2977 /* Flush out information for old buffer. */ 2978 *yyg->yy_c_buf_p = yyg->yy_hold_char; 2979 YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p; 2980 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; 2981 } 2982 2983 /* Only push if top exists. Otherwise, replace top. */ 2984 if (YY_CURRENT_BUFFER) 2985 yyg->yy_buffer_stack_top++; 2986 YY_CURRENT_BUFFER_LVALUE = new_buffer; 2987 2988 /* copied from yy_switch_to_buffer. */ 2989 yy_load_buffer_state( yyscanner ); 2990 yyg->yy_did_buffer_switch_on_eof = 1; 2991 } 2992 2993 2994 /** Removes and deletes the top of the stack, if present. 2995 * The next element becomes the new top. 2996 * @param yyscanner The scanner object. 2997 */ 2998 void yypop_buffer_state (yyscan_t yyscanner) 2999 { 3000 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; 3001 if (!YY_CURRENT_BUFFER) 3002 return; 3003 3004 yy_delete_buffer(YY_CURRENT_BUFFER , yyscanner); 3005 YY_CURRENT_BUFFER_LVALUE = NULL; 3006 if (yyg->yy_buffer_stack_top > 0) 3007 --yyg->yy_buffer_stack_top; 3008 3009 if (YY_CURRENT_BUFFER) { 3010 yy_load_buffer_state( yyscanner ); 3011 yyg->yy_did_buffer_switch_on_eof = 1; 3012 } 3013 } 3014 3015 3016 /* Allocates the stack if it does not exist. 3017 * Guarantees space for at least one push. 3018 */ 3019 static void yyensure_buffer_stack (yyscan_t yyscanner) 3020 { 3021 yy_size_t num_to_alloc; 3022 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; 3023 3024 if (!yyg->yy_buffer_stack) { 3025 3026 /* First allocation is just for 2 elements, since we don't know if this 3027 * scanner will even need a stack. We use 2 instead of 1 to avoid an 3028 * immediate realloc on the next call. 3029 */ 3030 num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */ 3031 yyg->yy_buffer_stack = (struct yy_buffer_state**)yyalloc 3032 (num_to_alloc * sizeof(struct yy_buffer_state*) 3033 , yyscanner); 3034 if ( ! yyg->yy_buffer_stack ) 3035 YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); 3036 3037 3038 memset(yyg->yy_buffer_stack, 0, num_to_alloc * sizeof(struct yy_buffer_state*)); 3039 3040 yyg->yy_buffer_stack_max = num_to_alloc; 3041 yyg->yy_buffer_stack_top = 0; 3042 return; 3043 } 3044 3045 if (yyg->yy_buffer_stack_top >= (yyg->yy_buffer_stack_max) - 1){ 3046 3047 /* Increase the buffer to prepare for a possible push. */ 3048 yy_size_t grow_size = 8 /* arbitrary grow size */; 3049 3050 num_to_alloc = yyg->yy_buffer_stack_max + grow_size; 3051 yyg->yy_buffer_stack = (struct yy_buffer_state**)yyrealloc 3052 (yyg->yy_buffer_stack, 3053 num_to_alloc * sizeof(struct yy_buffer_state*) 3054 , yyscanner); 3055 if ( ! yyg->yy_buffer_stack ) 3056 YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); 3057 3058 /* zero only the new slots.*/ 3059 memset(yyg->yy_buffer_stack + yyg->yy_buffer_stack_max, 0, grow_size * sizeof(struct yy_buffer_state*)); 3060 yyg->yy_buffer_stack_max = num_to_alloc; 3061 } 3062 } 3063 3064 3065 3066 3067 3068 /** Setup the input buffer state to scan directly from a user-specified character buffer. 3069 * @param base the character buffer 3070 * @param size the size in bytes of the character buffer 3071 * @param yyscanner The scanner object. 3072 * @return the newly allocated buffer state object. 3073 */ 3074 YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size , yyscan_t yyscanner) 3075 { 3076 YY_BUFFER_STATE b; 3077 3078 if ( size < 2 || 3079 base[size-2] != YY_END_OF_BUFFER_CHAR || 3080 base[size-1] != YY_END_OF_BUFFER_CHAR ) 3081 /* They forgot to leave room for the EOB's. */ 3082 return NULL; 3083 3084 b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) , yyscanner ); 3085 if ( ! b ) 3086 YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" ); 3087 3088 b->yy_buf_size = (int) (size - 2); /* "- 2" to take care of EOB's */ 3089 b->yy_buf_pos = b->yy_ch_buf = base; 3090 b->yy_is_our_buffer = 0; 3091 b->yy_input_file = NULL; 3092 b->yy_n_chars = b->yy_buf_size; 3093 b->yy_is_interactive = 0; 3094 b->yy_at_bol = 1; 3095 b->yy_fill_buffer = 0; 3096 b->yy_buffer_status = YY_BUFFER_NEW; 3097 3098 yy_switch_to_buffer( b , yyscanner ); 3099 3100 return b; 3101 } 3102 3103 3104 3105 3106 /** Setup the input buffer state to scan a string. The next call to yylex() will 3107 * scan from a @e copy of @a str. 3108 * @param yystr a NUL-terminated string to scan 3109 * @param yyscanner The scanner object. 3110 * @return the newly allocated buffer state object. 3111 * @note If you want to scan bytes that may contain NUL values, then use 3112 * yy_scan_bytes() instead. 3113 */ 3114 YY_BUFFER_STATE yy_scan_string (const char * yystr , yyscan_t yyscanner) 3115 { 3116 3117 return yy_scan_bytes( yystr, (int) strlen(yystr) , yyscanner); 3118 } 3119 3120 3121 3122 3123 /** Setup the input buffer state to scan the given bytes. The next call to yylex() will 3124 * scan from a @e copy of @a bytes. 3125 * @param yybytes the byte buffer to scan 3126 * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes. 3127 * @param yyscanner The scanner object. 3128 * @return the newly allocated buffer state object. 3129 */ 3130 YY_BUFFER_STATE yy_scan_bytes (const char * yybytes, int _yybytes_len , yyscan_t yyscanner) 3131 { 3132 YY_BUFFER_STATE b; 3133 char *buf; 3134 yy_size_t n; 3135 int i; 3136 3137 /* Get memory for full buffer, including space for trailing EOB's. */ 3138 n = (yy_size_t) (_yybytes_len + 2); 3139 buf = (char *) yyalloc( n , yyscanner ); 3140 if ( ! buf ) 3141 YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" ); 3142 3143 for ( i = 0; i < _yybytes_len; ++i ) 3144 buf[i] = yybytes[i]; 3145 3146 buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; 3147 3148 b = yy_scan_buffer( buf, n , yyscanner); 3149 if ( ! b ) 3150 YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" ); 3151 3152 /* It's okay to grow etc. this buffer, and we should throw it 3153 * away when we're done. 3154 */ 3155 b->yy_is_our_buffer = 1; 3156 3157 return b; 3158 } 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 #ifndef YY_EXIT_FAILURE 3171 #define YY_EXIT_FAILURE 2 3172 #endif 3173 3174 static void yynoreturn yy_fatal_error (const char* msg , yyscan_t yyscanner) 3175 { 3176 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; 3177 (void)yyg; 3178 fprintf( stderr, "%s\n", msg ); 3179 exit( YY_EXIT_FAILURE ); 3180 } 3181 3182 /* Redefine yyless() so it works in section 3 code. */ 3183 3184 #undef yyless 3185 #define yyless(n) \ 3186 do \ 3187 { \ 3188 /* Undo effects of setting up yytext. */ \ 3189 int yyless_macro_arg = (n); \ 3190 YY_LESS_LINENO(yyless_macro_arg);\ 3191 yytext[yyleng] = yyg->yy_hold_char; \ 3192 yyg->yy_c_buf_p = yytext + yyless_macro_arg; \ 3193 yyg->yy_hold_char = *yyg->yy_c_buf_p; \ 3194 *yyg->yy_c_buf_p = '\0'; \ 3195 yyleng = yyless_macro_arg; \ 3196 } \ 3197 while ( 0 ) 3198 3199 3200 3201 /* Accessor methods (get/set functions) to struct members. */ 3202 3203 3204 /** Get the user-defined data for this scanner. 3205 * @param yyscanner The scanner object. 3206 */ 3207 YY_EXTRA_TYPE yyget_extra (yyscan_t yyscanner) 3208 { 3209 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; 3210 return yyextra; 3211 } 3212 3213 3214 3215 /** Get the current line number. 3216 * @param yyscanner The scanner object. 3217 */ 3218 int yyget_lineno (yyscan_t yyscanner) 3219 { 3220 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; 3221 3222 3223 if (! YY_CURRENT_BUFFER) 3224 return 0; 3225 3226 return yylineno; 3227 } 3228 3229 3230 3231 3232 /** Get the current column number. 3233 * @param yyscanner The scanner object. 3234 */ 3235 int yyget_column (yyscan_t yyscanner) 3236 { 3237 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; 3238 3239 3240 if (! YY_CURRENT_BUFFER) 3241 return 0; 3242 3243 return yycolumn; 3244 } 3245 3246 3247 3248 3249 /** Get the input stream. 3250 * @param yyscanner The scanner object. 3251 */ 3252 FILE *yyget_in (yyscan_t yyscanner) 3253 { 3254 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; 3255 return yyin; 3256 } 3257 3258 3259 3260 /** Get the output stream. 3261 * @param yyscanner The scanner object. 3262 */ 3263 FILE *yyget_out (yyscan_t yyscanner) 3264 { 3265 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; 3266 return yyout; 3267 } 3268 3269 3270 3271 /** Get the length of the current token. 3272 * @param yyscanner The scanner object. 3273 */ 3274 int yyget_leng (yyscan_t yyscanner) 3275 { 3276 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; 3277 return yyleng; 3278 } 3279 3280 3281 /** Get the current token. 3282 * @param yyscanner The scanner object. 3283 */ 3284 3285 char *yyget_text (yyscan_t yyscanner) 3286 { 3287 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; 3288 return yytext; 3289 } 3290 3291 3292 3293 /** Set the user-defined data. This data is never touched by the scanner. 3294 * @param user_defined The data to be associated with this scanner. 3295 * @param yyscanner The scanner object. 3296 */ 3297 void yyset_extra (YY_EXTRA_TYPE user_defined , yyscan_t yyscanner) 3298 { 3299 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; 3300 yyextra = user_defined ; 3301 } 3302 3303 3304 3305 /** Set the current line number. 3306 * @param _line_number line number 3307 * @param yyscanner The scanner object. 3308 */ 3309 void yyset_lineno (int _line_number , yyscan_t yyscanner) 3310 { 3311 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; 3312 3313 3314 /* lineno is only valid if an input buffer exists. */ 3315 if (! YY_CURRENT_BUFFER ) 3316 YY_FATAL_ERROR( "yyset_lineno called with no buffer" ); 3317 3318 yylineno = _line_number; 3319 } 3320 3321 3322 3323 3324 /** Set the current column. 3325 * @param _column_no column number 3326 * @param yyscanner The scanner object. 3327 */ 3328 void yyset_column (int _column_no , yyscan_t yyscanner) 3329 { 3330 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; 3331 3332 3333 /* column is only valid if an input buffer exists. */ 3334 if (! YY_CURRENT_BUFFER ) 3335 YY_FATAL_ERROR( "yyset_column called with no buffer" ); 3336 3337 yycolumn = _column_no; 3338 } 3339 3340 3341 3342 3343 3344 /** Set the input stream. This does not discard the current 3345 * input buffer. 3346 * @param _in_str A readable stream. 3347 * @param yyscanner The scanner object. 3348 * @see yy_switch_to_buffer 3349 */ 3350 void yyset_in (FILE * _in_str , yyscan_t yyscanner) 3351 { 3352 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; 3353 yyin = _in_str ; 3354 } 3355 3356 3357 3358 void yyset_out (FILE * _out_str , yyscan_t yyscanner) 3359 { 3360 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; 3361 yyout = _out_str ; 3362 } 3363 3364 3365 3366 3367 int yyget_debug (yyscan_t yyscanner) 3368 { 3369 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; 3370 return yy_flex_debug; 3371 } 3372 3373 3374 3375 void yyset_debug (int _bdebug , yyscan_t yyscanner) 3376 { 3377 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; 3378 yy_flex_debug = _bdebug ; 3379 } 3380 3381 3382 /* Accessor methods for yylval and yylloc */ 3383 3384 3385 YYSTYPE * yyget_lval (yyscan_t yyscanner) 3386 { 3387 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; 3388 return yylval; 3389 } 3390 3391 3392 3393 void yyset_lval (YYSTYPE * yylval_param , yyscan_t yyscanner) 3394 { 3395 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; 3396 yylval = yylval_param; 3397 } 3398 3399 3400 3401 3402 YYLTYPE *yyget_lloc (yyscan_t yyscanner) 3403 { 3404 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; 3405 return yylloc; 3406 } 3407 3408 3409 3410 void yyset_lloc (YYLTYPE * yylloc_param , yyscan_t yyscanner) 3411 { 3412 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; 3413 yylloc = yylloc_param; 3414 } 3415 3416 3417 3418 3419 3420 /* User-visible API */ 3421 3422 /* yylex_init is special because it creates the scanner itself, so it is 3423 * the ONLY reentrant function that doesn't take the scanner as the last argument. 3424 * That's why we explicitly handle the declaration, instead of using our macros. 3425 */ 3426 int yylex_init(yyscan_t* ptr_yy_globals) 3427 { 3428 if (ptr_yy_globals == NULL){ 3429 errno = EINVAL; 3430 return 1; 3431 } 3432 3433 *ptr_yy_globals = (yyscan_t) yyalloc ( sizeof( struct yyguts_t ), NULL ); 3434 3435 if (*ptr_yy_globals == NULL){ 3436 errno = ENOMEM; 3437 return 1; 3438 } 3439 3440 /* By setting to 0xAA, we expose bugs in yy_init_globals. Leave at 0x00 for releases. */ 3441 memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t)); 3442 3443 return yy_init_globals ( *ptr_yy_globals ); 3444 } 3445 3446 3447 /* yylex_init_extra has the same functionality as yylex_init, but follows the 3448 * convention of taking the scanner as the last argument. Note however, that 3449 * this is a *pointer* to a scanner, as it will be allocated by this call (and 3450 * is the reason, too, why this function also must handle its own declaration). 3451 * The user defined value in the first argument will be available to yyalloc in 3452 * the yyextra field. 3453 */ 3454 int yylex_init_extra( YY_EXTRA_TYPE yy_user_defined, yyscan_t* ptr_yy_globals ) 3455 { 3456 struct yyguts_t dummy_yyguts; 3457 3458 yyset_extra (yy_user_defined, &dummy_yyguts); 3459 3460 if (ptr_yy_globals == NULL){ 3461 errno = EINVAL; 3462 return 1; 3463 } 3464 3465 *ptr_yy_globals = (yyscan_t) yyalloc ( sizeof( struct yyguts_t ), &dummy_yyguts ); 3466 3467 if (*ptr_yy_globals == NULL){ 3468 errno = ENOMEM; 3469 return 1; 3470 } 3471 3472 /* By setting to 0xAA, we expose bugs in 3473 yy_init_globals. Leave at 0x00 for releases. */ 3474 memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t)); 3475 3476 yyset_extra (yy_user_defined, *ptr_yy_globals); 3477 3478 return yy_init_globals ( *ptr_yy_globals ); 3479 } 3480 3481 3482 static int yy_init_globals (yyscan_t yyscanner) 3483 { 3484 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; 3485 /* Initialization is the same as for the non-reentrant scanner. 3486 * This function is called from yylex_destroy(), so don't allocate here. 3487 */ 3488 3489 3490 3491 3492 yyg->yy_buffer_stack = NULL; 3493 yyg->yy_buffer_stack_top = 0; 3494 yyg->yy_buffer_stack_max = 0; 3495 yyg->yy_c_buf_p = NULL; 3496 yyg->yy_init = 0; 3497 yyg->yy_start = 0; 3498 3499 3500 yyg->yy_start_stack_ptr = 0; 3501 yyg->yy_start_stack_depth = 0; 3502 yyg->yy_start_stack = NULL; 3503 3504 3505 3506 3507 3508 3509 /* Defined in main.c */ 3510 #ifdef YY_STDINIT 3511 yyin = stdin; 3512 yyout = stdout; 3513 #else 3514 yyin = NULL; 3515 yyout = NULL; 3516 #endif 3517 3518 /* For future reference: Set errno on error, since we are called by 3519 * yylex_init() 3520 */ 3521 return 0; 3522 } 3523 3524 3525 /* yylex_destroy is for both reentrant and non-reentrant scanners. */ 3526 int yylex_destroy (yyscan_t yyscanner) 3527 { 3528 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; 3529 3530 /* Pop the buffer stack, destroying each element. */ 3531 while(YY_CURRENT_BUFFER){ 3532 yy_delete_buffer( YY_CURRENT_BUFFER , yyscanner ); 3533 YY_CURRENT_BUFFER_LVALUE = NULL; 3534 yypop_buffer_state(yyscanner); 3535 } 3536 3537 /* Destroy the stack itself. */ 3538 yyfree(yyg->yy_buffer_stack , yyscanner); 3539 yyg->yy_buffer_stack = NULL; 3540 3541 3542 /* Destroy the start condition stack. */ 3543 yyfree( yyg->yy_start_stack , yyscanner ); 3544 yyg->yy_start_stack = NULL; 3545 3546 3547 3548 3549 /* Reset the globals. This is important in a non-reentrant scanner so the next time 3550 * yylex() is called, initialization will occur. */ 3551 yy_init_globals( yyscanner); 3552 3553 /* Destroy the main struct (reentrant only). */ 3554 yyfree ( yyscanner , yyscanner ); 3555 yyscanner = NULL; 3556 return 0; 3557 } 3558 3559 3560 3561 /* 3562 * Internal utility routines. 3563 */ 3564 3565 3566 3567 #ifndef yytext_ptr 3568 static void yy_flex_strncpy (char* s1, const char * s2, int n , yyscan_t yyscanner) 3569 { 3570 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; 3571 (void)yyg; 3572 3573 int i; 3574 for ( i = 0; i < n; ++i ) 3575 s1[i] = s2[i]; 3576 } 3577 #endif 3578 3579 3580 3581 #ifdef YY_NEED_STRLEN 3582 static int yy_flex_strlen (const char * s , yyscan_t yyscanner) 3583 { 3584 int n; 3585 for ( n = 0; s[n]; ++n ) 3586 ; 3587 3588 return n; 3589 } 3590 #endif 3591 3592 3593 3594 void *yyalloc (yy_size_t size , yyscan_t yyscanner) 3595 { 3596 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; 3597 (void)yyg; 3598 return malloc(size); 3599 } 3600 3601 3602 3603 void *yyrealloc (void * ptr, yy_size_t size , yyscan_t yyscanner) 3604 { 3605 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; 3606 (void)yyg; 3607 3608 /* The cast to (char *) in the following accommodates both 3609 * implementations that use char* generic pointers, and those 3610 * that use void* generic pointers. It works with the latter 3611 * because both ANSI C and C++ allow castless assignment from 3612 * any pointer type to void*, and deal with argument conversions 3613 * as though doing an assignment. 3614 */ 3615 return realloc(ptr, size); 3616 } 3617 3618 3619 3620 void yyfree (void * ptr , yyscan_t yyscanner) 3621 { 3622 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; 3623 (void)yyg; 3624 free( (char *) ptr ); /* see yyrealloc() for (char *) cast */ 3625 } 3626 3627 3628 #define YYTABLES_NAME "yytables" 3629 3630 3631 3632 3633 3634 3635 3636 3637 yy_size_t string_input(char* buf, yy_size_t max_size, yyscan_t yyscanner) { 3638 pp::Token token; 3639 yyget_extra(yyscanner)->getPreprocessor().lex(&token); 3640 yy_size_t len = token.type == pp::Token::LAST ? 0 : token.text.size(); 3641 if (len < max_size) 3642 memcpy(buf, token.text.c_str(), len); 3643 yyset_column(token.location.file, yyscanner); 3644 yyset_lineno(token.location.line, yyscanner); 3645 3646 if (len >= max_size) 3647 YY_FATAL_ERROR("Input buffer overflow"); 3648 else if (len > 0) 3649 buf[len++] = ' '; 3650 return len; 3651 } 3652 3653 int check_type(yyscan_t yyscanner) { 3654 struct yyguts_t* yyg = (struct yyguts_t*) yyscanner; 3655 3656 int token = IDENTIFIER; 3657 TSymbol* symbol = yyextra->symbolTable.find(yytext, yyextra->getShaderVersion()); 3658 if (yyextra->lexAfterType == false && symbol && symbol->isVariable()) { 3659 TVariable* variable = static_cast<TVariable*>(symbol); 3660 if (variable->isUserType()) { 3661 yyextra->lexAfterType = true; 3662 token = TYPE_NAME; 3663 } 3664 } 3665 yylval->lex.symbol = symbol; 3666 return token; 3667 } 3668 3669 int reserved_word(yyscan_t yyscanner) { 3670 struct yyguts_t* yyg = (struct yyguts_t*) yyscanner; 3671 3672 yyextra->error(*yylloc, "Illegal use of reserved word", yytext, ""); 3673 yyextra->recover(); 3674 return 0; 3675 } 3676 3677 int ES2_reserved_ES3_keyword(TParseContext *context, int token) 3678 { 3679 yyscan_t yyscanner = (yyscan_t) context->getScanner(); 3680 3681 if (context->getShaderVersion() < 300) 3682 { 3683 return reserved_word(yyscanner); 3684 } 3685 3686 return token; 3687 } 3688 3689 int ES2_keyword_ES3_reserved(TParseContext *context, int token) 3690 { 3691 yyscan_t yyscanner = (yyscan_t) context->getScanner(); 3692 3693 if (context->getShaderVersion() >= 300) 3694 { 3695 return reserved_word(yyscanner); 3696 } 3697 3698 return token; 3699 } 3700 3701 int ES2_identifier_ES3_keyword(TParseContext *context, int token) 3702 { 3703 struct yyguts_t* yyg = (struct yyguts_t*) context->getScanner(); 3704 yyscan_t yyscanner = (yyscan_t) context->getScanner(); 3705 3706 // not a reserved word in GLSL ES 1.00, so could be used as an identifier/type name 3707 if (context->getShaderVersion() < 300) 3708 { 3709 yylval->lex.string = NewPoolTString(yytext); 3710 return check_type(yyscanner); 3711 } 3712 3713 return token; 3714 } 3715 3716 int uint_constant(TParseContext *context) 3717 { 3718 struct yyguts_t* yyg = (struct yyguts_t*) context->getScanner(); 3719 3720 if (context->getShaderVersion() < 300) 3721 { 3722 context->error(*yylloc, "Unsigned integers are unsupported prior to GLSL ES 3.00", yytext, ""); 3723 context->recover(); 3724 return 0; 3725 } 3726 3727 if (!atou_clamp(yytext, &(yylval->lex.u))) 3728 yyextra->warning(*yylloc, "Integer overflow", yytext, ""); 3729 3730 return UINTCONSTANT; 3731 } 3732 3733 int floatsuffix_check(TParseContext* context) 3734 { 3735 struct yyguts_t* yyg = (struct yyguts_t*) context->getScanner(); 3736 3737 if (context->getShaderVersion() < 300) 3738 { 3739 context->error(*yylloc, "Floating-point suffix unsupported prior to GLSL ES 3.00", yytext); 3740 context->recover(); 3741 return 0; 3742 } 3743 3744 if (!atof_clamp(yytext, &(yylval->lex.f))) 3745 yyextra->warning(*yylloc, "Float overflow", yytext, ""); 3746 3747 return(FLOATCONSTANT); 3748 } 3749 3750 int int_constant(yyscan_t yyscanner) { 3751 struct yyguts_t* yyg = (struct yyguts_t*) yyscanner; 3752 3753 if (!atoi_clamp(yytext, &(yylval->lex.i))) 3754 yyextra->warning(*yylloc, "Integer overflow", yytext, ""); 3755 return INTCONSTANT; 3756 } 3757 3758 int float_constant(yyscan_t yyscanner) { 3759 struct yyguts_t* yyg = (struct yyguts_t*) yyscanner; 3760 3761 if (!atof_clamp(yytext, &(yylval->lex.f))) 3762 yyextra->warning(*yylloc, "Float overflow", yytext, ""); 3763 return FLOATCONSTANT; 3764 } 3765 3766 void yyerror(YYLTYPE* lloc, TParseContext* context, void* scanner, const char* reason) { 3767 struct yyguts_t* yyg = (struct yyguts_t*) scanner; 3768 3769 if (context->AfterEOF) { 3770 context->error(*lloc, reason, "unexpected EOF"); 3771 } else { 3772 context->error(*lloc, reason, yytext); 3773 } 3774 context->recover(); 3775 } 3776 3777 int glslang_initialize(TParseContext* context) { 3778 yyscan_t scanner = NULL; 3779 if (yylex_init_extra(context, &scanner)) 3780 return 1; 3781 3782 context->setScanner(scanner); 3783 return 0; 3784 } 3785 3786 int glslang_finalize(TParseContext* context) { 3787 yyscan_t scanner = context->getScanner(); 3788 if (scanner == NULL) return 0; 3789 3790 context->setScanner(NULL); 3791 yylex_destroy(scanner); 3792 3793 return 0; 3794 } 3795 3796 int glslang_scan(size_t count, const char* const string[], const int length[], 3797 TParseContext* context) { 3798 yyrestart(NULL, context->getScanner()); 3799 yyset_column(0, context->getScanner()); 3800 yyset_lineno(1, context->getScanner()); 3801 context->AfterEOF = false; 3802 3803 // Initialize preprocessor. 3804 if (!context->getPreprocessor().init(count, string, length)) 3805 return 1; 3806 3807 // Define extension macros. 3808 const TExtensionBehavior& extBehavior = context->extensionBehavior(); 3809 for (TExtensionBehavior::const_iterator iter = extBehavior.begin(); 3810 iter != extBehavior.end(); ++iter) 3811 { 3812 context->getPreprocessor().predefineMacro(iter->first.c_str(), 1); 3813 } 3814 3815 context->getPreprocessor().predefineMacro("GL_FRAGMENT_PRECISION_HIGH", 1); 3816 3817 return 0; 3818 } 3819 3820 3821