00001 00002 #line 3 "<stdout>" 00003 00004 #define YY_INT_ALIGNED short int 00005 00006 /* A lexical scanner generated by flex */ 00007 00008 #define FLEX_SCANNER 00009 #define YY_FLEX_MAJOR_VERSION 2 00010 #define YY_FLEX_MINOR_VERSION 5 00011 #define YY_FLEX_SUBMINOR_VERSION 33 00012 #if YY_FLEX_SUBMINOR_VERSION > 0 00013 #define FLEX_BETA 00014 #endif 00015 00016 /* First, we deal with platform-specific or compiler-specific issues. */ 00017 00018 /* begin standard C headers. */ 00019 #include <stdio.h> 00020 #include <string.h> 00021 #include <errno.h> 00022 #include <stdlib.h> 00023 00024 /* end standard C headers. */ 00025 00026 /* flex integer type definitions */ 00027 00028 #ifndef FLEXINT_H 00029 #define FLEXINT_H 00030 00031 /* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */ 00032 00033 #if __STDC_VERSION__ >= 199901L 00034 00035 /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, 00036 * if you want the limit (max/min) macros for int types. 00037 */ 00038 #ifndef __STDC_LIMIT_MACROS 00039 #define __STDC_LIMIT_MACROS 1 00040 #endif 00041 00042 #include <inttypes.h> 00043 typedef int8_t flex_int8_t; 00044 typedef uint8_t flex_uint8_t; 00045 typedef int16_t flex_int16_t; 00046 typedef uint16_t flex_uint16_t; 00047 typedef int32_t flex_int32_t; 00048 typedef uint32_t flex_uint32_t; 00049 #else 00050 typedef signed char flex_int8_t; 00051 typedef short int flex_int16_t; 00052 typedef int flex_int32_t; 00053 typedef unsigned char flex_uint8_t; 00054 typedef unsigned short int flex_uint16_t; 00055 typedef unsigned int flex_uint32_t; 00056 #endif /* ! C99 */ 00057 00058 /* Limits of integral types. */ 00059 #ifndef INT8_MIN 00060 #define INT8_MIN (-128) 00061 #endif 00062 #ifndef INT16_MIN 00063 #define INT16_MIN (-32767-1) 00064 #endif 00065 #ifndef INT32_MIN 00066 #define INT32_MIN (-2147483647-1) 00067 #endif 00068 #ifndef INT8_MAX 00069 #define INT8_MAX (127) 00070 #endif 00071 #ifndef INT16_MAX 00072 #define INT16_MAX (32767) 00073 #endif 00074 #ifndef INT32_MAX 00075 #define INT32_MAX (2147483647) 00076 #endif 00077 #ifndef UINT8_MAX 00078 #define UINT8_MAX (255U) 00079 #endif 00080 #ifndef UINT16_MAX 00081 #define UINT16_MAX (65535U) 00082 #endif 00083 #ifndef UINT32_MAX 00084 #define UINT32_MAX (4294967295U) 00085 #endif 00086 00087 #endif /* ! FLEXINT_H */ 00088 00089 #ifdef __cplusplus 00090 00091 /* The "const" storage-class-modifier is valid. */ 00092 #define YY_USE_CONST 00093 00094 #else /* ! __cplusplus */ 00095 00096 #if __STDC__ 00097 00098 #define YY_USE_CONST 00099 00100 #endif /* __STDC__ */ 00101 #endif /* ! __cplusplus */ 00102 00103 #ifdef YY_USE_CONST 00104 #define yyconst const 00105 #else 00106 #define yyconst 00107 #endif 00108 00109 /* Returned upon end-of-file. */ 00110 #define YY_NULL 0 00111 00112 /* Promotes a possibly negative, possibly signed char to an unsigned 00113 * integer for use as an array index. If the signed char is negative, 00114 * we want to instead treat it as an 8-bit unsigned char, hence the 00115 * double cast. 00116 */ 00117 #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) 00118 00119 /* Enter a start condition. This macro really ought to take a parameter, 00120 * but we do it the disgusting crufty way forced on us by the ()-less 00121 * definition of BEGIN. 00122 */ 00123 #define BEGIN (yy_start) = 1 + 2 * 00124 00125 /* Translate the current start state into a value that can be later handed 00126 * to BEGIN to return to the state. The YYSTATE alias is for lex 00127 * compatibility. 00128 */ 00129 #define YY_START (((yy_start) - 1) / 2) 00130 #define YYSTATE YY_START 00131 00132 /* Action number for EOF rule of a given start state. */ 00133 #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) 00134 00135 /* Special action meaning "start processing a new file". */ 00136 #define YY_NEW_FILE preYYrestart(preYYin ) 00137 00138 #define YY_END_OF_BUFFER_CHAR 0 00139 00140 /* Size of default input buffer. */ 00141 #ifndef YY_BUF_SIZE 00142 #define YY_BUF_SIZE 262144 00143 #endif 00144 00145 /* The state buf must be large enough to hold one state per character in the main buffer. 00146 */ 00147 #define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) 00148 00149 #ifndef YY_TYPEDEF_YY_BUFFER_STATE 00150 #define YY_TYPEDEF_YY_BUFFER_STATE 00151 typedef struct yy_buffer_state *YY_BUFFER_STATE; 00152 #endif 00153 00154 extern int preYYleng; 00155 00156 extern FILE *preYYin, *preYYout; 00157 00158 #define EOB_ACT_CONTINUE_SCAN 0 00159 #define EOB_ACT_END_OF_FILE 1 00160 #define EOB_ACT_LAST_MATCH 2 00161 00162 #define YY_LESS_LINENO(n) 00163 00164 /* Return all but the first "n" matched characters back to the input stream. */ 00165 #define yyless(n) \ 00166 do \ 00167 { \ 00168 /* Undo effects of setting up preYYtext. */ \ 00169 int yyless_macro_arg = (n); \ 00170 YY_LESS_LINENO(yyless_macro_arg);\ 00171 *yy_cp = (yy_hold_char); \ 00172 YY_RESTORE_YY_MORE_OFFSET \ 00173 (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ 00174 YY_DO_BEFORE_ACTION; /* set up preYYtext again */ \ 00175 } \ 00176 while ( 0 ) 00177 00178 #define unput(c) yyunput( c, (yytext_ptr) ) 00179 00180 /* The following is because we cannot portably get our hands on size_t 00181 * (without autoconf's help, which isn't available because we want 00182 * flex-generated scanners to compile on their own). 00183 */ 00184 00185 #ifndef YY_TYPEDEF_YY_SIZE_T 00186 #define YY_TYPEDEF_YY_SIZE_T 00187 typedef unsigned int yy_size_t; 00188 #endif 00189 00190 #ifndef YY_STRUCT_YY_BUFFER_STATE 00191 #define YY_STRUCT_YY_BUFFER_STATE 00192 struct yy_buffer_state 00193 { 00194 FILE *yy_input_file; 00195 00196 char *yy_ch_buf; /* input buffer */ 00197 char *yy_buf_pos; /* current position in input buffer */ 00198 00199 /* Size of input buffer in bytes, not including room for EOB 00200 * characters. 00201 */ 00202 yy_size_t yy_buf_size; 00203 00204 /* Number of characters read into yy_ch_buf, not including EOB 00205 * characters. 00206 */ 00207 int yy_n_chars; 00208 00209 /* Whether we "own" the buffer - i.e., we know we created it, 00210 * and can realloc() it to grow it, and should free() it to 00211 * delete it. 00212 */ 00213 int yy_is_our_buffer; 00214 00215 /* Whether this is an "interactive" input source; if so, and 00216 * if we're using stdio for input, then we want to use getc() 00217 * instead of fread(), to make sure we stop fetching input after 00218 * each newline. 00219 */ 00220 int yy_is_interactive; 00221 00222 /* Whether we're considered to be at the beginning of a line. 00223 * If so, '^' rules will be active on the next match, otherwise 00224 * not. 00225 */ 00226 int yy_at_bol; 00227 00228 int yy_bs_lineno; 00229 int yy_bs_column; 00231 /* Whether to try to fill the input buffer when we reach the 00232 * end of it. 00233 */ 00234 int yy_fill_buffer; 00235 00236 int yy_buffer_status; 00237 00238 #define YY_BUFFER_NEW 0 00239 #define YY_BUFFER_NORMAL 1 00240 /* When an EOF's been seen but there's still some text to process 00241 * then we mark the buffer as YY_EOF_PENDING, to indicate that we 00242 * shouldn't try reading from the input source any more. We might 00243 * still have a bunch of tokens to match, though, because of 00244 * possible backing-up. 00245 * 00246 * When we actually see the EOF, we change the status to "new" 00247 * (via preYYrestart()), so that the user can continue scanning by 00248 * just pointing preYYin at a new input file. 00249 */ 00250 #define YY_BUFFER_EOF_PENDING 2 00251 00252 }; 00253 #endif /* !YY_STRUCT_YY_BUFFER_STATE */ 00254 00255 /* Stack of input buffers. */ 00256 static size_t yy_buffer_stack_top = 0; 00257 static size_t yy_buffer_stack_max = 0; 00258 static YY_BUFFER_STATE * yy_buffer_stack = 0; 00260 /* We provide macros for accessing buffer states in case in the 00261 * future we want to put the buffer states in a more general 00262 * "scanner state". 00263 * 00264 * Returns the top of the stack, or NULL. 00265 */ 00266 #define YY_CURRENT_BUFFER ( (yy_buffer_stack) \ 00267 ? (yy_buffer_stack)[(yy_buffer_stack_top)] \ 00268 : NULL) 00269 00270 /* Same as previous macro, but useful when we know that the buffer stack is not 00271 * NULL or when we need an lvalue. For internal use only. 00272 */ 00273 #define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)] 00274 00275 /* yy_hold_char holds the character lost when preYYtext is formed. */ 00276 static char yy_hold_char; 00277 static int yy_n_chars; /* number of characters read into yy_ch_buf */ 00278 int preYYleng; 00279 00280 /* Points to current character in buffer. */ 00281 static char *yy_c_buf_p = (char *) 0; 00282 static int yy_init = 0; /* whether we need to initialize */ 00283 static int yy_start = 0; /* start state number */ 00284 00285 /* Flag which is used to allow preYYwrap()'s to do buffer switches 00286 * instead of setting up a fresh preYYin. A bit of a hack ... 00287 */ 00288 static int yy_did_buffer_switch_on_eof; 00289 00290 void preYYrestart (FILE *input_file ); 00291 void preYY_switch_to_buffer (YY_BUFFER_STATE new_buffer ); 00292 YY_BUFFER_STATE preYY_create_buffer (FILE *file,int size ); 00293 void preYY_delete_buffer (YY_BUFFER_STATE b ); 00294 void preYY_flush_buffer (YY_BUFFER_STATE b ); 00295 void preYYpush_buffer_state (YY_BUFFER_STATE new_buffer ); 00296 void preYYpop_buffer_state (void ); 00297 00298 static void preYYensure_buffer_stack (void ); 00299 static void preYY_load_buffer_state (void ); 00300 static void preYY_init_buffer (YY_BUFFER_STATE b,FILE *file ); 00301 00302 #define YY_FLUSH_BUFFER preYY_flush_buffer(YY_CURRENT_BUFFER ) 00303 00304 YY_BUFFER_STATE preYY_scan_buffer (char *base,yy_size_t size ); 00305 YY_BUFFER_STATE preYY_scan_string (yyconst char *yy_str ); 00306 YY_BUFFER_STATE preYY_scan_bytes (yyconst char *bytes,int len ); 00307 00308 void *preYYalloc (yy_size_t ); 00309 void *preYYrealloc (void *,yy_size_t ); 00310 void preYYfree (void * ); 00311 00312 #define yy_new_buffer preYY_create_buffer 00313 00314 #define yy_set_interactive(is_interactive) \ 00315 { \ 00316 if ( ! YY_CURRENT_BUFFER ){ \ 00317 preYYensure_buffer_stack (); \ 00318 YY_CURRENT_BUFFER_LVALUE = \ 00319 preYY_create_buffer(preYYin,YY_BUF_SIZE ); \ 00320 } \ 00321 YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ 00322 } 00323 00324 #define yy_set_bol(at_bol) \ 00325 { \ 00326 if ( ! YY_CURRENT_BUFFER ){\ 00327 preYYensure_buffer_stack (); \ 00328 YY_CURRENT_BUFFER_LVALUE = \ 00329 preYY_create_buffer(preYYin,YY_BUF_SIZE ); \ 00330 } \ 00331 YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ 00332 } 00333 00334 #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) 00335 00336 /* Begin user sect3 */ 00337 00338 #define preYYwrap(n) 1 00339 #define YY_SKIP_YYWRAP 00340 00341 typedef unsigned char YY_CHAR; 00342 00343 FILE *preYYin = (FILE *) 0, *preYYout = (FILE *) 0; 00344 00345 typedef int yy_state_type; 00346 00347 extern int preYYlineno; 00348 00349 int preYYlineno = 1; 00350 00351 extern char *preYYtext; 00352 #define yytext_ptr preYYtext 00353 00354 static yy_state_type yy_get_previous_state (void ); 00355 static yy_state_type yy_try_NUL_trans (yy_state_type current_state ); 00356 static int yy_get_next_buffer (void ); 00357 static void yy_fatal_error (yyconst char msg[] ); 00358 00359 /* Done after the current pattern has been matched and before the 00360 * corresponding action - sets up preYYtext. 00361 */ 00362 #define YY_DO_BEFORE_ACTION \ 00363 (yytext_ptr) = yy_bp; \ 00364 preYYleng = (size_t) (yy_cp - yy_bp); \ 00365 (yy_hold_char) = *yy_cp; \ 00366 *yy_cp = '\0'; \ 00367 (yy_c_buf_p) = yy_cp; 00368 00369 #define YY_NUM_RULES 155 00370 #define YY_END_OF_BUFFER 156 00371 /* This struct is not used in this scanner, 00372 but its presence is necessary. */ 00373 struct yy_trans_info 00374 { 00375 flex_int32_t yy_verify; 00376 flex_int32_t yy_nxt; 00377 }; 00378 static yyconst flex_int16_t yy_acclist[1108] = 00379 { 0, 00380 138, 138, 156, 154, 155, 1, 154, 155, 153, 155, 00381 3, 154, 155, 154, 155, 154, 155, 2, 154, 155, 00382 6, 154, 155, 1, 6, 154, 155, 6, 154, 155, 00383 6, 153, 155, 3, 6, 154, 155, 5, 154, 155, 00384 6, 154, 155, 6, 154, 155, 6, 154, 155, 2, 00385 6, 154, 155, 52, 154, 155, 1, 52, 154, 155, 00386 48, 153, 155, 3, 52, 154, 155, 52, 154, 155, 00387 52, 154, 155, 49, 52, 154, 155, 49, 52, 154, 00388 155, 49, 52, 154, 155, 49, 52, 154, 155, 49, 00389 52, 154, 155, 2, 52, 154, 155, 76, 154, 155, 00390 00391 1, 76, 154, 155, 74, 153, 155, 3, 76, 154, 00392 155, 76, 154, 155, 76, 154, 155, 75, 76, 154, 00393 155, 75, 76, 154, 155, 75, 76, 154, 155, 2, 00394 76, 154, 155, 77, 78, 154, 155, 1, 77, 78, 00395 154, 155, 81, 153, 155, 3, 77, 78, 154, 155, 00396 78, 154, 155, 77, 78, 154, 155, 2, 77, 78, 00397 154, 155, 22, 154, 155, 1, 22, 154, 155, 23, 00398 153, 155, 3, 22, 154, 155, 15, 22, 154, 155, 00399 22, 154, 155, 22, 154, 155, 22, 154, 155, 20, 00400 22, 154, 155,16403, 22, 154, 155, 20, 22, 154, 00401 00402 155,16403, 10, 22, 154, 155, 11, 22, 154, 155, 00403 2, 22, 154, 155, 16, 154, 155, 1, 16, 154, 00404 155, 18, 154, 155, 16, 154, 155, 16, 154, 155, 00405 154, 155, 2, 16, 154, 155, 154, 155, 1, 154, 00406 155, 3, 154, 155, 154, 155, 154, 155, 2, 154, 00407 155, 83, 154, 155, 87, 154, 155, 1, 87, 154, 00408 155, 85, 153, 155, 3, 87, 154, 155, 87, 154, 00409 155, 87, 154, 155, 87, 154, 155, 2, 87, 154, 00410 155, 8281, 154, 155,16473,16474, 154, 155, 92, 154, 00411 155, 93, 154, 155, 91, 154, 155, 154, 155, 95, 00412 00413 154, 155, 150, 154, 155, 1, 150, 154, 155, 138, 00414 150, 154, 155, 137, 153, 155, 3, 150, 154, 155, 00415 141, 150, 154, 155, 133, 150, 154, 155, 142, 150, 00416 154, 155, 150, 154, 155, 150, 154, 155, 140, 150, 00417 154, 155, 134, 150, 154, 155, 150, 154, 155, 2, 00418 150, 154, 155, 69, 154, 155, 1, 69, 154, 155, 00419 68, 153, 155, 3, 69, 154, 155, 69, 154, 155, 00420 69, 154, 155, 2, 69, 154, 155, 67, 69, 154, 00421 155, 1, 67, 69, 154, 155, 67, 69, 154, 155, 00422 67, 68, 153, 155, 3, 67, 69, 154, 155, 66, 00423 00424 69, 154, 155, 67, 69, 154, 155, 67, 69, 154, 00425 155, 2, 67, 69, 154, 155, 111, 113, 154, 155, 00426 1, 113, 154, 155, 112, 153, 155, 3, 111, 113, 00427 154, 155, 113, 154, 155, 113, 154, 155, 111, 113, 00428 154, 155, 113, 154, 155, 2, 111, 113, 154, 155, 00429 114, 135, 154, 155, 1, 114, 135, 154, 155, 114, 00430 116, 153, 155, 3, 114, 135, 154, 155, 135, 154, 00431 155, 114, 135, 154, 155, 114, 135, 154, 155, 134, 00432 135, 154, 155, 2, 114, 135, 154, 155, 113, 154, 00433 155, 113, 154, 155, 113, 154, 155, 123, 127, 128, 00434 00435 154, 155, 1, 123, 128, 154, 155, 124, 153, 155, 00436 3, 123, 127, 128, 154, 155, 127, 128, 154, 155, 00437 123, 127, 128, 154, 155, 128, 154, 155, 2, 123, 00438 127, 128, 154, 155, 120, 122, 154, 155, 1, 122, 00439 154, 155, 121, 153, 155, 3, 120, 122, 154, 155, 00440 122, 154, 155, 120, 122, 154, 155, 120, 122, 154, 00441 155, 2, 120, 122, 154, 155, 131, 132, 154, 155, 00442 1, 132, 154, 155, 3, 131, 132, 154, 155, 131, 00443 132, 154, 155, 131, 132, 154, 155, 2, 131, 132, 00444 154, 155, 58, 154, 155, 1, 58, 154, 155, 59, 00445 00446 153, 155, 3, 58, 154, 155, 58, 154, 155, 58, 00447 154, 155, 57, 58, 154, 155, 58, 154, 155, 57, 00448 58, 154, 155, 2, 58, 154, 155, 65, 154, 155, 00449 1, 65, 154, 155, 63, 153, 155, 3, 65, 154, 00450 155, 65, 154, 155, 65, 154, 155, 61, 65, 154, 00451 155, 65, 154, 155, 2, 65, 154, 155, 64, 65, 00452 154, 155, 62, 65, 154, 155, 148, 154, 155, 1, 00453 148, 154, 155, 3, 148, 154, 155, 145, 148, 154, 00454 155, 148, 154, 155, 148, 154, 155, 148, 154, 155, 00455 2, 148, 154, 155, 149, 154, 155, 1, 149, 154, 00456 00457 155, 3, 149, 154, 155, 147, 149, 154, 155, 149, 00458 154, 155, 149, 154, 155, 149, 154, 155, 2, 149, 00459 154, 155, 53, 154, 155, 51, 154, 155, 1, 51, 00460 154, 155, 3, 51, 154, 155, 51, 154, 155, 51, 00461 154, 155, 51, 154, 155, 2, 51, 154, 155, 30, 00462 154, 155, 1, 30, 154, 155, 28, 153, 155, 3, 00463 30, 154, 155, 27, 30, 154, 155, 30, 154, 155, 00464 24, 30, 154, 155, 25, 30, 154, 155, 30, 154, 00465 155, 30, 154, 155, 29, 30, 154, 155, 2, 30, 00466 154, 155, 34, 154, 155, 1, 34, 154, 155, 3, 00467 00468 34, 154, 155, 31, 34, 154, 155, 34, 154, 155, 00469 34, 154, 155, 34, 154, 155, 2, 34, 154, 155, 00470 107, 154, 155, 1, 107, 154, 155, 3, 107, 154, 00471 155, 107, 154, 155, 107, 154, 155, 105, 107, 154, 00472 155, 2, 107, 154, 155, 151, 152, 6, 6, 5, 00473 6, 49, 49, 49, 49, 49, 49, 49, 49, 80, 00474 151, 79, 152, 75, 75, 75, 75, 77, 77, 8211, 00475 20,16403, 21, 20,16403, 16, 16, 151, 16, 152, 00476 16, 17, 84, 151, 152, 82, 83, 85, 151, 152, 00477 86, 8281, 8282, 88, 8281,16473,16474, 93, 92, 93, 00478 00479 91, 95, 95, 138, 139, 96, 151, 97, 152, 134, 00480 136, 67, 67, 66, 111, 98, 100, 151, 99, 152, 00481 111, 114, 115, 114, 152, 114, 110, 110, 151, 123, 00482 127, 123, 127, 125, 127, 151, 126, 127, 152, 123, 00483 127, 120, 117, 119, 151, 118, 120, 152, 120, 131, 00484 129, 131, 151, 130, 131, 152, 131, 57, 54, 57, 00485 61, 60, 62, 144, 151, 143, 152, 146, 53, 50, 00486 32, 151, 32, 152, 33, 105, 4,16391, 49, 49, 00487 49, 49, 42, 49, 49, 49, 49, 49, 75, 75, 00488 75, 70, 75, 75, 4, 77, 14, 14, 20,16403, 00489 00490 4, 16, 4, 4, 84, 4, 94, 139, 4, 111, 00491 4, 114, 109, 4, 123, 127, 4, 127, 4, 120, 00492 4, 131, 57, 26, 8, 8199, 49, 49, 49, 49, 00493 49, 49, 49, 49, 49, 75, 71, 75, 75, 75, 00494 13, 12, 13, 20,16403, 95, 101, 57, 26, 8, 00495 8, 49, 43, 46, 44, 44, 49, 49, 49, 49, 00496 49, 49, 49, 72, 75, 73, 75, 75, 12, 20, 00497 16403, 103, 57, 8, 49, 47, 39, 38, 49, 49, 00498 49, 45, 20,16403, 102, 104, 106, 57, 8, 37, 00499 41, 40,16419, 36, 9, 57, 8, 8227, 56, 55, 00500 00501 8, 8227, 108, 8, 8, 8, 8 00502 } ; 00503 00504 static yyconst flex_int16_t yy_accept[1057] = 00505 { 0, 00506 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 00507 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 00508 1, 1, 1, 1, 1, 2, 3, 3, 3, 3, 00509 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 00510 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 00511 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 00512 3, 3, 3, 3, 3, 4, 6, 9, 11, 14, 00513 16, 18, 21, 24, 28, 31, 34, 38, 41, 44, 00514 47, 50, 54, 57, 61, 64, 68, 71, 74, 78, 00515 82, 86, 90, 94, 98, 101, 105, 108, 112, 115, 00516 00517 118, 122, 126, 130, 134, 138, 143, 146, 151, 154, 00518 158, 163, 166, 170, 173, 177, 181, 184, 187, 190, 00519 195, 198, 203, 207, 211, 215, 218, 222, 225, 228, 00520 231, 233, 237, 239, 242, 245, 247, 249, 252, 255, 00521 258, 262, 265, 269, 272, 275, 278, 282, 287, 289, 00522 292, 295, 298, 300, 303, 306, 310, 314, 317, 321, 00523 325, 329, 333, 336, 339, 343, 347, 350, 354, 357, 00524 361, 364, 368, 371, 374, 378, 382, 387, 391, 395, 00525 400, 404, 408, 412, 417, 421, 425, 428, 433, 436, 00526 439, 443, 446, 451, 455, 460, 464, 469, 472, 476, 00527 00528 480, 484, 489, 492, 495, 498, 503, 508, 511, 517, 00529 521, 526, 529, 535, 539, 543, 546, 551, 554, 558, 00530 562, 567, 571, 575, 580, 584, 588, 593, 596, 600, 00531 603, 607, 610, 613, 617, 620, 624, 628, 631, 635, 00532 638, 642, 645, 648, 652, 655, 659, 663, 667, 670, 00533 674, 678, 682, 685, 688, 691, 695, 698, 702, 706, 00534 710, 713, 716, 719, 723, 726, 729, 733, 737, 740, 00535 743, 746, 750, 753, 757, 760, 764, 768, 771, 775, 00536 779, 782, 785, 789, 793, 796, 800, 804, 808, 811, 00537 814, 817, 821, 824, 828, 832, 835, 838, 842, 846, 00538 00539 847, 848, 848, 849, 850, 851, 852, 852, 852, 852, 00540 853, 854, 855, 856, 857, 858, 859, 860, 862, 864, 00541 865, 866, 867, 868, 869, 870, 870, 870, 870, 871, 00542 873, 874, 874, 876, 877, 879, 881, 882, 883, 883, 00543 884, 885, 886, 886, 886, 887, 888, 888, 889, 890, 00544 891, 891, 892, 892, 893, 894, 895, 898, 898, 899, 00545 900, 901, 902, 902, 903, 903, 904, 905, 905, 906, 00546 908, 910, 911, 912, 912, 913, 914, 915, 916, 917, 00547 919, 921, 922, 922, 922, 922, 922, 922, 922, 922, 00548 922, 922, 922, 923, 924, 926, 927, 928, 930, 930, 00549 00550 930, 932, 933, 934, 937, 940, 942, 942, 943, 944, 00551 946, 949, 950, 951, 954, 957, 958, 959, 960, 960, 00552 961, 962, 963, 964, 966, 968, 969, 970, 971, 971, 00553 971, 971, 973, 975, 976, 977, 978, 978, 978, 979, 00554 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 00555 990, 991, 992, 993, 994, 995, 997, 998, 998, 999, 00556 999, 999, 1001, 1003, 1004, 1006, 1007, 1008, 1008, 1009, 00557 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 00558 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1013, 00559 1013, 1014, 1017, 1019, 1019, 1021, 1023, 1024, 1024, 1025, 00560 00561 1025, 1025, 1025, 1025, 1025, 1026, 1026, 1027, 1028, 1029, 00562 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1039, 1040, 00563 1041, 1042, 1044, 1044, 1044, 1046, 1047, 1047, 1047, 1048, 00564 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 00565 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1049, 1049, 1050, 00566 1050, 1050, 1051, 1051, 1052, 1052, 1053, 1055, 1056, 1057, 00567 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1065, 1066, 00568 1068, 1069, 1070, 1070, 1070, 1072, 1072, 1072, 1072, 1072, 00569 1072, 1072, 1072, 1072, 1072, 1073, 1073, 1073, 1073, 1073, 00570 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 00571 00572 1073, 1074, 1074, 1074, 1074, 1075, 1075, 1076, 1076, 1076, 00573 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1083, 1083, 1085, 00574 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1087, 1088, 1088, 00575 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 00576 1088, 1088, 1088, 1088, 1088, 1089, 1089, 1090, 1090, 1091, 00577 1091, 1092, 1093, 1094, 1095, 1095, 1095, 1095, 1095, 1096, 00578 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 00579 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 00580 1097, 1097, 1098, 1098, 1099, 1099, 1099, 1099, 1099, 1099, 00581 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 00582 00583 1099, 1099, 1099, 1099, 1100, 1101, 1101, 1102, 1102, 1103, 00584 1103, 1103, 1103, 1103, 1103, 1103, 1104, 1104, 1104, 1104, 00585 1104, 1104, 1104, 1104, 1104, 1105, 1105, 1105, 1105, 1105, 00586 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1106, 1106, 00587 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1107, 1107, 1107, 00588 1107, 1107, 1107, 1107, 1108, 1108, 1108, 1108, 1108, 1108, 00589 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 00590 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 00591 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 00592 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 00593 00594 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 00595 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 00596 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 00597 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 00598 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 00599 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 00600 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 00601 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 00602 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 00603 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 00604 00605 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 00606 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 00607 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 00608 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 00609 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 00610 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 00611 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 00612 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 00613 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 00614 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 00615 00616 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 00617 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 00618 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 00619 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 00620 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 00621 1108, 1108, 1108, 1108, 1108, 1108 00622 } ; 00623 00624 static yyconst flex_int32_t yy_ec[256] = 00625 { 0, 00626 1, 1, 1, 1, 1, 2, 1, 1, 3, 4, 00627 1, 1, 5, 1, 1, 1, 1, 1, 1, 1, 00628 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 00629 1, 3, 6, 7, 8, 9, 1, 1, 10, 11, 00630 12, 13, 1, 14, 15, 16, 17, 18, 18, 18, 00631 18, 18, 18, 18, 18, 19, 19, 20, 1, 21, 00632 22, 23, 24, 25, 26, 26, 27, 26, 26, 26, 00633 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 00634 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 00635 28, 29, 30, 1, 26, 1, 31, 32, 33, 34, 00636 00637 35, 36, 37, 38, 39, 37, 37, 40, 41, 42, 00638 43, 44, 37, 45, 46, 47, 48, 49, 37, 50, 00639 51, 37, 52, 1, 53, 1, 1, 1, 1, 1, 00640 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 00641 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 00642 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 00643 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 00644 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 00645 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 00646 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 00647 00648 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 00649 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 00650 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 00651 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 00652 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 00653 1, 1, 1, 1, 1 00654 } ; 00655 00656 static yyconst flex_int32_t yy_meta[55] = 00657 { 0, 00658 1, 2, 3, 4, 5, 6, 7, 1, 1, 8, 00659 9, 6, 10, 1, 11, 12, 13, 14, 14, 1, 00660 15, 6, 6, 1, 16, 17, 17, 1, 18, 1, 00661 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 00662 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 00663 17, 1, 1, 1 00664 } ; 00665 00666 static yyconst flex_int16_t yy_base[1114] = 00667 { 0, 00668 0, 4, 8, 61, 115, 0, 169, 0, 14, 18, 00669 223, 0, 32, 276, 280, 284, 338, 0, 391, 395, 00670 424, 0, 475, 0, 529, 0, 43, 399, 582, 586, 00671 590, 596, 649, 702, 756, 0, 809, 862, 613, 655, 00672 622, 681, 617, 697, 916, 0, 970, 0, 1013, 0, 00673 823, 841, 827, 1063, 1092, 0, 1067, 1142, 1195, 1248, 00674 1150, 1156, 1302, 0, 2439, 4450, 4450, 4450, 4450, 13, 00675 2409, 4450, 4450, 4450, 47, 4450, 4450, 4450, 16, 2398, 00676 72, 4450, 4450, 4450, 4450, 4450, 27, 2396, 0, 2383, 00677 1, 10, 2371, 4450, 4450, 4450, 4450, 4450, 40, 2387, 00678 00679 0, 37, 2374, 4450, 0, 0, 4450, 0, 63, 2376, 00680 0, 4450, 4450, 4450, 4450, 4450, 2361, 76, 2364, 91, 00681 10, 684, 4450, 4450, 4450, 0, 0, 4450, 87, 2355, 00682 0, 0, 4, 85, 272, 289, 287, 291, 98, 2365, 00683 2364, 4450, 2362, 305, 295, 66, 2358, 102, 100, 2357, 00684 2356, 2354, 2339, 310, 4450, 4450, 312, 4450, 4450, 4450, 00685 2346, 4450, 94, 2320, 4450, 0, 77, 4450, 4450, 4450, 00686 4450, 4450, 97, 2314, 4450, 4450, 4450, 313, 4450, 4450, 00687 4450, 310, 2301, 4450, 0, 4450, 4450, 0, 2302, 311, 00688 2282, 1332, 0, 0, 0, 0, 0, 2280, 312, 2271, 00689 00690 0, 0, 2272, 318, 297, 392, 0, 4450, 396, 393, 00691 409, 257, 412, 0, 4450, 4450, 0, 2271, 404, 2259, 00692 0, 0, 4450, 0, 405, 2253, 0, 4450, 4450, 4450, 00693 4450, 414, 2252, 0, 332, 2239, 4450, 4450, 4450, 4450, 00694 4450, 415, 2246, 0, 2264, 4450, 4450, 0, 4450, 4450, 00695 4450, 4450, 417, 2243, 0, 4450, 4450, 4450, 4450, 4450, 00696 422, 2241, 0, 4450, 0, 4450, 4450, 4450, 423, 2240, 00697 433, 4450, 4450, 4450, 4450, 4450, 4450, 2230, 4450, 4450, 00698 429, 2230, 4450, 4450, 4450, 4450, 4450, 4450, 430, 2229, 00699 0, 4450, 4450, 4450, 4450, 431, 2218, 0, 4450, 4450, 00700 00701 4450, 0, 4450, 655, 4450, 714, 582, 2228, 719, 0, 00702 2202, 550, 2198, 622, 2180, 2190, 2186, 4450, 4450, 0, 00703 558, 2180, 705, 0, 1377, 2197, 598, 644, 4450, 739, 00704 4450, 2201, 812, 0, 0, 0, 1395, 4450, 418, 4450, 00705 622, 645, 1413, 620, 4450, 658, 2200, 4450, 2195, 2194, 00706 1433, 4450, 2191, 608, 4450, 4450, 689, 717, 2184, 2179, 00707 2177, 2176, 2160, 674, 2147, 694, 662, 2154, 2157, 4450, 00708 4450, 0, 4450, 2152, 4450, 688, 4450, 0, 4450, 2137, 00709 4450, 1451, 1442, 2110, 2108, 2108, 2101, 2107, 2101, 2079, 00710 2090, 2082, 0, 4450, 0, 1487, 4450, 4450, 2061, 809, 00711 00712 711, 0, 0, 0, 0, 1509, 2048, 0, 4450, 4450, 00713 0, 1527, 0, 0, 0, 1545, 0, 4450, 2086, 2040, 00714 0, 4450, 0, 4450, 4450, 4450, 0, 4450, 2068, 2054, 00715 2036, 4450, 4450, 4450, 0, 4450, 2033, 2031, 816, 2002, 00716 2000, 2000, 1994, 4450, 1997, 1989, 1979, 1979, 1975, 1973, 00717 1972, 1964, 4450, 1966, 1964, 0, 4450, 1981, 1979, 831, 00718 850, 869, 0, 729, 4450, 1984, 4450, 1967, 1978, 0, 00719 1936, 1931, 841, 1925, 1940, 1929, 1900, 1911, 1899, 842, 00720 1884, 1896, 1878, 1870, 1873, 1869, 1852, 1856, 0, 1859, 00721 4450, 840, 0, 1842, 0, 0, 1844, 1866, 4450, 1865, 00722 00723 872, 1860, 720, 1023, 1096, 1172, 4450, 1814, 886, 1568, 00724 1814, 1811, 1811, 1797, 1791, 1799, 895, 709, 1795, 1786, 00725 4450, 4450, 878, 904, 1031, 4450, 1787, 1771, 4450, 1774, 00726 1766, 1770, 1773, 1752, 1752, 1755, 1755, 750, 1754, 1744, 00727 1748, 1738, 1722, 1731, 1712, 1045, 1711, 1742, 4450, 884, 00728 896, 4450, 1178, 1183, 1211, 1712, 4450, 4450, 821, 1706, 00729 1622, 900, 1705, 1692, 1704, 1734, 4450, 832, 1698, 0, 00730 1026, 4450, 1723, 1099, 1103, 1690, 909, 1684, 1688, 1666, 00731 1660, 1665, 1637, 1108, 1146, 1522, 1521, 1513, 1517, 1516, 00732 1521, 1499, 1497, 1493, 1488, 1503, 1497, 1480, 1490, 1482, 00733 00734 1482, 1506, 1493, 1218, 1222, 1236, 1498, 1027, 1454, 4450, 00735 1030, 4450, 1071, 1187, 1453, 1482, 1448, 1240, 1674, 1165, 00736 1438, 1429, 1435, 1425, 1434, 1422, 1229, 4450, 1243, 1418, 00737 1417, 1415, 1409, 1407, 1399, 1398, 1398, 1384, 1388, 1380, 00738 1384, 1386, 1364, 1368, 1370, 1359, 1466, 1502, 1399, 1251, 00739 1078, 4450, 1188, 4450, 1258, 1272, 1679, 1366, 4450, 1349, 00740 1347, 1340, 1338, 1329, 1335, 1340, 1329, 1318, 1308, 1307, 00741 1262, 1236, 1232, 1226, 1202, 1193, 1186, 1196, 1175, 1094, 00742 1509, 1684, 1688, 0, 1275, 1691, 1210, 1173, 1169, 1150, 00743 1142, 1150, 1133, 0, 1127, 1132, 1112, 1079, 1070, 1073, 00744 00745 1067, 1067, 1051, 1153, 4450, 1696, 1702, 1707, 0, 1286, 00746 1710, 1725, 1037, 1037, 1029, 4450, 987, 989, 867, 865, 00747 845, 836, 838, 1715, 1741, 1746, 1289, 1753, 1381, 761, 00748 709, 676, 624, 592, 593, 558, 1765, 1768, 1771, 1392, 00749 1775, 1437, 403, 412, 364, 1791, 1796, 1799, 1410, 1803, 00750 1448, 266, 1821, 1825, 1829, 1542, 1833, 1491, 1849, 1854, 00751 1859, 1863, 1875, 1866, 1884, 1887, 1896, 1899, 1909, 1904, 00752 1918, 1921, 1930, 1933, 1938, 1947, 1954, 1959, 1950, 1964, 00753 1973, 1982, 1989, 2001, 1992, 2010, 2013, 2023, 2026, 2035, 00754 2044, 2047, 2052, 2057, 2063, 2066, 2075, 2078, 2081, 2090, 00755 00756 2094, 2103, 2097, 2108, 2117, 2112, 2126, 2136, 2131, 2141, 00757 2154, 2163, 2167, 2170, 2181, 2186, 2189, 2198, 2205, 2214, 00758 2208, 2223, 2232, 2226, 2241, 2244, 2253, 2258, 2268, 2277, 00759 2282, 2287, 2296, 2299, 2304, 2309, 2313, 2323, 2318, 2332, 00760 2342, 2328, 2347, 2360, 2337, 2373, 2388, 2369, 2393, 2398, 00761 2378, 2403, 2412, 2382, 2421, 2424, 2433, 2438, 2441, 2450, 00762 2454, 2463, 2457, 2468, 2477, 2486, 2492, 2501, 2495, 2513, 00763 2516, 2527, 2530, 2539, 2551, 2554, 2559, 2568, 2571, 2581, 00764 2590, 2593, 2602, 2596, 2611, 2614, 2623, 2626, 2636, 2631, 00765 2641, 2646, 2655, 2658, 2667, 2676, 2681, 2686, 2691, 2697, 00766 00767 2706, 2700, 2711, 2720, 2729, 2736, 2746, 2732, 2751, 2756, 00768 2741, 2765, 2775, 2761, 2784, 2796, 2770, 2801, 2812, 2787, 00769 2821, 2826, 2806, 2831, 2840, 2849, 2852, 2862, 2856, 2871, 00770 2876, 2867, 2885, 2895, 2881, 2900, 2913, 2890, 2918, 2927, 00771 2922, 2932, 2941, 2936, 2946, 2951, 2956, 2964, 2973, 2967, 00772 2978, 2987, 2982, 2996, 3006, 2992, 3001, 3011, 3023, 73, 00773 3026, 3037, 3042, 3047, 3057, 3051, 3062, 3067, 3076, 3081, 00774 3093, 3087, 3102, 3107, 3112, 3117, 3120, 7, 3126, 3131, 00775 3137, 3143, 3146, 3152, 3157, 3162, 3170, 3176, 3181, 3187, 00776 3196, 3202, 3207, 3212, 3215, 3220, 3226, 3231, 3237, 3240, 00777 00778 3246, 3252, 3257, 3265, 3270, 3276, 3281, 3290, 3296, 3302, 00779 3307, 3310, 3315, 3320, 3326, 3331, 3334, 3340, 3346, 3352, 00780 3360, 3365, 3370, 3376, 3384, 3390, 3396, 3402, 3405, 3410, 00781 3415, 3420, 3426, 3429, 3434, 3440, 3446, 3455, 3460, 3465, 00782 3470, 3479, 3484, 3490, 3496, 3499, 3505, 3510, 3515, 3520, 00783 3523, 3529, 3534, 3540, 4450, 3592, 3610, 3628, 3646, 3664, 00784 3682, 3700, 3718, 3736, 3754, 3772, 3790, 3808, 3826, 3844, 00785 3862, 3880, 3898, 588, 1148, 3916, 3934, 3950, 3967, 3984, 00786 4002, 4018, 4035, 4050, 4065, 1254, 4082, 4100, 4117, 4135, 00787 4152, 4169, 4186, 4204, 1267, 1268, 1281, 4222, 1282, 4240, 00788 00789 4258, 4266, 4278, 4293, 4311, 4329, 4346, 4364, 4382, 4399, 00790 4414, 1354, 4431 00791 } ; 00792 00793 static yyconst flex_int16_t yy_def[1114] = 00794 { 0, 00795 1056, 1056, 1056, 1057, 1055, 5, 1055, 7, 1058, 1058, 00796 1055, 11, 1059, 1059, 1060, 1060, 1055, 17, 1061, 1061, 00797 17, 21, 1055, 23, 1055, 25, 1062, 1063, 1056, 1056, 00798 1056, 1056, 1064, 1064, 1055, 35, 1064, 1064, 1065, 1065, 00799 1066, 1066, 1067, 1067, 1055, 45, 1055, 47, 47, 49, 00800 1068, 1068, 1069, 1069, 21, 55, 1070, 1070, 1071, 1071, 00801 1072, 1072, 1055, 63, 1055, 1055, 1055, 1055, 1055, 1055, 00802 1055, 1055, 1055, 1055, 1073, 1055, 1055, 1055, 1055, 1055, 00803 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1074, 1074, 00804 1074, 1074, 1074, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 00805 00806 1075, 1075, 1075, 1055, 1076, 1076, 1055, 1076, 1055, 1076, 00807 1076, 1055, 1055, 1055, 1055, 1055, 1077, 1055, 1055, 1078, 00808 1055, 1078, 1055, 1055, 1055, 1079, 1079, 1055, 1079, 1079, 00809 1080, 1079, 1081, 1081, 1081, 1081, 1081, 1081, 1082, 1083, 00810 1083, 1055, 1083, 1083, 1083, 1055, 1083, 1084, 1055, 1055, 00811 1055, 1055, 1055, 1085, 1055, 1055, 1055, 1055, 1055, 1055, 00812 1055, 1055, 1055, 1055, 1055, 1086, 1055, 1055, 1055, 1055, 00813 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1087, 1055, 1055, 00814 1055, 1055, 1055, 1055, 1088, 1055, 1055, 1088, 1055, 1055, 00815 1088, 1055, 1088, 1089, 1089, 1089, 1089, 1055, 1089, 1089, 00816 00817 1086, 1089, 1055, 1055, 1055, 1090, 1091, 1055, 1090, 1092, 00818 1090, 1055, 1090, 1093, 1055, 1055, 1093, 1055, 1093, 1093, 00819 1093, 1094, 1055, 1094, 1094, 1094, 1094, 1055, 1055, 1055, 00820 1055, 1055, 1055, 1095, 1055, 1095, 1055, 1055, 1055, 1055, 00821 1055, 1055, 1055, 1096, 1055, 1055, 1055, 1097, 1055, 1055, 00822 1055, 1055, 1055, 1055, 1098, 1055, 1055, 1055, 1055, 1055, 00823 1055, 1055, 1098, 1055, 1099, 1055, 1055, 1055, 1055, 1055, 00824 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1100, 1055, 1055, 00825 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 00826 1101, 1055, 1055, 1055, 1055, 1055, 1055, 1102, 1055, 1055, 00827 00828 1055, 1103, 1055, 1073, 1055, 1055, 1055, 1104, 1055, 1074, 00829 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1055, 1055, 1075, 00830 1075, 1075, 1075, 1076, 1076, 1055, 1105, 1055, 1055, 1078, 00831 1055, 1055, 1078, 1079, 1079, 1079, 1079, 1055, 1081, 1055, 00832 1081, 1081, 1081, 1055, 1055, 1082, 1083, 1055, 1083, 1083, 00833 1083, 1055, 1055, 1055, 1055, 1055, 1084, 1055, 1055, 1055, 00834 1055, 1055, 1055, 1055, 1055, 1085, 1055, 1055, 1055, 1055, 00835 1055, 1086, 1055, 1055, 1055, 1087, 1055, 1088, 1055, 1055, 00836 1055, 1088, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 00837 1055, 1055, 1089, 1055, 1089, 1089, 1055, 1055, 1055, 1055, 00838 00839 1090, 1091, 1092, 1092, 1092, 1090, 1055, 1093, 1055, 1055, 00840 1093, 1093, 1094, 1094, 1094, 1094, 1095, 1055, 1055, 1095, 00841 1096, 1055, 1097, 1055, 1055, 1055, 1099, 1055, 1055, 1106, 00842 1107, 1055, 1055, 1055, 1102, 1055, 1108, 1104, 1055, 1074, 00843 1074, 1074, 1074, 1055, 1074, 1074, 1074, 1074, 1074, 1075, 00844 1075, 1075, 1055, 1075, 1075, 1076, 1055, 1055, 1055, 1055, 00845 1055, 1078, 1079, 1081, 1055, 1083, 1055, 1055, 1055, 1088, 00846 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 00847 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1089, 1055, 00848 1055, 1090, 1092, 1055, 1093, 1094, 1095, 1109, 1055, 1055, 00849 00850 1055, 1108, 1055, 1055, 1055, 1055, 1055, 1074, 1074, 1055, 00851 1074, 1074, 1074, 1074, 1074, 1074, 1075, 1075, 1075, 1075, 00852 1055, 1055, 1055, 1055, 1078, 1055, 1055, 1055, 1055, 1055, 00853 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 00854 1055, 1055, 1055, 1055, 1055, 1055, 1095, 1110, 1055, 1055, 00855 1055, 1055, 1055, 1055, 1055, 1074, 1055, 1055, 1055, 1074, 00856 1055, 1074, 1074, 1074, 1074, 1074, 1055, 1055, 1075, 1075, 00857 1075, 1055, 1055, 1055, 1078, 1055, 1055, 1055, 1055, 1055, 00858 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 00859 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 00860 00861 1095, 1055, 1055, 1055, 1055, 1055, 1074, 1055, 1055, 1055, 00862 1055, 1055, 1074, 1074, 1074, 1055, 1055, 1055, 1078, 1055, 00863 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 00864 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 00865 1055, 1055, 1055, 1055, 1095, 1055, 1055, 1055, 1055, 1055, 00866 1055, 1055, 1111, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 00867 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 00868 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1095, 00869 1055, 1055, 1055, 1112, 1055, 1055, 1055, 1055, 1055, 1055, 00870 1055, 1055, 1055, 1113, 1055, 1055, 1055, 1055, 1055, 1055, 00871 00872 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1112, 1055, 00873 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 00874 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 00875 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 00876 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 00877 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 00878 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 00879 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 00880 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 00881 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 00882 00883 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 00884 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 00885 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 00886 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 00887 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 00888 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 00889 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 00890 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 00891 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 00892 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 00893 00894 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 00895 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 00896 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 00897 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 00898 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 00899 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 00900 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 00901 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 00902 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 00903 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 00904 00905 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 00906 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 00907 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 00908 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 00909 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 00910 1055, 1055, 1055, 1055, 0, 1055, 1055, 1055, 1055, 1055, 00911 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 00912 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 00913 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 00914 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 00915 00916 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 00917 1055, 1055, 1055 00918 } ; 00919 00920 static yyconst flex_int16_t yy_nxt[4505] = 00921 { 0, 00922 1055, 67, 1055, 68, 69, 67, 1055, 68, 69, 67, 00923 340, 68, 69, 331, 332, 106, 70, 107, 108, 106, 00924 70, 107, 108, 71, 70, 300, 340, 71, 300, 301, 00925 109, 71, 301, 127, 109, 68, 69, 110, 128, 300, 00926 312, 110, 313, 301, 170, 314, 171, 172, 129, 304, 00927 315, 316, 318, 72, 305, 130, 319, 72, 659, 173, 00928 131, 72, 74, 75, 76, 77, 174, 111, 78, 352, 00929 353, 111, 306, 306, 307, 318, 321, 79, 322, 319, 00930 373, 374, 308, 329, 80, 132, 81, 81, 300, 309, 00931 309, 340, 301, 328, 328, 328, 175, 309, 309, 335, 00932 00933 344, 329, 358, 336, 354, 355, 370, 340, 345, 318, 00934 371, 359, 356, 319, 82, 83, 84, 83, 85, 86, 00935 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 00936 83, 87, 83, 83, 83, 83, 83, 83, 88, 83, 00937 89, 89, 83, 83, 83, 89, 89, 89, 90, 91, 00938 89, 89, 89, 92, 89, 89, 89, 89, 89, 89, 00939 89, 89, 93, 89, 89, 89, 83, 83, 94, 95, 00940 96, 95, 97, 98, 95, 95, 95, 95, 95, 95, 00941 95, 95, 95, 95, 95, 99, 95, 95, 95, 95, 00942 95, 95, 100, 95, 101, 101, 95, 95, 95, 101, 00943 00944 101, 101, 101, 102, 101, 101, 101, 103, 101, 101, 00945 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 00946 95, 95, 104, 112, 113, 112, 114, 115, 112, 116, 00947 112, 112, 117, 112, 112, 112, 112, 112, 112, 118, 00948 112, 112, 112, 112, 112, 112, 119, 112, 120, 120, 00949 112, 121, 112, 120, 120, 120, 120, 122, 120, 120, 00950 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 00951 120, 120, 120, 120, 123, 124, 125, 127, 340, 68, 00952 69, 134, 128, 68, 135, 134, 66, 68, 135, 407, 00953 66, 386, 129, 340, 340, 340, 136, 340, 348, 130, 00954 00955 136, 341, 66, 137, 131, 342, 66, 137, 348, 340, 00956 343, 340, 364, 340, 367, 376, 491, 349, 351, 368, 00957 377, 350, 318, 380, 300, 365, 319, 381, 395, 132, 00958 398, 399, 400, 138, 301, 418, 419, 138, 66, 67, 00959 66, 68, 69, 66, 66, 66, 66, 66, 66, 66, 00960 66, 66, 66, 66, 70, 66, 66, 66, 66, 66, 00961 66, 71, 66, 139, 139, 66, 66, 66, 139, 139, 00962 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 00963 139, 139, 139, 139, 139, 139, 139, 139, 139, 66, 00964 66, 72, 141, 402, 142, 143, 141, 402, 142, 143, 00965 00966 177, 178, 179, 180, 491, 404, 181, 144, 403, 405, 00967 402, 144, 403, 402, 145, 182, 410, 414, 145, 146, 00968 411, 415, 183, 146, 340, 403, 300, 300, 403, 424, 00969 301, 301, 406, 425, 300, 300, 428, 429, 301, 301, 00970 340, 300, 432, 300, 147, 301, 433, 301, 147, 148, 00971 148, 752, 184, 491, 148, 148, 148, 148, 148, 148, 00972 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 00973 148, 148, 148, 148, 148, 66, 67, 149, 68, 69, 00974 66, 66, 66, 66, 66, 150, 151, 66, 152, 66, 00975 153, 70, 66, 66, 66, 66, 66, 66, 71, 66, 00976 00977 154, 154, 66, 66, 66, 154, 154, 154, 154, 154, 00978 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 00979 154, 154, 154, 154, 154, 154, 66, 66, 72, 155, 00980 156, 157, 158, 159, 155, 160, 161, 155, 162, 155, 00981 155, 155, 155, 155, 155, 163, 155, 155, 155, 155, 00982 155, 155, 164, 165, 166, 166, 155, 167, 155, 166, 00983 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 00984 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 00985 155, 155, 168, 67, 307, 68, 69, 67, 441, 68, 00986 69, 67, 437, 68, 69, 442, 450, 67, 70, 68, 00987 00988 69, 310, 70, 451, 310, 71, 70, 459, 491, 71, 00989 354, 355, 70, 71, 207, 460, 208, 209, 223, 71, 00990 208, 224, 344, 215, 444, 216, 217, 444, 340, 210, 00991 345, 745, 444, 225, 218, 72, 211, 212, 219, 72, 00992 226, 212, 491, 72, 340, 220, 461, 461, 461, 72, 00993 186, 340, 187, 188, 329, 445, 207, 304, 208, 209, 00994 344, 189, 305, 446, 367, 190, 213, 340, 345, 368, 00995 227, 210, 191, 192, 491, 221, 364, 192, 211, 212, 00996 306, 306, 215, 212, 216, 217, 328, 328, 328, 365, 00997 376, 354, 355, 218, 329, 377, 364, 219, 223, 356, 00998 00999 208, 224, 193, 186, 220, 187, 188, 453, 213, 365, 01000 453, 568, 402, 225, 189, 453, 307, 744, 190, 358, 01001 226, 307, 551, 552, 308, 191, 192, 403, 359, 308, 01002 192, 309, 309, 333, 221, 340, 309, 309, 454, 309, 01003 309, 328, 328, 328, 309, 309, 455, 569, 743, 329, 01004 227, 340, 585, 585, 585, 193, 194, 195, 194, 196, 01005 197, 194, 194, 194, 194, 194, 194, 194, 198, 194, 01006 194, 194, 199, 194, 194, 194, 194, 194, 194, 200, 01007 194, 201, 201, 194, 194, 194, 201, 201, 201, 201, 01008 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 01009 01010 201, 201, 201, 201, 201, 201, 201, 194, 194, 202, 01011 186, 577, 187, 188, 328, 328, 328, 491, 504, 505, 01012 506, 203, 329, 608, 250, 204, 68, 251, 258, 252, 01013 68, 259, 191, 205, 568, 507, 260, 205, 491, 253, 01014 522, 402, 250, 261, 68, 251, 254, 252, 523, 529, 01015 262, 255, 524, 524, 524, 263, 403, 253, 462, 609, 01016 329, 491, 193, 186, 254, 187, 188, 507, 529, 255, 01017 617, 328, 328, 328, 203, 536, 256, 736, 204, 329, 01018 264, 549, 735, 537, 734, 191, 205, 572, 557, 550, 01019 205, 557, 529, 499, 256, 573, 557, 567, 551, 552, 01020 01021 567, 603, 611, 525, 733, 567, 574, 574, 574, 732, 01022 612, 620, 620, 620, 329, 193, 228, 229, 228, 230, 01023 231, 228, 228, 228, 228, 228, 228, 228, 228, 228, 01024 228, 228, 232, 228, 228, 228, 228, 228, 228, 233, 01025 228, 234, 234, 228, 235, 228, 234, 234, 234, 236, 01026 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 01027 234, 234, 234, 234, 234, 234, 234, 228, 228, 237, 01028 238, 239, 238, 240, 241, 238, 238, 238, 238, 238, 01029 238, 238, 238, 238, 238, 238, 242, 238, 238, 238, 01030 238, 238, 238, 243, 238, 244, 244, 238, 245, 238, 01031 01032 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 01033 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 01034 244, 238, 238, 246, 247, 553, 554, 555, 453, 608, 01035 731, 453, 611, 328, 328, 328, 453, 538, 248, 248, 01036 612, 329, 507, 248, 248, 248, 248, 248, 248, 248, 01037 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 01038 248, 248, 248, 248, 258, 609, 68, 259, 267, 577, 01039 85, 268, 260, 651, 507, 575, 730, 593, 594, 261, 01040 651, 652, 595, 269, 596, 597, 262, 577, 652, 598, 01041 270, 263, 723, 599, 600, 271, 704, 722, 555, 555, 01042 01043 555, 618, 618, 618, 705, 328, 328, 328, 721, 329, 01044 627, 628, 629, 329, 720, 507, 264, 265, 265, 719, 01045 272, 718, 265, 265, 265, 265, 265, 265, 265, 265, 01046 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 01047 265, 265, 265, 267, 619, 85, 268, 507, 585, 585, 01048 585, 286, 538, 68, 287, 704, 288, 286, 269, 68, 01049 287, 320, 288, 705, 320, 270, 289, 620, 620, 620, 01050 271, 717, 289, 290, 555, 555, 555, 538, 291, 290, 01051 604, 605, 606, 577, 291, 606, 606, 606, 715, 653, 01052 653, 507, 577, 654, 654, 272, 274, 507, 275, 276, 01053 01054 577, 277, 507, 292, 278, 279, 280, 654, 654, 292, 01055 714, 281, 713, 606, 606, 606, 712, 703, 282, 283, 01056 646, 647, 648, 507, 648, 648, 648, 702, 701, 507, 01057 507, 627, 628, 629, 507, 700, 699, 507, 648, 648, 01058 648, 507, 656, 656, 656, 629, 628, 629, 284, 274, 01059 329, 275, 276, 557, 277, 507, 557, 278, 279, 280, 01060 567, 557, 507, 567, 281, 698, 491, 372, 567, 507, 01061 372, 282, 283, 507, 685, 685, 685, 710, 710, 710, 01062 417, 421, 329, 417, 421, 329, 538, 507, 727, 727, 01063 727, 740, 740, 740, 423, 427, 329, 423, 427, 329, 01064 01065 697, 284, 293, 294, 293, 68, 295, 293, 293, 293, 01066 293, 293, 293, 293, 293, 293, 293, 293, 296, 293, 01067 293, 293, 293, 293, 293, 297, 293, 298, 298, 293, 01068 293, 293, 298, 298, 298, 298, 298, 298, 298, 298, 01069 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 01070 298, 298, 298, 293, 293, 299, 383, 538, 538, 696, 01071 383, 681, 682, 683, 384, 385, 386, 709, 695, 387, 01072 709, 388, 389, 694, 693, 692, 390, 691, 507, 690, 01073 391, 392, 456, 742, 742, 742, 456, 456, 456, 689, 01074 688, 456, 687, 436, 749, 749, 749, 456, 456, 456, 01075 01076 463, 649, 329, 680, 463, 463, 463, 679, 678, 463, 01077 507, 463, 756, 756, 756, 463, 463, 463, 464, 340, 01078 329, 677, 464, 464, 464, 676, 675, 464, 674, 464, 01079 491, 673, 659, 464, 464, 465, 348, 672, 466, 751, 01080 751, 751, 466, 466, 466, 671, 670, 466, 669, 466, 01081 758, 758, 758, 466, 466, 466, 470, 668, 667, 666, 01082 470, 470, 470, 665, 664, 470, 663, 436, 683, 683, 01083 683, 470, 470, 470, 471, 472, 662, 473, 661, 474, 01084 660, 475, 476, 655, 616, 507, 477, 614, 659, 650, 01085 478, 479, 489, 761, 761, 761, 489, 489, 489, 659, 01086 01087 649, 489, 499, 489, 683, 683, 683, 489, 489, 489, 01088 402, 706, 707, 708, 492, 499, 645, 507, 492, 492, 01089 492, 507, 644, 492, 643, 493, 642, 641, 507, 492, 01090 492, 492, 495, 640, 639, 638, 495, 495, 495, 637, 01091 636, 495, 659, 495, 759, 759, 759, 495, 495, 495, 01092 496, 635, 329, 507, 496, 496, 496, 634, 633, 496, 01093 507, 496, 632, 631, 630, 496, 496, 496, 558, 558, 01094 559, 558, 558, 558, 558, 558, 558, 558, 558, 558, 01095 558, 558, 558, 558, 558, 310, 310, 558, 558, 558, 01096 558, 558, 558, 310, 310, 558, 558, 558, 310, 310, 01097 01098 310, 310, 310, 310, 310, 310, 560, 310, 310, 310, 01099 310, 310, 310, 310, 310, 310, 310, 310, 310, 558, 01100 558, 558, 610, 610, 610, 610, 610, 610, 610, 610, 01101 610, 610, 610, 610, 610, 610, 610, 610, 610, 310, 01102 310, 610, 610, 610, 610, 610, 610, 310, 310, 610, 01103 610, 610, 310, 310, 310, 310, 310, 310, 310, 310, 01104 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, 01105 310, 310, 310, 610, 610, 610, 657, 657, 657, 626, 01106 658, 686, 686, 686, 329, 658, 708, 708, 708, 329, 01107 708, 708, 708, 711, 711, 711, 625, 658, 724, 725, 01108 01109 726, 329, 624, 507, 726, 726, 726, 507, 623, 726, 01110 726, 726, 728, 728, 728, 507, 658, 737, 738, 739, 01111 329, 507, 622, 621, 577, 659, 507, 729, 729, 729, 01112 659, 658, 572, 517, 507, 507, 616, 615, 614, 507, 01113 613, 509, 659, 739, 739, 739, 607, 507, 739, 739, 01114 739, 499, 601, 507, 592, 741, 741, 741, 507, 658, 01115 507, 659, 591, 329, 590, 507, 507, 746, 747, 748, 01116 748, 748, 748, 748, 748, 748, 659, 750, 750, 750, 01117 589, 658, 588, 587, 507, 329, 586, 507, 584, 538, 01118 507, 583, 507, 753, 754, 755, 582, 507, 755, 755, 01119 01120 755, 755, 755, 755, 659, 757, 757, 757, 581, 658, 01121 507, 580, 579, 329, 578, 507, 507, 577, 507, 507, 01122 576, 571, 507, 753, 754, 755, 659, 755, 755, 755, 01123 570, 755, 755, 755, 566, 760, 760, 760, 565, 658, 01124 507, 564, 507, 329, 507, 563, 562, 507, 507, 561, 01125 507, 762, 762, 762, 659, 556, 763, 763, 763, 329, 01126 658, 764, 764, 764, 329, 765, 765, 765, 767, 767, 01127 767, 503, 507, 329, 499, 499, 507, 766, 766, 766, 01128 507, 658, 547, 537, 659, 329, 768, 768, 768, 769, 01129 769, 769, 546, 658, 329, 545, 544, 329, 770, 770, 01130 01131 770, 771, 771, 771, 543, 659, 773, 773, 773, 329, 01132 659, 772, 772, 772, 542, 658, 541, 659, 540, 329, 01133 774, 774, 774, 775, 775, 775, 659, 658, 329, 539, 01134 538, 329, 776, 776, 776, 777, 777, 777, 659, 535, 01135 778, 778, 778, 329, 658, 534, 533, 659, 329, 779, 01136 779, 779, 782, 782, 782, 659, 780, 780, 780, 532, 01137 659, 781, 781, 781, 329, 658, 783, 783, 783, 329, 01138 531, 530, 659, 528, 329, 784, 784, 784, 527, 658, 01139 469, 659, 526, 329, 785, 785, 785, 348, 521, 659, 01140 521, 786, 786, 786, 788, 788, 788, 454, 659, 329, 01141 01142 520, 659, 519, 787, 787, 787, 518, 658, 517, 516, 01143 659, 329, 789, 789, 789, 790, 790, 790, 515, 658, 01144 329, 514, 513, 329, 659, 791, 791, 791, 792, 792, 01145 792, 512, 511, 659, 510, 509, 329, 793, 793, 793, 01146 508, 658, 439, 659, 503, 329, 794, 794, 794, 795, 01147 795, 795, 659, 501, 796, 796, 796, 329, 658, 797, 01148 797, 797, 329, 499, 659, 798, 798, 798, 799, 799, 01149 799, 428, 658, 329, 659, 497, 329, 800, 800, 800, 01150 801, 801, 801, 802, 802, 802, 659, 658, 329, 418, 01151 494, 329, 803, 803, 803, 659, 804, 804, 804, 806, 01152 01153 806, 806, 490, 659, 329, 805, 805, 805, 659, 658, 01154 807, 807, 807, 329, 809, 809, 809, 659, 329, 808, 01155 808, 808, 488, 658, 487, 486, 659, 329, 810, 810, 01156 810, 485, 659, 812, 812, 812, 329, 484, 811, 811, 01157 811, 659, 658, 813, 813, 813, 329, 483, 659, 482, 01158 481, 329, 480, 379, 659, 373, 814, 814, 814, 469, 01159 658, 369, 468, 659, 329, 815, 815, 815, 659, 816, 01160 816, 816, 817, 817, 817, 467, 658, 329, 362, 361, 01161 329, 360, 659, 818, 818, 818, 361, 659, 819, 819, 01162 819, 820, 820, 820, 352, 658, 329, 348, 348, 329, 01163 01164 821, 821, 821, 348, 331, 659, 457, 822, 822, 822, 01165 824, 824, 824, 452, 659, 329, 823, 823, 823, 449, 01166 658, 659, 448, 447, 329, 825, 825, 825, 827, 827, 01167 827, 443, 659, 329, 826, 826, 826, 440, 658, 439, 01168 659, 302, 329, 828, 828, 828, 829, 829, 829, 659, 01169 658, 329, 302, 302, 329, 830, 830, 830, 431, 659, 01170 831, 831, 831, 302, 302, 659, 302, 422, 329, 302, 01171 832, 832, 832, 420, 658, 302, 416, 659, 329, 833, 01172 833, 833, 412, 659, 834, 834, 834, 409, 397, 835, 01173 835, 835, 329, 658, 396, 659, 394, 329, 836, 836, 01174 01175 836, 837, 837, 837, 659, 382, 838, 838, 838, 329, 01176 658, 839, 839, 839, 329, 840, 840, 840, 379, 659, 01177 842, 842, 842, 329, 302, 841, 841, 841, 659, 658, 01178 845, 845, 845, 329, 843, 843, 843, 302, 659, 848, 01179 848, 848, 329, 302, 844, 844, 844, 659, 658, 846, 01180 846, 846, 329, 369, 363, 659, 362, 329, 361, 360, 01181 659, 348, 847, 847, 847, 348, 658, 348, 348, 659, 01182 329, 851, 851, 851, 659, 849, 849, 849, 337, 659, 01183 854, 854, 854, 329, 857, 857, 857, 302, 659, 327, 01184 850, 850, 850, 659, 658, 852, 852, 852, 329, 325, 01185 01186 853, 853, 853, 329, 658, 855, 855, 855, 329, 323, 01187 302, 659, 317, 329, 856, 856, 856, 311, 658, 302, 01188 659, 302, 329, 858, 858, 858, 859, 859, 859, 659, 01189 658, 329, 302, 659, 329, 860, 860, 860, 1055, 659, 01190 861, 861, 861, 862, 862, 862, 1055, 658, 329, 659, 01191 1055, 329, 863, 863, 863, 1055, 864, 864, 864, 866, 01192 866, 866, 1055, 659, 329, 865, 865, 865, 1055, 658, 01193 867, 867, 867, 329, 1055, 659, 1055, 1055, 329, 868, 01194 868, 868, 1055, 658, 659, 1055, 1055, 329, 869, 869, 01195 869, 1055, 659, 1055, 870, 870, 870, 872, 872, 872, 01196 01197 1055, 659, 329, 871, 871, 871, 1055, 658, 659, 1055, 01198 1055, 329, 1055, 1055, 659, 873, 873, 873, 874, 874, 01199 874, 1055, 658, 329, 1055, 1055, 329, 1055, 659, 875, 01200 875, 875, 876, 876, 876, 1055, 1055, 659, 1055, 1055, 01201 329, 877, 877, 877, 1055, 658, 659, 1055, 1055, 329, 01202 1055, 1055, 659, 878, 878, 878, 879, 879, 879, 1055, 01203 1055, 880, 880, 880, 329, 658, 1055, 659, 1055, 329, 01204 881, 881, 881, 882, 882, 882, 1055, 1055, 659, 1055, 01205 1055, 329, 1055, 883, 883, 883, 1055, 658, 1055, 1055, 01206 659, 329, 884, 884, 884, 885, 885, 885, 887, 887, 01207 01208 887, 1055, 659, 329, 886, 886, 886, 1055, 658, 1055, 01209 659, 1055, 329, 888, 888, 888, 889, 889, 889, 659, 01210 658, 329, 1055, 1055, 329, 890, 890, 890, 891, 891, 01211 891, 1055, 659, 893, 893, 893, 329, 1055, 892, 892, 01212 892, 659, 658, 894, 894, 894, 329, 659, 895, 895, 01213 895, 329, 658, 659, 1055, 1055, 329, 896, 896, 896, 01214 897, 897, 897, 1055, 1055, 659, 1055, 1055, 329, 898, 01215 898, 898, 1055, 658, 659, 1055, 1055, 329, 899, 899, 01216 899, 1055, 659, 900, 900, 900, 1055, 659, 901, 901, 01217 901, 329, 658, 902, 902, 902, 329, 659, 1055, 903, 01218 01219 903, 903, 905, 905, 905, 1055, 659, 329, 904, 904, 01220 904, 1055, 658, 906, 906, 906, 329, 1055, 659, 1055, 01221 1055, 329, 907, 907, 907, 1055, 658, 659, 1055, 1055, 01222 329, 908, 908, 908, 911, 911, 911, 659, 909, 909, 01223 909, 1055, 659, 914, 914, 914, 329, 1055, 910, 910, 01224 910, 659, 658, 912, 912, 912, 329, 659, 913, 913, 01225 913, 329, 658, 917, 917, 917, 329, 915, 915, 915, 01226 1055, 659, 920, 920, 920, 329, 1055, 916, 916, 916, 01227 659, 658, 1055, 659, 1055, 329, 918, 918, 918, 923, 01228 923, 923, 659, 1055, 329, 1055, 1055, 659, 919, 919, 01229 01230 919, 1055, 658, 921, 921, 921, 329, 659, 926, 926, 01231 926, 329, 659, 1055, 922, 922, 922, 1055, 658, 1055, 01232 1055, 659, 329, 924, 924, 924, 659, 1055, 925, 925, 01233 925, 329, 658, 927, 927, 927, 329, 1055, 659, 1055, 01234 1055, 329, 928, 928, 928, 1055, 658, 659, 1055, 1055, 01235 329, 929, 929, 929, 930, 930, 930, 659, 932, 932, 01236 932, 1055, 329, 659, 931, 931, 931, 1055, 658, 935, 01237 935, 935, 329, 933, 933, 933, 1055, 659, 934, 934, 01238 934, 329, 658, 938, 938, 938, 329, 936, 936, 936, 01239 1055, 659, 941, 941, 941, 329, 1055, 937, 937, 937, 01240 01241 659, 658, 939, 939, 939, 329, 1055, 659, 1055, 1055, 01242 329, 1055, 1055, 659, 1055, 940, 940, 940, 659, 658, 01243 942, 942, 942, 329, 944, 944, 944, 659, 329, 943, 01244 943, 943, 659, 658, 945, 945, 945, 329, 947, 947, 01245 947, 659, 329, 946, 946, 946, 659, 658, 948, 948, 01246 948, 329, 1055, 949, 949, 949, 329, 658, 950, 950, 01247 950, 329, 1055, 1055, 659, 1055, 951, 951, 951, 953, 01248 953, 953, 1055, 659, 329, 952, 952, 952, 659, 658, 01249 954, 954, 954, 329, 956, 956, 956, 659, 329, 955, 01250 955, 955, 659, 658, 959, 959, 959, 329, 957, 957, 01251 01252 957, 1055, 659, 960, 960, 960, 329, 659, 958, 958, 01253 958, 329, 658, 961, 961, 961, 329, 658, 659, 1055, 01254 1055, 329, 1055, 1055, 659, 962, 962, 962, 963, 963, 01255 963, 1055, 658, 659, 1055, 1055, 329, 1055, 659, 964, 01256 964, 964, 1055, 659, 965, 965, 965, 1055, 658, 966, 01257 966, 966, 329, 968, 968, 968, 1055, 659, 1055, 967, 01258 967, 967, 659, 658, 969, 969, 969, 329, 658, 970, 01259 970, 970, 329, 1055, 659, 1055, 1055, 659, 971, 971, 01260 971, 1055, 658, 972, 972, 972, 329, 1055, 659, 974, 01261 974, 974, 1055, 659, 1055, 973, 973, 973, 659, 658, 01262 01263 1055, 1055, 659, 329, 975, 975, 975, 1055, 659, 976, 01264 976, 976, 1055, 659, 977, 977, 977, 1055, 659, 978, 01265 978, 978, 979, 979, 979, 1055, 1055, 659, 980, 980, 01266 980, 1055, 659, 981, 981, 981, 1055, 1055, 659, 982, 01267 982, 982, 1055, 1055, 659, 983, 983, 983, 984, 984, 01268 984, 1055, 1055, 659, 985, 985, 985, 1055, 659, 986, 01269 986, 986, 1055, 659, 987, 987, 987, 1055, 659, 1055, 01270 1055, 659, 988, 988, 988, 1055, 1055, 659, 989, 989, 01271 989, 1055, 659, 990, 990, 990, 1055, 1055, 659, 991, 01272 991, 991, 1055, 1055, 659, 1055, 1055, 659, 992, 992, 01273 01274 992, 1055, 1055, 659, 993, 993, 993, 1055, 659, 994, 01275 994, 994, 1055, 659, 995, 995, 995, 996, 996, 996, 01276 1055, 659, 997, 997, 997, 1055, 1055, 659, 998, 998, 01277 998, 1055, 659, 999, 999, 999, 1055, 1055, 659, 1000, 01278 1000, 1000, 1001, 1001, 1001, 1055, 1055, 659, 1002, 1002, 01279 1002, 1055, 1055, 659, 1003, 1003, 1003, 1055, 659, 1004, 01280 1004, 1004, 1055, 659, 1055, 1055, 659, 1005, 1005, 1005, 01281 1055, 659, 1006, 1006, 1006, 1055, 1055, 659, 1007, 1007, 01282 1007, 1055, 659, 1008, 1008, 1008, 1055, 1055, 659, 1055, 01283 1055, 659, 1009, 1009, 1009, 1055, 1055, 659, 1010, 1010, 01284 01285 1010, 1055, 1055, 659, 1011, 1011, 1011, 1055, 659, 1012, 01286 1012, 1012, 1013, 1013, 1013, 1055, 659, 1014, 1014, 1014, 01287 1055, 659, 1015, 1015, 1015, 1055, 1055, 659, 1016, 1016, 01288 1016, 1055, 659, 1017, 1017, 1017, 1018, 1018, 1018, 1055, 01289 1055, 659, 1019, 1019, 1019, 1055, 1055, 659, 1020, 1020, 01290 1020, 1055, 1055, 659, 1021, 1021, 1021, 1055, 659, 1055, 01291 1055, 659, 1022, 1022, 1022, 1055, 659, 1023, 1023, 1023, 01292 1055, 659, 1024, 1024, 1024, 1055, 1055, 659, 1025, 1025, 01293 1025, 1055, 659, 1055, 1055, 659, 1026, 1026, 1026, 1055, 01294 1055, 659, 1027, 1027, 1027, 1055, 1055, 659, 1028, 1028, 01295 01296 1028, 1055, 1055, 659, 1029, 1029, 1029, 1030, 1030, 1030, 01297 1055, 659, 1031, 1031, 1031, 1055, 659, 1032, 1032, 1032, 01298 1055, 659, 1033, 1033, 1033, 1055, 1055, 659, 1034, 1034, 01299 1034, 1035, 1035, 1035, 1055, 659, 1036, 1036, 1036, 1055, 01300 1055, 659, 1037, 1037, 1037, 1055, 1055, 659, 1038, 1038, 01301 1038, 1055, 1055, 659, 1055, 1055, 659, 1039, 1039, 1039, 01302 1055, 659, 1040, 1040, 1040, 1055, 659, 1041, 1041, 1041, 01303 1055, 659, 1042, 1042, 1042, 1055, 1055, 659, 1055, 1055, 01304 659, 1043, 1043, 1043, 1055, 659, 1044, 1044, 1044, 1055, 01305 1055, 659, 1045, 1045, 1045, 1055, 1055, 659, 1046, 1046, 01306 01307 1046, 1047, 1047, 1047, 1055, 1055, 659, 1048, 1048, 1048, 01308 1055, 659, 1049, 1049, 1049, 1055, 659, 1050, 1050, 1050, 01309 1055, 659, 1051, 1051, 1051, 1052, 1052, 1052, 1055, 1055, 01310 659, 1053, 1053, 1053, 1055, 659, 1054, 1054, 1054, 1055, 01311 1055, 659, 978, 978, 978, 1055, 1055, 659, 1055, 1055, 01312 659, 1055, 1055, 1055, 1055, 1055, 659, 1055, 1055, 1055, 01313 1055, 659, 1055, 1055, 1055, 1055, 659, 1055, 1055, 1055, 01314 1055, 659, 1055, 1055, 659, 1055, 1055, 1055, 1055, 1055, 01315 659, 1055, 1055, 1055, 1055, 659, 1055, 1055, 1055, 1055, 01316 1055, 659, 66, 66, 66, 66, 66, 66, 66, 66, 01317 01318 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 01319 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 01320 73, 73, 73, 73, 73, 73, 73, 73, 105, 105, 01321 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 01322 105, 105, 105, 105, 105, 105, 126, 126, 126, 126, 01323 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 01324 126, 126, 126, 126, 133, 133, 133, 133, 133, 133, 01325 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 01326 133, 133, 140, 140, 140, 140, 140, 140, 140, 140, 01327 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 01328 01329 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 01330 169, 169, 169, 169, 169, 169, 169, 169, 176, 176, 01331 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 01332 176, 176, 176, 176, 176, 176, 185, 185, 185, 185, 01333 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 01334 185, 185, 185, 185, 206, 206, 206, 206, 206, 206, 01335 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 01336 206, 206, 214, 214, 214, 214, 214, 214, 214, 214, 01337 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 01338 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 01339 01340 222, 222, 222, 222, 222, 222, 222, 222, 249, 249, 01341 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 01342 249, 249, 249, 249, 249, 249, 257, 257, 257, 257, 01343 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 01344 257, 257, 257, 257, 266, 266, 266, 266, 266, 266, 01345 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 01346 266, 266, 273, 273, 273, 273, 273, 273, 273, 273, 01347 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 01348 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 01349 285, 285, 285, 285, 285, 285, 285, 285, 303, 303, 01350 01351 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 01352 303, 303, 303, 303, 303, 303, 324, 324, 324, 1055, 01353 324, 324, 324, 324, 324, 324, 324, 324, 1055, 324, 01354 324, 324, 324, 324, 326, 326, 326, 1055, 326, 326, 01355 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 01356 326, 326, 330, 330, 330, 1055, 1055, 1055, 330, 1055, 01357 1055, 1055, 1055, 330, 1055, 1055, 330, 334, 334, 334, 01358 1055, 1055, 334, 1055, 334, 334, 334, 334, 334, 334, 01359 334, 334, 334, 334, 338, 338, 338, 1055, 338, 338, 01360 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 01361 01362 338, 338, 339, 339, 339, 1055, 339, 339, 339, 339, 01363 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 01364 346, 1055, 1055, 1055, 1055, 1055, 346, 1055, 1055, 1055, 01365 1055, 346, 1055, 1055, 346, 347, 347, 347, 347, 347, 01366 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 01367 347, 347, 357, 357, 1055, 1055, 1055, 1055, 357, 1055, 01368 1055, 1055, 1055, 357, 1055, 1055, 357, 366, 1055, 1055, 01369 1055, 1055, 1055, 1055, 1055, 1055, 366, 1055, 366, 1055, 01370 1055, 366, 375, 375, 375, 375, 375, 375, 375, 375, 01371 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 01372 01373 378, 1055, 378, 1055, 378, 378, 378, 378, 378, 1055, 01374 378, 378, 1055, 378, 378, 1055, 378, 393, 393, 393, 01375 393, 393, 393, 393, 393, 393, 1055, 393, 393, 393, 01376 393, 393, 393, 1055, 393, 401, 401, 401, 1055, 401, 01377 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 01378 1055, 401, 402, 402, 402, 1055, 402, 402, 402, 402, 01379 402, 402, 402, 402, 1055, 402, 402, 1055, 402, 403, 01380 1055, 403, 1055, 403, 403, 403, 403, 403, 403, 403, 01381 403, 403, 403, 403, 1055, 403, 408, 1055, 408, 1055, 01382 408, 408, 408, 408, 408, 1055, 408, 408, 408, 408, 01383 01384 408, 408, 408, 408, 413, 1055, 413, 1055, 413, 413, 01385 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 01386 413, 413, 426, 426, 426, 1055, 426, 426, 426, 426, 01387 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, 01388 430, 430, 430, 1055, 430, 430, 430, 1055, 430, 430, 01389 430, 430, 430, 430, 430, 430, 430, 430, 434, 434, 01390 434, 1055, 434, 434, 434, 434, 434, 434, 434, 434, 01391 434, 434, 434, 434, 434, 434, 435, 435, 1055, 435, 01392 1055, 1055, 435, 436, 1055, 436, 436, 1055, 436, 1055, 01393 436, 1055, 436, 438, 438, 438, 1055, 438, 438, 438, 01394 01395 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, 01396 438, 458, 458, 458, 1055, 458, 458, 458, 458, 458, 01397 458, 458, 458, 458, 458, 458, 458, 458, 458, 498, 01398 498, 498, 1055, 498, 498, 498, 498, 498, 498, 498, 01399 498, 498, 498, 498, 498, 498, 500, 500, 500, 1055, 01400 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 01401 500, 500, 500, 500, 502, 502, 502, 1055, 502, 502, 01402 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 01403 502, 502, 548, 548, 548, 1055, 548, 548, 548, 548, 01404 548, 548, 548, 548, 548, 548, 548, 548, 548, 602, 01405 01406 602, 602, 1055, 602, 602, 602, 602, 602, 602, 602, 01407 602, 602, 602, 602, 602, 602, 684, 1055, 1055, 1055, 01408 684, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 684, 1055, 01409 684, 716, 716, 716, 716, 716, 716, 716, 716, 716, 01410 716, 716, 716, 716, 1055, 716, 716, 1055, 716, 65, 01411 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 01412 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 01413 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 01414 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 01415 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 01416 01417 1055, 1055, 1055, 1055 01418 } ; 01419 01420 static yyconst flex_int16_t yy_chk[4505] = 01421 { 0, 01422 0, 1, 0, 1, 1, 2, 0, 2, 2, 3, 01423 133, 3, 3, 121, 121, 9, 1, 9, 9, 10, 01424 2, 10, 10, 1, 3, 70, 133, 2, 79, 70, 01425 9, 3, 79, 13, 10, 13, 13, 9, 13, 87, 01426 91, 10, 91, 87, 27, 92, 27, 27, 13, 75, 01427 92, 92, 99, 1, 75, 13, 99, 2, 978, 27, 01428 13, 3, 4, 4, 4, 4, 27, 9, 4, 146, 01429 146, 10, 75, 75, 81, 109, 102, 4, 102, 109, 01430 167, 167, 81, 960, 4, 13, 4, 4, 118, 81, 01431 81, 134, 118, 120, 120, 120, 27, 81, 81, 129, 01432 01433 139, 120, 149, 129, 148, 148, 163, 134, 139, 173, 01434 163, 149, 148, 173, 4, 5, 5, 5, 5, 5, 01435 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 01436 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 01437 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 01438 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 01439 5, 5, 5, 5, 5, 5, 5, 5, 5, 7, 01440 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 01441 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 01442 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 01443 01444 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 01445 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 01446 7, 7, 7, 11, 11, 11, 11, 11, 11, 11, 01447 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 01448 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 01449 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 01450 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 01451 11, 11, 11, 11, 11, 11, 11, 14, 135, 14, 01452 14, 15, 14, 15, 15, 16, 15, 16, 16, 212, 01453 16, 212, 14, 137, 135, 136, 15, 138, 145, 14, 01454 01455 16, 136, 15, 15, 14, 136, 16, 16, 144, 137, 01456 137, 136, 154, 138, 157, 178, 752, 144, 145, 157, 01457 178, 144, 182, 190, 199, 154, 182, 190, 199, 14, 01458 204, 205, 205, 15, 204, 235, 235, 16, 17, 17, 01459 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 01460 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 01461 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 01462 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 01463 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 01464 17, 17, 19, 206, 19, 19, 20, 209, 20, 20, 01465 01466 28, 28, 28, 28, 745, 210, 28, 19, 206, 210, 01467 211, 20, 209, 213, 19, 28, 219, 225, 20, 19, 01468 219, 225, 28, 20, 339, 211, 232, 242, 213, 253, 01469 232, 242, 211, 253, 261, 269, 271, 271, 261, 269, 01470 339, 281, 289, 296, 19, 281, 289, 296, 20, 21, 01471 21, 744, 28, 743, 21, 21, 21, 21, 21, 21, 01472 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 01473 21, 21, 21, 21, 21, 23, 23, 23, 23, 23, 01474 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 01475 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 01476 01477 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 01478 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 01479 23, 23, 23, 23, 23, 23, 23, 23, 23, 25, 01480 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 01481 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 01482 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 01483 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 01484 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 01485 25, 25, 25, 29, 307, 29, 29, 30, 312, 30, 01486 30, 31, 307, 31, 31, 312, 321, 32, 29, 32, 01487 01488 32, 1074, 30, 321, 1074, 29, 31, 327, 736, 30, 01489 354, 354, 32, 31, 39, 327, 39, 39, 43, 32, 01490 43, 43, 344, 41, 314, 41, 41, 314, 341, 39, 01491 344, 735, 314, 43, 41, 29, 39, 39, 41, 30, 01492 43, 39, 734, 31, 341, 41, 328, 328, 328, 32, 01493 33, 342, 33, 33, 328, 314, 40, 304, 40, 40, 01494 346, 33, 304, 314, 367, 33, 39, 342, 346, 367, 01495 43, 40, 33, 33, 733, 41, 364, 33, 40, 40, 01496 304, 304, 42, 40, 42, 42, 122, 122, 122, 364, 01497 376, 357, 357, 42, 122, 376, 366, 42, 44, 357, 01498 01499 44, 44, 33, 34, 42, 34, 34, 323, 40, 366, 01500 323, 518, 401, 44, 34, 323, 306, 732, 34, 358, 01501 44, 309, 503, 503, 306, 34, 34, 401, 358, 309, 01502 34, 306, 306, 122, 42, 464, 309, 309, 323, 306, 01503 306, 330, 330, 330, 309, 309, 323, 518, 731, 330, 01504 44, 464, 538, 538, 538, 34, 35, 35, 35, 35, 01505 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 01506 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 01507 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 01508 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 01509 01510 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 01511 37, 730, 37, 37, 333, 333, 333, 400, 439, 439, 01512 439, 37, 333, 559, 51, 37, 51, 51, 53, 51, 01513 53, 53, 37, 37, 568, 439, 53, 37, 400, 51, 01514 460, 492, 52, 53, 52, 52, 51, 52, 460, 473, 01515 53, 51, 461, 461, 461, 53, 492, 52, 333, 559, 01516 461, 400, 37, 38, 52, 38, 38, 439, 473, 52, 01517 568, 462, 462, 462, 38, 480, 51, 723, 38, 462, 01518 53, 501, 722, 480, 721, 38, 38, 523, 509, 501, 01519 38, 509, 473, 550, 52, 523, 509, 517, 551, 551, 01520 01521 517, 550, 562, 462, 720, 517, 524, 524, 524, 719, 01522 562, 577, 577, 577, 524, 38, 45, 45, 45, 45, 01523 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 01524 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 01525 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 01526 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 01527 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 01528 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 01529 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 01530 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 01531 01532 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 01533 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 01534 47, 47, 47, 47, 49, 504, 504, 504, 571, 608, 01535 718, 571, 611, 525, 525, 525, 571, 717, 49, 49, 01536 611, 525, 504, 49, 49, 49, 49, 49, 49, 49, 01537 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 01538 49, 49, 49, 49, 54, 608, 54, 54, 57, 715, 01539 57, 57, 54, 613, 504, 525, 714, 546, 546, 54, 01540 651, 613, 546, 57, 546, 546, 54, 713, 651, 546, 01541 57, 54, 703, 546, 546, 57, 680, 702, 505, 505, 01542 01543 505, 574, 574, 574, 680, 575, 575, 575, 701, 574, 01544 584, 584, 584, 575, 700, 505, 54, 55, 55, 699, 01545 57, 698, 55, 55, 55, 55, 55, 55, 55, 55, 01546 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 01547 55, 55, 55, 58, 575, 58, 58, 505, 585, 585, 01548 585, 61, 697, 61, 61, 704, 61, 62, 58, 62, 01549 62, 1075, 62, 704, 1075, 58, 61, 620, 620, 620, 01550 58, 696, 62, 61, 506, 506, 506, 695, 61, 62, 01551 553, 553, 553, 693, 62, 554, 554, 554, 692, 614, 01552 653, 506, 691, 614, 653, 58, 59, 553, 59, 59, 01553 01554 690, 59, 554, 61, 59, 59, 59, 614, 653, 62, 01555 689, 59, 688, 555, 555, 555, 687, 679, 59, 59, 01556 604, 604, 604, 506, 605, 605, 605, 678, 677, 553, 01557 555, 627, 627, 627, 554, 676, 675, 604, 606, 606, 01558 606, 605, 618, 618, 618, 629, 629, 629, 59, 60, 01559 618, 60, 60, 650, 60, 606, 650, 60, 60, 60, 01560 655, 650, 555, 655, 60, 674, 673, 1086, 655, 604, 01561 1086, 60, 60, 605, 656, 656, 656, 685, 685, 685, 01562 1095, 1096, 656, 1095, 1096, 685, 672, 606, 710, 710, 01563 710, 727, 727, 727, 1097, 1099, 710, 1097, 1099, 727, 01564 01565 671, 60, 63, 63, 63, 63, 63, 63, 63, 63, 01566 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 01567 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 01568 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 01569 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 01570 63, 63, 63, 63, 63, 63, 192, 670, 669, 668, 01571 192, 646, 646, 646, 192, 192, 192, 1112, 667, 192, 01572 1112, 192, 192, 666, 665, 664, 192, 663, 646, 662, 01573 192, 192, 325, 729, 729, 729, 325, 325, 325, 661, 01574 660, 325, 658, 325, 740, 740, 740, 325, 325, 325, 01575 01576 337, 649, 740, 645, 337, 337, 337, 644, 643, 337, 01577 646, 337, 749, 749, 749, 337, 337, 337, 343, 343, 01578 749, 642, 343, 343, 343, 641, 640, 343, 639, 343, 01579 638, 637, 729, 343, 343, 343, 351, 636, 351, 742, 01580 742, 742, 351, 351, 351, 635, 634, 351, 633, 351, 01581 751, 751, 751, 351, 351, 351, 382, 632, 631, 630, 01582 382, 382, 382, 626, 625, 382, 624, 382, 647, 647, 01583 647, 382, 382, 382, 383, 383, 623, 383, 622, 383, 01584 621, 383, 383, 617, 616, 647, 383, 615, 742, 609, 01585 383, 383, 396, 758, 758, 758, 396, 396, 396, 751, 01586 01587 607, 396, 603, 396, 648, 648, 648, 396, 396, 396, 01588 406, 681, 681, 681, 406, 602, 601, 647, 406, 406, 01589 406, 648, 600, 406, 599, 406, 598, 597, 681, 406, 01590 406, 406, 412, 596, 595, 594, 412, 412, 412, 593, 01591 592, 412, 758, 412, 756, 756, 756, 412, 412, 412, 01592 416, 591, 756, 648, 416, 416, 416, 590, 589, 416, 01593 681, 416, 588, 587, 586, 416, 416, 416, 510, 510, 01594 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 01595 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 01596 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 01597 01598 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 01599 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 01600 510, 510, 561, 561, 561, 561, 561, 561, 561, 561, 01601 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 01602 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 01603 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 01604 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 01605 561, 561, 561, 561, 561, 561, 619, 619, 619, 583, 01606 619, 657, 657, 657, 619, 657, 682, 682, 682, 657, 01607 683, 683, 683, 686, 686, 686, 582, 686, 706, 706, 01608 01609 706, 686, 581, 682, 707, 707, 707, 683, 580, 708, 01610 708, 708, 711, 711, 711, 706, 711, 724, 724, 724, 01611 711, 707, 579, 578, 576, 619, 708, 712, 712, 712, 01612 657, 712, 573, 569, 724, 682, 566, 565, 564, 683, 01613 563, 560, 686, 725, 725, 725, 556, 706, 726, 726, 01614 726, 548, 547, 707, 545, 728, 728, 728, 708, 728, 01615 725, 711, 544, 728, 543, 726, 724, 737, 737, 737, 01616 738, 738, 738, 739, 739, 739, 712, 741, 741, 741, 01617 542, 741, 541, 540, 737, 741, 539, 738, 537, 536, 01618 739, 535, 725, 746, 746, 746, 534, 726, 747, 747, 01619 01620 747, 748, 748, 748, 728, 750, 750, 750, 533, 750, 01621 746, 532, 531, 750, 530, 747, 737, 528, 748, 738, 01622 527, 520, 739, 753, 753, 753, 741, 754, 754, 754, 01623 519, 755, 755, 755, 516, 757, 757, 757, 515, 757, 01624 753, 514, 746, 757, 754, 513, 512, 747, 755, 511, 01625 748, 759, 759, 759, 750, 508, 760, 760, 760, 759, 01626 760, 761, 761, 761, 760, 762, 762, 762, 764, 764, 01627 764, 502, 753, 762, 500, 498, 754, 763, 763, 763, 01628 755, 763, 497, 494, 757, 763, 765, 765, 765, 766, 01629 766, 766, 490, 766, 765, 488, 487, 766, 767, 767, 01630 01631 767, 768, 768, 768, 486, 760, 770, 770, 770, 768, 01632 761, 769, 769, 769, 485, 769, 484, 764, 483, 769, 01633 771, 771, 771, 772, 772, 772, 763, 772, 771, 482, 01634 481, 772, 773, 773, 773, 774, 774, 774, 766, 479, 01635 775, 775, 775, 774, 775, 478, 477, 767, 775, 776, 01636 776, 776, 779, 779, 779, 770, 777, 777, 777, 476, 01637 769, 778, 778, 778, 777, 778, 780, 780, 780, 778, 01638 475, 474, 772, 472, 780, 781, 781, 781, 471, 781, 01639 469, 773, 468, 781, 782, 782, 782, 466, 459, 775, 01640 458, 783, 783, 783, 785, 785, 785, 455, 776, 783, 01641 01642 454, 779, 452, 784, 784, 784, 451, 784, 450, 449, 01643 778, 784, 786, 786, 786, 787, 787, 787, 448, 787, 01644 786, 447, 446, 787, 781, 788, 788, 788, 789, 789, 01645 789, 445, 443, 782, 442, 441, 789, 790, 790, 790, 01646 440, 790, 438, 785, 437, 790, 791, 791, 791, 792, 01647 792, 792, 784, 431, 793, 793, 793, 792, 793, 794, 01648 794, 794, 793, 430, 787, 795, 795, 795, 796, 796, 01649 796, 429, 796, 795, 788, 420, 796, 797, 797, 797, 01650 798, 798, 798, 799, 799, 799, 790, 799, 798, 419, 01651 407, 799, 800, 800, 800, 791, 801, 801, 801, 803, 01652 01653 803, 803, 399, 793, 801, 802, 802, 802, 794, 802, 01654 804, 804, 804, 802, 806, 806, 806, 796, 804, 805, 01655 805, 805, 392, 805, 391, 390, 797, 805, 807, 807, 01656 807, 389, 799, 809, 809, 809, 807, 388, 808, 808, 01657 808, 800, 808, 810, 810, 810, 808, 387, 803, 386, 01658 385, 810, 384, 380, 802, 374, 811, 811, 811, 369, 01659 811, 368, 365, 806, 811, 812, 812, 812, 805, 813, 01660 813, 813, 814, 814, 814, 363, 814, 813, 362, 361, 01661 814, 360, 809, 815, 815, 815, 359, 808, 816, 816, 01662 816, 817, 817, 817, 353, 817, 816, 350, 349, 817, 01663 01664 818, 818, 818, 347, 332, 811, 326, 819, 819, 819, 01665 821, 821, 821, 322, 812, 819, 820, 820, 820, 317, 01666 820, 814, 316, 315, 820, 822, 822, 822, 824, 824, 01667 824, 313, 815, 822, 823, 823, 823, 311, 823, 308, 01668 817, 297, 823, 825, 825, 825, 826, 826, 826, 818, 01669 826, 825, 290, 282, 826, 827, 827, 827, 278, 821, 01670 828, 828, 828, 270, 262, 820, 254, 245, 828, 243, 01671 829, 829, 829, 236, 829, 233, 226, 824, 829, 830, 01672 830, 830, 220, 823, 831, 831, 831, 218, 203, 832, 01673 832, 832, 831, 832, 200, 826, 198, 832, 833, 833, 01674 01675 833, 834, 834, 834, 827, 191, 835, 835, 835, 834, 01676 835, 836, 836, 836, 835, 837, 837, 837, 189, 829, 01677 839, 839, 839, 837, 183, 838, 838, 838, 830, 838, 01678 842, 842, 842, 838, 840, 840, 840, 174, 832, 845, 01679 845, 845, 840, 164, 841, 841, 841, 833, 841, 843, 01680 843, 843, 841, 161, 153, 835, 152, 843, 151, 150, 01681 836, 147, 844, 844, 844, 143, 844, 141, 140, 839, 01682 844, 848, 848, 848, 838, 846, 846, 846, 130, 842, 01683 851, 851, 851, 846, 854, 854, 854, 119, 845, 117, 01684 847, 847, 847, 841, 847, 849, 849, 849, 847, 110, 01685 01686 850, 850, 850, 849, 850, 852, 852, 852, 850, 103, 01687 100, 844, 93, 852, 853, 853, 853, 90, 853, 88, 01688 848, 80, 853, 855, 855, 855, 856, 856, 856, 851, 01689 856, 855, 71, 854, 856, 857, 857, 857, 65, 847, 01690 858, 858, 858, 859, 859, 859, 0, 859, 858, 850, 01691 0, 859, 860, 860, 860, 0, 861, 861, 861, 863, 01692 863, 863, 0, 853, 861, 862, 862, 862, 0, 862, 01693 864, 864, 864, 862, 0, 856, 0, 0, 864, 865, 01694 865, 865, 0, 865, 857, 0, 0, 865, 866, 866, 01695 866, 0, 859, 0, 867, 867, 867, 869, 869, 869, 01696 01697 0, 860, 867, 868, 868, 868, 0, 868, 863, 0, 01698 0, 868, 0, 0, 862, 870, 870, 870, 871, 871, 01699 871, 0, 871, 870, 0, 0, 871, 0, 865, 872, 01700 872, 872, 873, 873, 873, 0, 0, 866, 0, 0, 01701 873, 874, 874, 874, 0, 874, 869, 0, 0, 874, 01702 0, 0, 868, 875, 875, 875, 876, 876, 876, 0, 01703 0, 877, 877, 877, 876, 877, 0, 871, 0, 877, 01704 878, 878, 878, 879, 879, 879, 0, 0, 872, 0, 01705 0, 879, 0, 880, 880, 880, 0, 880, 0, 0, 01706 874, 880, 881, 881, 881, 882, 882, 882, 884, 884, 01707 01708 884, 0, 875, 882, 883, 883, 883, 0, 883, 0, 01709 877, 0, 883, 885, 885, 885, 886, 886, 886, 878, 01710 886, 885, 0, 0, 886, 887, 887, 887, 888, 888, 01711 888, 0, 880, 890, 890, 890, 888, 0, 889, 889, 01712 889, 881, 889, 891, 891, 891, 889, 884, 892, 892, 01713 892, 891, 892, 883, 0, 0, 892, 893, 893, 893, 01714 894, 894, 894, 0, 0, 886, 0, 0, 894, 895, 01715 895, 895, 0, 895, 887, 0, 0, 895, 896, 896, 01716 896, 0, 890, 897, 897, 897, 0, 889, 898, 898, 01717 898, 897, 898, 899, 899, 899, 898, 892, 0, 900, 01718 01719 900, 900, 902, 902, 902, 0, 893, 900, 901, 901, 01720 901, 0, 901, 903, 903, 903, 901, 0, 895, 0, 01721 0, 903, 904, 904, 904, 0, 904, 896, 0, 0, 01722 904, 905, 905, 905, 908, 908, 908, 898, 906, 906, 01723 906, 0, 899, 911, 911, 911, 906, 0, 907, 907, 01724 907, 902, 907, 909, 909, 909, 907, 901, 910, 910, 01725 910, 909, 910, 914, 914, 914, 910, 912, 912, 912, 01726 0, 904, 917, 917, 917, 912, 0, 913, 913, 913, 01727 905, 913, 0, 908, 0, 913, 915, 915, 915, 920, 01728 920, 920, 911, 0, 915, 0, 0, 907, 916, 916, 01729 01730 916, 0, 916, 918, 918, 918, 916, 910, 923, 923, 01731 923, 918, 914, 0, 919, 919, 919, 0, 919, 0, 01732 0, 917, 919, 921, 921, 921, 913, 0, 922, 922, 01733 922, 921, 922, 924, 924, 924, 922, 0, 920, 0, 01734 0, 924, 925, 925, 925, 0, 925, 916, 0, 0, 01735 925, 926, 926, 926, 927, 927, 927, 923, 929, 929, 01736 929, 0, 927, 919, 928, 928, 928, 0, 928, 932, 01737 932, 932, 928, 930, 930, 930, 0, 922, 931, 931, 01738 931, 930, 931, 935, 935, 935, 931, 933, 933, 933, 01739 0, 925, 938, 938, 938, 933, 0, 934, 934, 934, 01740 01741 926, 934, 936, 936, 936, 934, 0, 929, 0, 0, 01742 936, 0, 0, 928, 0, 937, 937, 937, 932, 937, 01743 939, 939, 939, 937, 941, 941, 941, 931, 939, 940, 01744 940, 940, 935, 940, 942, 942, 942, 940, 944, 944, 01745 944, 938, 942, 943, 943, 943, 934, 943, 945, 945, 01746 945, 943, 0, 946, 946, 946, 945, 946, 947, 947, 01747 947, 946, 0, 0, 937, 0, 948, 948, 948, 950, 01748 950, 950, 0, 941, 948, 949, 949, 949, 940, 949, 01749 951, 951, 951, 949, 953, 953, 953, 944, 951, 952, 01750 952, 952, 943, 952, 956, 956, 956, 952, 954, 954, 01751 01752 954, 0, 946, 957, 957, 957, 954, 947, 955, 955, 01753 955, 957, 955, 958, 958, 958, 955, 958, 950, 0, 01754 0, 958, 0, 0, 949, 959, 959, 959, 961, 961, 01755 961, 0, 961, 953, 0, 0, 961, 0, 952, 962, 01756 962, 962, 0, 956, 963, 963, 963, 0, 963, 964, 01757 964, 964, 963, 966, 966, 966, 0, 955, 0, 965, 01758 965, 965, 958, 965, 967, 967, 967, 965, 967, 968, 01759 968, 968, 967, 0, 959, 0, 0, 961, 969, 969, 01760 969, 0, 969, 970, 970, 970, 969, 0, 962, 972, 01761 972, 972, 0, 963, 0, 971, 971, 971, 964, 971, 01762 01763 0, 0, 966, 971, 973, 973, 973, 0, 965, 974, 01764 974, 974, 0, 967, 975, 975, 975, 0, 968, 976, 01765 976, 976, 977, 977, 977, 0, 0, 969, 979, 979, 01766 979, 0, 970, 980, 980, 980, 0, 0, 972, 981, 01767 981, 981, 0, 0, 971, 982, 982, 982, 983, 983, 01768 983, 0, 0, 973, 984, 984, 984, 0, 974, 985, 01769 985, 985, 0, 975, 986, 986, 986, 0, 976, 0, 01770 0, 977, 987, 987, 987, 0, 0, 979, 988, 988, 01771 988, 0, 980, 989, 989, 989, 0, 0, 981, 990, 01772 990, 990, 0, 0, 982, 0, 0, 983, 991, 991, 01773 01774 991, 0, 0, 984, 992, 992, 992, 0, 985, 993, 01775 993, 993, 0, 986, 994, 994, 994, 995, 995, 995, 01776 0, 987, 996, 996, 996, 0, 0, 988, 997, 997, 01777 997, 0, 989, 998, 998, 998, 0, 0, 990, 999, 01778 999, 999, 1000, 1000, 1000, 0, 0, 991, 1001, 1001, 01779 1001, 0, 0, 992, 1002, 1002, 1002, 0, 993, 1003, 01780 1003, 1003, 0, 994, 0, 0, 995, 1004, 1004, 1004, 01781 0, 996, 1005, 1005, 1005, 0, 0, 997, 1006, 1006, 01782 1006, 0, 998, 1007, 1007, 1007, 0, 0, 999, 0, 01783 0, 1000, 1008, 1008, 1008, 0, 0, 1001, 1009, 1009, 01784 01785 1009, 0, 0, 1002, 1010, 1010, 1010, 0, 1003, 1011, 01786 1011, 1011, 1012, 1012, 1012, 0, 1004, 1013, 1013, 1013, 01787 0, 1005, 1014, 1014, 1014, 0, 0, 1006, 1015, 1015, 01788 1015, 0, 1007, 1016, 1016, 1016, 1017, 1017, 1017, 0, 01789 0, 1008, 1018, 1018, 1018, 0, 0, 1009, 1019, 1019, 01790 1019, 0, 0, 1010, 1020, 1020, 1020, 0, 1011, 0, 01791 0, 1012, 1021, 1021, 1021, 0, 1013, 1022, 1022, 1022, 01792 0, 1014, 1023, 1023, 1023, 0, 0, 1015, 1024, 1024, 01793 1024, 0, 1016, 0, 0, 1017, 1025, 1025, 1025, 0, 01794 0, 1018, 1026, 1026, 1026, 0, 0, 1019, 1027, 1027, 01795 01796 1027, 0, 0, 1020, 1028, 1028, 1028, 1029, 1029, 1029, 01797 0, 1021, 1030, 1030, 1030, 0, 1022, 1031, 1031, 1031, 01798 0, 1023, 1032, 1032, 1032, 0, 0, 1024, 1033, 1033, 01799 1033, 1034, 1034, 1034, 0, 1025, 1035, 1035, 1035, 0, 01800 0, 1026, 1036, 1036, 1036, 0, 0, 1027, 1037, 1037, 01801 1037, 0, 0, 1028, 0, 0, 1029, 1038, 1038, 1038, 01802 0, 1030, 1039, 1039, 1039, 0, 1031, 1040, 1040, 1040, 01803 0, 1032, 1041, 1041, 1041, 0, 0, 1033, 0, 0, 01804 1034, 1042, 1042, 1042, 0, 1035, 1043, 1043, 1043, 0, 01805 0, 1036, 1044, 1044, 1044, 0, 0, 1037, 1045, 1045, 01806 01807 1045, 1046, 1046, 1046, 0, 0, 1038, 1047, 1047, 1047, 01808 0, 1039, 1048, 1048, 1048, 0, 1040, 1049, 1049, 1049, 01809 0, 1041, 1050, 1050, 1050, 1051, 1051, 1051, 0, 0, 01810 1042, 1052, 1052, 1052, 0, 1043, 1053, 1053, 1053, 0, 01811 0, 1044, 1054, 1054, 1054, 0, 0, 1045, 0, 0, 01812 1046, 0, 0, 0, 0, 0, 1047, 0, 0, 0, 01813 0, 1048, 0, 0, 0, 0, 1049, 0, 0, 0, 01814 0, 1050, 0, 0, 1051, 0, 0, 0, 0, 0, 01815 1052, 0, 0, 0, 0, 1053, 0, 0, 0, 0, 01816 0, 1054, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 01817 01818 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 01819 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 01820 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1058, 1058, 01821 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 01822 1058, 1058, 1058, 1058, 1058, 1058, 1059, 1059, 1059, 1059, 01823 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 01824 1059, 1059, 1059, 1059, 1060, 1060, 1060, 1060, 1060, 1060, 01825 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 01826 1060, 1060, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 01827 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 01828 01829 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 01830 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1063, 1063, 01831 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 01832 1063, 1063, 1063, 1063, 1063, 1063, 1064, 1064, 1064, 1064, 01833 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 01834 1064, 1064, 1064, 1064, 1065, 1065, 1065, 1065, 1065, 1065, 01835 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 01836 1065, 1065, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 01837 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 01838 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 01839 01840 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1068, 1068, 01841 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 01842 1068, 1068, 1068, 1068, 1068, 1068, 1069, 1069, 1069, 1069, 01843 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 01844 1069, 1069, 1069, 1069, 1070, 1070, 1070, 1070, 1070, 1070, 01845 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 01846 1070, 1070, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 01847 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 01848 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 01849 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1073, 1073, 01850 01851 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 01852 1073, 1073, 1073, 1073, 1073, 1073, 1076, 1076, 1076, 0, 01853 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 0, 1076, 01854 1076, 1076, 1076, 1076, 1077, 1077, 1077, 0, 1077, 1077, 01855 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 01856 1077, 1077, 1078, 1078, 1078, 0, 0, 0, 1078, 0, 01857 0, 0, 0, 1078, 0, 0, 1078, 1079, 1079, 1079, 01858 0, 0, 1079, 0, 1079, 1079, 1079, 1079, 1079, 1079, 01859 1079, 1079, 1079, 1079, 1080, 1080, 1080, 0, 1080, 1080, 01860 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 01861 01862 1080, 1080, 1081, 1081, 1081, 0, 1081, 1081, 1081, 1081, 01863 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 01864 1082, 0, 0, 0, 0, 0, 1082, 0, 0, 0, 01865 0, 1082, 0, 0, 1082, 1083, 1083, 1083, 1083, 1083, 01866 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 01867 1083, 1083, 1084, 1084, 0, 0, 0, 0, 1084, 0, 01868 0, 0, 0, 1084, 0, 0, 1084, 1085, 0, 0, 01869 0, 0, 0, 0, 0, 0, 1085, 0, 1085, 0, 01870 0, 1085, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 01871 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 01872 01873 1088, 0, 1088, 0, 1088, 1088, 1088, 1088, 1088, 0, 01874 1088, 1088, 0, 1088, 1088, 0, 1088, 1089, 1089, 1089, 01875 1089, 1089, 1089, 1089, 1089, 1089, 0, 1089, 1089, 1089, 01876 1089, 1089, 1089, 0, 1089, 1090, 1090, 1090, 0, 1090, 01877 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 01878 0, 1090, 1091, 1091, 1091, 0, 1091, 1091, 1091, 1091, 01879 1091, 1091, 1091, 1091, 0, 1091, 1091, 0, 1091, 1092, 01880 0, 1092, 0, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 01881 1092, 1092, 1092, 1092, 0, 1092, 1093, 0, 1093, 0, 01882 1093, 1093, 1093, 1093, 1093, 0, 1093, 1093, 1093, 1093, 01883 01884 1093, 1093, 1093, 1093, 1094, 0, 1094, 0, 1094, 1094, 01885 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 01886 1094, 1094, 1098, 1098, 1098, 0, 1098, 1098, 1098, 1098, 01887 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 01888 1100, 1100, 1100, 0, 1100, 1100, 1100, 0, 1100, 1100, 01889 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1101, 1101, 01890 1101, 0, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 01891 1101, 1101, 1101, 1101, 1101, 1101, 1102, 1102, 0, 1102, 01892 0, 0, 1102, 1103, 0, 1103, 1103, 0, 1103, 0, 01893 1103, 0, 1103, 1104, 1104, 1104, 0, 1104, 1104, 1104, 01894 01895 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 01896 1104, 1105, 1105, 1105, 0, 1105, 1105, 1105, 1105, 1105, 01897 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1106, 01898 1106, 1106, 0, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 01899 1106, 1106, 1106, 1106, 1106, 1106, 1107, 1107, 1107, 0, 01900 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 01901 1107, 1107, 1107, 1107, 1108, 1108, 1108, 0, 1108, 1108, 01902 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 01903 1108, 1108, 1109, 1109, 1109, 0, 1109, 1109, 1109, 1109, 01904 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1110, 01905 01906 1110, 1110, 0, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 01907 1110, 1110, 1110, 1110, 1110, 1110, 1111, 0, 0, 0, 01908 1111, 0, 0, 0, 0, 0, 0, 0, 1111, 0, 01909 1111, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 01910 1113, 1113, 1113, 1113, 0, 1113, 1113, 0, 1113, 1055, 01911 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 01912 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 01913 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 01914 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 01915 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 01916 01917 1055, 1055, 1055, 1055 01918 } ; 01919 01920 extern int preYY_flex_debug; 01921 int preYY_flex_debug = 0; 01922 01923 static yy_state_type *yy_state_buf=0, *yy_state_ptr=0; 01924 static char *yy_full_match; 01925 static int yy_lp; 01926 static int yy_looking_for_trail_begin = 0; 01927 static int yy_full_lp; 01928 static int *yy_full_state; 01929 #define YY_TRAILING_MASK 0x2000 01930 #define YY_TRAILING_HEAD_MASK 0x4000 01931 #define REJECT \ 01932 { \ 01933 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */ \ 01934 yy_cp = (yy_full_match); /* restore poss. backed-over text */ \ 01935 (yy_lp) = yy_full_lp; /* restore orig. accepting pos. */ \ 01936 (yy_state_ptr) = yy_full_state; /* restore orig. state */ \ 01937 yy_current_state = *(yy_state_ptr); /* restore curr. state */ \ 01938 ++(yy_lp); \ 01939 goto find_rule; \ 01940 } 01941 01942 #define yymore() yymore_used_but_not_detected 01943 #define YY_MORE_ADJ 0 01944 #define YY_RESTORE_YY_MORE_OFFSET 01945 char *preYYtext; 01946 #line 1 "pre.l" 01947 /****************************************************************************** 01948 * 01949 * 01950 * 01951 * Copyright (C) 1997-2008 by Dimitri van Heesch. 01952 * 01953 * Permission to use, copy, modify, and distribute this software and its 01954 * documentation under the terms of the GNU General Public License is hereby 01955 * granted. No representations are made about the suitability of this software 01956 * for any purpose. It is provided "as is" without express or implied warranty. 01957 * See the GNU General Public License for more details. 01958 * 01959 * Documents produced by Doxygen are derivative works derived from the 01960 * input used in their production; they are not affected by this license. 01961 * 01962 */ 01963 #line 19 "pre.l" 01964 01965 /* 01966 * includes 01967 */ 01968 01969 #include <stdio.h> 01970 #include <assert.h> 01971 #include <ctype.h> 01972 01973 #include "qtbc.h" 01974 #include <qarray.h> 01975 #include <qstack.h> 01976 #include <qfile.h> 01977 #include <qstrlist.h> 01978 #include <qdict.h> 01979 #include <qregexp.h> 01980 #include <qfileinfo.h> 01981 #include <qdir.h> 01982 01983 #include "pre.h" 01984 #include "constexp.h" 01985 #include "define.h" 01986 #include "doxygen.h" 01987 #include "message.h" 01988 #include "util.h" 01989 #include "defargs.h" 01990 #include "debug.h" 01991 #include "bufstr.h" 01992 #include "portable.h" 01993 01994 #define YY_NEVER_INTERACTIVE 1 01995 01996 01997 struct FileState 01998 { 01999 int lineNr; 02000 FILE *filePtr; 02001 YY_BUFFER_STATE bufState; 02002 QCString fileName; 02003 }; 02004 02005 /* ----------------------------------------------------------------- 02006 * 02007 * scanner's state 02008 */ 02009 02010 static int g_yyLineNr = 1; 02011 static QCString g_yyFileName; 02012 static FileDef *g_yyFileDef; 02013 static FileDef *g_inputFileDef; 02014 static int g_ifcount = 0; 02015 static QStrList *g_pathList = 0; 02016 static QStack<FileState> g_includeStack; 02017 static QDict<int> *g_argDict; 02018 static int g_defArgs = -1; 02019 static QCString g_defName; 02020 static QCString g_defText; 02021 static QCString g_defLitText; 02022 static QCString g_defArgsStr; 02023 static bool g_defVarArgs; 02024 static int g_level; 02025 static int g_lastCContext; 02026 static int g_lastCPPContext; 02027 static QArray<int> g_levelGuard; 02028 static BufStr *g_outputBuf; 02029 static int g_roundCount; 02030 static bool g_quoteArg; 02031 static DefineDict *g_fileDefineDict; 02032 static DefineDict *g_expandedDict; 02033 static int g_findDefArgContext; 02034 static QCString g_lastGuardName; 02035 static QCString g_incName; 02036 static QCString g_guardExpr; 02037 static int g_curlyCount; 02038 static bool g_nospaces; // add extra spaces during macro expansion 02039 02040 static bool g_macroExpansion; // from the configuration 02041 static bool g_expandOnlyPredef; // from the configuration 02042 static int g_commentCount; 02043 static bool g_insideComment; 02044 static bool g_isImported; 02045 static QCString g_blockName; 02046 static int g_condCtx; 02047 static bool g_skip; 02048 static QStack<bool> g_condStack; 02049 02050 static bool g_lexInit = FALSE; 02051 02052 DefineDict* getFileDefineDict() { 02053 return g_fileDefineDict; 02054 } 02055 02056 static void setFileName(const char *name) 02057 { 02058 bool ambig; 02059 g_yyFileName=name; 02060 g_yyFileDef=findFileDef(Doxygen::inputNameDict,g_yyFileName,ambig); 02061 if (g_yyFileDef && g_yyFileDef->isReference()) g_yyFileDef=0; 02062 } 02063 02064 static void incrLevel() 02065 { 02066 g_level++; 02067 g_levelGuard.resize(g_level); 02068 g_levelGuard[g_level-1]=FALSE; 02069 //printf("%s line %d: incrLevel %d\n",g_yyFileName.data(),g_yyLineNr,g_level); 02070 } 02071 02072 static void decrLevel() 02073 { 02074 //printf("%s line %d: decrLevel %d\n",g_yyFileName.data(),g_yyLineNr,g_level); 02075 if (g_level > 0) 02076 { 02077 g_level--; 02078 g_levelGuard.resize(g_level); 02079 } 02080 else 02081 { 02082 err("%s:%d: Error: More #endif's than #if's found.\n", 02083 g_yyFileName.data(),g_yyLineNr); 02084 } 02085 } 02086 02087 static bool otherCaseDone() 02088 { 02089 if (g_level==0) 02090 { 02091 err("%s:%d: Error: Found an #else without a preceding #if.\n", 02092 g_yyFileName.data(),g_yyLineNr); 02093 return TRUE; 02094 } 02095 else 02096 { 02097 return g_levelGuard[g_level-1]; 02098 } 02099 } 02100 02101 static void setCaseDone(bool value) 02102 { 02103 g_levelGuard[g_level-1]=value; 02104 } 02105 02106 static Define *isDefined(const char *name) 02107 { 02108 if (name) 02109 { 02110 Define *def; 02111 //if ((def=fileDefineCache->findDefine(g_yyFileName,name)) && !def->undef) 02112 // return def; 02113 if ((def=g_fileDefineDict->find(name)) && !def->undef) return def; 02114 } 02115 return 0; 02116 } 02117 02118 static FILE *checkAndOpenFile(const QCString &absName) 02119 { 02120 FILE *f = 0; 02121 //printf("checkAndOpenFile(%s)\n",absName.data()); 02122 QFileInfo fi(absName); 02123 if (fi.exists() && fi.isFile()) 02124 { 02125 // check include stack for absFileName 02126 02127 QStack<FileState> tmpStack; 02128 g_includeStack.setAutoDelete(FALSE); 02129 FileState *fs; 02130 bool alreadyIncluded=FALSE; 02131 while ((fs=g_includeStack.pop())) 02132 { 02133 if (fs->fileName==absName) alreadyIncluded=TRUE; 02134 tmpStack.push(fs); 02135 } 02136 while ((fs=tmpStack.pop())) 02137 { 02138 g_includeStack.push(fs); 02139 } 02140 g_includeStack.setAutoDelete(TRUE); 02141 02142 if (alreadyIncluded) return 0; 02143 02144 02145 QCString filterName = getFileFilter(absName); 02146 if (!filterName.isEmpty()) 02147 { 02148 QCString cmd = filterName+" \""+absName+"\""; 02149 f=portable_popen(cmd,"r"); 02150 if (!f) err("Error: could not execute filter %s\n",cmd.data()); 02151 } 02152 else 02153 { 02154 f=fopen(absName,"r"); 02155 if (!f) err("Error: could not open file %s for reading\n",absName.data()); 02156 } 02157 } 02158 return f; 02159 } 02160 02161 static FILE *findFile(const char *fileName,bool localInclude) 02162 { 02163 //printf("** findFile(%s,%d) g_yyFileName=%s\n",fileName,localInclude,g_yyFileName.data()); 02164 if (localInclude && !g_yyFileName.isEmpty()) 02165 { 02166 QFileInfo fi(g_yyFileName); 02167 if (fi.exists()) 02168 { 02169 QCString absName = QCString(fi.dirPath().data())+"/"+fileName; 02170 FILE *f = checkAndOpenFile(absName); 02171 if (f) 02172 { 02173 setFileName(absName); 02174 g_yyLineNr=1; 02175 return f; 02176 } 02177 } 02178 } 02179 if (g_pathList==0) 02180 { 02181 return 0; 02182 } 02183 char *s=g_pathList->first(); 02184 while (s) 02185 { 02186 QCString absName = (QCString)s+"/"+fileName; 02187 FILE *f = checkAndOpenFile(absName); 02188 if (f) 02189 { 02190 setFileName(absName); 02191 g_yyLineNr=1; 02192 return f; 02193 } 02194 02195 s=g_pathList->next(); 02196 } 02197 return 0; 02198 } 02199 02200 static QCString extractTrailingComment(const char *s) 02201 { 02202 if (s==0) return ""; 02203 int i=strlen(s)-1; 02204 while (i>=0) 02205 { 02206 char c=s[i]; 02207 switch (c) 02208 { 02209 case '/': 02210 { 02211 i--; 02212 if (i>=0 && s[i]=='*') // end of a comment block 02213 { 02214 i--; 02215 while (i>0 && !(s[i-1]=='/' && s[i]=='*')) i--; 02216 if (i==0) return s; else return &s[i-1]; 02217 } 02218 else 02219 { 02220 return ""; 02221 } 02222 } 02223 break; 02224 // whitespace or line-continuation 02225 case ' ': 02226 case '\t': 02227 case '\r': 02228 case '\n': 02229 case '\\': 02230 break; 02231 default: 02232 return ""; 02233 } 02234 i--; 02235 } 02236 return ""; 02237 } 02238 02239 static int getNextChar(const QCString &expr,QCString *rest,uint &pos); 02240 static int getCurrentChar(const QCString &expr,QCString *rest,uint pos); 02241 static void unputChar(const QCString &expr,QCString *rest,uint &pos,char c); 02242 static void expandExpression(QCString &expr,QCString *rest,int pos); 02243 02244 static QCString stringize(const QCString &s) 02245 { 02246 QCString result; 02247 uint i=0; 02248 bool inString=FALSE; 02249 bool inChar=FALSE; 02250 char c,pc; 02251 while (i<s.length()) 02252 { 02253 if (!inString && !inChar) 02254 { 02255 while (i<s.length() && !inString && !inChar) 02256 { 02257 c=s.at(i++); 02258 if (c=='"') 02259 { 02260 result+="\\\""; 02261 inString=TRUE; 02262 } 02263 else if (c=='\'') 02264 { 02265 result+=c; 02266 inChar=TRUE; 02267 } 02268 else 02269 { 02270 result+=c; 02271 } 02272 } 02273 } 02274 else if (inChar) 02275 { 02276 while (i<s.length() && inChar) 02277 { 02278 c=s.at(i++); 02279 if (c=='\'') 02280 { 02281 result+='\''; 02282 inChar=FALSE; 02283 } 02284 else if (c=='\\') 02285 { 02286 result+="\\\\"; 02287 } 02288 else 02289 { 02290 result+=c; 02291 } 02292 } 02293 } 02294 else 02295 { 02296 pc=0; 02297 while (i<s.length() && inString) 02298 { 02299 char c=s.at(i++); 02300 if (c=='"') 02301 { 02302 result+="\\\""; 02303 inString= pc=='\\'; 02304 } 02305 else if (c=='\\') 02306 result+="\\\\"; 02307 else 02308 result+=c; 02309 pc=c; 02310 } 02311 } 02312 } 02313 //printf("stringize `%s'->`%s'\n",s.data(),result.data()); 02314 return result; 02315 } 02316 02322 static void processConcatOperators(QCString &expr) 02323 { 02324 //printf("processConcatOperators: in=`%s'\n",expr.data()); 02325 QRegExp r("[ \\t\\n]*##[ \\t\\n]*"); 02326 int l,n,i=0; 02327 if (expr.isEmpty()) return; 02328 while ((n=r.match(expr,i,&l))!=-1) 02329 { 02330 //printf("Match: `%s'\n",expr.data()+i); 02331 if (n+l+1<(int)expr.length() && expr.at(n+l)=='@' && expr.at(n+l+1)=='-') 02332 { 02333 // remove no-rescan marker after ID 02334 l+=2; 02335 } 02336 //printf("found `%s'\n",expr.mid(n,l).data()); 02337 // remove the ## operator and the surrounding whitespace 02338 expr=expr.left(n)+expr.right(expr.length()-n-l); 02339 int k=n-1; 02340 while (k>=0 && isId(expr.at(k))) k--; 02341 if (k>0 && expr.at(k)=='-' && expr.at(k-1)=='@') 02342 { 02343 // remove no-rescan marker before ID 02344 expr=expr.left(k-1)+expr.right(expr.length()-k-1); 02345 n-=2; 02346 } 02347 i=n; 02348 } 02349 //printf("processConcatOperators: out=`%s'\n",expr.data()); 02350 } 02351 02352 static void yyunput (int c,char *buf_ptr ); 02353 static void returnCharToStream(char c) 02354 { 02355 unput(c); 02356 } 02357 02358 static inline void addTillEndOfString(const QCString &expr,QCString *rest, 02359 uint &pos,char term,QCString &arg) 02360 { 02361 int cc; 02362 while ((cc=getNextChar(expr,rest,pos))!=EOF) 02363 { 02364 if (cc=='\\') arg+=(char)cc,cc=getNextChar(expr,rest,pos); 02365 else if (cc==term) return; 02366 arg+=(char)cc; 02367 } 02368 } 02369 02377 static bool replaceFunctionMacro(const QCString &expr,QCString *rest,int pos,int &len,const Define *def,QCString &result) 02378 { 02379 //printf("replaceFunctionMacro(expr=%s,rest=%s,pos=%d,def=%s) level=%d\n",expr.data(),rest ? rest->data() : 0,pos,def->name.data(),g_level); 02380 uint j=pos; 02381 len=0; 02382 result.resize(0); 02383 int cc; 02384 while ((cc=getCurrentChar(expr,rest,j))!=EOF && cc==' ') 02385 { 02386 len++; 02387 getNextChar(expr,rest,j); 02388 } 02389 if (cc!='(') 02390 { 02391 unputChar(expr,rest,j,' '); 02392 return FALSE; 02393 } 02394 getNextChar(expr,rest,j); // eat the `(' character 02395 02396 QDict<QCString> argTable; // list of arguments 02397 argTable.setAutoDelete(TRUE); 02398 QCString arg; 02399 int argCount=0; 02400 bool done=FALSE; 02401 02402 // PHASE 1: read the macro arguments 02403 if (def->nargs==0) 02404 { 02405 while ((cc=getNextChar(expr,rest,j))!=EOF) 02406 { 02407 char c = (char)cc; 02408 if (c==')') break; 02409 } 02410 } 02411 else 02412 { 02413 while (!done && (argCount<def->nargs || def->varArgs) && 02414 ((cc=getNextChar(expr,rest,j))!=EOF) 02415 ) 02416 { 02417 char c=(char)cc; 02418 if (c=='(') // argument is a function => search for matching ) 02419 { 02420 int level=1; 02421 arg+=c; 02422 //char term='\0'; 02423 while ((cc=getNextChar(expr,rest,j))!=EOF) 02424 { 02425 char c=(char)cc; 02426 //printf("processing %c: term=%c (%d)\n",c,term,term); 02427 if (c=='\'' || c=='\"') // skip ('s and )'s inside strings 02428 { 02429 arg+=c; 02430 addTillEndOfString(expr,rest,j,c,arg); 02431 } 02432 if (c==')') 02433 { 02434 level--; 02435 arg+=c; 02436 if (level==0) break; 02437 } 02438 else if (c=='(') 02439 { 02440 level++; 02441 arg+=c; 02442 } 02443 else 02444 arg+=c; 02445 } 02446 } 02447 else if (c==')' || c==',') // last or next argument found 02448 { 02449 if (c==',' && argCount==def->nargs-1 && def->varArgs) 02450 { 02451 arg=arg.stripWhiteSpace(); 02452 arg+=','; 02453 } 02454 else 02455 { 02456 QCString argKey; 02457 argKey.sprintf("@%d",argCount++); // key name 02458 arg=arg.stripWhiteSpace(); 02459 // add argument to the lookup table 02460 argTable.insert(argKey, new QCString(arg)); 02461 arg.resize(0); 02462 if (c==')') // end of the argument list 02463 { 02464 done=TRUE; 02465 } 02466 } 02467 } 02468 else if (c=='\"') // append literal strings 02469 { 02470 arg+=c; 02471 bool found=FALSE; 02472 while (!found && (cc=getNextChar(expr,rest,j))!=EOF) 02473 { 02474 found = cc=='"'; 02475 if (cc=='\\') 02476 { 02477 c=(char)cc; 02478 arg+=c; 02479 if ((cc=getNextChar(expr,rest,j))==EOF) break; 02480 } 02481 c=(char)cc; 02482 arg+=c; 02483 } 02484 } 02485 else if (c=='\'') // append literal characters 02486 { 02487 arg+=c; 02488 bool found=FALSE; 02489 while (!found && (cc=getNextChar(expr,rest,j))!=EOF) 02490 { 02491 found = cc=='\''; 02492 if (cc=='\\') 02493 { 02494 c=(char)cc; 02495 arg+=c; 02496 if ((cc=getNextChar(expr,rest,j))==EOF) break; 02497 } 02498 c=(char)cc; 02499 arg+=c; 02500 } 02501 } 02502 else // append other characters 02503 { 02504 arg+=c; 02505 } 02506 } 02507 } 02508 02509 // PHASE 2: apply the macro function 02510 if (argCount==def->nargs || 02511 (argCount>def->nargs && def->varArgs)) // matching parameters lists 02512 { 02513 uint k=0; 02514 // substitution of all formal arguments 02515 QCString resExpr; 02516 const QCString d=def->definition.stripWhiteSpace(); 02517 //printf("Macro definition: %s\n",d.data()); 02518 bool inString=FALSE; 02519 while (k<d.length()) 02520 { 02521 if (d.at(k)=='@') // maybe a marker, otherwise an escaped @ 02522 { 02523 if (d.at(k+1)=='@') // escaped @ => copy it (is unescaped later) 02524 { 02525 k+=2; 02526 resExpr+="@@"; // we unescape these later 02527 } 02528 else if (d.at(k+1)=='-') // no-rescan marker 02529 { 02530 k+=2; 02531 resExpr+="@-"; 02532 } 02533 else // argument marker => read the argument number 02534 { 02535 QCString key="@"; 02536 QCString *subst=0; 02537 bool hash=FALSE; 02538 int l=k-1; 02539 // search for ## backward 02540 if (l>=0 && d.at(l)=='"') l--; 02541 while (l>=0 && d.at(l)==' ') l--; 02542 if (l>0 && d.at(l)=='#' && d.at(l-1)=='#') hash=TRUE; 02543 k++; 02544 // scan the number 02545 while (k<d.length() && d.at(k)>='0' && d.at(k)<='9') key+=d.at(k++); 02546 if (!hash) 02547 { 02548 // search for ## forward 02549 l=k; 02550 if (l<(int)d.length() && d.at(l)=='"') l++; 02551 while (l<(int)d.length() && d.at(l)==' ') l++; 02552 if (l<(int)d.length()-1 && d.at(l)=='#' && d.at(l+1)=='#') hash=TRUE; 02553 } 02554 //printf("request key %s result %s\n",key.data(),argTable[key]->data()); 02555 if (key.length()>1 && (subst=argTable[key])) 02556 { 02557 QCString substArg=*subst; 02558 //printf("substArg=`%s'\n",substArg.data()); 02559 // only if no ## operator is before or after the argument 02560 // marker we do macro expansion. 02561 if (!hash) expandExpression(substArg,0,0); 02562 if (inString) 02563 { 02564 //printf("`%s'=stringize(`%s')\n",stringize(*subst).data(),subst->data()); 02565 02566 // if the marker is inside a string (because a # was put 02567 // before the macro name) we must escape " and \ characters 02568 resExpr+=stringize(substArg); 02569 } 02570 else 02571 { 02572 if (hash && substArg.isEmpty()) 02573 { 02574 resExpr+="@E"; // empty argument will be remove later on 02575 } 02576 else if (g_nospaces) 02577 { 02578 resExpr+=substArg; 02579 } 02580 else 02581 { 02582 resExpr+=" "+substArg+" "; 02583 } 02584 } 02585 } 02586 } 02587 } 02588 else // no marker, just copy 02589 { 02590 if (!inString && d.at(k)=='\"') 02591 { 02592 inString=TRUE; // entering a literal string 02593 } 02594 else if (inString && d.at(k)=='\"' && (d.at(k-1)!='\\' || d.at(k-2)=='\\')) 02595 { 02596 inString=FALSE; // leaving a literal string 02597 } 02598 resExpr+=d.at(k++); 02599 } 02600 } 02601 len=j-pos; 02602 result=resExpr; 02603 //printf("result after substitution `%s' expr=`%s'\n", 02604 // result.data(),expr.mid(pos,len).data()); 02605 return TRUE; 02606 } 02607 return FALSE; 02608 } 02609 02610 02615 static int getNextId(const QCString &expr,int p,int *l) 02616 { 02617 int n; 02618 while (p<(int)expr.length()) 02619 { 02620 char c=expr.at(p++); 02621 if (isalpha(c) || c=='_') // read id 02622 { 02623 n=p-1; 02624 while (p<(int)expr.length() && isId(expr.at(p)) 02625 ) p++; 02626 *l=p-n; 02627 return n; 02628 } 02629 else if (c=='"') // skip string 02630 { 02631 char ppc=0,pc=c; 02632 if (p<(int)expr.length()) c=expr.at(p); 02633 while (p<(int)expr.length() && (c!='"' || (pc=='\\' && ppc!='\\'))) 02634 // continue as long as no " is found, but ignoring \", but not \\" 02635 { 02636 ppc=pc; 02637 pc=c; 02638 c=expr.at(p); 02639 p++; 02640 } 02641 } 02642 else if (c=='/') // skip C Comment 02643 { 02644 char pc=c; 02645 if (p<(int)expr.length()) 02646 { 02647 c=expr.at(++p); 02648 if (c=='*') // Start of C comment 02649 { 02650 while (p<(int)expr.length() && !(pc=='*' && c=='/')) 02651 { 02652 pc=c; 02653 c=expr.at(++p); 02654 } 02655 p++; 02656 } 02657 } 02658 } 02659 } 02660 return -1; 02661 } 02662 02669 static void expandExpression(QCString &expr,QCString *rest,int pos) 02670 { 02671 //printf("expandExpression(%s,%s)\n",expr.data(),rest ? rest->data() : 0); 02672 QCString macroName; 02673 QCString expMacro; 02674 int i=pos,l,p,len; 02675 while ((p=getNextId(expr,i,&l))!=-1) // search for an macro name 02676 { 02677 bool replaced=FALSE; 02678 macroName=expr.mid(p,l); 02679 //printf("macroName %s found\n",macroName.data()); 02680 if (p<2 || !(expr.at(p-2)=='@' && expr.at(p-1)=='-')) // no-rescan marker? 02681 { 02682 if (g_expandedDict->find(macroName)==0) // expand macro 02683 { 02684 Define *def=isDefined(macroName); 02685 if (def && def->nargs==-1) // simple macro 02686 { 02687 // substitute the definition of the macro 02688 //printf("macro `%s'->`%s'\n",macroName.data(),def->definition.data()); 02689 if (g_nospaces) 02690 { 02691 expMacro=def->definition.stripWhiteSpace(); 02692 } 02693 else 02694 { 02695 expMacro=" "+def->definition.stripWhiteSpace()+" "; 02696 } 02697 //expMacro=def->definition.stripWhiteSpace(); 02698 replaced=TRUE; 02699 len=l; 02700 //printf("simple macro expansion=`%s'->`%s'\n",macroName.data(),expMacro.data()); 02701 } 02702 else if (def && def->nargs>=0) // function macro 02703 { 02704 replaced=replaceFunctionMacro(expr,rest,p+l,len,def,expMacro); 02705 len+=l; 02706 } 02707 02708 if (replaced) // expand the macro and rescan the expression 02709 { 02710 02711 //printf("replacing `%s'->`%s'\n",expr.mid(p,len).data(),expMacro.data()); 02712 QCString resultExpr=expMacro; 02713 QCString restExpr=expr.right(expr.length()-len-p); 02714 processConcatOperators(resultExpr); 02715 if (!def->nonRecursive) 02716 { 02717 g_expandedDict->insert(macroName,def); 02718 expandExpression(resultExpr,&restExpr,0); 02719 g_expandedDict->remove(macroName); 02720 } 02721 expr=expr.left(p)+resultExpr+restExpr; 02722 i=p; 02723 //printf("new expression: %s\n",expr.data()); 02724 } 02725 else // move to the next macro name 02726 { 02727 //printf("moving to the next macro old=%d new=%d\n",i,p+l); 02728 i=p+l; 02729 } 02730 } 02731 else // move to the next macro name 02732 { 02733 expr=expr.left(p)+"@-"+expr.right(expr.length()-p); 02734 //printf("macro already expanded, moving to the next macro expr=%s\n",expr.data()); 02735 i=p+l+2; 02736 //i=p+l; 02737 } 02738 } 02739 else // no re-scan marker found, skip the macro name 02740 { 02741 //printf("skipping marked macro\n"); 02742 i=p+l; 02743 } 02744 } 02745 } 02746 02751 QCString removeIdsAndMarkers(const char *s) 02752 { 02753 //printf("removeIdsAndMarkers(%s)\n",s); 02754 const char *p=s; 02755 char c; 02756 bool inNum=FALSE; 02757 QCString result; 02758 if (p) 02759 { 02760 while ((c=*p)) 02761 { 02762 if (c=='@') // replace @@ with @ and remove @E 02763 { 02764 if (*(p+1)=='@') 02765 { 02766 result+=c; 02767 } 02768 else if (*(p+1)=='E') 02769 { 02770 // skip 02771 } 02772 p+=2; 02773 } 02774 else if (isdigit(c)) // number 02775 { 02776 result+=c; 02777 p++; 02778 inNum=TRUE; 02779 } 02780 else if (c=='d' && !inNum) // identifier starting with a `d' 02781 { 02782 if (strncmp(p,"defined ",8)==0 || strncmp(p,"defined(",8)==0) 02783 // defined keyword 02784 { 02785 p+=7; // skip defined 02786 } 02787 else 02788 { 02789 result+="0L"; 02790 p++; 02791 while ((c=*p) && isId(c)) p++; 02792 } 02793 } 02794 else if ((isalpha(c) || c=='_') && !inNum) // replace identifier with 0L 02795 { 02796 result+="0L"; 02797 p++; 02798 while ((c=*p) && isId(c)) p++; 02799 } 02800 else if (c=='/') // skip C comments 02801 { 02802 char pc=c; 02803 c=*++p; 02804 if (c=='*') // start of C comment 02805 { 02806 while (*p && !(pc=='*' && c=='/')) // search end of comment 02807 { 02808 pc=c; 02809 c=*++p; 02810 } 02811 p++; 02812 } 02813 else // oops, not comment but division 02814 { 02815 result+=pc; 02816 goto nextChar; 02817 } 02818 } 02819 else 02820 { 02821 nextChar: 02822 result+=c; 02823 char lc=tolower(c); 02824 if (!isId(lc) && lc!='.' && lc!='-' && lc!='+') inNum=FALSE; 02825 p++; 02826 } 02827 } 02828 } 02829 //printf("removeIdsAndMarkers(%s)=%s\n",s,result.data()); 02830 return result; 02831 } 02832 02837 QCString removeMarkers(const char *s) 02838 { 02839 const char *p=s; 02840 char c; 02841 QCString result; 02842 if (p) 02843 { 02844 while ((c=*p)) 02845 { 02846 switch(c) 02847 { 02848 case '@': // replace @@ with @ 02849 { 02850 if (*(p+1)=='@') 02851 { 02852 result+=c; 02853 } 02854 p+=2; 02855 } 02856 break; 02857 case '/': // skip C comments 02858 { 02859 result+=c; 02860 char pc=c; 02861 c=*++p; 02862 if (c=='*') // start of C comment 02863 { 02864 while (*p && !(pc=='*' && c=='/')) // search end of comment 02865 { 02866 if (*p=='@' && *(p+1)=='@') 02867 result+=c,p++; 02868 else 02869 result+=c; 02870 pc=c; 02871 c=*++p; 02872 } 02873 if (*p) 02874 { 02875 result+=c; 02876 p++; 02877 } 02878 } 02879 } 02880 break; 02881 case '"': // skip string literals 02882 { 02883 result+=c; 02884 char pc=c; 02885 c=*++p; 02886 while (*p && (c!='"' || pc=='\\')) // no end quote 02887 { 02888 result+=c; 02889 c=*++p; 02890 } 02891 } 02892 break; 02893 case '\'': // skip char literals 02894 { 02895 result+=c; 02896 char pc=c; 02897 c=*++p; 02898 while (*p && (c!='\'' || pc=='\\')) // no end quote 02899 { 02900 result+=c; 02901 c=*++p; 02902 } 02903 } 02904 break; 02905 default: 02906 { 02907 result+=c; 02908 p++; 02909 } 02910 break; 02911 } 02912 } 02913 } 02914 //printf("RemoveMarkers(%s)=%s\n",s,result.data()); 02915 return result; 02916 } 02917 02922 bool computeExpression(const QCString &expr) 02923 { 02924 QCString e=expr; 02925 expandExpression(e,0,0); 02926 //printf("after expansion `%s'\n",e.data()); 02927 e = removeIdsAndMarkers(e); 02928 if (e.isEmpty()) return FALSE; 02929 //printf("parsing `%s'\n",e.data()); 02930 return parseCppExpression(g_yyFileName,g_yyLineNr,e); 02931 } 02932 02937 QCString expandMacro(const QCString &name) 02938 { 02939 QCString n=name; 02940 expandExpression(n,0,0); 02941 n=removeMarkers(n); 02942 //printf("expandMacro `%s'->`%s'\n",name.data(),n.data()); 02943 return n; 02944 } 02945 02946 Define *newDefine() 02947 { 02948 Define *def=new Define; 02949 def->name = g_defName; 02950 def->definition = g_defText.stripWhiteSpace(); 02951 def->nargs = g_defArgs; 02952 def->fileName = g_yyFileName; 02953 def->lineNr = g_yyLineNr; 02954 def->varArgs = g_defVarArgs; 02955 //printf("newDefine: `%s'->`%s'\n",def->name.data(),def->definition.data()); 02956 if (!def->name.isEmpty() && Doxygen::expandAsDefinedDict[def->name]) 02957 { 02958 def->isPredefined=TRUE; 02959 } 02960 return def; 02961 } 02962 02963 void addDefine() 02964 { 02965 if (g_skip) return; // do not add this define as it is inside a 02966 // conditional section (cond command) that is disabled. 02967 if (!Doxygen::gatherDefines) return; 02968 02969 //printf("addDefine %s %s\n",g_defName.data(),g_defArgsStr.data()); 02970 //ArgumentList *al = new ArgumentList; 02971 //stringToArgumentList(g_defArgsStr,al); 02972 MemberDef *md=new MemberDef( 02973 g_yyFileName,g_yyLineNr, 02974 "#define",g_defName,g_defArgsStr,0, 02975 Public,Normal,FALSE,FALSE,MemberDef::Define,0,0); 02976 if (!g_defArgsStr.isEmpty()) 02977 { 02978 ArgumentList *argList = new ArgumentList; 02979 //printf("addDefine() g_defName=`%s' g_defArgsStr=`%s'\n",g_defName.data(),g_defArgsStr.data()); 02980 stringToArgumentList(g_defArgsStr,argList); 02981 md->setArgumentList(argList); 02982 } 02983 //printf("Setting initializer for `%s' to `%s'\n",g_defName.data(),g_defText.data()); 02984 int l=g_defLitText.find('\n'); 02985 if (l>0 && g_defLitText.left(l).stripWhiteSpace()=="\\") 02986 { 02987 // strip first line if it only contains a slash 02988 g_defLitText = g_defLitText.right(g_defLitText.length()-l-1); 02989 } 02990 else if (l>0) 02991 { 02992 // align the items on the first line with the items on the second line 02993 int k=l+1; 02994 const char *p=g_defLitText.data()+k; 02995 char c; 02996 while ((c=*p++) && (c==' ' || c=='\t')) k++; 02997 g_defLitText=g_defLitText.mid(l+1,k-l-1)+g_defLitText.stripWhiteSpace(); 02998 } 02999 md->setInitializer(g_defLitText.stripWhiteSpace()); 03000 03001 md->setFileDef(g_inputFileDef); 03002 md->setDefinition("#define "+g_defName); 03003 03004 MemberName *mn=Doxygen::functionNameSDict->find(g_defName); 03005 if (mn==0) 03006 { 03007 mn = new MemberName(g_defName); 03008 Doxygen::functionNameSDict->append(g_defName,mn); 03009 } 03010 mn->append(md); 03011 if (g_yyFileDef) g_yyFileDef->insertMember(md); 03012 03013 //Define *d; 03014 //if ((d=defineDict[g_defName])==0) defineDict.insert(g_defName,newDefine()); 03015 } 03016 03017 static inline void outputChar(char c) 03018 { 03019 if (g_includeStack.isEmpty() || g_curlyCount>0) g_outputBuf->addChar(c); 03020 } 03021 03022 static inline void outputArray(const char *a,int len) 03023 { 03024 if (g_includeStack.isEmpty() || g_curlyCount>0) g_outputBuf->addArray(a,len); 03025 } 03026 03027 static void readIncludeFile(const QCString &inc) 03028 { 03029 if (!Config_getBool("SEARCH_INCLUDES")) return; // do not read include files 03030 uint i=0; 03031 03032 // find the start of the include file name 03033 while (i<inc.length() && 03034 (inc.at(i)==' ' || inc.at(i)=='"' || inc.at(i)=='<') 03035 ) i++; 03036 uint s=i; 03037 03038 // was it a local include? 03039 bool localInclude = s>0 && inc.at(s-1)=='"'; 03040 03041 // find the end of the include file name 03042 while (i<inc.length() && inc.at(i)!='"' && inc.at(i)!='>') i++; 03043 03044 if (s<inc.length() && i>s) // valid include file name found 03045 { 03046 // extract include path+name 03047 QCString incFileName=inc.mid(s,i-s).stripWhiteSpace(); 03048 03049 FILE *f; 03050 QCString oldFileName = g_yyFileName.copy(); 03051 FileDef *oldFileDef = g_yyFileDef; 03052 int oldLineNr = g_yyLineNr; 03053 //printf("Searching for `%s'\n",incFileName.data()); 03054 03055 // findFile will overwrite g_yyFileDef if found 03056 if ((f=findFile(incFileName,localInclude))) // see if the include file can be found 03057 { 03058 //printf("Found include file!\n"); 03059 if (Debug::isFlagSet(Debug::Preprocessor)) 03060 { 03061 for (i=0;i<g_includeStack.count();i++) msg(" "); 03062 msg("#include %s: parsing...\n",incFileName.data()); 03063 } 03064 if (oldFileDef) 03065 { 03066 // add include dependency to the file in which the #include was found 03067 oldFileDef->addIncludeDependency(g_yyFileDef,incFileName,localInclude,g_isImported); 03068 // add included by dependency 03069 if (g_yyFileDef) 03070 { 03071 //printf("Adding include dependency %s->%s\n",oldFileDef->name().data(),incFileName.data()); 03072 g_yyFileDef->addIncludedByDependency(oldFileDef,oldFileDef->docName(),localInclude,g_isImported); 03073 } 03074 } 03075 FileState *fs=new FileState; 03076 fs->bufState=YY_CURRENT_BUFFER; 03077 fs->lineNr=oldLineNr; 03078 fs->fileName=oldFileName; 03079 fs->filePtr=f; 03080 // push the state on the stack 03081 g_includeStack.push(fs); 03082 // set the scanner to the include file 03083 03084 // Deal with file changes due to 03085 // #include's within { .. } blocks 03086 QCString lineStr; 03087 lineStr.sprintf("# 1 \"%s\" 1\n",g_yyFileName.data()); 03088 outputArray(lineStr.data(),lineStr.length()); 03089 03090 //fprintf(stderr,"Switching to include file %s\n",incFileName.data()); 03091 preYYin=f; 03092 preYY_switch_to_buffer(preYY_create_buffer(preYYin,YY_BUF_SIZE)); 03093 } 03094 else 03095 { 03096 if (oldFileDef) 03097 { 03098 bool ambig; 03099 FileDef *fd = findFileDef(Doxygen::inputNameDict,incFileName,ambig); 03100 //printf("findFileDef(%s)=%p\n",incFileName.data(),fd); 03101 // add include dependency to the file in which the #include was found 03102 oldFileDef->addIncludeDependency(fd,incFileName,localInclude,g_isImported); 03103 // add included by dependency 03104 if (fd) 03105 { 03106 //printf("Adding include dependency (2) %s->%s ambig=%d\n",oldFileDef->name().data(),fd->name().data(),ambig); 03107 fd->addIncludedByDependency(oldFileDef,oldFileDef->docName(),localInclude,g_isImported); 03108 } 03109 } 03110 if (Debug::isFlagSet(Debug::Preprocessor)) 03111 { 03112 msg("#include %s: not found or already included! skipping...\n",incFileName.data()); 03113 //printf("Error: include file %s not found\n",preYYtext); 03114 } 03115 if (g_curlyCount>0) // failed to find #include inside { ... } 03116 { 03117 warn(g_yyFileName,g_yyLineNr,"Warning: include file %s not found, perhaps you forgot to add its directory to INCLUDE_PATH?",incFileName.data()); 03118 } 03119 } 03120 } 03121 } 03122 03123 /* ----------------------------------------------------------------- */ 03124 03125 static void startCondSection(const char *sectId) 03126 { 03127 g_condStack.push(new bool(g_skip)); 03128 if (Config_getList("ENABLED_SECTIONS").find(sectId)==-1) 03129 { 03130 g_skip=TRUE; 03131 } 03132 } 03133 03134 static void endCondSection() 03135 { 03136 if (g_condStack.isEmpty()) 03137 { 03138 g_skip=FALSE; 03139 } 03140 else 03141 { 03142 bool *ctx = g_condStack.pop(); 03143 g_skip=*ctx; 03144 } 03145 } 03146 03147 static QCString escapeAt(const char *text) 03148 { 03149 QCString result; 03150 if (text) 03151 { 03152 char c; 03153 const char *p=text; 03154 while ((c=*p++)) 03155 { 03156 if (c=='@') result+="@@"; else result+=c; 03157 } 03158 } 03159 return result; 03160 } 03161 03162 static char resolveTrigraph(char c) 03163 { 03164 switch (c) 03165 { 03166 case '=': return '#'; 03167 case '/': return '\\'; 03168 case '\'': return '^'; 03169 case '(': return '['; 03170 case ')': return ']'; 03171 case '!': return '|'; 03172 case '<': return '{'; 03173 case '>': return '}'; 03174 case '-': return '~'; 03175 } 03176 return '?'; 03177 } 03178 03179 /* ----------------------------------------------------------------- */ 03180 03181 #undef YY_INPUT 03182 #define YY_INPUT(buf,result,max_size) result=yyread(buf,max_size); 03183 03184 static int yyread(char *buf,int max_size) 03185 { 03186 int len = fread( buf, 1, max_size, preYYin ); 03187 if (len==0 && ferror( preYYin )) 03188 { 03189 yy_fatal_error( "input in flex scanner failed" ); 03190 return len; 03191 } 03192 return filterCRLF(buf,len); 03193 } 03194 03195 /* ----------------------------------------------------------------- */ 03196 03197 03198 03199 03200 03201 03202 03203 03204 03205 03206 03207 03208 03209 03210 03211 03212 03213 03214 03215 03216 03217 03218 03219 03220 03221 03222 03223 03224 03225 03226 03227 03228 #line 3229 "<stdout>" 03229 03230 #define INITIAL 0 03231 #define Start 1 03232 #define Command 2 03233 #define SkipCommand 3 03234 #define SkipLine 4 03235 #define CopyLine 5 03236 #define CopyString 6 03237 #define Include 7 03238 #define IncludeID 8 03239 #define EndImport 9 03240 #define DefName 10 03241 #define DefineArg 11 03242 #define DefineText 12 03243 #define SkipCPPBlock 13 03244 #define Ifdef 14 03245 #define Ifndef 15 03246 #define SkipCComment 16 03247 #define CopyCComment 17 03248 #define SkipVerbatim 18 03249 #define SkipCPPComment 19 03250 #define RemoveCComment 20 03251 #define RemoveCPPComment 21 03252 #define Guard 22 03253 #define DefinedExpr1 23 03254 #define DefinedExpr2 24 03255 #define SkipDoubleQuote 25 03256 #define SkipSingleQuote 26 03257 #define UndefName 27 03258 #define IgnoreLine 28 03259 #define FindDefineArgs 29 03260 #define ReadString 30 03261 #define CondLine 31 03262 03263 #ifndef YY_NO_UNISTD_H 03264 /* Special case for "unistd.h", since it is non-ANSI. We include it way 03265 * down here because we want the user's section 1 to have been scanned first. 03266 * The user has a chance to override it with an option. 03267 */ 03268 #include <unistd.h> 03269 #endif 03270 03271 #ifndef YY_EXTRA_TYPE 03272 #define YY_EXTRA_TYPE void * 03273 #endif 03274 03275 static int yy_init_globals (void ); 03276 03277 /* Macros after this point can all be overridden by user definitions in 03278 * section 1. 03279 */ 03280 03281 #ifndef YY_SKIP_YYWRAP 03282 #ifdef __cplusplus 03283 extern "C" int preYYwrap (void ); 03284 #else 03285 extern int preYYwrap (void ); 03286 #endif 03287 #endif 03288 03289 static void yyunput (int c,char *buf_ptr ); 03290 03291 #ifndef yytext_ptr 03292 static void yy_flex_strncpy (char *,yyconst char *,int ); 03293 #endif 03294 03295 #ifdef YY_NEED_STRLEN 03296 static int yy_flex_strlen (yyconst char * ); 03297 #endif 03298 03299 #ifndef YY_NO_INPUT 03300 03301 #ifdef __cplusplus 03302 static int yyinput (void ); 03303 #else 03304 static int input (void ); 03305 #endif 03306 03307 #endif 03308 03309 /* Amount of stuff to slurp up with each read. */ 03310 #ifndef YY_READ_BUF_SIZE 03311 #define YY_READ_BUF_SIZE 8192 03312 #endif 03313 03314 /* Copy whatever the last rule matched to the standard output. */ 03315 #ifndef ECHO 03316 /* This used to be an fputs(), but since the string might contain NUL's, 03317 * we now use fwrite(). 03318 */ 03319 #define ECHO (void) fwrite( preYYtext, preYYleng, 1, preYYout ) 03320 #endif 03321 03322 /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, 03323 * is returned in "result". 03324 */ 03325 #ifndef YY_INPUT 03326 #define YY_INPUT(buf,result,max_size) \ 03327 if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ 03328 { \ 03329 int c = '*'; \ 03330 size_t n; \ 03331 for ( n = 0; n < max_size && \ 03332 (c = getc( preYYin )) != EOF && c != '\n'; ++n ) \ 03333 buf[n] = (char) c; \ 03334 if ( c == '\n' ) \ 03335 buf[n++] = (char) c; \ 03336 if ( c == EOF && ferror( preYYin ) ) \ 03337 YY_FATAL_ERROR( "input in flex scanner failed" ); \ 03338 result = n; \ 03339 } \ 03340 else \ 03341 { \ 03342 errno=0; \ 03343 while ( (result = fread(buf, 1, max_size, preYYin))==0 && ferror(preYYin)) \ 03344 { \ 03345 if( errno != EINTR) \ 03346 { \ 03347 YY_FATAL_ERROR( "input in flex scanner failed" ); \ 03348 break; \ 03349 } \ 03350 errno=0; \ 03351 clearerr(preYYin); \ 03352 } \ 03353 }\ 03354 \ 03355 03356 #endif 03357 03358 /* No semi-colon after return; correct usage is to write "yyterminate();" - 03359 * we don't want an extra ';' after the "return" because that will cause 03360 * some compilers to complain about unreachable statements. 03361 */ 03362 #ifndef yyterminate 03363 #define yyterminate() return YY_NULL 03364 #endif 03365 03366 /* Number of entries by which start-condition stack grows. */ 03367 #ifndef YY_START_STACK_INCR 03368 #define YY_START_STACK_INCR 25 03369 #endif 03370 03371 /* Report a fatal error. */ 03372 #ifndef YY_FATAL_ERROR 03373 #define YY_FATAL_ERROR(msg) yy_fatal_error( msg ) 03374 #endif 03375 03376 /* end tables serialization structures and prototypes */ 03377 03378 /* Default declaration of generated scanner - a define so the user can 03379 * easily add parameters. 03380 */ 03381 #ifndef YY_DECL 03382 #define YY_DECL_IS_OURS 1 03383 03384 extern int preYYlex (void); 03385 03386 #define YY_DECL int preYYlex (void) 03387 #endif /* !YY_DECL */ 03388 03389 /* Code executed at the beginning of each rule, after preYYtext and preYYleng 03390 * have been set up. 03391 */ 03392 #ifndef YY_USER_ACTION 03393 #define YY_USER_ACTION 03394 #endif 03395 03396 /* Code executed at the end of each rule. */ 03397 #ifndef YY_BREAK 03398 #define YY_BREAK break; 03399 #endif 03400 03401 #define YY_RULE_SETUP \ 03402 if ( preYYleng > 0 ) \ 03403 YY_CURRENT_BUFFER_LVALUE->yy_at_bol = \ 03404 (preYYtext[preYYleng - 1] == '\n'); \ 03405 YY_USER_ACTION 03406 03409 YY_DECL 03410 { 03411 register yy_state_type yy_current_state; 03412 register char *yy_cp, *yy_bp; 03413 register int yy_act; 03414 03415 #line 1293 "pre.l" 03416 03417 03418 #line 3419 "<stdout>" 03419 03420 if ( !(yy_init) ) 03421 { 03422 (yy_init) = 1; 03423 03424 #ifdef YY_USER_INIT 03425 YY_USER_INIT; 03426 #endif 03427 03428 /* Create the reject buffer large enough to save one state per allowed character. */ 03429 if ( ! (yy_state_buf) ) 03430 (yy_state_buf) = (yy_state_type *)preYYalloc(YY_STATE_BUF_SIZE ); 03431 03432 if ( ! (yy_start) ) 03433 (yy_start) = 1; /* first start state */ 03434 03435 if ( ! preYYin ) 03436 preYYin = stdin; 03437 03438 if ( ! preYYout ) 03439 preYYout = stdout; 03440 03441 if ( ! YY_CURRENT_BUFFER ) { 03442 preYYensure_buffer_stack (); 03443 YY_CURRENT_BUFFER_LVALUE = 03444 preYY_create_buffer(preYYin,YY_BUF_SIZE ); 03445 } 03446 03447 preYY_load_buffer_state( ); 03448 } 03449 03450 while ( 1 ) /* loops until end-of-file is reached */ 03451 { 03452 yy_cp = (yy_c_buf_p); 03453 03454 /* Support of preYYtext. */ 03455 *yy_cp = (yy_hold_char); 03456 03457 /* yy_bp points to the position in yy_ch_buf of the start of 03458 * the current run. 03459 */ 03460 yy_bp = yy_cp; 03461 03462 yy_current_state = (yy_start); 03463 yy_current_state += YY_AT_BOL(); 03464 03465 (yy_state_ptr) = (yy_state_buf); 03466 *(yy_state_ptr)++ = yy_current_state; 03467 03468 yy_match: 03469 do 03470 { 03471 register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; 03472 while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) 03473 { 03474 yy_current_state = (int) yy_def[yy_current_state]; 03475 if ( yy_current_state >= 1056 ) 03476 yy_c = yy_meta[(unsigned int) yy_c]; 03477 } 03478 yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; 03479 *(yy_state_ptr)++ = yy_current_state; 03480 ++yy_cp; 03481 } 03482 while ( yy_base[yy_current_state] != 4450 ); 03483 03484 yy_find_action: 03485 yy_current_state = *--(yy_state_ptr); 03486 (yy_lp) = yy_accept[yy_current_state]; 03487 find_rule: /* we branch to this label when backing up */ 03488 for ( ; ; ) /* until we find what rule we matched */ 03489 { 03490 if ( (yy_lp) && (yy_lp) < yy_accept[yy_current_state + 1] ) 03491 { 03492 yy_act = yy_acclist[(yy_lp)]; 03493 if ( yy_act & YY_TRAILING_HEAD_MASK || 03494 yy_looking_for_trail_begin ) 03495 { 03496 if ( yy_act == yy_looking_for_trail_begin ) 03497 { 03498 yy_looking_for_trail_begin = 0; 03499 yy_act &= ~YY_TRAILING_HEAD_MASK; 03500 break; 03501 } 03502 } 03503 else if ( yy_act & YY_TRAILING_MASK ) 03504 { 03505 yy_looking_for_trail_begin = yy_act & ~YY_TRAILING_MASK; 03506 yy_looking_for_trail_begin |= YY_TRAILING_HEAD_MASK; 03507 } 03508 else 03509 { 03510 (yy_full_match) = yy_cp; 03511 yy_full_state = (yy_state_ptr); 03512 yy_full_lp = (yy_lp); 03513 break; 03514 } 03515 ++(yy_lp); 03516 goto find_rule; 03517 } 03518 --yy_cp; 03519 yy_current_state = *--(yy_state_ptr); 03520 (yy_lp) = yy_accept[yy_current_state]; 03521 } 03522 03523 YY_DO_BEFORE_ACTION; 03524 03525 do_action: /* This label is used only to access EOF actions. */ 03526 03527 switch ( yy_act ) 03528 { /* beginning of action switch */ 03529 case 1: 03530 YY_RULE_SETUP 03531 #line 1295 "pre.l" 03532 03533 YY_BREAK 03534 case 2: 03535 YY_RULE_SETUP 03536 #line 1296 "pre.l" 03537 03538 YY_BREAK 03539 case 3: 03540 YY_RULE_SETUP 03541 #line 1297 "pre.l" 03542 03543 YY_BREAK 03544 case 4: 03545 YY_RULE_SETUP 03546 #line 1298 "pre.l" 03547 { // Trigraph 03548 unput(resolveTrigraph(preYYtext[2])); 03549 } 03550 YY_BREAK 03551 case 5: 03552 YY_RULE_SETUP 03553 #line 1301 "pre.l" 03554 { BEGIN(Command); } 03555 YY_BREAK 03556 case 6: 03557 /* rule 6 can match eol */ 03558 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */ 03559 (yy_c_buf_p) = yy_cp -= 1; 03560 YY_DO_BEFORE_ACTION; /* set up preYYtext again */ 03561 YY_RULE_SETUP 03562 #line 1302 "pre.l" 03563 { 03564 outputArray(preYYtext,preYYleng); 03565 BEGIN(CopyLine); 03566 } 03567 YY_BREAK 03568 case 7: 03569 /* rule 7 can match eol */ 03570 YY_RULE_SETUP 03571 #line 1306 "pre.l" 03572 { // constructors? 03573 int i; 03574 for (i=preYYleng-1;i>=0;i--) 03575 { 03576 unput(preYYtext[i]); 03577 } 03578 BEGIN(CopyLine); 03579 } 03580 YY_BREAK 03581 case 8: 03582 /* rule 8 can match eol */ 03583 YY_RULE_SETUP 03584 #line 1314 "pre.l" 03585 { // function like macro 03586 static bool skipFuncMacros = Config_getBool("SKIP_FUNCTION_MACROS"); 03587 QCString name(preYYtext); 03588 name=name.left(name.find('(')).stripWhiteSpace(); 03589 03590 Define *def=0; 03591 if (skipFuncMacros && 03592 name!="Q_PROPERTY" && 03593 !( 03594 (g_includeStack.isEmpty() || g_curlyCount>0) && 03595 g_macroExpansion && 03596 (def=g_fileDefineDict->find(name)) && 03597 (!g_expandOnlyPredef || def->isPredefined) 03598 ) 03599 ) 03600 { 03601 outputChar('\n'); 03602 g_yyLineNr++; 03603 } 03604 else // don't skip 03605 { 03606 int i; 03607 for (i=preYYleng-1;i>=0;i--) 03608 { 03609 unput(preYYtext[i]); 03610 } 03611 BEGIN(CopyLine); 03612 } 03613 } 03614 YY_BREAK 03615 case 9: 03616 /* rule 9 can match eol */ 03617 YY_RULE_SETUP 03618 #line 1343 "pre.l" 03619 { 03620 QCString text=preYYtext; 03621 g_yyLineNr+=text.contains('\n'); 03622 outputArray(preYYtext,preYYleng); 03623 } 03624 YY_BREAK 03625 case 10: 03626 YY_RULE_SETUP 03627 #line 1348 "pre.l" 03628 { // count brackets inside the main file 03629 if (g_includeStack.isEmpty()) 03630 { 03631 g_curlyCount++; 03632 } 03633 outputChar(*preYYtext); 03634 } 03635 YY_BREAK 03636 case 11: 03637 YY_RULE_SETUP 03638 #line 1355 "pre.l" 03639 { // count brackets inside the main file 03640 if (g_includeStack.isEmpty() && g_curlyCount>0) 03641 { 03642 g_curlyCount--; 03643 } 03644 outputChar(*preYYtext); 03645 } 03646 YY_BREAK 03647 case 12: 03648 YY_RULE_SETUP 03649 #line 1362 "pre.l" 03650 { 03651 outputArray(preYYtext,preYYleng); 03652 } 03653 YY_BREAK 03654 case 13: 03655 YY_RULE_SETUP 03656 #line 1365 "pre.l" 03657 { 03658 outputArray(preYYtext,preYYleng); 03659 } 03660 YY_BREAK 03661 case 14: 03662 YY_RULE_SETUP 03663 #line 1368 "pre.l" 03664 { 03665 outputArray(preYYtext,preYYleng); 03666 } 03667 YY_BREAK 03668 case 15: 03669 YY_RULE_SETUP 03670 #line 1371 "pre.l" 03671 { 03672 outputChar(*preYYtext); 03673 BEGIN( CopyString ); 03674 } 03675 YY_BREAK 03676 case 16: 03677 YY_RULE_SETUP 03678 #line 1375 "pre.l" 03679 { 03680 outputArray(preYYtext,preYYleng); 03681 } 03682 YY_BREAK 03683 case 17: 03684 YY_RULE_SETUP 03685 #line 1378 "pre.l" 03686 { 03687 outputArray(preYYtext,preYYleng); 03688 } 03689 YY_BREAK 03690 case 18: 03691 YY_RULE_SETUP 03692 #line 1381 "pre.l" 03693 { 03694 outputChar(*preYYtext); 03695 BEGIN( CopyLine ); 03696 } 03697 YY_BREAK 03698 case 19: 03699 /* rule 19 can match eol */ 03700 YY_RULE_SETUP 03701 #line 1385 "pre.l" 03702 { 03703 Define *def=0; 03704 //def=g_fileDefineDict->find(preYYtext); 03705 //printf("Search for define %s found=%d g_includeStack.isEmpty()=%d " 03706 // "g_curlyCount=%d g_macroExpansion=%d g_expandOnlyPredef=%d " 03707 // "isPreDefined=%d\n",preYYtext,def ? 1 : 0, 03708 // g_includeStack.isEmpty(),g_curlyCount,g_macroExpansion,g_expandOnlyPredef, 03709 // def ? def->isPredefined : -1 03710 // ); 03711 if ((g_includeStack.isEmpty() || g_curlyCount>0) && 03712 g_macroExpansion && 03713 (def=g_fileDefineDict->find(preYYtext)) && 03714 (!g_expandOnlyPredef || def->isPredefined) 03715 ) 03716 { 03717 //printf("Found it!\n"); 03718 g_roundCount=0; 03719 g_defArgsStr=preYYtext; 03720 if (def->nargs==-1) // no function macro 03721 { 03722 QCString result = expandMacro(g_defArgsStr); 03723 outputArray(result,result.length()); 03724 } 03725 else // zero or more arguments 03726 { 03727 g_findDefArgContext = CopyLine; 03728 BEGIN(FindDefineArgs); 03729 } 03730 } 03731 else 03732 { 03733 outputArray(preYYtext,preYYleng); 03734 } 03735 } 03736 YY_BREAK 03737 case 20: 03738 YY_RULE_SETUP 03739 #line 1419 "pre.l" 03740 { 03741 Define *def=0; 03742 //printf("Search for define %s\n",preYYtext); 03743 if ((g_includeStack.isEmpty() || g_curlyCount>0) && 03744 g_macroExpansion && 03745 (def=g_fileDefineDict->find(preYYtext)) && 03746 def->nargs==-1 && 03747 (!g_expandOnlyPredef || def->isPredefined) 03748 ) 03749 { 03750 //printf("Found it!\n"); 03751 QCString name=preYYtext; 03752 QCString result=expandMacro(name); 03753 //printf("result=`%s'\n",result.data()); 03754 outputArray(result,result.length()); 03755 } 03756 else 03757 { 03758 outputArray(preYYtext,preYYleng); 03759 } 03760 } 03761 YY_BREAK 03762 case 21: 03763 /* rule 21 can match eol */ 03764 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */ 03765 (yy_c_buf_p) = yy_cp -= 1; 03766 YY_DO_BEFORE_ACTION; /* set up preYYtext again */ 03767 YY_RULE_SETUP 03768 #line 1440 "pre.l" 03769 { // strip line continuation characters 03770 } 03771 YY_BREAK 03772 case 22: 03773 YY_RULE_SETUP 03774 #line 1442 "pre.l" 03775 { 03776 outputChar(*preYYtext); 03777 } 03778 YY_BREAK 03779 case 23: 03780 /* rule 23 can match eol */ 03781 YY_RULE_SETUP 03782 #line 1445 "pre.l" 03783 { 03784 outputChar('\n'); 03785 BEGIN(Start); 03786 g_yyLineNr++; 03787 } 03788 YY_BREAK 03789 case 24: 03790 YY_RULE_SETUP 03791 #line 1450 "pre.l" 03792 { 03793 g_defArgsStr+='('; 03794 g_roundCount++; 03795 } 03796 YY_BREAK 03797 case 25: 03798 YY_RULE_SETUP 03799 #line 1454 "pre.l" 03800 { 03801 g_defArgsStr+=')'; 03802 g_roundCount--; 03803 if (g_roundCount==0) 03804 { 03805 QCString result=expandMacro(g_defArgsStr); 03806 //printf("g_defArgsStr=`%s'->`%s'\n",g_defArgsStr.data(),result.data()); 03807 if (g_findDefArgContext==CopyLine) 03808 { 03809 outputArray(result,result.length()); 03810 BEGIN(g_findDefArgContext); 03811 } 03812 else // g_findDefArgContext==IncludeID 03813 { 03814 readIncludeFile(result); 03815 g_nospaces=FALSE; 03816 BEGIN(Start); 03817 } 03818 } 03819 } 03820 YY_BREAK 03821 /* 03822 <FindDefineArgs>")"{B}*"(" { 03823 g_defArgsStr+=preYYtext; 03824 } 03825 */ 03826 case 26: 03827 YY_RULE_SETUP 03828 #line 1479 "pre.l" 03829 { 03830 g_defArgsStr+=preYYtext; 03831 } 03832 YY_BREAK 03833 case 27: 03834 YY_RULE_SETUP 03835 #line 1482 "pre.l" 03836 { 03837 g_defArgsStr+=*preYYtext; 03838 BEGIN(ReadString); 03839 } 03840 YY_BREAK 03841 case 28: 03842 /* rule 28 can match eol */ 03843 YY_RULE_SETUP 03844 #line 1486 "pre.l" 03845 { 03846 g_yyLineNr++; 03847 outputChar('\n'); 03848 } 03849 YY_BREAK 03850 case 29: 03851 YY_RULE_SETUP 03852 #line 1490 "pre.l" 03853 { 03854 g_defArgsStr+="@@"; 03855 } 03856 YY_BREAK 03857 case 30: 03858 YY_RULE_SETUP 03859 #line 1493 "pre.l" 03860 { 03861 g_defArgsStr+=*preYYtext; 03862 } 03863 YY_BREAK 03864 case 31: 03865 YY_RULE_SETUP 03866 #line 1496 "pre.l" 03867 { 03868 g_defArgsStr+=*preYYtext; 03869 BEGIN(FindDefineArgs); 03870 } 03871 YY_BREAK 03872 case 32: 03873 YY_RULE_SETUP 03874 #line 1500 "pre.l" 03875 { 03876 g_defArgsStr+=preYYtext; 03877 } 03878 YY_BREAK 03879 case 33: 03880 YY_RULE_SETUP 03881 #line 1503 "pre.l" 03882 { 03883 g_defArgsStr+=preYYtext; 03884 } 03885 YY_BREAK 03886 case 34: 03887 YY_RULE_SETUP 03888 #line 1506 "pre.l" 03889 { 03890 g_defArgsStr+=*preYYtext; 03891 } 03892 YY_BREAK 03893 case 35: 03894 YY_RULE_SETUP 03895 #line 1509 "pre.l" 03896 { 03897 g_isImported = preYYtext[1]=='m'; 03898 if (g_macroExpansion) 03899 BEGIN(IncludeID); 03900 } 03901 YY_BREAK 03902 case 36: 03903 YY_RULE_SETUP 03904 #line 1514 "pre.l" 03905 { 03906 g_isImported = preYYtext[1]=='m'; 03907 char c[2]; 03908 c[0]=preYYtext[preYYleng-1];c[1]='\0'; 03909 g_incName=c; 03910 BEGIN(Include); 03911 } 03912 YY_BREAK 03913 case 37: 03914 YY_RULE_SETUP 03915 #line 1521 "pre.l" 03916 { 03917 //printf("!!!DefName\n"); 03918 BEGIN(DefName); 03919 } 03920 YY_BREAK 03921 case 38: 03922 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */ 03923 (yy_c_buf_p) = yy_cp = yy_bp + 5; 03924 YY_DO_BEFORE_ACTION; /* set up preYYtext again */ 03925 YY_RULE_SETUP 03926 #line 1525 "pre.l" 03927 { 03928 incrLevel(); 03929 g_guardExpr.resize(0); 03930 BEGIN(DefinedExpr2); 03931 } 03932 YY_BREAK 03933 case 39: 03934 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */ 03935 (yy_c_buf_p) = yy_cp = yy_bp + 5; 03936 YY_DO_BEFORE_ACTION; /* set up preYYtext again */ 03937 YY_RULE_SETUP 03938 #line 1530 "pre.l" 03939 { 03940 //printf("Pre.l: ifdef\n"); 03941 incrLevel(); 03942 g_guardExpr.resize(0); 03943 BEGIN(DefinedExpr1); 03944 } 03945 YY_BREAK 03946 case 40: 03947 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */ 03948 (yy_c_buf_p) = yy_cp = yy_bp + 6; 03949 YY_DO_BEFORE_ACTION; /* set up preYYtext again */ 03950 YY_RULE_SETUP 03951 #line 1536 "pre.l" 03952 { 03953 incrLevel(); 03954 g_guardExpr="! "; 03955 BEGIN(DefinedExpr2); 03956 } 03957 YY_BREAK 03958 case 41: 03959 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */ 03960 (yy_c_buf_p) = yy_cp = yy_bp + 6; 03961 YY_DO_BEFORE_ACTION; /* set up preYYtext again */ 03962 YY_RULE_SETUP 03963 #line 1541 "pre.l" 03964 { 03965 incrLevel(); 03966 g_guardExpr="! "; 03967 BEGIN(DefinedExpr1); 03968 } 03969 YY_BREAK 03970 case 42: 03971 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */ 03972 (yy_c_buf_p) = yy_cp = yy_bp + 2; 03973 YY_DO_BEFORE_ACTION; /* set up preYYtext again */ 03974 YY_RULE_SETUP 03975 #line 1546 "pre.l" 03976 { 03977 incrLevel(); 03978 g_guardExpr.resize(0); 03979 BEGIN(Guard); 03980 } 03981 YY_BREAK 03982 case 43: 03983 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */ 03984 (yy_c_buf_p) = yy_cp -= 1; 03985 YY_DO_BEFORE_ACTION; /* set up preYYtext again */ 03986 YY_RULE_SETUP 03987 #line 1551 "pre.l" 03988 { 03989 if (!otherCaseDone()) 03990 { 03991 g_guardExpr.resize(0); 03992 BEGIN(Guard); 03993 } 03994 else 03995 { 03996 g_ifcount=0; 03997 BEGIN(SkipCPPBlock); 03998 } 03999 } 04000 YY_BREAK 04001 case 44: 04002 /* rule 44 can match eol */ 04003 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */ 04004 (yy_c_buf_p) = yy_cp = yy_bp + 4; 04005 YY_DO_BEFORE_ACTION; /* set up preYYtext again */ 04006 YY_RULE_SETUP 04007 #line 1563 "pre.l" 04008 { 04009 //printf("else g_levelGuard[%d]=%d\n",g_level-1,g_levelGuard[g_level-1]); 04010 if (otherCaseDone()) 04011 { 04012 g_ifcount=0; 04013 BEGIN(SkipCPPBlock); 04014 } 04015 else 04016 { 04017 setCaseDone(TRUE); 04018 //g_levelGuard[g_level-1]=TRUE; 04019 } 04020 } 04021 YY_BREAK 04022 case 45: 04023 YY_RULE_SETUP 04024 #line 1576 "pre.l" 04025 { 04026 BEGIN(UndefName); 04027 } 04028 YY_BREAK 04029 case 46: 04030 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */ 04031 (yy_c_buf_p) = yy_cp -= 1; 04032 YY_DO_BEFORE_ACTION; /* set up preYYtext again */ 04033 YY_RULE_SETUP 04034 #line 1579 "pre.l" 04035 { 04036 if (!otherCaseDone()) 04037 { 04038 g_guardExpr.resize(0); 04039 BEGIN(Guard); 04040 } 04041 } 04042 YY_BREAK 04043 case 47: 04044 /* rule 47 can match eol */ 04045 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */ 04046 (yy_c_buf_p) = yy_cp = yy_bp + 5; 04047 YY_DO_BEFORE_ACTION; /* set up preYYtext again */ 04048 YY_RULE_SETUP 04049 #line 1586 "pre.l" 04050 { 04051 //printf("Pre.l: #endif\n"); 04052 decrLevel(); 04053 } 04054 YY_BREAK 04055 case 48: 04056 /* rule 48 can match eol */ 04057 YY_RULE_SETUP 04058 #line 1590 "pre.l" 04059 { 04060 outputChar('\n'); 04061 BEGIN(Start); 04062 g_yyLineNr++; 04063 } 04064 YY_BREAK 04065 case 49: 04066 YY_RULE_SETUP 04067 #line 1595 "pre.l" 04068 { // unknown directive 04069 BEGIN(IgnoreLine); 04070 } 04071 YY_BREAK 04072 case 50: 04073 /* rule 50 can match eol */ 04074 YY_RULE_SETUP 04075 #line 1598 "pre.l" 04076 { 04077 outputChar('\n'); 04078 g_yyLineNr++; 04079 } 04080 YY_BREAK 04081 case 51: 04082 YY_RULE_SETUP 04083 #line 1602 "pre.l" 04084 04085 YY_BREAK 04086 case 52: 04087 YY_RULE_SETUP 04088 #line 1603 "pre.l" 04089 04090 YY_BREAK 04091 case 53: 04092 YY_RULE_SETUP 04093 #line 1604 "pre.l" 04094 { 04095 Define *def; 04096 if ((def=isDefined(preYYtext)) 04097 /*&& !def->isPredefined*/ 04098 && !def->nonRecursive 04099 ) 04100 { 04101 //printf("undefining %s\n",preYYtext); 04102 def->undef=TRUE; 04103 } 04104 BEGIN(Start); 04105 } 04106 YY_BREAK 04107 case 54: 04108 /* rule 54 can match eol */ 04109 YY_RULE_SETUP 04110 #line 1616 "pre.l" 04111 { 04112 outputChar('\n'); 04113 g_guardExpr+=' '; 04114 g_yyLineNr++; 04115 } 04116 YY_BREAK 04117 case 55: 04118 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */ 04119 (yy_c_buf_p) = yy_cp = yy_bp + 7; 04120 YY_DO_BEFORE_ACTION; /* set up preYYtext again */ 04121 YY_RULE_SETUP 04122 #line 1621 "pre.l" 04123 { 04124 BEGIN(DefinedExpr2); 04125 } 04126 YY_BREAK 04127 case 56: 04128 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */ 04129 (yy_c_buf_p) = yy_cp = yy_bp + 7; 04130 YY_DO_BEFORE_ACTION; /* set up preYYtext again */ 04131 YY_RULE_SETUP 04132 #line 1624 "pre.l" 04133 { 04134 BEGIN(DefinedExpr1); 04135 } 04136 YY_BREAK 04137 case 57: 04138 YY_RULE_SETUP 04139 #line 1627 "pre.l" 04140 { g_guardExpr+=preYYtext; } 04141 YY_BREAK 04142 case 58: 04143 YY_RULE_SETUP 04144 #line 1628 "pre.l" 04145 { g_guardExpr+=*preYYtext; } 04146 YY_BREAK 04147 case 59: 04148 /* rule 59 can match eol */ 04149 YY_RULE_SETUP 04150 #line 1629 "pre.l" 04151 { 04152 unput(*preYYtext); 04153 //printf("Guard: `%s'\n", 04154 // g_guardExpr.data()); 04155 bool guard=computeExpression(g_guardExpr); 04156 setCaseDone(guard); 04157 //printf("if g_levelGuard[%d]=%d\n",g_level-1,g_levelGuard[g_level-1]); 04158 if (guard) 04159 { 04160 BEGIN(Start); 04161 } 04162 else 04163 { 04164 g_ifcount=0; 04165 BEGIN(SkipCPPBlock); 04166 } 04167 } 04168 YY_BREAK 04169 case 60: 04170 /* rule 60 can match eol */ 04171 YY_RULE_SETUP 04172 #line 1646 "pre.l" 04173 { g_yyLineNr++; outputChar('\n'); } 04174 YY_BREAK 04175 case 61: 04176 YY_RULE_SETUP 04177 #line 1647 "pre.l" 04178 { 04179 if (isDefined(preYYtext)) 04180 g_guardExpr+=" 1L "; 04181 else 04182 g_guardExpr+=" 0L "; 04183 g_lastGuardName=preYYtext; 04184 BEGIN(Guard); 04185 } 04186 YY_BREAK 04187 case 62: 04188 YY_RULE_SETUP 04189 #line 1655 "pre.l" 04190 { 04191 if (isDefined(preYYtext)) 04192 g_guardExpr+=" 1L "; 04193 else 04194 g_guardExpr+=" 0L "; 04195 g_lastGuardName.resize(0); 04196 } 04197 YY_BREAK 04198 case 63: 04199 /* rule 63 can match eol */ 04200 YY_RULE_SETUP 04201 #line 1662 "pre.l" 04202 { // should not happen, handle anyway 04203 g_yyLineNr++; 04204 g_ifcount=0; 04205 BEGIN(SkipCPPBlock); 04206 } 04207 YY_BREAK 04208 case 64: 04209 YY_RULE_SETUP 04210 #line 1667 "pre.l" 04211 { 04212 BEGIN(Guard); 04213 } 04214 YY_BREAK 04215 case 65: 04216 YY_RULE_SETUP 04217 #line 1670 "pre.l" 04218 04219 YY_BREAK 04220 case 66: 04221 YY_RULE_SETUP 04222 #line 1671 "pre.l" 04223 { BEGIN(SkipCommand); } 04224 YY_BREAK 04225 case 67: 04226 /* rule 67 can match eol */ 04227 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */ 04228 (yy_c_buf_p) = yy_cp -= 1; 04229 YY_DO_BEFORE_ACTION; /* set up preYYtext again */ 04230 YY_RULE_SETUP 04231 #line 1672 "pre.l" 04232 { BEGIN(SkipLine); } 04233 YY_BREAK 04234 case 68: 04235 /* rule 68 can match eol */ 04236 YY_RULE_SETUP 04237 #line 1673 "pre.l" 04238 { g_yyLineNr++; outputChar('\n'); } 04239 YY_BREAK 04240 case 69: 04241 YY_RULE_SETUP 04242 #line 1674 "pre.l" 04243 04244 YY_BREAK 04245 case 70: 04246 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */ 04247 (yy_c_buf_p) = yy_cp -= 1; 04248 YY_DO_BEFORE_ACTION; /* set up preYYtext again */ 04249 YY_RULE_SETUP 04250 #line 1675 "pre.l" 04251 { 04252 incrLevel(); 04253 g_ifcount++; 04254 //printf("#if... depth=%d\n",g_ifcount); 04255 } 04256 YY_BREAK 04257 case 71: 04258 YY_RULE_SETUP 04259 #line 1680 "pre.l" 04260 { 04261 //printf("Else! g_ifcount=%d otherCaseDone=%d\n",g_ifcount,otherCaseDone()); 04262 if (g_ifcount==0 && !otherCaseDone()) 04263 { 04264 setCaseDone(TRUE); 04265 //outputChar('\n'); 04266 BEGIN(Start); 04267 } 04268 } 04269 YY_BREAK 04270 case 72: 04271 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */ 04272 (yy_c_buf_p) = yy_cp -= 1; 04273 YY_DO_BEFORE_ACTION; /* set up preYYtext again */ 04274 YY_RULE_SETUP 04275 #line 1689 "pre.l" 04276 { 04277 if (g_ifcount==0) 04278 { 04279 if (!otherCaseDone()) 04280 { 04281 g_guardExpr.resize(0); 04282 g_lastGuardName.resize(0); 04283 BEGIN(Guard); 04284 } 04285 else 04286 { 04287 BEGIN(SkipCPPBlock); 04288 } 04289 } 04290 } 04291 YY_BREAK 04292 case 73: 04293 YY_RULE_SETUP 04294 #line 1704 "pre.l" 04295 { 04296 decrLevel(); 04297 if (--g_ifcount<0) 04298 { 04299 //outputChar('\n'); 04300 BEGIN(Start); 04301 } 04302 } 04303 YY_BREAK 04304 case 74: 04305 /* rule 74 can match eol */ 04306 YY_RULE_SETUP 04307 #line 1712 "pre.l" 04308 { 04309 outputChar('\n'); 04310 g_yyLineNr++; 04311 BEGIN(SkipCPPBlock); 04312 } 04313 YY_BREAK 04314 case 75: 04315 YY_RULE_SETUP 04316 #line 1717 "pre.l" 04317 { // unknown directive 04318 BEGIN(SkipLine); 04319 } 04320 YY_BREAK 04321 case 76: 04322 YY_RULE_SETUP 04323 #line 1720 "pre.l" 04324 04325 YY_BREAK 04326 case 77: 04327 YY_RULE_SETUP 04328 #line 1721 "pre.l" 04329 04330 YY_BREAK 04331 case 78: 04332 YY_RULE_SETUP 04333 #line 1722 "pre.l" 04334 04335 YY_BREAK 04336 case 79: 04337 YY_RULE_SETUP 04338 #line 1723 "pre.l" 04339 { 04340 g_lastCPPContext=YY_START; 04341 BEGIN(RemoveCPPComment); 04342 } 04343 YY_BREAK 04344 case 80: 04345 YY_RULE_SETUP 04346 #line 1727 "pre.l" 04347 { 04348 g_lastCContext=YY_START; 04349 BEGIN(RemoveCComment); 04350 } 04351 YY_BREAK 04352 case 81: 04353 /* rule 81 can match eol */ 04354 YY_RULE_SETUP 04355 #line 1731 "pre.l" 04356 { 04357 outputChar('\n'); 04358 g_yyLineNr++; 04359 BEGIN(SkipCPPBlock); 04360 } 04361 YY_BREAK 04362 case 82: 04363 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */ 04364 (yy_c_buf_p) = yy_cp -= 1; 04365 YY_DO_BEFORE_ACTION; /* set up preYYtext again */ 04366 YY_RULE_SETUP 04367 #line 1736 "pre.l" 04368 { 04369 g_nospaces=TRUE; 04370 g_roundCount=0; 04371 g_defArgsStr=preYYtext; 04372 g_findDefArgContext = IncludeID; 04373 BEGIN(FindDefineArgs); 04374 } 04375 YY_BREAK 04376 case 83: 04377 YY_RULE_SETUP 04378 #line 1743 "pre.l" 04379 { 04380 g_nospaces=TRUE; 04381 readIncludeFile(expandMacro(preYYtext)); 04382 BEGIN(Start); 04383 } 04384 YY_BREAK 04385 case 84: 04386 YY_RULE_SETUP 04387 #line 1748 "pre.l" 04388 { 04389 g_incName+=preYYtext; 04390 readIncludeFile(g_incName); 04391 if (g_isImported) 04392 { 04393 BEGIN(EndImport); 04394 } 04395 else 04396 { 04397 BEGIN(Start); 04398 } 04399 } 04400 YY_BREAK 04401 case 85: 04402 /* rule 85 can match eol */ 04403 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */ 04404 (yy_c_buf_p) = yy_cp -= 1; 04405 YY_DO_BEFORE_ACTION; /* set up preYYtext again */ 04406 YY_RULE_SETUP 04407 #line 1760 "pre.l" 04408 { 04409 BEGIN(Start); 04410 } 04411 YY_BREAK 04412 case 86: 04413 /* rule 86 can match eol */ 04414 YY_RULE_SETUP 04415 #line 1763 "pre.l" 04416 { 04417 outputChar('\n'); 04418 g_yyLineNr++; 04419 } 04420 YY_BREAK 04421 case 87: 04422 YY_RULE_SETUP 04423 #line 1767 "pre.l" 04424 { 04425 } 04426 YY_BREAK 04427 case 88: 04428 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */ 04429 (yy_c_buf_p) = yy_cp -= 1; 04430 YY_DO_BEFORE_ACTION; /* set up preYYtext again */ 04431 YY_RULE_SETUP 04432 #line 1769 "pre.l" 04433 { 04434 //printf("Define() `%s'\n",preYYtext); 04435 g_argDict = new QDict<int>(31); 04436 g_argDict->setAutoDelete(TRUE); 04437 g_defArgs = 0; 04438 g_defArgsStr.resize(0); 04439 g_defText.resize(0); 04440 g_defLitText.resize(0); 04441 g_defName = preYYtext; 04442 g_defVarArgs = FALSE; 04443 BEGIN(DefineArg); 04444 } 04445 YY_BREAK 04446 case 89: 04447 YY_RULE_SETUP 04448 #line 1781 "pre.l" 04449 { 04450 //printf("Define `%s'\n",preYYtext); 04451 g_argDict = 0; 04452 g_defArgs = -1; 04453 g_defArgsStr.resize(0); 04454 g_defText.resize(0); 04455 g_defLitText.resize(0); 04456 g_defName = preYYtext; 04457 g_defVarArgs = FALSE; 04458 QCString tmp=(QCString)"#define "+g_defName+g_defArgsStr; 04459 outputArray(tmp.data(),tmp.length()); 04460 g_quoteArg=FALSE; 04461 g_insideComment=FALSE; 04462 BEGIN(DefineText); 04463 } 04464 YY_BREAK 04465 case 90: 04466 /* rule 90 can match eol */ 04467 YY_RULE_SETUP 04468 #line 1796 "pre.l" 04469 { 04470 g_argDict = 0; 04471 g_defArgs = -1; 04472 g_defName = preYYtext; 04473 g_defArgsStr.resize(0); 04474 g_defText.resize(0); 04475 g_defLitText.resize(0); 04476 g_defVarArgs = FALSE; 04477 if ( g_defName!=g_lastGuardName ) 04478 { // define may appear in the output 04479 QCString tmp=(QCString)"#define "+g_defName; 04480 outputArray(tmp.data(),tmp.length()); 04481 g_quoteArg=FALSE; 04482 g_insideComment=FALSE; 04483 BEGIN(DefineText); 04484 } 04485 else // define is a guard => hide 04486 { 04487 //printf("Found a guard %s\n",preYYtext); 04488 Define *def=g_fileDefineDict->find(g_defName); 04489 //if (g_includeStack.isEmpty()) 04490 //{ 04491 // addDefine(); 04492 //} 04493 if (def==0) // new define name for this file 04494 { 04495 g_fileDefineDict->insert(g_defName,newDefine()); 04496 } 04497 else // name already exists 04498 { 04499 if (def->undef) // undefined name 04500 { 04501 def->undef = FALSE; 04502 def->name = g_defName; 04503 def->definition = g_defText.stripWhiteSpace(); 04504 def->nargs = g_defArgs; 04505 def->fileName = g_yyFileName.copy(); 04506 def->lineNr = g_yyLineNr; 04507 } 04508 else 04509 { 04510 //printf("Error: define %s is defined more than once!\n",g_defName.data()); 04511 } 04512 } 04513 g_lastGuardName.resize(0); 04514 BEGIN(Start); 04515 } 04516 } 04517 YY_BREAK 04518 case 91: 04519 YY_RULE_SETUP 04520 #line 1844 "pre.l" 04521 { g_defArgsStr+=preYYtext; } 04522 YY_BREAK 04523 case 92: 04524 YY_RULE_SETUP 04525 #line 1845 "pre.l" 04526 { g_defArgsStr+=preYYtext; } 04527 YY_BREAK 04528 case 93: 04529 YY_RULE_SETUP 04530 #line 1846 "pre.l" 04531 { 04532 g_defArgsStr+=preYYtext; 04533 QCString tmp=(QCString)"#define "+g_defName+g_defArgsStr; 04534 outputArray(tmp.data(),tmp.length()); 04535 g_quoteArg=FALSE; 04536 g_insideComment=FALSE; 04537 BEGIN(DefineText); 04538 } 04539 YY_BREAK 04540 case 94: 04541 YY_RULE_SETUP 04542 #line 1854 "pre.l" 04543 { // Variadic macro 04544 g_defVarArgs = TRUE; 04545 g_defArgsStr+=preYYtext; 04546 g_argDict->insert("__VA_ARGS__",new int(g_defArgs)); 04547 g_defArgs++; 04548 } 04549 YY_BREAK 04550 case 95: 04551 YY_RULE_SETUP 04552 #line 1860 "pre.l" 04553 { 04554 //printf("Define addArg(%s)\n",preYYtext); 04555 QCString argName=preYYtext; 04556 g_defVarArgs = preYYtext[preYYleng-1]=='.'; 04557 if (g_defVarArgs) // strip ellipsis 04558 { 04559 argName=argName.left(argName.length()-3); 04560 } 04561 argName = argName.stripWhiteSpace(); 04562 g_defArgsStr+=preYYtext; 04563 g_argDict->insert(argName,new int(g_defArgs)); 04564 g_defArgs++; 04565 } 04566 YY_BREAK 04567 /* 04568 <DefineText>"/ **"|"/ *!" { 04569 g_defText+=preYYtext; 04570 g_defLitText+=preYYtext; 04571 g_insideComment=TRUE; 04572 } 04573 <DefineText>"* /" { 04574 g_defText+=preYYtext; 04575 g_defLitText+=preYYtext; 04576 g_insideComment=FALSE; 04577 } 04578 */ 04579 case 96: 04580 YY_RULE_SETUP 04581 #line 1885 "pre.l" 04582 { 04583 g_defText+=preYYtext; 04584 g_defLitText+=preYYtext; 04585 g_lastCContext=YY_START; 04586 g_commentCount=1; 04587 BEGIN(CopyCComment); 04588 } 04589 YY_BREAK 04590 case 97: 04591 YY_RULE_SETUP 04592 #line 1892 "pre.l" 04593 { 04594 outputChar('/');outputChar('/'); 04595 g_lastCPPContext=YY_START; 04596 g_defLitText+=' '; 04597 BEGIN(SkipCPPComment); 04598 } 04599 YY_BREAK 04600 case 98: 04601 YY_RULE_SETUP 04602 #line 1898 "pre.l" 04603 { 04604 if (preYYtext[0]=='/') outputChar('/'); 04605 outputChar('*');outputChar('/'); 04606 if (--g_commentCount<=0) 04607 { 04608 BEGIN(g_lastCContext); 04609 } 04610 } 04611 YY_BREAK 04612 case 99: 04613 YY_RULE_SETUP 04614 #line 1906 "pre.l" 04615 { 04616 outputChar('/');outputChar('/'); 04617 } 04618 YY_BREAK 04619 case 100: 04620 YY_RULE_SETUP 04621 #line 1909 "pre.l" 04622 { 04623 outputChar('/');outputChar('*'); 04624 //g_commentCount++; 04625 } 04626 YY_BREAK 04627 case 101: 04628 YY_RULE_SETUP 04629 #line 1913 "pre.l" 04630 { 04631 outputArray(preYYtext,preYYleng); 04632 } 04633 YY_BREAK 04634 case 102: 04635 /* rule 102 can match eol */ 04636 YY_RULE_SETUP 04637 #line 1916 "pre.l" 04638 { 04639 outputArray(preYYtext,preYYleng); 04640 g_yyLineNr+=QCString(preYYtext).contains('\n'); 04641 } 04642 YY_BREAK 04643 case 103: 04644 /* rule 103 can match eol */ 04645 YY_RULE_SETUP 04646 #line 1920 "pre.l" 04647 { 04648 outputArray(preYYtext,preYYleng); 04649 g_yyLineNr+=QCString(preYYtext).contains('\n'); 04650 if (preYYtext[1]=='f') 04651 { 04652 g_blockName="f"; 04653 } 04654 else 04655 { 04656 g_blockName=QCString(&preYYtext[1]).stripWhiteSpace(); 04657 } 04658 BEGIN(SkipVerbatim); 04659 } 04660 YY_BREAK 04661 case 104: 04662 YY_RULE_SETUP 04663 #line 1933 "pre.l" 04664 { // conditional section 04665 g_condCtx = YY_START; 04666 outputArray(preYYtext,preYYleng); 04667 BEGIN(CondLine); 04668 } 04669 YY_BREAK 04670 case 105: 04671 YY_RULE_SETUP 04672 #line 1938 "pre.l" 04673 { 04674 startCondSection(preYYtext); 04675 outputArray(preYYtext,preYYleng); 04676 BEGIN(g_condCtx); 04677 } 04678 YY_BREAK 04679 case 106: 04680 /* rule 106 can match eol */ 04681 #line 1944 "pre.l" 04682 case 107: 04683 /* rule 107 can match eol */ 04684 YY_RULE_SETUP 04685 #line 1944 "pre.l" 04686 { 04687 outputArray(preYYtext,preYYleng); 04688 g_yyLineNr+=QCString(preYYtext).contains('\n'); 04689 startCondSection(" "); 04690 if (YY_START==CondLine) BEGIN(g_condCtx); 04691 } 04692 YY_BREAK 04693 case 108: 04694 /* rule 108 can match eol */ 04695 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */ 04696 (yy_c_buf_p) = yy_cp = yy_bp + 8; 04697 YY_DO_BEFORE_ACTION; /* set up preYYtext again */ 04698 YY_RULE_SETUP 04699 #line 1950 "pre.l" 04700 { 04701 outputArray(preYYtext,preYYleng); 04702 endCondSection(); 04703 } 04704 YY_BREAK 04705 case 109: 04706 YY_RULE_SETUP 04707 #line 1954 "pre.l" 04708 { /* end of verbatim block */ 04709 outputArray(preYYtext,preYYleng); 04710 if (preYYtext[1]=='f' && g_blockName=="f") 04711 { 04712 BEGIN(SkipCComment); 04713 } 04714 else if (&preYYtext[4]==g_blockName) 04715 { 04716 BEGIN(SkipCComment); 04717 } 04718 } 04719 YY_BREAK 04720 case 110: 04721 YY_RULE_SETUP 04722 #line 1965 "pre.l" 04723 { 04724 outputArray(preYYtext,preYYleng); 04725 } 04726 YY_BREAK 04727 case 111: 04728 YY_RULE_SETUP 04729 #line 1968 "pre.l" 04730 { 04731 outputArray(preYYtext,preYYleng); 04732 } 04733 YY_BREAK 04734 case 112: 04735 /* rule 112 can match eol */ 04736 YY_RULE_SETUP 04737 #line 1971 "pre.l" 04738 { 04739 g_yyLineNr++; 04740 outputChar('\n'); 04741 } 04742 YY_BREAK 04743 case 113: 04744 YY_RULE_SETUP 04745 #line 1975 "pre.l" 04746 { 04747 outputChar(*preYYtext); 04748 } 04749 YY_BREAK 04750 case 114: 04751 /* rule 114 can match eol */ 04752 YY_RULE_SETUP 04753 #line 1978 "pre.l" 04754 { 04755 g_defLitText+=preYYtext; 04756 g_defText+=escapeAt(preYYtext); 04757 } 04758 YY_BREAK 04759 case 115: 04760 YY_RULE_SETUP 04761 #line 1982 "pre.l" 04762 { 04763 g_defLitText+=preYYtext; 04764 g_defText+=preYYtext; 04765 BEGIN(g_lastCContext); 04766 } 04767 YY_BREAK 04768 case 116: 04769 /* rule 116 can match eol */ 04770 YY_RULE_SETUP 04771 #line 1987 "pre.l" 04772 { 04773 g_yyLineNr++; 04774 g_defLitText+=preYYtext; 04775 g_defText+=preYYtext; 04776 } 04777 YY_BREAK 04778 case 117: 04779 YY_RULE_SETUP 04780 #line 1992 "pre.l" 04781 { BEGIN(g_lastCContext); } 04782 YY_BREAK 04783 case 118: 04784 YY_RULE_SETUP 04785 #line 1993 "pre.l" 04786 04787 YY_BREAK 04788 case 119: 04789 YY_RULE_SETUP 04790 #line 1994 "pre.l" 04791 04792 YY_BREAK 04793 case 120: 04794 YY_RULE_SETUP 04795 #line 1995 "pre.l" 04796 04797 YY_BREAK 04798 case 121: 04799 /* rule 121 can match eol */ 04800 YY_RULE_SETUP 04801 #line 1996 "pre.l" 04802 { g_yyLineNr++; outputChar('\n'); } 04803 YY_BREAK 04804 case 122: 04805 YY_RULE_SETUP 04806 #line 1997 "pre.l" 04807 04808 YY_BREAK 04809 case 123: 04810 YY_RULE_SETUP 04811 #line 1998 "pre.l" 04812 { 04813 outputArray(preYYtext,preYYleng); 04814 } 04815 YY_BREAK 04816 case 124: 04817 /* rule 124 can match eol */ 04818 YY_RULE_SETUP 04819 #line 2001 "pre.l" 04820 { 04821 unput(*preYYtext); 04822 BEGIN(g_lastCPPContext); 04823 } 04824 YY_BREAK 04825 case 125: 04826 YY_RULE_SETUP 04827 #line 2005 "pre.l" 04828 { 04829 outputChar('/');outputChar('*'); 04830 } 04831 YY_BREAK 04832 case 126: 04833 YY_RULE_SETUP 04834 #line 2008 "pre.l" 04835 { 04836 outputChar('/');outputChar('/'); 04837 } 04838 YY_BREAK 04839 case 127: 04840 YY_RULE_SETUP 04841 #line 2011 "pre.l" 04842 { 04843 outputArray(preYYtext,preYYleng); 04844 } 04845 YY_BREAK 04846 case 128: 04847 YY_RULE_SETUP 04848 #line 2014 "pre.l" 04849 { 04850 outputChar(*preYYtext); 04851 } 04852 YY_BREAK 04853 case 129: 04854 YY_RULE_SETUP 04855 #line 2017 "pre.l" 04856 04857 YY_BREAK 04858 case 130: 04859 YY_RULE_SETUP 04860 #line 2018 "pre.l" 04861 04862 YY_BREAK 04863 case 131: 04864 YY_RULE_SETUP 04865 #line 2019 "pre.l" 04866 04867 YY_BREAK 04868 case 132: 04869 YY_RULE_SETUP 04870 #line 2020 "pre.l" 04871 04872 YY_BREAK 04873 case 133: 04874 YY_RULE_SETUP 04875 #line 2021 "pre.l" 04876 { 04877 g_quoteArg=TRUE; 04878 g_defLitText+=preYYtext; 04879 } 04880 YY_BREAK 04881 case 134: 04882 YY_RULE_SETUP 04883 #line 2025 "pre.l" 04884 { 04885 g_defLitText+=preYYtext; 04886 if (g_quoteArg) 04887 { 04888 g_defText+="\""; 04889 } 04890 if (g_defArgs>0) 04891 { 04892 int *n; 04893 if ((n=(*g_argDict)[preYYtext])) 04894 { 04895 //if (!g_quoteArg) g_defText+=' '; 04896 g_defText+='@'; 04897 QCString numStr; 04898 numStr.sprintf("%d",*n); 04899 g_defText+=numStr; 04900 //if (!g_quoteArg) g_defText+=' '; 04901 } 04902 else 04903 { 04904 g_defText+=preYYtext; 04905 } 04906 } 04907 else 04908 { 04909 g_defText+=preYYtext; 04910 } 04911 if (g_quoteArg) 04912 { 04913 g_defText+="\""; 04914 } 04915 g_quoteArg=FALSE; 04916 } 04917 YY_BREAK 04918 case 135: 04919 YY_RULE_SETUP 04920 #line 2058 "pre.l" 04921 { 04922 g_defLitText+=preYYtext; 04923 g_defText+=preYYtext; 04924 } 04925 YY_BREAK 04926 case 136: 04927 /* rule 136 can match eol */ 04928 YY_RULE_SETUP 04929 #line 2062 "pre.l" 04930 { 04931 g_defLitText+=preYYtext; 04932 outputChar('\n'); 04933 g_defText += ' '; g_yyLineNr++; 04934 } 04935 YY_BREAK 04936 case 137: 04937 /* rule 137 can match eol */ 04938 YY_RULE_SETUP 04939 #line 2067 "pre.l" 04940 { 04941 QCString comment=extractTrailingComment(g_defLitText); 04942 g_defLitText+=preYYtext; 04943 if (!comment.isEmpty()) 04944 { 04945 outputArray(comment,comment.length()); 04946 g_defLitText=g_defLitText.left(g_defLitText.length()-comment.length()-1); 04947 } 04948 outputChar('\n'); 04949 Define *def=0; 04950 //printf("Define name=`%s' text=`%s' litTexti=`%s'\n",g_defName.data(),g_defText.data(),g_defLitText.data()); 04951 if (g_includeStack.isEmpty() || g_curlyCount>0) 04952 { 04953 addDefine(); 04954 } 04955 def=g_fileDefineDict->find(g_defName); 04956 if (def==0) // new define 04957 { 04958 //printf("new define!\n"); 04959 g_fileDefineDict->insert(g_defName,newDefine()); 04960 } 04961 else if (def)// name already exists 04962 { 04963 //printf("existing define!\n"); 04964 //printf("define found\n"); 04965 if (def->undef) // undefined name 04966 { 04967 def->undef = FALSE; 04968 def->name = g_defName; 04969 def->definition = g_defText.stripWhiteSpace(); 04970 def->nargs = g_defArgs; 04971 def->fileName = g_yyFileName.copy(); 04972 def->lineNr = g_yyLineNr; 04973 } 04974 else 04975 { 04976 //printf("Error: define %s is defined more than once!\n",g_defName.data()); 04977 } 04978 } 04979 delete g_argDict; g_argDict=0; 04980 g_yyLineNr++; 04981 g_lastGuardName.resize(0); 04982 BEGIN(Start); 04983 } 04984 YY_BREAK 04985 case 138: 04986 YY_RULE_SETUP 04987 #line 2111 "pre.l" 04988 { g_defText += ' '; g_defLitText+=preYYtext; } 04989 YY_BREAK 04990 case 139: 04991 YY_RULE_SETUP 04992 #line 2112 "pre.l" 04993 { g_defText += "##"; g_defLitText+=preYYtext; } 04994 YY_BREAK 04995 case 140: 04996 YY_RULE_SETUP 04997 #line 2113 "pre.l" 04998 { g_defText += "@@"; g_defLitText+=preYYtext; } 04999 YY_BREAK 05000 case 141: 05001 YY_RULE_SETUP 05002 #line 2114 "pre.l" 05003 { 05004 g_defText += *preYYtext; 05005 g_defLitText+=preYYtext; 05006 if (!g_insideComment) 05007 { 05008 BEGIN(SkipDoubleQuote); 05009 } 05010 } 05011 YY_BREAK 05012 case 142: 05013 YY_RULE_SETUP 05014 #line 2122 "pre.l" 05015 { g_defText += *preYYtext; 05016 g_defLitText+=preYYtext; 05017 if (!g_insideComment) 05018 { 05019 BEGIN(SkipSingleQuote); 05020 } 05021 } 05022 YY_BREAK 05023 case 143: 05024 YY_RULE_SETUP 05025 #line 2129 "pre.l" 05026 { g_defText += preYYtext; g_defLitText+=preYYtext; } 05027 YY_BREAK 05028 case 144: 05029 YY_RULE_SETUP 05030 #line 2130 "pre.l" 05031 { g_defText += preYYtext; g_defLitText+=preYYtext; } 05032 YY_BREAK 05033 case 145: 05034 YY_RULE_SETUP 05035 #line 2131 "pre.l" 05036 { 05037 g_defText += *preYYtext; g_defLitText+=preYYtext; 05038 BEGIN(DefineText); 05039 } 05040 YY_BREAK 05041 case 146: 05042 YY_RULE_SETUP 05043 #line 2135 "pre.l" 05044 { 05045 g_defText += preYYtext; g_defLitText+=preYYtext; 05046 } 05047 YY_BREAK 05048 case 147: 05049 YY_RULE_SETUP 05050 #line 2138 "pre.l" 05051 { 05052 g_defText += *preYYtext; g_defLitText+=preYYtext; 05053 BEGIN(DefineText); 05054 } 05055 YY_BREAK 05056 case 148: 05057 YY_RULE_SETUP 05058 #line 2142 "pre.l" 05059 { g_defText += *preYYtext; g_defLitText+=preYYtext; } 05060 YY_BREAK 05061 case 149: 05062 YY_RULE_SETUP 05063 #line 2143 "pre.l" 05064 { g_defText += *preYYtext; g_defLitText+=preYYtext; } 05065 YY_BREAK 05066 case 150: 05067 YY_RULE_SETUP 05068 #line 2144 "pre.l" 05069 { g_defText += *preYYtext; g_defLitText+=preYYtext; } 05070 YY_BREAK 05071 case YY_STATE_EOF(INITIAL): 05072 case YY_STATE_EOF(Start): 05073 case YY_STATE_EOF(Command): 05074 case YY_STATE_EOF(SkipCommand): 05075 case YY_STATE_EOF(SkipLine): 05076 case YY_STATE_EOF(CopyLine): 05077 case YY_STATE_EOF(CopyString): 05078 case YY_STATE_EOF(Include): 05079 case YY_STATE_EOF(IncludeID): 05080 case YY_STATE_EOF(EndImport): 05081 case YY_STATE_EOF(DefName): 05082 case YY_STATE_EOF(DefineArg): 05083 case YY_STATE_EOF(DefineText): 05084 case YY_STATE_EOF(SkipCPPBlock): 05085 case YY_STATE_EOF(Ifdef): 05086 case YY_STATE_EOF(Ifndef): 05087 case YY_STATE_EOF(SkipCComment): 05088 case YY_STATE_EOF(CopyCComment): 05089 case YY_STATE_EOF(SkipVerbatim): 05090 case YY_STATE_EOF(SkipCPPComment): 05091 case YY_STATE_EOF(RemoveCComment): 05092 case YY_STATE_EOF(RemoveCPPComment): 05093 case YY_STATE_EOF(Guard): 05094 case YY_STATE_EOF(DefinedExpr1): 05095 case YY_STATE_EOF(DefinedExpr2): 05096 case YY_STATE_EOF(SkipDoubleQuote): 05097 case YY_STATE_EOF(SkipSingleQuote): 05098 case YY_STATE_EOF(UndefName): 05099 case YY_STATE_EOF(IgnoreLine): 05100 case YY_STATE_EOF(FindDefineArgs): 05101 case YY_STATE_EOF(ReadString): 05102 case YY_STATE_EOF(CondLine): 05103 #line 2145 "pre.l" 05104 { 05105 //fprintf(stderr,"End of include file\n"); 05106 //printf("Include stack depth=%d\n",g_includeStack.count()); 05107 if (g_includeStack.isEmpty()) 05108 { 05109 //fprintf(stderr,"Terminating scanner!\n"); 05110 yyterminate(); 05111 } 05112 else 05113 { 05114 FileState *fs=g_includeStack.pop(); 05115 //fileDefineCache->merge(g_yyFileName,fs->fileName); 05116 if (getFileFilter(fs->fileName.data()).isEmpty()) 05117 fclose(fs->filePtr); 05118 else 05119 portable_pclose(fs->filePtr); 05120 YY_BUFFER_STATE oldBuf = YY_CURRENT_BUFFER; 05121 preYY_switch_to_buffer(fs->bufState ); 05122 preYY_delete_buffer(oldBuf ); 05123 g_yyLineNr=fs->lineNr; 05124 setFileName(fs->fileName.copy()); 05125 //fprintf(stderr,"######## FileName %s\n",g_yyFileName.data()); 05126 05127 // Deal with file changes due to 05128 // #include's within { .. } blocks 05129 QCString lineStr; 05130 lineStr.sprintf("# %d \"%s\" 2",g_yyLineNr,g_yyFileName.data()); 05131 outputArray(lineStr.data(),lineStr.length()); 05132 05133 delete fs; fs=0; 05134 } 05135 } 05136 YY_BREAK 05137 case 151: 05138 YY_RULE_SETUP 05139 #line 2177 "pre.l" 05140 { 05141 outputChar('/');outputChar('*'); 05142 g_lastCContext=YY_START; 05143 g_commentCount=1; 05144 BEGIN(SkipCComment); 05145 } 05146 YY_BREAK 05147 case 152: 05148 YY_RULE_SETUP 05149 #line 2183 "pre.l" 05150 { 05151 outputChar('/');outputChar('/'); 05152 g_lastCPPContext=YY_START; 05153 BEGIN(SkipCPPComment); 05154 } 05155 YY_BREAK 05156 case 153: 05157 /* rule 153 can match eol */ 05158 YY_RULE_SETUP 05159 #line 2188 "pre.l" 05160 { 05161 outputChar('\n'); 05162 g_yyLineNr++; 05163 } 05164 YY_BREAK 05165 case 154: 05166 YY_RULE_SETUP 05167 #line 2192 "pre.l" 05168 { 05169 outputChar(*preYYtext); 05170 } 05171 YY_BREAK 05172 case 155: 05173 YY_RULE_SETUP 05174 #line 2196 "pre.l" 05175 ECHO; 05176 YY_BREAK 05177 #line 5178 "<stdout>" 05178 05179 case YY_END_OF_BUFFER: 05180 { 05181 /* Amount of text matched not including the EOB char. */ 05182 int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1; 05183 05184 /* Undo the effects of YY_DO_BEFORE_ACTION. */ 05185 *yy_cp = (yy_hold_char); 05186 YY_RESTORE_YY_MORE_OFFSET 05187 05188 if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) 05189 { 05190 /* We're scanning a new file or input source. It's 05191 * possible that this happened because the user 05192 * just pointed preYYin at a new source and called 05193 * preYYlex(). If so, then we have to assure 05194 * consistency between YY_CURRENT_BUFFER and our 05195 * globals. Here is the right place to do so, because 05196 * this is the first action (other than possibly a 05197 * back-up) that will match for the new input source. 05198 */ 05199 (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; 05200 YY_CURRENT_BUFFER_LVALUE->yy_input_file = preYYin; 05201 YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; 05202 } 05203 05204 /* Note that here we test for yy_c_buf_p "<=" to the position 05205 * of the first EOB in the buffer, since yy_c_buf_p will 05206 * already have been incremented past the NUL character 05207 * (since all states make transitions on EOB to the 05208 * end-of-buffer state). Contrast this with the test 05209 * in input(). 05210 */ 05211 if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) 05212 { /* This was really a NUL. */ 05213 yy_state_type yy_next_state; 05214 05215 (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; 05216 05217 yy_current_state = yy_get_previous_state( ); 05218 05219 /* Okay, we're now positioned to make the NUL 05220 * transition. We couldn't have 05221 * yy_get_previous_state() go ahead and do it 05222 * for us because it doesn't know how to deal 05223 * with the possibility of jamming (and we don't 05224 * want to build jamming into it because then it 05225 * will run more slowly). 05226 */ 05227 05228 yy_next_state = yy_try_NUL_trans( yy_current_state ); 05229 05230 yy_bp = (yytext_ptr) + YY_MORE_ADJ; 05231 05232 if ( yy_next_state ) 05233 { 05234 /* Consume the NUL. */ 05235 yy_cp = ++(yy_c_buf_p); 05236 yy_current_state = yy_next_state; 05237 goto yy_match; 05238 } 05239 05240 else 05241 { 05242 yy_cp = (yy_c_buf_p); 05243 goto yy_find_action; 05244 } 05245 } 05246 05247 else switch ( yy_get_next_buffer( ) ) 05248 { 05249 case EOB_ACT_END_OF_FILE: 05250 { 05251 (yy_did_buffer_switch_on_eof) = 0; 05252 05253 if ( preYYwrap( ) ) 05254 { 05255 /* Note: because we've taken care in 05256 * yy_get_next_buffer() to have set up 05257 * preYYtext, we can now set up 05258 * yy_c_buf_p so that if some total 05259 * hoser (like flex itself) wants to 05260 * call the scanner after we return the 05261 * YY_NULL, it'll still work - another 05262 * YY_NULL will get returned. 05263 */ 05264 (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ; 05265 05266 yy_act = YY_STATE_EOF(YY_START); 05267 goto do_action; 05268 } 05269 05270 else 05271 { 05272 if ( ! (yy_did_buffer_switch_on_eof) ) 05273 YY_NEW_FILE; 05274 } 05275 break; 05276 } 05277 05278 case EOB_ACT_CONTINUE_SCAN: 05279 (yy_c_buf_p) = 05280 (yytext_ptr) + yy_amount_of_matched_text; 05281 05282 yy_current_state = yy_get_previous_state( ); 05283 05284 yy_cp = (yy_c_buf_p); 05285 yy_bp = (yytext_ptr) + YY_MORE_ADJ; 05286 goto yy_match; 05287 05288 case EOB_ACT_LAST_MATCH: 05289 (yy_c_buf_p) = 05290 &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)]; 05291 05292 yy_current_state = yy_get_previous_state( ); 05293 05294 yy_cp = (yy_c_buf_p); 05295 yy_bp = (yytext_ptr) + YY_MORE_ADJ; 05296 goto yy_find_action; 05297 } 05298 break; 05299 } 05300 05301 default: 05302 YY_FATAL_ERROR( 05303 "fatal flex scanner internal error--no action found" ); 05304 } /* end of action switch */ 05305 } /* end of scanning one token */ 05306 } /* end of preYYlex */ 05307 05308 /* yy_get_next_buffer - try to read in a new buffer 05309 * 05310 * Returns a code representing an action: 05311 * EOB_ACT_LAST_MATCH - 05312 * EOB_ACT_CONTINUE_SCAN - continue scanning from current position 05313 * EOB_ACT_END_OF_FILE - end of file 05314 */ 05315 static int yy_get_next_buffer (void) 05316 { 05317 register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; 05318 register char *source = (yytext_ptr); 05319 register int number_to_move, i; 05320 int ret_val; 05321 05322 if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) 05323 YY_FATAL_ERROR( 05324 "fatal flex scanner internal error--end of buffer missed" ); 05325 05326 if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) 05327 { /* Don't try to fill the buffer, so this is an EOF. */ 05328 if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 ) 05329 { 05330 /* We matched a single character, the EOB, so 05331 * treat this as a final EOF. 05332 */ 05333 return EOB_ACT_END_OF_FILE; 05334 } 05335 05336 else 05337 { 05338 /* We matched some text prior to the EOB, first 05339 * process it. 05340 */ 05341 return EOB_ACT_LAST_MATCH; 05342 } 05343 } 05344 05345 /* Try to read more data. */ 05346 05347 /* First move last chars to start of buffer. */ 05348 number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1; 05349 05350 for ( i = 0; i < number_to_move; ++i ) 05351 *(dest++) = *(source++); 05352 05353 if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) 05354 /* don't do the read, it's not guaranteed to return an EOF, 05355 * just force an EOF 05356 */ 05357 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0; 05358 05359 else 05360 { 05361 int num_to_read = 05362 YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; 05363 05364 while ( num_to_read <= 0 ) 05365 { /* Not enough room in the buffer - grow it. */ 05366 05367 YY_FATAL_ERROR( 05368 "input buffer overflow, can't enlarge buffer because scanner uses REJECT" ); 05369 05370 } 05371 05372 if ( num_to_read > YY_READ_BUF_SIZE ) 05373 num_to_read = YY_READ_BUF_SIZE; 05374 05375 /* Read in more data. */ 05376 YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), 05377 (yy_n_chars), num_to_read ); 05378 05379 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); 05380 } 05381 05382 if ( (yy_n_chars) == 0 ) 05383 { 05384 if ( number_to_move == YY_MORE_ADJ ) 05385 { 05386 ret_val = EOB_ACT_END_OF_FILE; 05387 preYYrestart(preYYin ); 05388 } 05389 05390 else 05391 { 05392 ret_val = EOB_ACT_LAST_MATCH; 05393 YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = 05394 YY_BUFFER_EOF_PENDING; 05395 } 05396 } 05397 05398 else 05399 ret_val = EOB_ACT_CONTINUE_SCAN; 05400 05401 (yy_n_chars) += number_to_move; 05402 YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; 05403 YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; 05404 05405 (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; 05406 05407 return ret_val; 05408 } 05409 05410 /* yy_get_previous_state - get the state just before the EOB char was reached */ 05411 05412 static yy_state_type yy_get_previous_state (void) 05413 { 05414 register yy_state_type yy_current_state; 05415 register char *yy_cp; 05416 05417 yy_current_state = (yy_start); 05418 yy_current_state += YY_AT_BOL(); 05419 05420 (yy_state_ptr) = (yy_state_buf); 05421 *(yy_state_ptr)++ = yy_current_state; 05422 05423 for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp ) 05424 { 05425 register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 54); 05426 while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) 05427 { 05428 yy_current_state = (int) yy_def[yy_current_state]; 05429 if ( yy_current_state >= 1056 ) 05430 yy_c = yy_meta[(unsigned int) yy_c]; 05431 } 05432 yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; 05433 *(yy_state_ptr)++ = yy_current_state; 05434 } 05435 05436 return yy_current_state; 05437 } 05438 05439 /* yy_try_NUL_trans - try to make a transition on the NUL character 05440 * 05441 * synopsis 05442 * next_state = yy_try_NUL_trans( current_state ); 05443 */ 05444 static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state ) 05445 { 05446 register int yy_is_jam; 05447 05448 register YY_CHAR yy_c = 54; 05449 while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) 05450 { 05451 yy_current_state = (int) yy_def[yy_current_state]; 05452 if ( yy_current_state >= 1056 ) 05453 yy_c = yy_meta[(unsigned int) yy_c]; 05454 } 05455 yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; 05456 yy_is_jam = (yy_current_state == 1055); 05457 if ( ! yy_is_jam ) 05458 *(yy_state_ptr)++ = yy_current_state; 05459 05460 return yy_is_jam ? 0 : yy_current_state; 05461 } 05462 05463 static void yyunput (int c, register char * yy_bp ) 05464 { 05465 register char *yy_cp; 05466 05467 yy_cp = (yy_c_buf_p); 05468 05469 /* undo effects of setting up preYYtext */ 05470 *yy_cp = (yy_hold_char); 05471 05472 if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) 05473 { /* need to shift things up to make room */ 05474 /* +2 for EOB chars. */ 05475 register int number_to_move = (yy_n_chars) + 2; 05476 register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[ 05477 YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; 05478 register char *source = 05479 &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]; 05480 05481 while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) 05482 *--dest = *--source; 05483 05484 yy_cp += (int) (dest - source); 05485 yy_bp += (int) (dest - source); 05486 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = 05487 (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size; 05488 05489 if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) 05490 YY_FATAL_ERROR( "flex scanner push-back overflow" ); 05491 } 05492 05493 *--yy_cp = (char) c; 05494 05495 (yytext_ptr) = yy_bp; 05496 (yy_hold_char) = *yy_cp; 05497 (yy_c_buf_p) = yy_cp; 05498 } 05499 05500 #ifndef YY_NO_INPUT 05501 #ifdef __cplusplus 05502 static int yyinput (void) 05503 #else 05504 static int input (void) 05505 #endif 05506 05507 { 05508 int c; 05509 05510 *(yy_c_buf_p) = (yy_hold_char); 05511 05512 if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR ) 05513 { 05514 /* yy_c_buf_p now points to the character we want to return. 05515 * If this occurs *before* the EOB characters, then it's a 05516 * valid NUL; if not, then we've hit the end of the buffer. 05517 */ 05518 if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) 05519 /* This was really a NUL. */ 05520 *(yy_c_buf_p) = '\0'; 05521 05522 else 05523 { /* need more input */ 05524 int offset = (yy_c_buf_p) - (yytext_ptr); 05525 ++(yy_c_buf_p); 05526 05527 switch ( yy_get_next_buffer( ) ) 05528 { 05529 case EOB_ACT_LAST_MATCH: 05530 /* This happens because yy_g_n_b() 05531 * sees that we've accumulated a 05532 * token and flags that we need to 05533 * try matching the token before 05534 * proceeding. But for input(), 05535 * there's no matching to consider. 05536 * So convert the EOB_ACT_LAST_MATCH 05537 * to EOB_ACT_END_OF_FILE. 05538 */ 05539 05540 /* Reset buffer status. */ 05541 preYYrestart(preYYin ); 05542 05543 /*FALLTHROUGH*/ 05544 05545 case EOB_ACT_END_OF_FILE: 05546 { 05547 if ( preYYwrap( ) ) 05548 return 0; 05549 05550 if ( ! (yy_did_buffer_switch_on_eof) ) 05551 YY_NEW_FILE; 05552 #ifdef __cplusplus 05553 return yyinput(); 05554 #else 05555 return input(); 05556 #endif 05557 } 05558 05559 case EOB_ACT_CONTINUE_SCAN: 05560 (yy_c_buf_p) = (yytext_ptr) + offset; 05561 break; 05562 } 05563 } 05564 } 05565 05566 c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */ 05567 *(yy_c_buf_p) = '\0'; /* preserve preYYtext */ 05568 (yy_hold_char) = *++(yy_c_buf_p); 05569 05570 YY_CURRENT_BUFFER_LVALUE->yy_at_bol = (c == '\n'); 05571 05572 return c; 05573 } 05574 #endif /* ifndef YY_NO_INPUT */ 05575 05581 void preYYrestart (FILE * input_file ) 05582 { 05583 05584 if ( ! YY_CURRENT_BUFFER ){ 05585 preYYensure_buffer_stack (); 05586 YY_CURRENT_BUFFER_LVALUE = 05587 preYY_create_buffer(preYYin,YY_BUF_SIZE ); 05588 } 05589 05590 preYY_init_buffer(YY_CURRENT_BUFFER,input_file ); 05591 preYY_load_buffer_state( ); 05592 } 05593 05598 void preYY_switch_to_buffer (YY_BUFFER_STATE new_buffer ) 05599 { 05600 05601 /* TODO. We should be able to replace this entire function body 05602 * with 05603 * preYYpop_buffer_state(); 05604 * preYYpush_buffer_state(new_buffer); 05605 */ 05606 preYYensure_buffer_stack (); 05607 if ( YY_CURRENT_BUFFER == new_buffer ) 05608 return; 05609 05610 if ( YY_CURRENT_BUFFER ) 05611 { 05612 /* Flush out information for old buffer. */ 05613 *(yy_c_buf_p) = (yy_hold_char); 05614 YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); 05615 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); 05616 } 05617 05618 YY_CURRENT_BUFFER_LVALUE = new_buffer; 05619 preYY_load_buffer_state( ); 05620 05621 /* We don't actually know whether we did this switch during 05622 * EOF (preYYwrap()) processing, but the only time this flag 05623 * is looked at is after preYYwrap() is called, so it's safe 05624 * to go ahead and always set it. 05625 */ 05626 (yy_did_buffer_switch_on_eof) = 1; 05627 } 05628 05629 static void preYY_load_buffer_state (void) 05630 { 05631 (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; 05632 (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; 05633 preYYin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; 05634 (yy_hold_char) = *(yy_c_buf_p); 05635 } 05636 05643 YY_BUFFER_STATE preYY_create_buffer (FILE * file, int size ) 05644 { 05645 YY_BUFFER_STATE b; 05646 05647 b = (YY_BUFFER_STATE) preYYalloc(sizeof( struct yy_buffer_state ) ); 05648 if ( ! b ) 05649 YY_FATAL_ERROR( "out of dynamic memory in preYY_create_buffer()" ); 05650 05651 b->yy_buf_size = size; 05652 05653 /* yy_ch_buf has to be 2 characters longer than the size given because 05654 * we need to put in 2 end-of-buffer characters. 05655 */ 05656 b->yy_ch_buf = (char *) preYYalloc(b->yy_buf_size + 2 ); 05657 if ( ! b->yy_ch_buf ) 05658 YY_FATAL_ERROR( "out of dynamic memory in preYY_create_buffer()" ); 05659 05660 b->yy_is_our_buffer = 1; 05661 05662 preYY_init_buffer(b,file ); 05663 05664 return b; 05665 } 05666 05671 void preYY_delete_buffer (YY_BUFFER_STATE b ) 05672 { 05673 05674 if ( ! b ) 05675 return; 05676 05677 if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ 05678 YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; 05679 05680 if ( b->yy_is_our_buffer ) 05681 preYYfree((void *) b->yy_ch_buf ); 05682 05683 preYYfree((void *) b ); 05684 } 05685 05686 #ifndef __cplusplus 05687 extern int isatty (int ); 05688 #endif /* __cplusplus */ 05689 05690 /* Initializes or reinitializes a buffer. 05691 * This function is sometimes called more than once on the same buffer, 05692 * such as during a preYYrestart() or at EOF. 05693 */ 05694 static void preYY_init_buffer (YY_BUFFER_STATE b, FILE * file ) 05695 05696 { 05697 int oerrno = errno; 05698 05699 preYY_flush_buffer(b ); 05700 05701 b->yy_input_file = file; 05702 b->yy_fill_buffer = 1; 05703 05704 /* If b is the current buffer, then preYY_init_buffer was _probably_ 05705 * called from preYYrestart() or through yy_get_next_buffer. 05706 * In that case, we don't want to reset the lineno or column. 05707 */ 05708 if (b != YY_CURRENT_BUFFER){ 05709 b->yy_bs_lineno = 1; 05710 b->yy_bs_column = 0; 05711 } 05712 05713 b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0; 05714 05715 errno = oerrno; 05716 } 05717 05722 void preYY_flush_buffer (YY_BUFFER_STATE b ) 05723 { 05724 if ( ! b ) 05725 return; 05726 05727 b->yy_n_chars = 0; 05728 05729 /* We always need two end-of-buffer characters. The first causes 05730 * a transition to the end-of-buffer state. The second causes 05731 * a jam in that state. 05732 */ 05733 b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; 05734 b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; 05735 05736 b->yy_buf_pos = &b->yy_ch_buf[0]; 05737 05738 b->yy_at_bol = 1; 05739 b->yy_buffer_status = YY_BUFFER_NEW; 05740 05741 if ( b == YY_CURRENT_BUFFER ) 05742 preYY_load_buffer_state( ); 05743 } 05744 05751 void preYYpush_buffer_state (YY_BUFFER_STATE new_buffer ) 05752 { 05753 if (new_buffer == NULL) 05754 return; 05755 05756 preYYensure_buffer_stack(); 05757 05758 /* This block is copied from preYY_switch_to_buffer. */ 05759 if ( YY_CURRENT_BUFFER ) 05760 { 05761 /* Flush out information for old buffer. */ 05762 *(yy_c_buf_p) = (yy_hold_char); 05763 YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); 05764 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); 05765 } 05766 05767 /* Only push if top exists. Otherwise, replace top. */ 05768 if (YY_CURRENT_BUFFER) 05769 (yy_buffer_stack_top)++; 05770 YY_CURRENT_BUFFER_LVALUE = new_buffer; 05771 05772 /* copied from preYY_switch_to_buffer. */ 05773 preYY_load_buffer_state( ); 05774 (yy_did_buffer_switch_on_eof) = 1; 05775 } 05776 05781 void preYYpop_buffer_state (void) 05782 { 05783 if (!YY_CURRENT_BUFFER) 05784 return; 05785 05786 preYY_delete_buffer(YY_CURRENT_BUFFER ); 05787 YY_CURRENT_BUFFER_LVALUE = NULL; 05788 if ((yy_buffer_stack_top) > 0) 05789 --(yy_buffer_stack_top); 05790 05791 if (YY_CURRENT_BUFFER) { 05792 preYY_load_buffer_state( ); 05793 (yy_did_buffer_switch_on_eof) = 1; 05794 } 05795 } 05796 05797 /* Allocates the stack if it does not exist. 05798 * Guarantees space for at least one push. 05799 */ 05800 static void preYYensure_buffer_stack (void) 05801 { 05802 int num_to_alloc; 05803 05804 if (!(yy_buffer_stack)) { 05805 05806 /* First allocation is just for 2 elements, since we don't know if this 05807 * scanner will even need a stack. We use 2 instead of 1 to avoid an 05808 * immediate realloc on the next call. 05809 */ 05810 num_to_alloc = 1; 05811 (yy_buffer_stack) = (struct yy_buffer_state**)preYYalloc 05812 (num_to_alloc * sizeof(struct yy_buffer_state*) 05813 ); 05814 05815 memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); 05816 05817 (yy_buffer_stack_max) = num_to_alloc; 05818 (yy_buffer_stack_top) = 0; 05819 return; 05820 } 05821 05822 if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){ 05823 05824 /* Increase the buffer to prepare for a possible push. */ 05825 int grow_size = 8 /* arbitrary grow size */; 05826 05827 num_to_alloc = (yy_buffer_stack_max) + grow_size; 05828 (yy_buffer_stack) = (struct yy_buffer_state**)preYYrealloc 05829 ((yy_buffer_stack), 05830 num_to_alloc * sizeof(struct yy_buffer_state*) 05831 ); 05832 05833 /* zero only the new slots.*/ 05834 memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); 05835 (yy_buffer_stack_max) = num_to_alloc; 05836 } 05837 } 05838 05845 YY_BUFFER_STATE preYY_scan_buffer (char * base, yy_size_t size ) 05846 { 05847 YY_BUFFER_STATE b; 05848 05849 if ( size < 2 || 05850 base[size-2] != YY_END_OF_BUFFER_CHAR || 05851 base[size-1] != YY_END_OF_BUFFER_CHAR ) 05852 /* They forgot to leave room for the EOB's. */ 05853 return 0; 05854 05855 b = (YY_BUFFER_STATE) preYYalloc(sizeof( struct yy_buffer_state ) ); 05856 if ( ! b ) 05857 YY_FATAL_ERROR( "out of dynamic memory in preYY_scan_buffer()" ); 05858 05859 b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */ 05860 b->yy_buf_pos = b->yy_ch_buf = base; 05861 b->yy_is_our_buffer = 0; 05862 b->yy_input_file = 0; 05863 b->yy_n_chars = b->yy_buf_size; 05864 b->yy_is_interactive = 0; 05865 b->yy_at_bol = 1; 05866 b->yy_fill_buffer = 0; 05867 b->yy_buffer_status = YY_BUFFER_NEW; 05868 05869 preYY_switch_to_buffer(b ); 05870 05871 return b; 05872 } 05873 05882 YY_BUFFER_STATE preYY_scan_string (yyconst char * yystr ) 05883 { 05884 05885 return preYY_scan_bytes(yystr,strlen(yystr) ); 05886 } 05887 05895 YY_BUFFER_STATE preYY_scan_bytes (yyconst char * yybytes, int _yybytes_len ) 05896 { 05897 YY_BUFFER_STATE b; 05898 char *buf; 05899 yy_size_t n; 05900 int i; 05901 05902 /* Get memory for full buffer, including space for trailing EOB's. */ 05903 n = _yybytes_len + 2; 05904 buf = (char *) preYYalloc(n ); 05905 if ( ! buf ) 05906 YY_FATAL_ERROR( "out of dynamic memory in preYY_scan_bytes()" ); 05907 05908 for ( i = 0; i < _yybytes_len; ++i ) 05909 buf[i] = yybytes[i]; 05910 05911 buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; 05912 05913 b = preYY_scan_buffer(buf,n ); 05914 if ( ! b ) 05915 YY_FATAL_ERROR( "bad buffer in preYY_scan_bytes()" ); 05916 05917 /* It's okay to grow etc. this buffer, and we should throw it 05918 * away when we're done. 05919 */ 05920 b->yy_is_our_buffer = 1; 05921 05922 return b; 05923 } 05924 05925 #ifndef YY_EXIT_FAILURE 05926 #define YY_EXIT_FAILURE 2 05927 #endif 05928 05929 static void yy_fatal_error (yyconst char* msg ) 05930 { 05931 (void) fprintf( stderr, "%s\n", msg ); 05932 exit( YY_EXIT_FAILURE ); 05933 } 05934 05935 /* Redefine yyless() so it works in section 3 code. */ 05936 05937 #undef yyless 05938 #define yyless(n) \ 05939 do \ 05940 { \ 05941 /* Undo effects of setting up preYYtext. */ \ 05942 int yyless_macro_arg = (n); \ 05943 YY_LESS_LINENO(yyless_macro_arg);\ 05944 preYYtext[preYYleng] = (yy_hold_char); \ 05945 (yy_c_buf_p) = preYYtext + yyless_macro_arg; \ 05946 (yy_hold_char) = *(yy_c_buf_p); \ 05947 *(yy_c_buf_p) = '\0'; \ 05948 preYYleng = yyless_macro_arg; \ 05949 } \ 05950 while ( 0 ) 05951 05952 /* Accessor methods (get/set functions) to struct members. */ 05953 05957 int preYYget_lineno (void) 05958 { 05959 05960 return preYYlineno; 05961 } 05962 05966 FILE *preYYget_in (void) 05967 { 05968 return preYYin; 05969 } 05970 05974 FILE *preYYget_out (void) 05975 { 05976 return preYYout; 05977 } 05978 05982 int preYYget_leng (void) 05983 { 05984 return preYYleng; 05985 } 05986 05991 char *preYYget_text (void) 05992 { 05993 return preYYtext; 05994 } 05995 06000 void preYYset_lineno (int line_number ) 06001 { 06002 06003 preYYlineno = line_number; 06004 } 06005 06012 void preYYset_in (FILE * in_str ) 06013 { 06014 preYYin = in_str ; 06015 } 06016 06017 void preYYset_out (FILE * out_str ) 06018 { 06019 preYYout = out_str ; 06020 } 06021 06022 int preYYget_debug (void) 06023 { 06024 return preYY_flex_debug; 06025 } 06026 06027 void preYYset_debug (int bdebug ) 06028 { 06029 preYY_flex_debug = bdebug ; 06030 } 06031 06032 static int yy_init_globals (void) 06033 { 06034 /* Initialization is the same as for the non-reentrant scanner. 06035 * This function is called from preYYlex_destroy(), so don't allocate here. 06036 */ 06037 06038 (yy_buffer_stack) = 0; 06039 (yy_buffer_stack_top) = 0; 06040 (yy_buffer_stack_max) = 0; 06041 (yy_c_buf_p) = (char *) 0; 06042 (yy_init) = 0; 06043 (yy_start) = 0; 06044 06045 (yy_state_buf) = 0; 06046 (yy_state_ptr) = 0; 06047 (yy_full_match) = 0; 06048 (yy_lp) = 0; 06049 06050 /* Defined in main.c */ 06051 #ifdef YY_STDINIT 06052 preYYin = stdin; 06053 preYYout = stdout; 06054 #else 06055 preYYin = (FILE *) 0; 06056 preYYout = (FILE *) 0; 06057 #endif 06058 06059 /* For future reference: Set errno on error, since we are called by 06060 * preYYlex_init() 06061 */ 06062 return 0; 06063 } 06064 06065 /* preYYlex_destroy is for both reentrant and non-reentrant scanners. */ 06066 int preYYlex_destroy (void) 06067 { 06068 06069 /* Pop the buffer stack, destroying each element. */ 06070 while(YY_CURRENT_BUFFER){ 06071 preYY_delete_buffer(YY_CURRENT_BUFFER ); 06072 YY_CURRENT_BUFFER_LVALUE = NULL; 06073 preYYpop_buffer_state(); 06074 } 06075 06076 /* Destroy the stack itself. */ 06077 preYYfree((yy_buffer_stack) ); 06078 (yy_buffer_stack) = NULL; 06079 06080 preYYfree ( (yy_state_buf) ); 06081 (yy_state_buf) = NULL; 06082 06083 /* Reset the globals. This is important in a non-reentrant scanner so the next time 06084 * preYYlex() is called, initialization will occur. */ 06085 yy_init_globals( ); 06086 06087 return 0; 06088 } 06089 06090 /* 06091 * Internal utility routines. 06092 */ 06093 06094 #ifndef yytext_ptr 06095 static void yy_flex_strncpy (char* s1, yyconst char * s2, int n ) 06096 { 06097 register int i; 06098 for ( i = 0; i < n; ++i ) 06099 s1[i] = s2[i]; 06100 } 06101 #endif 06102 06103 #ifdef YY_NEED_STRLEN 06104 static int yy_flex_strlen (yyconst char * s ) 06105 { 06106 register int n; 06107 for ( n = 0; s[n]; ++n ) 06108 ; 06109 06110 return n; 06111 } 06112 #endif 06113 06114 void *preYYalloc (yy_size_t size ) 06115 { 06116 return (void *) malloc( size ); 06117 } 06118 06119 void *preYYrealloc (void * ptr, yy_size_t size ) 06120 { 06121 /* The cast to (char *) in the following accommodates both 06122 * implementations that use char* generic pointers, and those 06123 * that use void* generic pointers. It works with the latter 06124 * because both ANSI C and C++ allow castless assignment from 06125 * any pointer type to void*, and deal with argument conversions 06126 * as though doing an assignment. 06127 */ 06128 return (void *) realloc( (char *) ptr, size ); 06129 } 06130 06131 void preYYfree (void * ptr ) 06132 { 06133 free( (char *) ptr ); /* see preYYrealloc() for (char *) cast */ 06134 } 06135 06136 #define YYTABLES_NAME "yytables" 06137 06138 #line 2196 "pre.l" 06139 06140 06141 06142 /*@ ---------------------------------------------------------------------------- 06143 */ 06144 06145 static int getNextChar(const QCString &expr,QCString *rest,uint &pos) 06146 { 06147 //printf("getNextChar(%s,%s,%d)\n",expr.data(),rest ? rest->data() : 0,pos); 06148 if (pos<expr.length()) 06149 { 06150 //printf("%c=expr()\n",expr.at(pos)); 06151 return expr.at(pos++); 06152 } 06153 else if (rest && !rest->isEmpty()) 06154 { 06155 int cc=rest->at(0); 06156 *rest=rest->right(rest->length()-1); 06157 //printf("%c=rest\n",cc); 06158 return cc; 06159 } 06160 else 06161 { 06162 int cc=yyinput(); 06163 //printf("%c=yyinput()\n",cc); 06164 return cc; 06165 } 06166 } 06167 06168 static int getCurrentChar(const QCString &expr,QCString *rest,uint pos) 06169 { 06170 //printf("getCurrentChar(%s,%s,%d)\n",expr.data(),rest ? rest->data() : 0,pos); 06171 if (pos<expr.length()) 06172 { 06173 //printf("%c=expr()\n",expr.at(pos)); 06174 return expr.at(pos); 06175 } 06176 else if (rest && !rest->isEmpty()) 06177 { 06178 int cc=rest->at(0); 06179 //printf("%c=rest\n",cc); 06180 return cc; 06181 } 06182 else 06183 { 06184 int cc=yyinput(); 06185 returnCharToStream(cc); 06186 //unput((char)cc); 06187 //printf("%c=yyinput()\n",cc); 06188 return cc; 06189 } 06190 } 06191 06192 static void unputChar(const QCString &expr,QCString *rest,uint &pos,char c) 06193 { 06194 //printf("unputChar(%s,%s,%d,%c)\n",expr.data(),rest ? rest->data() : 0,pos,c); 06195 if (pos<expr.length()) 06196 { 06197 pos++; 06198 } 06199 else if (rest) 06200 { 06201 //printf("Prepending to rest!\n"); 06202 char cs[2];cs[0]=c;cs[1]='\0'; 06203 rest->prepend(cs); 06204 } 06205 else 06206 { 06207 //unput(c); 06208 returnCharToStream(c); 06209 } 06210 //printf("result: unputChar(%s,%s,%d,%c)\n",expr.data(),rest ? rest->data() : 0,pos,c); 06211 } 06212 06213 void addSearchDir(const char *dir) 06214 { 06215 QFileInfo fi(dir); 06216 if (fi.isDir()) g_pathList->append(fi.absFilePath()); 06217 } 06218 06219 void initPreprocessor() 06220 { 06221 g_pathList = new QStrList; 06222 addSearchDir("."); 06223 //defineNameList.setAutoDelete(TRUE); 06224 //defineNameList.clear(); 06225 //defineDict.clear(); 06226 //fileDefineCache = new DefineCache(1009); 06227 g_expandedDict = new DefineDict(17); 06228 g_fileDefineDict = new DefineDict(1009); 06229 } 06230 06231 void cleanUpPreprocessor() 06232 { 06233 //delete fileDefineCache; 06234 delete g_fileDefineDict; g_fileDefineDict=0; 06235 delete g_expandedDict; g_expandedDict=0; 06236 delete g_pathList; g_pathList=0; 06237 } 06238 06239 06240 void preprocessFile(const char *fileName,BufStr &output) 06241 { 06242 uint orgOffset=output.curPos(); 06243 06244 g_macroExpansion = Config_getBool("MACRO_EXPANSION"); 06245 g_expandOnlyPredef = Config_getBool("EXPAND_ONLY_PREDEF"); 06246 g_curlyCount=0; 06247 g_nospaces=FALSE; 06248 g_outputBuf=&output; 06249 g_includeStack.setAutoDelete(TRUE); 06250 g_includeStack.clear(); 06251 g_fileDefineDict->setAutoDelete(TRUE); 06252 g_fileDefineDict->clear(); 06253 g_expandedDict->setAutoDelete(FALSE); 06254 g_expandedDict->clear(); 06255 g_condStack.clear(); 06256 g_condStack.setAutoDelete(TRUE); 06257 06258 // add predefined macros 06259 char *defStr; 06260 QStrList &predefList = Config_getList("PREDEFINED"); 06261 QStrListIterator sli(predefList); 06262 for (sli.toFirst();(defStr=sli.current());++sli) 06263 { 06264 QCString ds = defStr; 06265 int i_equals=ds.find('='); 06266 int i_obrace=ds.find('('); 06267 int i_cbrace=ds.find(')'); 06268 bool nonRecursive = i_equals>0 && ds.at(i_equals-1)==':'; 06269 06270 if (i_obrace==0) continue; // no define name 06271 06272 if (i_obrace<i_equals && i_cbrace<i_equals && 06273 i_obrace!=-1 && i_cbrace!=-1 && 06274 i_obrace<i_cbrace 06275 ) // predefined function macro definition 06276 { 06277 QRegExp reId("[a-z_A-Z][a-z_A-Z0-9]*"); // regexp matching an id 06278 QDict<int> argDict(17); 06279 argDict.setAutoDelete(TRUE); 06280 int i=i_obrace+1,p,l,count=0; 06281 // gather the formal arguments in a dictionary 06282 while (i<i_cbrace && (p=reId.match(ds,i,&l))) 06283 { 06284 argDict.insert(ds.mid(p,l),new int(count++)); 06285 i=p+l; 06286 } 06287 // strip definition part 06288 QCString tmp=ds.right(ds.length()-i_equals-1); 06289 QCString definition; 06290 i=0; 06291 // substitute all occurrences of formal arguments by their 06292 // corresponding markers 06293 while ((p=reId.match(tmp,i,&l))!=-1) 06294 { 06295 if (p>i) definition+=tmp.mid(i,p-i); 06296 int *argIndex; 06297 if ((argIndex=argDict[tmp.mid(p,l)])!=0) 06298 { 06299 QCString marker; 06300 marker.sprintf(" @%d ",*argIndex); 06301 definition+=marker; 06302 } 06303 else 06304 { 06305 definition+=tmp.mid(p,l); 06306 } 06307 i=p+l; 06308 } 06309 if (i<(int)tmp.length()) definition+=tmp.mid(i,tmp.length()-i); 06310 06311 // add define definition to the dictionary of defines for this file 06312 QCString dname = ds.left(i_obrace); 06313 if (!dname.isEmpty()) 06314 { 06315 Define *def = new Define; 06316 def->name = dname; 06317 def->definition = definition; 06318 def->nargs = count; 06319 def->isPredefined = TRUE; 06320 def->nonRecursive = nonRecursive; 06321 g_fileDefineDict->insert(def->name,def); 06322 } 06323 06324 //printf("#define `%s' `%s' #nargs=%d\n", 06325 // def->name.data(),def->definition.data(),def->nargs); 06326 } 06327 else if ((i_obrace==-1 || i_obrace>i_equals) && 06328 (i_cbrace==-1 || i_cbrace>i_equals) && 06329 !ds.isEmpty() && (int)ds.length()>i_equals 06330 ) // predefined non-function macro definition 06331 { 06332 Define *def = new Define; 06333 if (i_equals==-1) // simple define without argument 06334 { 06335 def->name = ds; 06336 def->definition = "1"; // substitute occurrences by 1 (true) 06337 } 06338 else // simple define with argument 06339 { 06340 int ine=i_equals - (nonRecursive ? 1 : 0); 06341 def->name = ds.left(ine); 06342 def->definition = ds.right(ds.length()-i_equals-1); 06343 } 06344 if (!def->name.isEmpty()) 06345 { 06346 def->nargs = -1; 06347 def->isPredefined = TRUE; 06348 def->nonRecursive = nonRecursive; 06349 g_fileDefineDict->insert(def->name,def); 06350 } 06351 else 06352 { 06353 delete def; 06354 } 06355 06356 //printf("#define `%s' `%s' #nargs=%d\n", 06357 // def->name.data(),def->definition.data(),def->nargs); 06358 } 06359 06360 } 06361 06362 QCString inputFilter = getFileFilter(fileName); 06363 if (inputFilter.isEmpty()) 06364 { 06365 preYYin = fopen(fileName,"r"); 06366 if (!preYYin) 06367 { 06368 err("Error: could not open file %s\n",fileName); 06369 return; 06370 } 06371 } 06372 else 06373 { 06374 QCString cmd = inputFilter+" \""+fileName+"\""; 06375 Debug::print(Debug::ExtCmd,0,"Executing popen(`%s`)\n",cmd.data()); 06376 preYYin = portable_popen(cmd,"r"); 06377 if (!preYYin) 06378 { 06379 err("Error: could not execute filter %s\n",cmd.data()); 06380 return; 06381 } 06382 } 06383 g_yyLineNr = 1; 06384 g_level = 0; 06385 g_ifcount = 0; 06386 setFileName(fileName); 06387 g_inputFileDef = g_yyFileDef; 06388 BEGIN( Start ); 06389 06390 g_lastGuardName.resize(0); 06391 g_guardExpr.resize(0); 06392 06393 preYYlex(); 06394 g_lexInit=TRUE; 06395 if (inputFilter.isEmpty()) 06396 fclose(preYYin); 06397 else 06398 portable_pclose(preYYin); 06399 06400 if (Debug::isFlagSet(Debug::Preprocessor)) 06401 { 06402 char *orgPos=output.data()+orgOffset; 06403 char *newPos=output.data()+output.curPos(); 06404 msg("Preprocessor output (size: %d bytes):\n",newPos-orgPos); 06405 int line=1; 06406 msg("---------\n00001 "); 06407 while (orgPos<newPos) 06408 { 06409 putchar(*orgPos); 06410 if (*orgPos=='\n') printf("%05d ",++line); 06411 orgPos++; 06412 } 06413 msg("\n---------\n"); 06414 } 06415 } 06416 06417 void preFreeScanner() 06418 { 06419 #if defined(YY_FLEX_SUBMINOR_VERSION) 06420 if (g_lexInit) 06421 { 06422 preYYlex_destroy(); 06423 } 06424 #endif 06425 } 06426 06427 #if !defined(YY_FLEX_SUBMINOR_VERSION) 06428 extern "C" { // some bogus code to keep the compiler happy 06429 // int preYYwrap() { return 1 ; } 06430 void preYYdummy() { yy_flex_realloc(0,0); } 06431 } 06432 #endif 06433 06434