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 vhdlscanYYrestart(vhdlscanYYin ) 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 vhdlscanYYleng; 00155 00156 extern FILE *vhdlscanYYin, *vhdlscanYYout; 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 vhdlscanYYtext. */ \ 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 vhdlscanYYtext 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 vhdlscanYYrestart()), so that the user can continue scanning by 00248 * just pointing vhdlscanYYin 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 vhdlscanYYtext is formed. */ 00276 static char yy_hold_char; 00277 static int yy_n_chars; /* number of characters read into yy_ch_buf */ 00278 int vhdlscanYYleng; 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 vhdlscanYYwrap()'s to do buffer switches 00286 * instead of setting up a fresh vhdlscanYYin. A bit of a hack ... 00287 */ 00288 static int yy_did_buffer_switch_on_eof; 00289 00290 void vhdlscanYYrestart (FILE *input_file ); 00291 void vhdlscanYY_switch_to_buffer (YY_BUFFER_STATE new_buffer ); 00292 YY_BUFFER_STATE vhdlscanYY_create_buffer (FILE *file,int size ); 00293 void vhdlscanYY_delete_buffer (YY_BUFFER_STATE b ); 00294 void vhdlscanYY_flush_buffer (YY_BUFFER_STATE b ); 00295 void vhdlscanYYpush_buffer_state (YY_BUFFER_STATE new_buffer ); 00296 void vhdlscanYYpop_buffer_state (void ); 00297 00298 static void vhdlscanYYensure_buffer_stack (void ); 00299 static void vhdlscanYY_load_buffer_state (void ); 00300 static void vhdlscanYY_init_buffer (YY_BUFFER_STATE b,FILE *file ); 00301 00302 #define YY_FLUSH_BUFFER vhdlscanYY_flush_buffer(YY_CURRENT_BUFFER ) 00303 00304 YY_BUFFER_STATE vhdlscanYY_scan_buffer (char *base,yy_size_t size ); 00305 YY_BUFFER_STATE vhdlscanYY_scan_string (yyconst char *yy_str ); 00306 YY_BUFFER_STATE vhdlscanYY_scan_bytes (yyconst char *bytes,int len ); 00307 00308 void *vhdlscanYYalloc (yy_size_t ); 00309 void *vhdlscanYYrealloc (void *,yy_size_t ); 00310 void vhdlscanYYfree (void * ); 00311 00312 #define yy_new_buffer vhdlscanYY_create_buffer 00313 00314 #define yy_set_interactive(is_interactive) \ 00315 { \ 00316 if ( ! YY_CURRENT_BUFFER ){ \ 00317 vhdlscanYYensure_buffer_stack (); \ 00318 YY_CURRENT_BUFFER_LVALUE = \ 00319 vhdlscanYY_create_buffer(vhdlscanYYin,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 vhdlscanYYensure_buffer_stack (); \ 00328 YY_CURRENT_BUFFER_LVALUE = \ 00329 vhdlscanYY_create_buffer(vhdlscanYYin,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 vhdlscanYYwrap(n) 1 00339 #define YY_SKIP_YYWRAP 00340 00341 typedef unsigned char YY_CHAR; 00342 00343 FILE *vhdlscanYYin = (FILE *) 0, *vhdlscanYYout = (FILE *) 0; 00344 00345 typedef int yy_state_type; 00346 00347 extern int vhdlscanYYlineno; 00348 00349 int vhdlscanYYlineno = 1; 00350 00351 extern char *vhdlscanYYtext; 00352 #define yytext_ptr vhdlscanYYtext 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 vhdlscanYYtext. 00361 */ 00362 #define YY_DO_BEFORE_ACTION \ 00363 (yytext_ptr) = yy_bp; \ 00364 vhdlscanYYleng = (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 46 00370 #define YY_END_OF_BUFFER 47 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[881] = 00379 { 0, 00380 44, 44, 8, 44, 8, 44, 44, 44, 44, 44, 00381 28, 44, 28, 44, 17, 44, 17, 44, 11, 44, 00382 11, 44, 44, 44, 44, 44, 44, 44, 44, 44, 00383 44, 44, 44, 44, 44, 44, 44, 44, 47, 45, 00384 46, 44, 45, 46, 42, 46, 45, 46, 45, 46, 00385 36, 43, 45, 46, 43, 45, 46, 44, 45, 46, 00386 45, 46, 43, 45, 46, 45, 46, 44, 45, 46, 00387 8, 42, 46, 8, 45, 46, 44, 45, 46, 45, 00388 46, 45, 46, 45, 46, 36, 43, 45, 46, 45, 00389 46, 43, 45, 46, 43, 45, 46, 43, 45, 46, 00390 00391 43, 45, 46, 43, 45, 46, 44, 45, 46, 44, 00392 45, 46, 45, 46, 43, 45, 46, 43, 45, 46, 00393 43, 45, 46, 43, 45, 46, 43, 45, 46, 43, 00394 45, 46, 43, 45, 46, 43, 45, 46, 43, 45, 00395 46, 39, 45, 46, 39, 44, 45, 46, 39, 42, 00396 46, 39, 45, 46, 39, 45, 46, 36, 39, 43, 00397 45, 46, 39, 43, 45, 46, 39, 44, 45, 46, 00398 39, 45, 46, 39, 43, 45, 46, 15, 36, 43, 00399 45, 46, 15, 43, 45, 46, 15, 43, 45, 46, 00400 21, 45, 46, 28, 44, 45, 46, 21, 28, 42, 00401 00402 46, 21, 28, 45, 46, 22, 45, 46, 23, 45, 00403 46, 21, 45, 46, 21, 36, 43, 45, 46, 26, 00404 45, 46, 21, 43, 45, 46, 21, 43, 45, 46, 00405 21, 43, 45, 46, 21, 43, 45, 46, 28, 44, 00406 45, 46, 21, 45, 46, 21, 43, 45, 46, 17, 00407 44, 45, 46, 17, 42, 46, 17, 45, 46, 19, 00408 43, 45, 46, 19, 43, 45, 46, 17, 44, 45, 00409 46, 19, 43, 45, 46, 11, 44, 45, 46, 11, 00410 42, 46, 11, 45, 46, 12, 43, 45, 46, 11, 00411 44, 45, 46, 12, 43, 45, 46, 9, 45, 46, 00412 00413 9, 44, 45, 46, 9, 42, 46, 9, 45, 46, 00414 9, 45, 46, 9, 36, 43, 45, 46, 9, 43, 00415 45, 46, 9, 43, 45, 46, 9, 44, 45, 46, 00416 9, 45, 46, 9, 43, 45, 46, 13, 36, 43, 00417 45, 46, 13, 43, 45, 46, 13, 43, 45, 46, 00418 29, 36, 43, 45, 46, 29, 43, 45, 46, 29, 00419 43, 45, 46, 34, 42, 46, 34, 45, 46, 33, 00420 45, 46, 31, 45, 46, 43, 45, 46, 43, 45, 00421 46, 14, 45, 46, 14, 43, 45, 46, 14, 43, 00422 45, 46, 44, 41, 43, 36, 43, 43, 44, 41, 00423 00424 43, 44, 44, 8, 43, 36, 43, 43, 43, 43, 00425 43, 43, 43, 43, 44, 44, 43, 43, 43, 43, 00426 43, 43, 43, 43, 43, 43, 43, 43, 43, 44, 00427 41, 15, 15, 43, 15, 36, 43, 15, 43, 15, 00428 43, 28, 44, 28, 41, 43, 43, 43, 28, 44, 00429 41, 17, 44, 17, 19, 19, 43, 19, 43, 17, 00430 44, 19, 43, 11, 44, 11, 12, 12, 12, 43, 00431 11, 44, 12, 12, 43, 43, 13, 43, 13, 36, 00432 43, 13, 43, 13, 43, 29, 43, 29, 36, 43, 00433 29, 43, 29, 43, 43, 32, 43, 14, 14, 43, 00434 00435 14, 43, 41, 41, 36, 43, 40, 41, 43, 36, 00436 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 00437 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 00438 38, 40, 41, 15, 36, 43, 15, 43, 27, 41, 00439 27, 27, 41, 43, 43, 43, 27, 40, 41, 19, 00440 43, 19, 43, 12, 12, 43, 43, 13, 36, 43, 00441 13, 43, 29, 36, 43, 29, 43, 43, 14, 43, 00442 41, 36, 40, 40, 41, 40, 41, 35, 43, 43, 00443 43, 43, 43, 43, 43, 43, 43, 35, 43, 43, 00444 43, 43, 43, 43, 43, 43, 4, 4, 4, 38, 00445 00446 40, 38, 40, 41, 38, 40, 41, 15, 35, 20, 00447 27, 41, 27, 27, 41, 43, 24, 43, 43, 27, 00448 40, 41, 27, 40, 41, 19, 19, 43, 19, 43, 00449 19, 35, 12, 12, 35, 32, 35, 41,16421, 40, 00450 40, 40, 41, 35, 43, 43, 43, 30, 43, 43, 00451 43, 43, 43, 35, 35, 35, 35, 35, 43, 43, 00452 43, 43, 43, 43, 1, 1, 1, 4, 4, 4, 00453 38, 40, 38, 40, 38, 40, 41, 15, 35, 27, 00454 41, 43, 43, 27, 40, 41, 19, 19, 19, 43, 00455 19, 43, 19, 35, 12, 35, 32, 32, 32, 35, 00456 00457 40, 43, 43, 43, 43, 43, 43, 43, 43, 35, 00458 35, 35, 35, 35, 35, 35, 35, 35, 43, 43, 00459 43, 43, 43, 38, 40, 43, 43, 19, 19, 19, 00460 43, 19, 43, 32, 43, 43, 43, 43, 43, 43, 00461 6, 6, 6, 35, 35, 35, 35, 35, 35, 35, 00462 35, 35, 35, 43, 43, 25, 43, 43, 19, 19, 00463 19, 43, 19, 43, 8229, 43, 43, 3, 43, 43, 00464 35, 35, 35, 35, 35, 5, 43, 43, 43, 16, 00465 43, 19, 19, 19, 43, 19, 43, 3, 3, 3, 00466 3, 3, 43, 3, 3, 3, 5, 35, 35, 35, 00467 00468 35, 35, 5, 5, 43, 16, 19, 19, 19, 43, 00469 19, 18, 3, 3, 3, 7, 3, 3, 3, 43, 00470 35, 35, 35, 35, 35, 35, 35, 10, 43, 19, 00471 19, 19, 43, 3, 3, 3, 3, 3, 43, 35, 00472 35, 35, 35, 35, 35, 10, 19, 19, 43, 35, 00473 35, 35, 35, 3, 35, 35, 35, 35, 3, 35, 00474 3, 35, 3, 35, 3, 35, 35, 7, 35, 35, 00475 35, 35, 3, 35, 3, 35, 2, 2, 2, 2 00476 } ; 00477 00478 static yyconst flex_int16_t yy_accept[850] = 00479 { 0, 00480 1, 2, 3, 5, 7, 8, 9, 10, 11, 13, 00481 15, 17, 19, 21, 23, 24, 25, 26, 27, 28, 00482 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 00483 39, 40, 42, 45, 47, 49, 51, 55, 58, 61, 00484 63, 66, 68, 71, 74, 77, 80, 82, 84, 86, 00485 90, 92, 95, 98, 101, 104, 107, 110, 113, 115, 00486 118, 121, 124, 127, 130, 133, 136, 139, 142, 145, 00487 149, 152, 155, 158, 163, 167, 171, 174, 178, 183, 00488 187, 191, 194, 198, 202, 206, 209, 212, 215, 220, 00489 223, 227, 231, 235, 239, 243, 246, 250, 254, 257, 00490 00491 260, 264, 268, 272, 276, 280, 283, 286, 290, 294, 00492 298, 301, 305, 308, 311, 314, 319, 323, 327, 331, 00493 334, 338, 343, 347, 351, 356, 360, 364, 367, 370, 00494 373, 376, 379, 382, 385, 389, 393, 394, 394, 394, 00495 395, 395, 396, 398, 399, 400, 400, 400, 401, 402, 00496 402, 403, 403, 404, 404, 404, 404, 404, 404, 404, 00497 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, 00498 406, 408, 409, 410, 410, 410, 410, 410, 410, 410, 00499 410, 410, 411, 411, 412, 413, 414, 415, 416, 417, 00500 417, 417, 417, 417, 417, 417, 417, 417, 417, 418, 00501 00502 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 00503 429, 430, 431, 431, 432, 433, 435, 438, 440, 442, 00504 442, 442, 444, 445, 445, 445, 445, 445, 446, 447, 00505 448, 449, 451, 451, 452, 454, 455, 456, 458, 460, 00506 462, 464, 466, 467, 468, 469, 471, 473, 474, 476, 00507 477, 479, 482, 484, 486, 488, 491, 493, 495, 495, 00508 496, 497, 498, 499, 501, 503, 503, 504, 505, 505, 00509 507, 507, 507, 509, 510, 510, 510, 510, 510, 510, 00510 510, 510, 510, 510, 510, 510, 512, 513, 513, 513, 00511 513, 513, 513, 513, 513, 513, 513, 513, 514, 515, 00512 00513 516, 517, 517, 517, 517, 517, 517, 517, 517, 517, 00514 517, 517, 517, 517, 517, 517, 518, 519, 520, 521, 00515 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 00516 531, 534, 537, 539, 539, 539, 539, 539, 541, 542, 00517 544, 545, 546, 546, 547, 550, 552, 554, 555, 557, 00518 558, 561, 563, 566, 568, 568, 568, 569, 571, 571, 00519 572, 573, 574, 574, 576, 578, 579, 579, 579, 579, 00520 579, 579, 579, 579, 580, 580, 580, 580, 580, 580, 00521 580, 581, 582, 583, 584, 584, 584, 584, 584, 584, 00522 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 00523 00524 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 00525 595, 596, 597, 598, 599, 600, 602, 605, 608, 610, 00526 610, 610, 610, 611, 611, 611, 613, 614, 616, 617, 00527 617, 618, 619, 619, 620, 623, 626, 627, 627, 629, 00528 631, 633, 634, 636, 636, 637, 638, 638, 639, 640, 00529 641, 642, 644, 645, 645, 645, 645, 645, 645, 645, 00530 645, 646, 646, 646, 646, 646, 646, 646, 647, 648, 00531 648, 648, 648, 649, 650, 650, 650, 650, 650, 650, 00532 650, 650, 650, 650, 650, 650, 650, 650, 651, 652, 00533 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 00534 00535 663, 664, 665, 666, 667, 668, 669, 670, 671, 673, 00536 675, 678, 680, 680, 680, 680, 682, 682, 682, 683, 00537 683, 684, 687, 688, 689, 689, 689, 691, 693, 695, 00538 697, 698, 699, 700, 701, 701, 701, 701, 702, 702, 00539 702, 702, 702, 702, 702, 703, 703, 703, 703, 703, 00540 703, 703, 703, 703, 704, 705, 706, 706, 706, 706, 00541 706, 706, 706, 706, 706, 706, 706, 706, 707, 708, 00542 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 00543 719, 720, 721, 722, 723, 724, 726, 726, 726, 726, 00544 726, 727, 727, 728, 729, 730, 730, 730, 732, 734, 00545 00546 735, 735, 735, 735, 735, 735, 735, 735, 736, 736, 00547 736, 736, 736, 736, 736, 736, 737, 738, 738, 738, 00548 738, 738, 738, 738, 738, 738, 738, 738, 739, 740, 00549 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 00550 751, 752, 753, 754, 755, 756, 756, 756, 757, 757, 00551 757, 757, 758, 758, 759, 760, 761, 761, 761, 763, 00552 765, 766, 766, 766, 766, 766, 766, 767, 767, 767, 00553 767, 767, 767, 767, 768, 768, 768, 768, 769, 769, 00554 769, 769, 769, 769, 770, 771, 772, 773, 774, 775, 00555 776, 778, 779, 779, 779, 779, 780, 780, 782, 783, 00556 00557 784, 784, 784, 786, 788, 788, 789, 789, 790, 790, 00558 790, 791, 791, 791, 791, 791, 791, 791, 792, 792, 00559 793, 794, 795, 796, 797, 797, 797, 798, 798, 799, 00560 800, 801, 802, 803, 804, 805, 805, 805, 805, 806, 00561 807, 808, 809, 809, 809, 811, 812, 812, 813, 813, 00562 813, 813, 814, 815, 816, 816, 817, 817, 817, 817, 00563 817, 817, 818, 819, 820, 821, 822, 823, 824, 825, 00564 826, 827, 828, 828, 828, 828, 830, 831, 831, 832, 00565 832, 834, 835, 836, 837, 838, 839, 840, 841, 842, 00566 843, 844, 845, 846, 846, 846, 847, 848, 848, 849, 00567 00568 849, 850, 851, 852, 853, 854, 856, 856, 856, 856, 00569 856, 856, 857, 858, 859, 861, 863, 865, 867, 867, 00570 867, 867, 867, 868, 870, 871, 872, 873, 875, 877, 00571 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 00572 877, 877, 877, 878, 878, 879, 880, 881, 881 00573 } ; 00574 00575 static yyconst flex_int32_t yy_ec[256] = 00576 { 0, 00577 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 00578 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 00579 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 00580 1, 5, 6, 7, 8, 1, 1, 1, 1, 9, 00581 10, 11, 12, 1, 13, 14, 11, 15, 15, 15, 00582 15, 15, 15, 15, 15, 15, 15, 16, 17, 1, 00583 1, 1, 1, 18, 20, 21, 22, 23, 24, 25, 00584 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 00585 29, 36, 37, 38, 39, 29, 29, 29, 40, 29, 00586 1, 1, 1, 1, 19, 1, 20, 21, 22, 23, 00587 00588 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 00589 34, 35, 29, 36, 37, 38, 39, 29, 29, 29, 00590 40, 29, 41, 1, 41, 1, 1, 1, 1, 1, 00591 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 00592 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 00593 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 00594 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 00595 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 00596 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 00597 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 00598 00599 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 00600 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 00601 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 00602 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 00603 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 00604 1, 1, 1, 1, 1 00605 } ; 00606 00607 static yyconst flex_int32_t yy_meta[42] = 00608 { 0, 00609 1, 2, 3, 4, 2, 1, 5, 6, 1, 1, 00610 7, 8, 9, 10, 11, 12, 13, 1, 14, 15, 00611 15, 15, 15, 16, 15, 17, 17, 18, 17, 17, 00612 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 00613 19 00614 } ; 00615 00616 static yyconst flex_int16_t yy_base[911] = 00617 { 0, 00618 0, 40, 65, 105, 144, 106, 185, 107, 226, 266, 00619 291, 331, 356, 396, 421, 461, 486, 526, 551, 591, 00620 0, 592, 0, 593, 618, 658, 683, 723, 0, 724, 00621 3050, 4076, 44, 111, 270, 3033, 36, 3037, 728, 3031, 00622 726, 3008, 759, 793, 827, 861, 741, 104, 765, 895, 00623 784, 929, 963, 998, 3018, 18, 1013, 0, 742, 20, 00624 2999, 2997, 21, 2998, 101, 94, 2984, 26, 4076, 335, 00625 400, 465, 3010, 262, 3009, 788, 3003, 731, 1051, 282, 00626 800, 2990, 1065, 1092, 0, 2989, 2987, 110, 327, 2986, 00627 326, 3001, 719, 734, 813, 256, 746, 530, 597, 662, 00628 00629 1120, 1161, 820, 28, 844, 848, 868, 1202, 880, 1243, 00630 4076, 910, 914, 936, 2986, 274, 2986, 750, 948, 2980, 00631 748, 338, 2984, 808, 392, 2974, 852, 978, 982, 4076, 00632 4076, 1284, 2947, 0, 403, 1009, 1026, 1058, 2965, 2971, 00633 0, 339, 404, 2968, 1077, 2960, 2938, 2965, 743, 2934, 00634 2934, 832, 2933, 853, 886, 1072, 1324, 1339, 441, 2932, 00635 890, 919, 920, 953, 988, 1083, 1107, 1137, 1142, 449, 00636 893, 2931, 436, 0, 0, 0, 477, 1152, 1146, 1181, 00637 1098, 0, 1186, 2942, 2930, 2926, 2927, 2925, 2924, 506, 00638 104, 375, 638, 321, 972, 920, 505, 513, 2920, 508, 00639 00640 2919, 2920, 2922, 2933, 2931, 2918, 2925, 2929, 2914, 2919, 00641 2922, 1221, 2932, 2932, 609, 646, 1185, 2903, 449, 2903, 00642 2911, 1234, 0, 523, 2901, 2896, 2897, 1224, 751, 118, 00643 1354, 0, 525, 1257, 1267, 1362, 0, 2896, 645, 1366, 00644 245, 1371, 1384, 0, 0, 2894, 0, 2888, 573, 727, 00645 600, 730, 2913, 791, 661, 806, 2907, 803, 2896, 0, 00646 668, 2876, 0, 2877, 820, 2898, 0, 2862, 2894, 732, 00647 2894, 2860, 2854, 468, 2855, 783, 2852, 2859, 387, 319, 00648 870, 1376, 1396, 2843, 926, 844, 908, 1400, 1404, 935, 00649 1013, 983, 991, 1409, 1413, 1417, 2842, 2850, 2847, 2827, 00650 00651 2840, 1404, 1034, 965, 1068, 1021, 896, 658, 1010, 1049, 00652 1016, 1080, 1084, 1089, 2833, 2819, 2819, 2811, 2819, 2839, 00653 2821, 2792, 2792, 2799, 2787, 2776, 2787, 2772, 1451, 2803, 00654 2762, 979, 973, 2779, 2770, 1455, 2769, 0, 0, 2750, 00655 1129, 1467, 1459, 939, 2741, 1501, 1031, 2745, 1130, 1474, 00656 1076, 1110, 1190, 1187, 1372, 2767, 2772, 1182, 0, 2773, 00657 4076, 2727, 2754, 2755, 0, 0, 2730, 2727, 1193, 1216, 00658 1427, 2716, 1242, 1206, 2721, 2709, 1359, 1245, 1311, 1240, 00659 2714, 2705, 1478, 2711, 1233, 1324, 1198, 1399, 1306, 1356, 00660 1403, 1358, 518, 1423, 1249, 1413, 2708, 1450, 1494, 2703, 00661 00662 2696, 2682, 2681, 1540, 2679, 2696, 2695, 2689, 2692, 2671, 00663 1505, 2672, 1509, 1517, 1557, 2651, 2682, 0, 1524, 1561, 00664 1565, 1572, 4076, 2670, 1584, 0, 0, 2670, 1588, 1600, 00665 4076, 1193, 2648, 1478, 2668, 0, 1595, 1604, 1409, 2636, 00666 2665, 2662, 2605, 1609, 1488, 2590, 2601, 2600, 1613, 2599, 00667 0, 2595, 0, 2549, 1410, 1618, 2543, 1614, 2543, 1449, 00668 1500, 2531, 2527, 1431, 1643, 1605, 1615, 2522, 2522, 1650, 00669 1658, 1666, 2531, 2489, 1470, 1508, 1315, 1492, 1493, 1533, 00670 1559, 1560, 2501, 1604, 1119, 1674, 1648, 2497, 2484, 2494, 00671 2473, 1684, 1688, 1704, 1678, 1745, 2484, 2470, 2479, 1613, 00672 00673 2473, 2464, 1721, 1725, 1785, 1789, 1793, 1808, 2485, 0, 00674 2484, 1729, 1812, 1816, 1823, 2483, 2441, 2443, 938, 2456, 00675 1481, 2469, 2447, 2437, 2440, 2430, 1651, 1668, 2459, 2457, 00676 1829, 1830, 1834, 2442, 2455, 1843, 2439, 2448, 2412, 1671, 00677 1813, 1844, 2424, 1502, 1621, 2423, 2407, 1708, 1880, 1716, 00678 1859, 1766, 1831, 2420, 2421, 2351, 2362, 1714, 1417, 1719, 00679 1554, 1780, 1830, 1827, 1834, 1633, 1835, 2345, 2359, 2349, 00680 1870, 1874, 1884, 1888, 0, 0, 0, 1892, 1914, 1948, 00681 2338, 2331, 2345, 2329, 2343, 2362, 1918, 1926, 2331, 2311, 00682 1822, 2310, 1844, 2314, 2306, 2302, 2295, 1521, 1664, 1897, 00683 00684 2316, 2274, 1879, 1868, 1909, 2272, 1596, 1889, 2265, 1937, 00685 1911, 2280, 1924, 1900, 1920, 2277, 1959, 1783, 1136, 2266, 00686 1805, 1967, 1874, 1641, 2264, 1157, 2260, 2245, 2249, 2234, 00687 1971, 1976, 1991, 1995, 1999, 2006, 2010, 2014, 2020, 2024, 00688 2033, 2048, 2058, 2232, 2225, 2068, 2072, 4076, 2077, 2232, 00689 2231, 1695, 2210, 1587, 2211, 2200, 2202, 2196, 1952, 1922, 00690 4076, 2093, 2097, 2101, 2188, 2109, 2124, 2191, 2128, 2182, 00691 1997, 2132, 2020, 2168, 2136, 2145, 2153, 2161, 1982, 1953, 00692 2040, 2015, 2083, 2176, 2154, 2167, 2135, 2169, 2173, 2177, 00693 2085, 2144, 2181, 2129, 2127, 1229, 2121, 2116, 2080, 2030, 00694 00695 2022, 2005, 2085, 2185, 2192, 2211, 2219, 2224, 2228, 2239, 00696 2255, 2246, 2261, 1999, 2266, 2276, 2311, 2086, 2289, 2293, 00697 1966, 2301, 2316, 2038, 1966, 2085, 2284, 1965, 1934, 1930, 00698 2324, 2328, 2338, 2345, 2271, 2349, 1920, 1895, 2078, 4076, 00699 1890, 2353, 1884, 2372, 2389, 2429, 2433, 4076, 1832, 2437, 00700 1786, 2376, 2452, 2060, 2464, 4076, 2472, 2141, 1834, 0, 00701 2173, 2506, 2333, 2480, 1763, 1738, 1702, 2488, 2540, 2574, 00702 2492, 2498, 2534, 1538, 1486, 1458, 2609, 2517, 0, 2544, 00703 2526, 4076, 1336, 2086, 0, 0, 1330, 1296, 2550, 2566, 00704 1021, 2554, 2649, 2653, 921, 4076, 2578, 2582, 2588, 2657, 00705 00706 2592, 850, 2661, 809, 2673, 2686, 2677, 2694, 2698, 2702, 00707 2720, 790, 2724, 2735, 2769, 2803, 2744, 2196, 2758, 2752, 00708 2762, 2781, 2785, 0, 2837, 2871, 2814, 2905, 2939, 2796, 00709 2828, 2822, 2832, 2856, 2848, 2882, 2865, 2889, 649, 2915, 00710 2922, 578, 39, 2117, 0, 4076, 7, 4076, 2969, 2986, 00711 3003, 3020, 3037, 3054, 3071, 3088, 3105, 3123, 3142, 3160, 00712 3178, 3192, 3205, 3219, 3233, 3251, 3263, 3278, 3296, 3315, 00713 3334, 3353, 3372, 3391, 3410, 3429, 3448, 3467, 3486, 3505, 00714 3523, 3542, 3561, 3580, 3599, 3618, 3637, 3656, 3675, 3694, 00715 3713, 3732, 3751, 3770, 3789, 3808, 3827, 3846, 3865, 3884, 00716 00717 3903, 3921, 3938, 3955, 3972, 3989, 4006, 4023, 4040, 4057 00718 } ; 00719 00720 static yyconst flex_int16_t yy_def[911] = 00721 { 0, 00722 848, 1, 848, 3, 848, 5, 848, 7, 848, 9, 00723 848, 11, 848, 13, 848, 15, 848, 17, 848, 19, 00724 1, 1, 1, 1, 848, 25, 848, 27, 1, 1, 00725 848, 848, 848, 848, 848, 848, 849, 849, 848, 848, 00726 849, 848, 850, 851, 851, 850, 852, 848, 853, 854, 00727 855, 854, 856, 856, 54, 54, 46, 57, 848, 54, 00728 54, 54, 54, 54, 54, 54, 54, 54, 848, 848, 00729 848, 848, 848, 849, 849, 848, 848, 849, 857, 857, 00730 857, 848, 858, 858, 84, 848, 848, 848, 849, 848, 00731 849, 849, 849, 849, 84, 848, 849, 848, 848, 848, 00732 00733 859, 859, 848, 102, 860, 848, 848, 861, 860, 861, 00734 848, 848, 848, 848, 848, 849, 849, 849, 848, 848, 00735 849, 862, 862, 862, 863, 863, 863, 848, 848, 848, 00736 848, 848, 132, 864, 865, 865, 848, 848, 848, 866, 00737 867, 849, 849, 849, 848, 848, 848, 866, 849, 848, 00738 46, 45, 46, 852, 853, 855, 868, 868, 158, 45, 00739 852, 848, 852, 848, 852, 848, 848, 853, 853, 52, 00740 52, 52, 52, 156, 156, 156, 156, 156, 156, 848, 00741 169, 54, 156, 54, 54, 54, 54, 57, 57, 158, 00742 158, 158, 158, 158, 158, 158, 158, 158, 54, 54, 00743 00744 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 00745 54, 848, 848, 866, 848, 81, 81, 81, 81, 848, 00746 848, 84, 84, 848, 848, 848, 848, 869, 849, 849, 00747 849, 95, 848, 869, 848, 848, 870, 102, 102, 848, 00748 102, 109, 848, 871, 871, 110, 109, 871, 110, 849, 00749 862, 862, 862, 862, 863, 863, 863, 863, 872, 132, 00750 848, 132, 864, 136, 136, 848, 866, 873, 867, 849, 00751 848, 848, 874, 849, 848, 158, 179, 158, 158, 158, 00752 158, 852, 848, 848, 169, 52, 52, 848, 848, 179, 00753 179, 179, 179, 156, 156, 156, 179, 54, 54, 54, 00754 00755 54, 158, 158, 158, 158, 158, 158, 158, 158, 158, 00756 158, 158, 158, 158, 158, 54, 54, 54, 54, 54, 00757 54, 54, 54, 54, 54, 54, 54, 54, 54, 848, 00758 875, 81, 81, 848, 848, 848, 848, 876, 877, 878, 00759 849, 849, 848, 849, 879, 102, 102, 871, 110, 342, 00760 862, 862, 863, 863, 848, 848, 132, 136, 880, 881, 00761 848, 882, 848, 883, 884, 885, 848, 158, 158, 158, 00762 852, 848, 169, 52, 848, 848, 179, 179, 179, 179, 00763 54, 54, 54, 54, 158, 158, 158, 158, 158, 158, 00764 158, 158, 158, 158, 158, 158, 158, 158, 158, 54, 00765 00766 54, 54, 54, 886, 54, 54, 54, 54, 54, 54, 00767 54, 54, 848, 848, 853, 887, 888, 889, 885, 848, 00768 848, 848, 848, 848, 848, 876, 877, 890, 849, 848, 00769 848, 849, 848, 849, 891, 892, 870, 848, 102, 102, 00770 893, 871, 894, 848, 895, 896, 897, 881, 848, 898, 00771 899, 883, 885, 848, 158, 158, 158, 852, 848, 169, 00772 52, 848, 848, 179, 156, 179, 179, 54, 54, 848, 00773 848, 853, 848, 54, 158, 158, 158, 158, 158, 158, 00774 158, 158, 158, 158, 158, 158, 158, 54, 54, 54, 00775 54, 885, 885, 886, 494, 848, 54, 54, 54, 54, 00776 00777 54, 54, 848, 848, 853, 848, 848, 853, 900, 901, 00778 888, 885, 902, 902, 902, 890, 848, 848, 849, 848, 00779 849, 891, 870, 870, 848, 848, 102, 102, 893, 894, 00780 895, 895, 895, 896, 897, 848, 848, 898, 848, 158, 00781 158, 852, 848, 169, 52, 848, 848, 179, 848, 549, 00782 156, 179, 179, 54, 54, 54, 158, 158, 158, 158, 00783 158, 158, 158, 158, 158, 158, 158, 54, 54, 54, 00784 54, 496, 885, 494, 496, 496, 496, 496, 496, 496, 00785 54, 54, 54, 54, 54, 900, 903, 903, 848, 848, 00786 849, 848, 849, 870, 870, 848, 848, 102, 102, 895, 00787 00788 848, 848, 158, 158, 852, 848, 169, 52, 848, 848, 00789 179, 848, 179, 179, 179, 54, 54, 158, 158, 158, 00790 158, 158, 158, 158, 158, 158, 158, 54, 54, 54, 00791 848, 848, 853, 496, 496, 496, 496, 885, 885, 496, 00792 496, 496, 496, 54, 54, 848, 903, 848, 903, 848, 00793 848, 849, 848, 849, 870, 870, 848, 848, 102, 102, 00794 848, 848, 158, 852, 848, 853, 52, 848, 848, 848, 00795 179, 156, 179, 54, 848, 848, 472, 848, 158, 158, 00796 158, 158, 158, 54, 54, 885, 885, 496, 496, 496, 00797 54, 54, 903, 848, 848, 849, 848, 849, 870, 870, 00798 00799 848, 848, 102, 102, 848, 848, 848, 848, 472, 848, 00800 848, 848, 709, 848, 848, 179, 848, 717, 156, 156, 00801 54, 848, 848, 848, 158, 158, 158, 158, 885, 885, 00802 496, 496, 496, 848, 169, 903, 848, 848, 849, 848, 00803 870, 870, 848, 848, 848, 870, 848, 848, 848, 848, 00804 169, 848, 848, 848, 848, 848, 848, 757, 716, 718, 00805 179, 848, 762, 156, 54, 885, 885, 496, 885, 885, 00806 496, 496, 903, 848, 848, 849, 848, 904, 777, 904, 00807 745, 848, 169, 179, 762, 763, 54, 885, 885, 496, 00808 885, 496, 496, 903, 848, 848, 777, 904, 870, 848, 00809 00810 54, 885, 885, 885, 496, 496, 903, 848, 905, 905, 00811 906, 885, 885, 496, 885, 885, 496, 885, 903, 907, 00812 908, 909, 885, 885, 885, 885, 496, 885, 885, 907, 00813 910, 848, 908, 908, 848, 848, 169, 909, 838, 848, 00814 910, 848, 834, 169, 838, 848, 169, 0, 848, 848, 00815 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 00816 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 00817 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 00818 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 00819 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 00820 00821 848, 848, 848, 848, 848, 848, 848, 848, 848, 848 00822 } ; 00823 00824 static yyconst flex_int16_t yy_nxt[4118] = 00825 { 0, 00826 32, 33, 34, 35, 33, 32, 32, 32, 32, 32, 00827 32, 32, 36, 32, 37, 32, 32, 32, 38, 38, 00828 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 00829 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 00830 32, 39, 155, 141, 39, 137, 138, 138, 137, 142, 00831 143, 186, 40, 187, 202, 184, 139, 199, 210, 203, 00832 238, 241, 211, 833, 41, 42, 43, 44, 45, 46, 00833 42, 47, 42, 42, 42, 42, 42, 48, 49, 50, 00834 51, 42, 42, 52, 53, 54, 54, 54, 54, 54, 00835 55, 54, 54, 54, 54, 54, 54, 54, 54, 56, 00836 00837 54, 54, 54, 54, 54, 42, 57, 76, 39, 58, 00838 76, 39, 138, 138, 138, 138, 140, 59, 77, 40, 00839 205, 207, 228, 139, 60, 848, 61, 278, 62, 63, 00840 78, 81, 208, 220, 186, 64, 206, 304, 150, 65, 00841 342, 66, 67, 68, 69, 70, 71, 72, 70, 69, 00842 69, 69, 69, 69, 69, 69, 73, 69, 74, 69, 00843 69, 69, 75, 75, 75, 75, 75, 75, 75, 75, 00844 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 00845 75, 75, 75, 75, 69, 32, 33, 34, 35, 33, 00846 32, 32, 32, 32, 32, 32, 32, 36, 32, 79, 00847 00848 32, 32, 32, 80, 80, 80, 80, 80, 80, 80, 00849 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 00850 80, 80, 80, 80, 80, 32, 82, 83, 84, 85, 00851 83, 82, 82, 82, 86, 87, 82, 82, 88, 82, 00852 89, 82, 90, 82, 91, 92, 92, 92, 92, 93, 00853 92, 92, 92, 94, 92, 92, 92, 92, 92, 92, 00854 92, 92, 92, 92, 92, 92, 82, 95, 234, 141, 00855 95, 138, 138, 138, 138, 142, 143, 238, 96, 220, 00856 347, 141, 139, 215, 215, 215, 215, 142, 143, 848, 00857 97, 32, 98, 99, 100, 98, 32, 32, 32, 32, 00858 00859 32, 32, 32, 36, 32, 37, 32, 32, 32, 101, 00860 101, 101, 101, 101, 102, 101, 101, 101, 101, 101, 00861 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 00862 101, 32, 103, 848, 141, 103, 137, 138, 138, 137, 00863 142, 143, 278, 40, 278, 141, 848, 139, 308, 229, 00864 229, 251, 252, 270, 369, 104, 32, 105, 106, 107, 00865 105, 32, 32, 32, 32, 32, 32, 32, 36, 32, 00866 37, 32, 32, 32, 108, 108, 108, 108, 108, 108, 00867 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 00868 108, 108, 108, 108, 108, 108, 32, 109, 278, 141, 00869 00870 109, 138, 138, 138, 138, 255, 256, 305, 40, 263, 00871 278, 141, 139, 263, 263, 263, 144, 142, 143, 368, 00872 110, 111, 112, 113, 114, 112, 111, 111, 111, 32, 00873 32, 111, 111, 115, 111, 116, 111, 32, 111, 117, 00874 117, 117, 117, 117, 118, 117, 117, 117, 117, 117, 00875 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 00876 117, 111, 119, 286, 278, 119, 138, 138, 138, 138, 00877 172, 287, 366, 120, 280, 848, 281, 139, 288, 289, 00878 289, 290, 218, 172, 333, 121, 32, 33, 34, 35, 00879 33, 32, 32, 32, 32, 32, 32, 32, 36, 32, 00880 00881 122, 32, 32, 32, 123, 123, 123, 123, 123, 123, 00882 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 00883 123, 123, 123, 123, 123, 123, 32, 39, 278, 278, 00884 39, 235, 236, 236, 235, 266, 278, 271, 40, 317, 00885 318, 278, 139, 303, 313, 314, 220, 482, 220, 315, 00886 124, 32, 33, 34, 35, 33, 32, 32, 32, 32, 00887 32, 32, 32, 36, 32, 125, 32, 32, 32, 126, 00888 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 00889 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 00890 126, 32, 39, 39, 39, 39, 39, 39, 236, 236, 00891 00892 236, 236, 846, 40, 40, 40, 246, 848, 349, 139, 00893 215, 215, 215, 215, 351, 127, 41, 41, 32, 33, 00894 128, 129, 33, 32, 32, 32, 130, 131, 32, 32, 00895 36, 32, 37, 32, 32, 32, 132, 132, 132, 132, 00896 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 00897 132, 132, 132, 132, 132, 132, 132, 132, 32, 39, 00898 332, 278, 39, 236, 236, 236, 236, 346, 848, 355, 00899 40, 306, 355, 845, 139, 353, 307, 238, 392, 218, 00900 356, 278, 133, 32, 33, 34, 35, 33, 32, 134, 00901 32, 32, 32, 32, 32, 36, 32, 37, 32, 32, 00902 00903 32, 38, 135, 135, 135, 135, 135, 135, 135, 135, 00904 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 00905 135, 135, 135, 32, 39, 39, 848, 39, 39, 145, 00906 138, 138, 145, 848, 848, 40, 40, 141, 848, 848, 00907 146, 848, 162, 251, 252, 162, 270, 136, 41, 350, 00908 848, 230, 147, 848, 148, 848, 164, 848, 848, 149, 00909 151, 152, 152, 153, 149, 154, 166, 167, 167, 168, 00910 231, 139, 155, 155, 156, 165, 150, 155, 274, 149, 00911 156, 149, 250, 341, 158, 174, 175, 175, 176, 212, 00912 138, 138, 212, 159, 152, 160, 160, 152, 848, 169, 00913 00914 213, 215, 215, 215, 215, 139, 278, 848, 156, 178, 00915 848, 789, 147, 141, 232, 848, 280, 232, 179, 255, 00916 256, 240, 236, 236, 240, 233, 352, 161, 152, 160, 00917 160, 152, 146, 219, 152, 152, 225, 147, 354, 139, 00918 226, 254, 156, 813, 147, 242, 243, 243, 242, 243, 00919 243, 243, 243, 264, 162, 358, 139, 162, 286, 848, 00920 139, 161, 151, 152, 152, 153, 154, 154, 164, 243, 00921 243, 243, 243, 139, 155, 155, 156, 812, 172, 155, 00922 139, 247, 243, 243, 247, 258, 158, 166, 167, 167, 00923 168, 162, 146, 278, 162, 159, 166, 167, 167, 168, 00924 00925 141, 156, 141, 370, 248, 164, 170, 171, 170, 171, 00926 156, 137, 138, 138, 137, 138, 138, 138, 138, 278, 00927 162, 162, 139, 162, 162, 282, 139, 172, 391, 173, 00928 166, 167, 167, 168, 164, 164, 848, 138, 138, 138, 00929 138, 374, 172, 278, 156, 848, 848, 311, 139, 145, 00930 138, 138, 145, 808, 283, 283, 283, 283, 312, 373, 00931 146, 155, 434, 173, 180, 167, 167, 181, 177, 163, 00932 177, 591, 147, 163, 163, 163, 172, 419, 183, 138, 00933 138, 138, 138, 138, 138, 138, 138, 284, 278, 162, 00934 139, 309, 162, 332, 139, 278, 387, 388, 184, 180, 00935 00936 167, 167, 181, 164, 163, 280, 218, 310, 163, 163, 00937 163, 172, 218, 183, 188, 263, 177, 189, 378, 263, 00938 263, 263, 144, 282, 379, 146, 177, 137, 138, 138, 00939 137, 393, 190, 278, 191, 441, 192, 193, 139, 278, 00940 804, 395, 265, 194, 278, 377, 177, 195, 177, 196, 00941 197, 198, 215, 215, 215, 215, 390, 278, 141, 138, 00942 138, 138, 138, 238, 216, 217, 222, 223, 223, 222, 00943 139, 386, 278, 174, 175, 175, 176, 224, 145, 138, 00944 138, 145, 394, 848, 166, 167, 167, 166, 225, 146, 00945 351, 278, 226, 223, 223, 223, 223, 178, 156, 180, 00946 00947 396, 147, 181, 278, 224, 389, 277, 278, 167, 167, 00948 167, 167, 278, 183, 366, 227, 398, 848, 397, 848, 00949 237, 237, 156, 237, 237, 237, 237, 237, 237, 237, 00950 237, 237, 237, 155, 443, 237, 848, 237, 166, 167, 00951 167, 168, 278, 166, 167, 167, 168, 288, 289, 289, 00952 290, 429, 156, 288, 289, 289, 290, 156, 567, 278, 00953 237, 237, 237, 246, 237, 237, 237, 237, 237, 237, 00954 237, 237, 237, 237, 679, 291, 237, 285, 237, 292, 00955 278, 293, 180, 167, 167, 180, 366, 294, 295, 295, 00956 296, 366, 141, 239, 848, 683, 183, 848, 216, 217, 00957 00958 848, 237, 245, 245, 353, 245, 245, 245, 245, 245, 00959 245, 245, 245, 245, 245, 264, 278, 245, 218, 245, 00960 297, 278, 212, 138, 138, 212, 339, 461, 519, 340, 00961 456, 267, 477, 213, 267, 222, 848, 457, 222, 278, 00962 172, 267, 245, 245, 245, 147, 245, 245, 245, 245, 00963 245, 245, 245, 245, 245, 245, 278, 225, 245, 339, 00964 245, 226, 345, 460, 267, 739, 475, 267, 235, 236, 00965 236, 235, 278, 467, 267, 177, 249, 155, 177, 139, 00966 177, 484, 465, 245, 259, 259, 259, 259, 259, 259, 00967 259, 259, 259, 259, 259, 259, 259, 260, 260, 259, 00968 00969 261, 259, 260, 260, 260, 260, 260, 260, 260, 260, 00970 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 00971 260, 260, 260, 260, 259, 180, 167, 167, 181, 278, 00972 163, 802, 466, 479, 163, 163, 163, 155, 278, 183, 00973 180, 167, 167, 181, 177, 163, 177, 278, 559, 163, 00974 163, 163, 155, 801, 183, 343, 343, 343, 343, 476, 00975 404, 848, 279, 236, 236, 236, 236, 240, 236, 236, 00976 240, 155, 242, 355, 139, 242, 355, 162, 146, 278, 00977 162, 278, 464, 139, 356, 243, 243, 243, 243, 344, 00978 147, 164, 177, 481, 177, 244, 139, 283, 283, 283, 00979 00980 283, 288, 289, 289, 288, 289, 289, 289, 289, 371, 00981 294, 295, 295, 296, 294, 295, 295, 296, 294, 295, 00982 295, 296, 278, 309, 480, 375, 278, 278, 162, 375, 00983 284, 162, 527, 278, 376, 478, 278, 280, 376, 385, 00984 278, 238, 164, 297, 483, 540, 278, 297, 458, 620, 00985 485, 297, 413, 414, 414, 415, 422, 423, 423, 422, 00986 343, 343, 343, 343, 177, 848, 548, 424, 430, 430, 00987 430, 430, 544, 278, 848, 444, 444, 444, 444, 470, 00988 471, 471, 472, 431, 155, 848, 473, 487, 848, 532, 00989 848, 557, 532, 278, 433, 413, 414, 414, 415, 521, 00990 00991 533, 432, 437, 438, 437, 437, 503, 504, 504, 505, 00992 506, 507, 507, 506, 593, 278, 278, 278, 507, 507, 00993 507, 507, 796, 545, 183, 512, 512, 512, 512, 560, 00994 561, 278, 156, 238, 172, 558, 439, 155, 607, 440, 00995 453, 492, 493, 493, 494, 453, 453, 453, 453, 453, 00996 453, 453, 453, 238, 659, 496, 278, 453, 506, 507, 00997 507, 508, 513, 513, 513, 513, 514, 514, 514, 514, 00998 562, 795, 183, 422, 423, 423, 422, 278, 563, 564, 00999 453, 431, 278, 278, 424, 515, 515, 515, 515, 513, 01000 513, 513, 513, 622, 848, 848, 437, 438, 437, 437, 01001 01002 431, 430, 430, 430, 430, 438, 438, 438, 438, 698, 01003 444, 444, 444, 444, 536, 162, 431, 536, 162, 470, 01004 471, 471, 472, 566, 517, 537, 473, 278, 552, 164, 01005 523, 155, 666, 524, 518, 584, 553, 542, 177, 525, 01006 177, 278, 526, 518, 549, 550, 550, 551, 177, 556, 01007 177, 470, 471, 471, 470, 172, 278, 608, 473, 471, 01008 471, 471, 471, 486, 278, 183, 473, 470, 471, 471, 01009 472, 278, 598, 156, 473, 503, 504, 504, 505, 573, 01010 399, 183, 574, 238, 486, 492, 493, 493, 492, 493, 01011 493, 493, 493, 572, 278, 599, 238, 278, 603, 496, 01012 01013 238, 660, 848, 572, 453, 492, 493, 493, 494, 453, 01014 453, 453, 453, 453, 453, 453, 453, 550, 696, 496, 01015 550, 453, 503, 504, 504, 503, 504, 504, 504, 504, 01016 512, 512, 512, 512, 619, 611, 183, 278, 621, 789, 01017 156, 177, 278, 177, 453, 453, 575, 576, 576, 577, 01018 453, 453, 453, 453, 453, 453, 453, 453, 578, 578, 01019 453, 788, 453, 578, 578, 578, 578, 578, 578, 578, 01020 579, 578, 578, 578, 578, 578, 578, 578, 578, 580, 01021 578, 578, 578, 578, 578, 453, 503, 504, 504, 505, 01022 506, 507, 507, 506, 507, 507, 507, 507, 787, 177, 01023 01024 183, 177, 614, 278, 183, 626, 278, 623, 156, 506, 01025 507, 507, 508, 513, 513, 513, 513, 514, 514, 514, 01026 514, 155, 783, 183, 515, 515, 515, 515, 278, 848, 01027 532, 532, 431, 532, 532, 532, 278, 681, 532, 431, 01028 588, 533, 533, 652, 536, 162, 600, 536, 162, 604, 01029 278, 848, 625, 278, 615, 537, 626, 278, 278, 164, 01030 549, 550, 550, 551, 177, 624, 177, 177, 782, 627, 01031 604, 631, 632, 632, 633, 634, 635, 635, 636, 654, 01032 605, 549, 550, 550, 549, 573, 493, 493, 573, 573, 01033 613, 278, 574, 638, 639, 639, 640, 278, 532, 572, 01034 01035 456, 532, 278, 572, 663, 375, 778, 682, 637, 600, 01036 162, 612, 777, 162, 376, 638, 639, 639, 640, 646, 01037 646, 646, 646, 172, 164, 667, 637, 646, 646, 646, 01038 646, 775, 465, 177, 648, 177, 672, 641, 669, 669, 01039 669, 669, 648, 671, 177, 664, 177, 774, 637, 638, 01040 639, 639, 640, 177, 238, 177, 673, 177, 704, 177, 01041 675, 676, 676, 677, 649, 767, 766, 678, 631, 632, 01042 632, 633, 631, 632, 632, 631, 278, 632, 632, 632, 01043 632, 642, 637, 643, 238, 726, 183, 703, 727, 486, 01044 278, 156, 631, 632, 632, 633, 634, 635, 635, 636, 01045 01046 634, 635, 635, 636, 765, 278, 183, 634, 635, 635, 01047 636, 638, 639, 639, 640, 638, 639, 639, 638, 725, 01048 610, 639, 639, 639, 639, 638, 639, 639, 640, 637, 01049 177, 716, 177, 637, 638, 639, 639, 640, 278, 686, 01050 637, 744, 724, 642, 637, 686, 724, 727, 687, 638, 01051 639, 639, 640, 177, 687, 177, 720, 743, 637, 638, 01052 639, 639, 640, 278, 754, 688, 742, 637, 754, 646, 01053 646, 646, 646, 646, 646, 646, 646, 486, 646, 646, 01054 646, 646, 637, 689, 648, 848, 734, 760, 648, 735, 01055 760, 690, 637, 648, 705, 706, 706, 705, 707, 708, 01056 01057 708, 709, 710, 706, 706, 710, 278, 745, 278, 693, 01058 712, 708, 708, 713, 776, 741, 164, 238, 728, 177, 01059 278, 177, 622, 848, 156, 712, 708, 708, 713, 669, 01060 669, 669, 669, 717, 718, 718, 719, 675, 676, 676, 01061 675, 847, 758, 740, 678, 758, 676, 676, 676, 676, 01062 738, 183, 155, 678, 675, 676, 676, 677, 172, 612, 01063 156, 678, 722, 722, 722, 723, 737, 691, 730, 724, 01064 638, 639, 639, 640, 638, 639, 639, 640, 638, 639, 01065 639, 640, 646, 646, 646, 646, 746, 747, 746, 746, 01066 729, 571, 731, 705, 705, 705, 705, 648, 733, 411, 01067 01068 818, 748, 736, 637, 818, 721, 177, 637, 177, 784, 01069 732, 637, 705, 705, 705, 705, 715, 238, 714, 749, 01070 707, 750, 750, 707, 711, 750, 750, 750, 750, 707, 01071 750, 750, 709, 702, 183, 701, 848, 700, 749, 156, 01072 710, 705, 705, 710, 699, 697, 749, 712, 750, 750, 01073 712, 749, 695, 694, 164, 751, 752, 752, 752, 753, 01074 692, 156, 712, 754, 691, 713, 749, 755, 755, 755, 01075 755, 411, 734, 749, 756, 735, 156, 757, 758, 758, 01076 759, 685, 684, 486, 756, 734, 183, 622, 735, 680, 01077 717, 760, 760, 719, 762, 763, 763, 764, 674, 670, 01078 01079 668, 754, 722, 722, 722, 723, 155, 278, 665, 724, 01080 662, 177, 717, 760, 760, 717, 761, 722, 722, 722, 01081 723, 661, 658, 657, 724, 638, 639, 639, 640, 769, 01082 770, 770, 771, 656, 763, 655, 375, 786, 749, 638, 01083 639, 639, 640, 653, 651, 376, 734, 167, 167, 734, 01084 646, 646, 646, 646, 746, 747, 746, 746, 637, 768, 01085 183, 772, 637, 650, 449, 648, 411, 645, 571, 748, 01086 329, 644, 637, 747, 747, 747, 747, 752, 752, 752, 01087 753, 630, 629, 628, 754, 618, 773, 617, 748, 237, 01088 779, 780, 779, 779, 237, 237, 237, 237, 237, 237, 01089 01090 237, 237, 238, 781, 237, 748, 237, 781, 781, 781, 01091 781, 781, 781, 781, 781, 781, 781, 781, 781, 781, 01092 781, 781, 781, 781, 781, 781, 781, 781, 781, 237, 01093 746, 747, 746, 746, 747, 747, 747, 747, 750, 750, 01094 750, 750, 383, 616, 610, 748, 609, 606, 602, 748, 01095 449, 601, 156, 752, 752, 752, 753, 449, 261, 453, 01096 754, 453, 597, 596, 749, 755, 755, 755, 755, 595, 01097 594, 449, 756, 757, 758, 758, 757, 592, 590, 589, 01098 756, 762, 763, 763, 764, 449, 449, 449, 754, 638, 01099 639, 639, 640, 769, 770, 770, 771, 375, 585, 638, 01100 01101 639, 639, 640, 411, 583, 582, 376, 762, 763, 763, 01102 785, 581, 571, 570, 754, 790, 569, 568, 780, 780, 01103 780, 780, 637, 792, 565, 556, 637, 799, 800, 799, 01104 799, 375, 637, 748, 793, 646, 646, 646, 646, 473, 01105 376, 769, 770, 770, 769, 780, 780, 780, 780, 555, 01106 648, 803, 803, 803, 803, 638, 639, 639, 640, 554, 01107 748, 794, 547, 546, 543, 686, 541, 638, 639, 639, 01108 640, 791, 539, 805, 687, 770, 770, 770, 770, 799, 01109 800, 799, 799, 800, 800, 800, 800, 732, 637, 799, 01110 800, 799, 799, 809, 810, 810, 811, 449, 748, 686, 01111 01112 637, 449, 449, 449, 748, 791, 261, 453, 687, 237, 01113 779, 780, 779, 779, 237, 237, 237, 237, 237, 237, 01114 237, 237, 237, 797, 237, 748, 237, 797, 797, 797, 01115 797, 797, 797, 797, 797, 797, 797, 797, 797, 797, 01116 797, 797, 797, 797, 797, 797, 797, 797, 797, 237, 01117 638, 639, 639, 640, 646, 646, 646, 646, 800, 800, 01118 800, 800, 803, 803, 803, 803, 443, 453, 528, 648, 01119 449, 520, 449, 748, 638, 639, 639, 640, 646, 646, 01120 646, 646, 423, 637, 449, 806, 807, 815, 816, 816, 01121 817, 510, 791, 648, 818, 820, 820, 820, 820, 809, 01122 01123 810, 810, 809, 810, 810, 810, 810, 814, 411, 819, 01124 502, 501, 500, 183, 499, 498, 497, 156, 491, 490, 01125 637, 809, 810, 810, 811, 823, 823, 823, 823, 489, 01126 488, 486, 824, 155, 474, 183, 825, 826, 826, 827, 01127 469, 468, 463, 824, 462, 815, 816, 816, 817, 459, 01128 455, 454, 818, 820, 820, 820, 820, 449, 366, 830, 01129 830, 830, 830, 832, 832, 832, 832, 451, 642, 637, 01130 815, 816, 816, 828, 648, 449, 446, 818, 637, 445, 01131 442, 436, 835, 836, 836, 837, 823, 823, 823, 823, 01132 426, 425, 421, 824, 686, 834, 156, 830, 830, 830, 01133 01134 830, 420, 418, 687, 816, 816, 816, 829, 416, 412, 01135 411, 818, 648, 410, 839, 825, 826, 826, 827, 409, 01136 408, 407, 824, 832, 832, 832, 832, 406, 686, 840, 01137 840, 840, 840, 832, 832, 832, 832, 687, 825, 826, 01138 826, 825, 405, 404, 431, 824, 403, 402, 637, 835, 01139 836, 836, 835, 401, 400, 842, 399, 832, 832, 832, 01140 832, 384, 686, 156, 383, 834, 835, 836, 836, 837, 01141 382, 687, 826, 826, 826, 826, 381, 380, 372, 824, 01142 843, 842, 278, 836, 836, 836, 836, 177, 367, 834, 01143 835, 836, 836, 837, 365, 363, 686, 156, 844, 362, 01144 01145 155, 361, 267, 359, 156, 687, 815, 816, 816, 828, 01146 264, 357, 261, 818, 848, 842, 840, 840, 840, 840, 01147 848, 348, 839, 840, 840, 840, 840, 246, 238, 337, 01148 686, 431, 336, 335, 220, 334, 218, 331, 431, 687, 01149 816, 816, 816, 829, 330, 329, 328, 818, 327, 326, 01150 325, 324, 323, 322, 321, 320, 319, 316, 302, 302, 01151 301, 300, 299, 298, 686, 172, 154, 276, 276, 275, 01152 273, 272, 271, 687, 144, 848, 268, 266, 144, 144, 01153 262, 848, 144, 144, 144, 144, 144, 157, 157, 157, 01154 157, 848, 148, 848, 157, 157, 157, 157, 140, 157, 01155 01156 157, 157, 157, 157, 154, 154, 154, 154, 848, 220, 01157 220, 154, 220, 220, 154, 214, 848, 154, 154, 154, 01158 154, 163, 140, 209, 163, 204, 163, 163, 163, 201, 01159 163, 163, 200, 163, 163, 163, 163, 163, 155, 155, 01160 155, 185, 150, 148, 848, 140, 155, 155, 155, 848, 01161 155, 155, 155, 155, 155, 172, 172, 172, 848, 172, 01162 848, 848, 848, 172, 172, 172, 848, 172, 172, 172, 01163 172, 172, 177, 177, 177, 848, 848, 848, 848, 848, 01164 177, 177, 848, 848, 177, 177, 177, 177, 177, 182, 01165 182, 182, 182, 848, 182, 182, 182, 182, 182, 182, 01166 01167 848, 182, 182, 182, 182, 182, 218, 218, 218, 848, 01168 218, 848, 848, 848, 218, 218, 848, 848, 218, 218, 01169 218, 218, 218, 221, 221, 221, 221, 221, 221, 221, 01170 221, 221, 221, 221, 221, 221, 221, 848, 221, 848, 01171 221, 221, 238, 238, 848, 238, 238, 238, 238, 238, 01172 238, 238, 238, 238, 848, 238, 238, 238, 238, 238, 01173 238, 244, 244, 244, 848, 848, 848, 848, 244, 848, 01174 848, 848, 848, 244, 244, 244, 244, 244, 246, 246, 01175 848, 246, 246, 246, 246, 246, 246, 246, 246, 246, 01176 848, 246, 246, 246, 246, 246, 246, 253, 848, 848, 01177 01178 848, 253, 253, 848, 848, 253, 253, 253, 253, 253, 01179 257, 848, 848, 848, 257, 257, 848, 848, 257, 257, 01180 257, 257, 257, 263, 848, 263, 263, 263, 848, 263, 01181 848, 848, 263, 263, 263, 263, 263, 264, 848, 264, 01182 264, 264, 264, 264, 848, 848, 264, 264, 264, 264, 01183 264, 267, 267, 848, 267, 267, 267, 267, 267, 267, 01184 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 01185 269, 848, 269, 269, 848, 848, 269, 269, 269, 278, 01186 278, 278, 278, 848, 278, 278, 278, 278, 278, 278, 01187 848, 278, 278, 278, 278, 278, 338, 338, 338, 338, 01188 01189 338, 338, 338, 338, 338, 338, 338, 338, 338, 338, 01190 338, 338, 338, 338, 338, 237, 237, 848, 237, 237, 01191 237, 237, 237, 237, 237, 237, 237, 848, 237, 237, 01192 237, 237, 237, 237, 245, 245, 848, 245, 245, 245, 01193 245, 245, 245, 245, 245, 245, 848, 245, 245, 245, 01194 245, 245, 245, 259, 259, 259, 259, 259, 259, 259, 01195 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 01196 259, 259, 360, 360, 848, 360, 360, 360, 360, 360, 01197 360, 360, 360, 360, 360, 360, 360, 360, 360, 360, 01198 360, 364, 364, 848, 364, 364, 364, 364, 364, 364, 01199 01200 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, 01201 417, 417, 848, 417, 417, 417, 417, 417, 417, 417, 01202 417, 417, 417, 417, 417, 417, 417, 417, 417, 426, 01203 426, 848, 426, 426, 426, 426, 426, 426, 426, 426, 01204 426, 426, 426, 426, 426, 426, 426, 426, 427, 427, 01205 848, 427, 427, 427, 427, 427, 427, 427, 427, 427, 01206 427, 427, 427, 427, 427, 427, 427, 428, 428, 848, 01207 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, 01208 428, 428, 428, 428, 428, 428, 435, 435, 848, 435, 01209 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 01210 01211 435, 435, 435, 435, 435, 447, 447, 848, 447, 447, 01212 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 01213 447, 447, 447, 448, 448, 448, 448, 448, 448, 448, 01214 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 01215 448, 448, 450, 450, 848, 450, 450, 450, 450, 450, 01216 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 01217 450, 452, 452, 452, 452, 452, 452, 452, 452, 452, 01218 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, 01219 365, 365, 848, 365, 365, 365, 365, 365, 365, 365, 01220 365, 365, 365, 365, 365, 365, 365, 365, 365, 453, 01221 01222 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 01223 453, 848, 453, 453, 453, 453, 453, 453, 495, 495, 01224 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 01225 848, 495, 495, 495, 495, 495, 495, 509, 509, 848, 01226 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 01227 509, 509, 509, 509, 509, 509, 511, 511, 511, 511, 01228 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 01229 511, 511, 511, 511, 511, 418, 418, 848, 418, 418, 01230 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, 01231 418, 418, 418, 418, 516, 516, 516, 516, 516, 516, 01232 01233 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 01234 516, 516, 516, 522, 522, 522, 522, 522, 522, 522, 01235 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 01236 522, 522, 436, 436, 848, 436, 436, 436, 436, 436, 01237 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 01238 436, 529, 529, 529, 529, 529, 529, 529, 529, 529, 01239 529, 529, 529, 848, 529, 529, 529, 529, 529, 529, 01240 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 01241 530, 530, 848, 530, 530, 530, 530, 530, 530, 531, 01242 531, 848, 531, 531, 531, 531, 531, 531, 531, 531, 01243 01244 531, 531, 531, 531, 531, 531, 531, 531, 534, 534, 01245 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 01246 534, 534, 534, 534, 534, 534, 534, 535, 535, 535, 01247 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 01248 535, 535, 535, 535, 535, 535, 538, 538, 538, 538, 01249 538, 538, 538, 538, 538, 538, 538, 538, 538, 538, 01250 538, 538, 538, 538, 538, 451, 451, 848, 451, 451, 01251 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 01252 451, 451, 451, 451, 586, 586, 586, 586, 586, 586, 01253 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 01254 01255 586, 586, 586, 510, 510, 848, 510, 510, 510, 510, 01256 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 01257 510, 510, 587, 587, 587, 587, 848, 848, 848, 848, 01258 848, 848, 848, 848, 848, 587, 587, 587, 587, 647, 01259 647, 647, 647, 848, 647, 647, 647, 848, 647, 848, 01260 647, 647, 647, 647, 647, 647, 798, 798, 798, 848, 01261 848, 848, 848, 848, 848, 798, 848, 798, 798, 798, 01262 798, 798, 798, 821, 821, 821, 848, 848, 848, 848, 01263 848, 848, 821, 821, 848, 821, 821, 821, 821, 821, 01264 822, 822, 822, 848, 848, 848, 848, 848, 822, 822, 01265 01266 822, 848, 822, 822, 822, 822, 822, 831, 831, 831, 01267 831, 848, 848, 848, 848, 848, 848, 848, 848, 848, 01268 831, 831, 831, 831, 833, 833, 833, 848, 848, 848, 01269 848, 848, 833, 833, 848, 848, 833, 833, 833, 833, 01270 833, 838, 838, 838, 848, 848, 848, 848, 848, 838, 01271 838, 838, 848, 838, 838, 838, 838, 838, 841, 841, 01272 841, 841, 848, 841, 841, 841, 848, 841, 848, 841, 01273 841, 841, 841, 841, 841, 31, 848, 848, 848, 848, 01274 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 01275 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 01276 01277 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 01278 848, 848, 848, 848, 848, 848, 848 01279 } ; 01280 01281 static yyconst flex_int16_t yy_chk[4118] = 01282 { 0, 01283 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 01284 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 01285 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 01286 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 01287 1, 2, 847, 37, 2, 33, 33, 33, 33, 37, 01288 37, 56, 2, 56, 63, 60, 33, 60, 68, 63, 01289 104, 104, 68, 843, 2, 3, 3, 3, 3, 3, 01290 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 01291 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 01292 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 01293 01294 3, 3, 3, 3, 3, 3, 4, 6, 8, 4, 01295 6, 8, 34, 34, 34, 34, 48, 4, 6, 8, 01296 65, 66, 88, 34, 4, 230, 4, 191, 4, 4, 01297 6, 8, 66, 88, 65, 4, 65, 191, 48, 4, 01298 230, 4, 4, 4, 5, 5, 5, 5, 5, 5, 01299 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 01300 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 01301 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 01302 5, 5, 5, 5, 5, 7, 7, 7, 7, 7, 01303 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 01304 01305 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 01306 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 01307 7, 7, 7, 7, 7, 7, 9, 9, 9, 9, 01308 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 01309 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 01310 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 01311 9, 9, 9, 9, 9, 9, 9, 10, 96, 74, 01312 10, 35, 35, 35, 35, 74, 74, 241, 10, 96, 01313 241, 116, 35, 80, 80, 80, 80, 116, 116, 80, 01314 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 01315 01316 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 01317 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 01318 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 01319 11, 11, 12, 91, 89, 12, 70, 70, 70, 70, 01320 89, 89, 280, 12, 194, 122, 142, 70, 194, 91, 01321 89, 122, 122, 142, 280, 12, 13, 13, 13, 13, 01322 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 01323 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 01324 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 01325 13, 13, 13, 13, 13, 13, 13, 14, 192, 125, 01326 01327 14, 71, 71, 71, 71, 125, 125, 192, 14, 135, 01328 279, 143, 71, 135, 135, 135, 135, 143, 143, 279, 01329 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 01330 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 01331 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 01332 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 01333 15, 15, 16, 170, 159, 16, 72, 72, 72, 72, 01334 173, 173, 274, 16, 159, 274, 159, 72, 177, 177, 01335 177, 177, 219, 170, 219, 16, 17, 17, 17, 17, 01336 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 01337 01338 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 01339 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 01340 17, 17, 17, 17, 17, 17, 17, 18, 197, 190, 01341 18, 98, 98, 98, 98, 224, 198, 233, 18, 200, 01342 200, 393, 98, 190, 197, 198, 224, 393, 233, 198, 01343 18, 19, 19, 19, 19, 19, 19, 19, 19, 19, 01344 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 01345 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 01346 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 01347 19, 19, 20, 22, 24, 20, 22, 24, 99, 99, 01348 01349 99, 99, 842, 20, 22, 24, 249, 251, 249, 99, 01350 215, 215, 215, 215, 251, 20, 22, 24, 25, 25, 01351 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 01352 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 01353 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 01354 25, 25, 25, 25, 25, 25, 25, 25, 25, 26, 01355 216, 193, 26, 100, 100, 100, 100, 239, 255, 261, 01356 26, 193, 261, 839, 100, 255, 193, 239, 308, 216, 01357 261, 308, 26, 27, 27, 27, 27, 27, 27, 27, 01358 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 01359 01360 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 01361 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 01362 27, 27, 27, 27, 28, 30, 93, 28, 30, 39, 01363 39, 39, 39, 41, 250, 28, 30, 252, 78, 270, 01364 39, 94, 47, 252, 252, 47, 270, 28, 30, 250, 01365 149, 93, 39, 97, 59, 121, 47, 118, 229, 41, 01366 43, 43, 43, 43, 78, 43, 49, 49, 49, 49, 01367 94, 43, 43, 43, 43, 47, 59, 43, 149, 97, 01368 49, 121, 118, 229, 43, 51, 51, 51, 51, 76, 01369 76, 76, 76, 43, 44, 44, 44, 44, 254, 49, 01370 01371 76, 81, 81, 81, 81, 44, 276, 81, 44, 51, 01372 258, 812, 76, 256, 95, 124, 276, 95, 51, 256, 01373 256, 103, 103, 103, 103, 95, 254, 44, 45, 45, 01374 45, 45, 103, 81, 152, 152, 95, 95, 258, 45, 01375 95, 124, 45, 804, 103, 105, 105, 105, 105, 106, 01376 106, 106, 106, 265, 154, 265, 105, 154, 286, 127, 01377 106, 45, 46, 46, 46, 46, 152, 46, 154, 107, 01378 107, 107, 107, 46, 46, 46, 46, 802, 286, 46, 01379 107, 109, 109, 109, 109, 127, 46, 155, 155, 155, 01380 155, 161, 109, 281, 161, 46, 50, 50, 50, 50, 01381 01382 171, 155, 50, 281, 109, 161, 171, 171, 50, 50, 01383 50, 112, 112, 112, 112, 113, 113, 113, 113, 307, 01384 162, 163, 112, 162, 163, 161, 113, 171, 307, 50, 01385 52, 52, 52, 52, 162, 163, 52, 114, 114, 114, 01386 114, 287, 287, 196, 52, 519, 344, 196, 114, 119, 01387 119, 119, 119, 795, 164, 164, 164, 164, 196, 285, 01388 119, 285, 344, 52, 53, 53, 53, 53, 290, 53, 01389 290, 519, 119, 53, 53, 53, 53, 333, 53, 128, 01390 128, 128, 128, 129, 129, 129, 129, 164, 304, 165, 01391 128, 195, 165, 332, 129, 195, 304, 304, 53, 54, 01392 01393 54, 54, 54, 165, 54, 195, 333, 195, 54, 54, 01394 54, 54, 332, 54, 57, 136, 292, 57, 292, 136, 01395 136, 136, 136, 165, 293, 57, 293, 137, 137, 137, 01396 137, 309, 57, 309, 57, 347, 57, 57, 137, 311, 01397 791, 311, 136, 57, 306, 291, 291, 57, 291, 57, 01398 57, 57, 79, 79, 79, 79, 306, 303, 79, 138, 01399 138, 138, 138, 347, 79, 79, 83, 83, 83, 83, 01400 138, 303, 310, 156, 156, 156, 156, 83, 145, 145, 01401 145, 145, 310, 351, 166, 166, 166, 166, 83, 145, 01402 351, 305, 83, 84, 84, 84, 84, 156, 166, 181, 01403 01404 312, 145, 181, 312, 84, 305, 156, 313, 167, 167, 01405 167, 167, 314, 181, 352, 84, 314, 352, 313, 84, 01406 101, 101, 167, 101, 101, 101, 101, 101, 101, 101, 01407 101, 101, 101, 181, 349, 101, 341, 101, 168, 168, 01408 168, 168, 485, 169, 169, 169, 169, 179, 179, 179, 01409 179, 341, 168, 178, 178, 178, 178, 169, 485, 619, 01410 101, 102, 102, 349, 102, 102, 102, 102, 102, 102, 01411 102, 102, 102, 102, 619, 178, 102, 169, 102, 179, 01412 626, 179, 180, 180, 180, 180, 358, 183, 183, 183, 01413 183, 354, 217, 102, 354, 626, 180, 353, 217, 217, 01414 01415 432, 102, 108, 108, 353, 108, 108, 108, 108, 108, 01416 108, 108, 108, 108, 108, 358, 369, 108, 217, 108, 01417 183, 387, 212, 212, 212, 212, 228, 374, 432, 228, 01418 369, 228, 387, 212, 228, 222, 696, 370, 222, 370, 01419 374, 228, 108, 110, 110, 212, 110, 110, 110, 110, 01420 110, 110, 110, 110, 110, 110, 385, 222, 110, 234, 01421 110, 222, 234, 373, 234, 696, 385, 234, 235, 235, 01422 235, 235, 395, 380, 234, 380, 110, 373, 378, 235, 01423 378, 395, 378, 110, 132, 132, 132, 132, 132, 132, 01424 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 01425 01426 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 01427 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 01428 132, 132, 132, 132, 132, 157, 157, 157, 157, 389, 01429 157, 788, 379, 389, 157, 157, 157, 157, 477, 157, 01430 158, 158, 158, 158, 379, 158, 379, 386, 477, 158, 01431 158, 158, 158, 787, 158, 231, 231, 231, 231, 386, 01432 390, 231, 158, 236, 236, 236, 236, 240, 240, 240, 01433 240, 783, 242, 355, 236, 242, 355, 282, 240, 390, 01434 282, 392, 377, 242, 355, 243, 243, 243, 243, 231, 01435 240, 282, 377, 392, 377, 242, 243, 283, 283, 283, 01436 01437 283, 288, 288, 288, 288, 289, 289, 289, 289, 282, 01438 294, 294, 294, 294, 295, 295, 295, 295, 296, 296, 01439 296, 296, 388, 302, 391, 288, 391, 302, 371, 289, 01440 283, 371, 439, 455, 288, 388, 396, 302, 289, 302, 01441 559, 439, 371, 294, 394, 455, 394, 295, 371, 559, 01442 396, 296, 329, 329, 329, 329, 336, 336, 336, 336, 01443 343, 343, 343, 343, 464, 776, 464, 336, 342, 342, 01444 342, 342, 460, 398, 342, 350, 350, 350, 350, 383, 01445 383, 383, 383, 342, 460, 434, 383, 398, 521, 445, 01446 350, 475, 445, 475, 343, 399, 399, 399, 399, 434, 01447 01448 445, 342, 346, 346, 346, 346, 411, 411, 411, 411, 01449 413, 413, 413, 413, 521, 478, 479, 399, 414, 414, 01450 414, 414, 775, 461, 413, 419, 419, 419, 419, 478, 01451 479, 476, 414, 346, 461, 476, 346, 544, 544, 346, 01452 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 01453 404, 404, 404, 598, 598, 404, 480, 404, 415, 415, 01454 415, 415, 420, 420, 420, 420, 421, 421, 421, 421, 01455 480, 774, 415, 422, 422, 422, 422, 561, 481, 482, 01456 404, 421, 481, 482, 422, 425, 425, 425, 425, 429, 01457 429, 429, 429, 561, 654, 429, 437, 437, 437, 437, 01458 01459 425, 430, 430, 430, 430, 438, 438, 438, 438, 654, 01460 444, 444, 444, 444, 449, 458, 430, 449, 458, 456, 01461 456, 456, 456, 484, 430, 449, 456, 484, 466, 458, 01462 437, 607, 607, 437, 430, 500, 467, 458, 466, 438, 01463 466, 456, 438, 444, 465, 465, 465, 465, 467, 500, 01464 467, 470, 470, 470, 470, 545, 566, 545, 470, 471, 01465 471, 471, 471, 566, 624, 470, 471, 472, 472, 472, 01466 472, 487, 527, 471, 472, 486, 486, 486, 486, 495, 01467 624, 472, 495, 527, 487, 492, 492, 492, 492, 493, 01468 493, 493, 493, 495, 540, 528, 599, 486, 540, 492, 01469 01470 528, 599, 652, 493, 494, 494, 494, 494, 494, 494, 01471 494, 494, 494, 494, 494, 494, 494, 550, 652, 494, 01472 550, 494, 503, 503, 503, 503, 504, 504, 504, 504, 01473 512, 512, 512, 512, 558, 548, 503, 558, 560, 767, 01474 504, 548, 560, 548, 494, 496, 496, 496, 496, 496, 01475 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 01476 496, 766, 496, 496, 496, 496, 496, 496, 496, 496, 01477 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 01478 496, 496, 496, 496, 496, 496, 505, 505, 505, 505, 01479 506, 506, 506, 506, 507, 507, 507, 507, 765, 552, 01480 01481 505, 552, 552, 562, 506, 618, 618, 562, 507, 508, 01482 508, 508, 508, 513, 513, 513, 513, 514, 514, 514, 01483 514, 751, 751, 508, 515, 515, 515, 515, 621, 591, 01484 531, 532, 514, 531, 532, 533, 541, 621, 533, 515, 01485 514, 531, 532, 591, 536, 542, 533, 536, 542, 541, 01486 564, 593, 564, 563, 553, 536, 565, 565, 567, 542, 01487 551, 551, 551, 551, 553, 563, 553, 759, 749, 567, 01488 565, 571, 571, 571, 571, 572, 572, 572, 572, 593, 01489 542, 549, 549, 549, 549, 573, 573, 573, 573, 574, 01490 551, 604, 574, 578, 578, 578, 578, 623, 600, 573, 01491 01492 603, 600, 603, 574, 604, 549, 743, 623, 572, 600, 01493 605, 549, 741, 605, 549, 579, 579, 579, 579, 587, 01494 587, 587, 587, 608, 605, 608, 578, 588, 588, 588, 01495 588, 738, 611, 614, 587, 614, 614, 579, 610, 610, 01496 610, 610, 588, 613, 611, 605, 611, 737, 579, 580, 01497 580, 580, 580, 615, 660, 615, 615, 613, 660, 613, 01498 617, 617, 617, 617, 588, 730, 729, 617, 622, 622, 01499 622, 622, 631, 631, 631, 631, 680, 632, 632, 632, 01500 632, 580, 580, 580, 659, 680, 631, 659, 728, 725, 01501 622, 632, 633, 633, 633, 633, 634, 634, 634, 634, 01502 01503 635, 635, 635, 635, 721, 679, 633, 636, 636, 636, 01504 636, 637, 637, 637, 637, 638, 638, 638, 638, 679, 01505 714, 639, 639, 639, 639, 640, 640, 640, 640, 634, 01506 671, 671, 671, 635, 641, 641, 641, 641, 682, 638, 01507 636, 702, 724, 637, 637, 639, 724, 682, 638, 642, 01508 642, 642, 642, 673, 639, 673, 673, 701, 640, 643, 01509 643, 643, 643, 681, 754, 641, 700, 641, 754, 646, 01510 646, 646, 646, 647, 647, 647, 647, 681, 649, 649, 01511 649, 649, 642, 642, 646, 739, 691, 718, 647, 691, 01512 718, 643, 643, 649, 662, 662, 662, 662, 663, 663, 01513 01514 663, 663, 664, 664, 664, 664, 683, 703, 726, 649, 01515 666, 666, 666, 666, 739, 699, 664, 703, 683, 784, 01516 663, 784, 726, 698, 666, 667, 667, 667, 667, 669, 01517 669, 669, 669, 672, 672, 672, 672, 675, 675, 675, 01518 675, 844, 758, 697, 675, 758, 676, 676, 676, 676, 01519 695, 675, 844, 676, 677, 677, 677, 677, 667, 669, 01520 676, 677, 678, 678, 678, 678, 694, 692, 687, 678, 01521 688, 688, 688, 688, 689, 689, 689, 689, 690, 690, 01522 690, 690, 693, 693, 693, 693, 704, 704, 704, 704, 01523 686, 685, 688, 705, 705, 705, 705, 693, 690, 684, 01524 01525 818, 704, 693, 688, 818, 674, 761, 689, 761, 761, 01526 689, 690, 706, 706, 706, 706, 670, 704, 668, 705, 01527 707, 707, 707, 707, 665, 708, 708, 708, 708, 709, 01528 709, 709, 709, 658, 707, 657, 709, 656, 706, 708, 01529 710, 710, 710, 710, 655, 653, 707, 712, 712, 712, 01530 712, 708, 651, 650, 710, 709, 711, 711, 711, 711, 01531 645, 712, 713, 711, 644, 713, 710, 715, 715, 715, 01532 715, 630, 735, 712, 715, 735, 713, 716, 716, 716, 01533 716, 629, 628, 627, 716, 727, 735, 625, 727, 620, 01534 719, 719, 719, 719, 720, 720, 720, 720, 616, 612, 01535 01536 609, 720, 722, 722, 722, 722, 735, 727, 606, 722, 01537 602, 716, 717, 717, 717, 717, 719, 723, 723, 723, 01538 723, 601, 597, 596, 723, 731, 731, 731, 731, 732, 01539 732, 732, 732, 595, 763, 594, 717, 763, 717, 733, 01540 733, 733, 733, 592, 590, 717, 734, 734, 734, 734, 01541 736, 736, 736, 736, 742, 742, 742, 742, 731, 731, 01542 734, 733, 732, 589, 586, 736, 585, 584, 583, 742, 01543 582, 581, 733, 744, 744, 744, 744, 752, 752, 752, 01544 752, 570, 569, 568, 752, 557, 736, 556, 744, 745, 01545 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 01546 01547 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 01548 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 01549 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 01550 746, 746, 746, 746, 747, 747, 747, 747, 750, 750, 01551 750, 750, 555, 554, 547, 746, 546, 543, 539, 747, 01552 538, 537, 750, 753, 753, 753, 753, 535, 534, 530, 01553 753, 529, 526, 525, 750, 755, 755, 755, 755, 524, 01554 523, 522, 755, 757, 757, 757, 757, 520, 518, 517, 01555 757, 764, 764, 764, 764, 516, 511, 509, 764, 768, 01556 768, 768, 768, 771, 771, 771, 771, 757, 502, 772, 01557 01558 772, 772, 772, 501, 499, 498, 757, 762, 762, 762, 01559 762, 497, 491, 490, 762, 768, 489, 488, 778, 778, 01560 778, 778, 768, 771, 483, 474, 771, 781, 781, 781, 01561 781, 762, 772, 778, 772, 773, 773, 773, 773, 473, 01562 762, 769, 769, 769, 769, 780, 780, 780, 780, 469, 01563 773, 789, 789, 789, 789, 792, 792, 792, 792, 468, 01564 780, 773, 463, 462, 459, 769, 457, 790, 790, 790, 01565 790, 769, 454, 792, 769, 770, 770, 770, 770, 797, 01566 797, 797, 797, 798, 798, 798, 798, 790, 792, 799, 01567 799, 799, 799, 801, 801, 801, 801, 452, 798, 770, 01568 01569 790, 450, 448, 447, 799, 770, 446, 443, 770, 777, 01570 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 01571 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 01572 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 01573 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 01574 793, 793, 793, 793, 794, 794, 794, 794, 800, 800, 01575 800, 800, 803, 803, 803, 803, 442, 441, 440, 794, 01576 435, 433, 428, 800, 805, 805, 805, 805, 807, 807, 01577 807, 807, 424, 793, 417, 793, 794, 806, 806, 806, 01578 806, 416, 803, 807, 806, 808, 808, 808, 808, 809, 01579 01580 809, 809, 809, 810, 810, 810, 810, 805, 412, 807, 01581 410, 409, 408, 809, 407, 406, 405, 810, 403, 402, 01582 806, 811, 811, 811, 811, 813, 813, 813, 813, 401, 01583 400, 397, 813, 811, 384, 811, 814, 814, 814, 814, 01584 382, 381, 376, 814, 375, 817, 817, 817, 817, 372, 01585 368, 367, 817, 820, 820, 820, 820, 364, 363, 819, 01586 819, 819, 819, 821, 821, 821, 821, 362, 814, 814, 01587 815, 815, 815, 815, 819, 360, 357, 815, 817, 356, 01588 348, 345, 822, 822, 822, 822, 823, 823, 823, 823, 01589 340, 337, 335, 823, 815, 821, 822, 830, 830, 830, 01590 01591 830, 334, 331, 815, 816, 816, 816, 816, 330, 328, 01592 327, 816, 830, 326, 822, 827, 827, 827, 827, 325, 01593 324, 323, 827, 832, 832, 832, 832, 322, 816, 831, 01594 831, 831, 831, 833, 833, 833, 833, 816, 825, 825, 01595 825, 825, 321, 320, 831, 825, 319, 318, 827, 835, 01596 835, 835, 835, 317, 316, 832, 315, 834, 834, 834, 01597 834, 301, 825, 835, 300, 833, 837, 837, 837, 837, 01598 299, 825, 826, 826, 826, 826, 298, 297, 284, 826, 01599 834, 835, 278, 836, 836, 836, 836, 277, 275, 834, 01600 838, 838, 838, 838, 273, 272, 826, 836, 837, 271, 01601 01602 837, 269, 268, 266, 838, 826, 828, 828, 828, 828, 01603 264, 262, 259, 828, 257, 836, 840, 840, 840, 840, 01604 253, 248, 838, 841, 841, 841, 841, 246, 238, 227, 01605 828, 840, 226, 225, 221, 220, 218, 214, 841, 828, 01606 829, 829, 829, 829, 213, 211, 210, 829, 209, 208, 01607 207, 206, 205, 204, 203, 202, 201, 199, 189, 188, 01608 187, 186, 185, 184, 829, 172, 160, 153, 151, 150, 01609 148, 147, 146, 829, 849, 144, 140, 139, 849, 849, 01610 133, 126, 849, 849, 849, 849, 849, 850, 850, 850, 01611 850, 123, 120, 117, 850, 850, 850, 850, 115, 850, 01612 01613 850, 850, 850, 850, 851, 851, 851, 851, 92, 90, 01614 87, 851, 86, 82, 851, 77, 75, 851, 851, 851, 01615 851, 852, 73, 67, 852, 64, 852, 852, 852, 62, 01616 852, 852, 61, 852, 852, 852, 852, 852, 853, 853, 01617 853, 55, 42, 40, 38, 36, 853, 853, 853, 31, 01618 853, 853, 853, 853, 853, 854, 854, 854, 0, 854, 01619 0, 0, 0, 854, 854, 854, 0, 854, 854, 854, 01620 854, 854, 855, 855, 855, 0, 0, 0, 0, 0, 01621 855, 855, 0, 0, 855, 855, 855, 855, 855, 856, 01622 856, 856, 856, 0, 856, 856, 856, 856, 856, 856, 01623 01624 0, 856, 856, 856, 856, 856, 857, 857, 857, 0, 01625 857, 0, 0, 0, 857, 857, 0, 0, 857, 857, 01626 857, 857, 857, 858, 858, 858, 858, 858, 858, 858, 01627 858, 858, 858, 858, 858, 858, 858, 0, 858, 0, 01628 858, 858, 859, 859, 0, 859, 859, 859, 859, 859, 01629 859, 859, 859, 859, 0, 859, 859, 859, 859, 859, 01630 859, 860, 860, 860, 0, 0, 0, 0, 860, 0, 01631 0, 0, 0, 860, 860, 860, 860, 860, 861, 861, 01632 0, 861, 861, 861, 861, 861, 861, 861, 861, 861, 01633 0, 861, 861, 861, 861, 861, 861, 862, 0, 0, 01634 01635 0, 862, 862, 0, 0, 862, 862, 862, 862, 862, 01636 863, 0, 0, 0, 863, 863, 0, 0, 863, 863, 01637 863, 863, 863, 864, 0, 864, 864, 864, 0, 864, 01638 0, 0, 864, 864, 864, 864, 864, 865, 0, 865, 01639 865, 865, 865, 865, 0, 0, 865, 865, 865, 865, 01640 865, 866, 866, 0, 866, 866, 866, 866, 866, 866, 01641 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 01642 867, 0, 867, 867, 0, 0, 867, 867, 867, 868, 01643 868, 868, 868, 0, 868, 868, 868, 868, 868, 868, 01644 0, 868, 868, 868, 868, 868, 869, 869, 869, 869, 01645 01646 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 01647 869, 869, 869, 869, 869, 870, 870, 0, 870, 870, 01648 870, 870, 870, 870, 870, 870, 870, 0, 870, 870, 01649 870, 870, 870, 870, 871, 871, 0, 871, 871, 871, 01650 871, 871, 871, 871, 871, 871, 0, 871, 871, 871, 01651 871, 871, 871, 872, 872, 872, 872, 872, 872, 872, 01652 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 01653 872, 872, 873, 873, 0, 873, 873, 873, 873, 873, 01654 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 01655 873, 874, 874, 0, 874, 874, 874, 874, 874, 874, 01656 01657 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 01658 875, 875, 0, 875, 875, 875, 875, 875, 875, 875, 01659 875, 875, 875, 875, 875, 875, 875, 875, 875, 876, 01660 876, 0, 876, 876, 876, 876, 876, 876, 876, 876, 01661 876, 876, 876, 876, 876, 876, 876, 876, 877, 877, 01662 0, 877, 877, 877, 877, 877, 877, 877, 877, 877, 01663 877, 877, 877, 877, 877, 877, 877, 878, 878, 0, 01664 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 01665 878, 878, 878, 878, 878, 878, 879, 879, 0, 879, 01666 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 01667 01668 879, 879, 879, 879, 879, 880, 880, 0, 880, 880, 01669 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 01670 880, 880, 880, 881, 881, 881, 881, 881, 881, 881, 01671 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 01672 881, 881, 882, 882, 0, 882, 882, 882, 882, 882, 01673 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 01674 882, 883, 883, 883, 883, 883, 883, 883, 883, 883, 01675 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 01676 884, 884, 0, 884, 884, 884, 884, 884, 884, 884, 01677 884, 884, 884, 884, 884, 884, 884, 884, 884, 885, 01678 01679 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 01680 885, 0, 885, 885, 885, 885, 885, 885, 886, 886, 01681 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 01682 0, 886, 886, 886, 886, 886, 886, 887, 887, 0, 01683 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 01684 887, 887, 887, 887, 887, 887, 888, 888, 888, 888, 01685 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 01686 888, 888, 888, 888, 888, 889, 889, 0, 889, 889, 01687 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 01688 889, 889, 889, 889, 890, 890, 890, 890, 890, 890, 01689 01690 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 01691 890, 890, 890, 891, 891, 891, 891, 891, 891, 891, 01692 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 01693 891, 891, 892, 892, 0, 892, 892, 892, 892, 892, 01694 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 01695 892, 893, 893, 893, 893, 893, 893, 893, 893, 893, 01696 893, 893, 893, 0, 893, 893, 893, 893, 893, 893, 01697 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 01698 894, 894, 0, 894, 894, 894, 894, 894, 894, 895, 01699 895, 0, 895, 895, 895, 895, 895, 895, 895, 895, 01700 01701 895, 895, 895, 895, 895, 895, 895, 895, 896, 896, 01702 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 01703 896, 896, 896, 896, 896, 896, 896, 897, 897, 897, 01704 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 01705 897, 897, 897, 897, 897, 897, 898, 898, 898, 898, 01706 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 01707 898, 898, 898, 898, 898, 899, 899, 0, 899, 899, 01708 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 01709 899, 899, 899, 899, 900, 900, 900, 900, 900, 900, 01710 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 01711 01712 900, 900, 900, 901, 901, 0, 901, 901, 901, 901, 01713 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 01714 901, 901, 902, 902, 902, 902, 0, 0, 0, 0, 01715 0, 0, 0, 0, 0, 902, 902, 902, 902, 903, 01716 903, 903, 903, 0, 903, 903, 903, 0, 903, 0, 01717 903, 903, 903, 903, 903, 903, 904, 904, 904, 0, 01718 0, 0, 0, 0, 0, 904, 0, 904, 904, 904, 01719 904, 904, 904, 905, 905, 905, 0, 0, 0, 0, 01720 0, 0, 905, 905, 0, 905, 905, 905, 905, 905, 01721 906, 906, 906, 0, 0, 0, 0, 0, 906, 906, 01722 01723 906, 0, 906, 906, 906, 906, 906, 907, 907, 907, 01724 907, 0, 0, 0, 0, 0, 0, 0, 0, 0, 01725 907, 907, 907, 907, 908, 908, 908, 0, 0, 0, 01726 0, 0, 908, 908, 0, 0, 908, 908, 908, 908, 01727 908, 909, 909, 909, 0, 0, 0, 0, 0, 909, 01728 909, 909, 0, 909, 909, 909, 909, 909, 910, 910, 01729 910, 910, 0, 910, 910, 910, 0, 910, 0, 910, 01730 910, 910, 910, 910, 910, 848, 848, 848, 848, 848, 01731 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 01732 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 01733 01734 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 01735 848, 848, 848, 848, 848, 848, 848 01736 } ; 01737 01738 extern int vhdlscanYY_flex_debug; 01739 int vhdlscanYY_flex_debug = 0; 01740 01741 static yy_state_type *yy_state_buf=0, *yy_state_ptr=0; 01742 static char *yy_full_match; 01743 static int yy_lp; 01744 static int yy_looking_for_trail_begin = 0; 01745 static int yy_full_lp; 01746 static int *yy_full_state; 01747 #define YY_TRAILING_MASK 0x2000 01748 #define YY_TRAILING_HEAD_MASK 0x4000 01749 #define REJECT \ 01750 { \ 01751 *yy_cp = (yy_hold_char); /* undo effects of setting up vhdlscanYYtext */ \ 01752 yy_cp = (yy_full_match); /* restore poss. backed-over text */ \ 01753 (yy_lp) = yy_full_lp; /* restore orig. accepting pos. */ \ 01754 (yy_state_ptr) = yy_full_state; /* restore orig. state */ \ 01755 yy_current_state = *(yy_state_ptr); /* restore curr. state */ \ 01756 ++(yy_lp); \ 01757 goto find_rule; \ 01758 } 01759 01760 #define yymore() yymore_used_but_not_detected 01761 #define YY_MORE_ADJ 0 01762 #define YY_RESTORE_YY_MORE_OFFSET 01763 char *vhdlscanYYtext; 01764 #line 1 "vhdlscanner.l" 01765 /****************************************************************************** 01766 * 01767 * Copyright (C) 1997-2008 by Dimitri van Heesch. 01768 * 01769 * Permission to use, copy, modify, and distribute this software and its 01770 * documentation under the terms of the GNU General Public License is hereby 01771 * granted. No representations are made about the suitability of this software 01772 * for any purpose. It is provided "as is" without express or implied warranty. 01773 * See the GNU General Public License for more details. 01774 * 01775 * Documents produced by Doxygen are derivative works derived from the 01776 * input used in their production; they are not affected by this license. 01777 * 01778 */ 01779 /****************************************************************************** 01780 * Parser for VHDL subset 01781 * written by M. Kreis 01782 * supports VHDL-87 01783 * does not support all keywords of VHDL '93 (impure function/shared variables ..) 01784 * and VHDL-AMS 01785 ******************************************************************************/ 01786 #line 23 "vhdlscanner.l" 01787 01788 // global includes 01789 #include <stdio.h> 01790 #include <stdlib.h> 01791 #include <assert.h> 01792 #include <string.h> 01793 #include <qcstring.h> 01794 #include <qfileinfo.h> 01795 #include <qstringlist.h> 01796 01797 /* --------------------------------------------------------------- */ 01798 01799 // local includes 01800 #include "vhdlscanner.h" 01801 #include "vhdlcode.h" 01802 #include "vhdldocgen.h" 01803 #include "message.h" 01804 #include "config.h" 01805 #include "doxygen.h" 01806 #include "util.h" 01807 #include "language.h" 01808 #include "commentscan.h" 01809 #include "index.h" 01810 #include "definition.h" 01811 #include "searchindex.h" 01812 #include "outputlist.h" 01813 01814 /* --------------------------------------------------------------- */ 01815 01816 //#define theTranslator_vhdlType theTranslator->trVhdlType 01817 #define theTranslator_vhdlType VhdlDocGen::getVhdlType 01818 01819 static QStringList qrl; 01820 static int openGroups; 01821 static ParserInterface *g_thisParser; 01822 static const char * inputString; 01823 static int inputPosition; 01824 static int startComment = 0; 01825 static QFile inputFile; 01826 static QCString inbuf; 01827 static Entry* global_root = 0; 01828 static Entry* current_root = 0; 01829 static Entry* current = 0; 01830 static Entry* previous = 0; 01831 static Entry* functionEntry = 0; 01832 static Entry* lastEntity = 0; 01833 static Entry* lastCompound = 0; 01834 static int genPort = 0; 01835 static QCString yyFileName; 01836 static int iFuncLine = 1; 01837 static bool g_inputFromFile ; 01838 static bool g_lexInit = FALSE; 01839 static int isBody=0; 01840 static int isFunc=0; 01841 static int yyLineNr = 1; 01842 static char * g_buf = 0; 01843 static int iTextCounter = 0; 01844 static int iCounter = 0; 01845 static int bropen = 0; 01846 static int scantype = 0; 01847 static int g_lastCommentContext = 0; 01848 static bool docBlockAutoBrief; 01849 static char docBlockTerm; 01850 01851 //#define YY_A_INTERACTIVE 1 01852 #define YY_NEVER_INTERACTIVE 1 01853 //----------------------------------------------------------------------------- 01854 01855 static void parserInit(); 01856 static void deleteSpecChars(char* str,char *buf); 01857 static void handleCommentBlock(const QCString &doc,bool brief); 01858 static void newEntry(); 01859 static void initEntry(Entry *e); 01860 01861 static void addSubEntry(Entry* root, Entry* e) 01862 { 01863 if (e==0 || root==0) return; 01864 //if (isPrevDoc) 01865 //{ 01866 // e->brief=prevDocEntry.brief; 01867 // e->briefLine=prevDocEntry.briefLine; 01868 // prevDocEntry.reset(); 01869 // isPrevDoc=FALSE; 01870 //} 01871 root->addSubEntry(e); 01872 } 01873 01874 static void bufferClear() 01875 { 01876 int j; 01877 for (j=0;j<iCounter+1;j++) 01878 { 01879 g_buf[j]=0; 01880 } 01881 01882 iCounter=0; 01883 } 01884 01885 static void addText (char *word, int llen) 01886 { 01887 while (llen>0) 01888 { 01889 g_buf[iCounter]=*word; 01890 *word++; 01891 iCounter++; 01892 llen--; 01893 } 01894 g_buf[iCounter]='\0'; 01895 } 01896 01897 static void getBufText(QCString& qc,int start) 01898 { 01899 while (start < iCounter) 01900 { 01901 qc+=(g_buf[start]); 01902 start++; 01903 } 01904 } 01905 01906 static void lineCount() 01907 { 01908 for ( const char* c = vhdlscanYYtext ; *c ; ++c ) 01909 { 01910 yyLineNr += (*c == '\n') ; 01911 } 01912 } 01913 01914 static void deleteSpecChars(char* str,char *buf) 01915 { 01916 while (*str) 01917 { 01918 if ((*str == '\t') || (*str == '\n') || (*str == '\r') || (*str == ' ')) 01919 { 01920 *str++; 01921 } 01922 else 01923 { 01924 *buf++ = *str++; 01925 } 01926 } 01927 *buf='\0'; 01928 } 01929 01930 void getType(Entry* p,char* text) 01931 { 01932 QCString name(text); 01933 name=name.stripWhiteSpace(); 01934 if (stricmp(name.data(),"signal" )==0) 01935 { 01936 p->spec=VhdlDocGen::SIGNAL; 01937 } 01938 else if (stricmp(name.data(),"type" )==0) 01939 { 01940 p->spec=VhdlDocGen::TYPE; 01941 } 01942 else if (stricmp(name.data(),"subtype" )==0) 01943 { 01944 p->spec=VhdlDocGen::SUBTYPE; 01945 } 01946 else if (stricmp(name.data(),"constant" )==0) 01947 { 01948 p->spec=VhdlDocGen::CONSTANT; 01949 } 01950 else if (stricmp(name.data(),"attribute" )==0) 01951 { 01952 p->spec=VhdlDocGen::ATTRIBUTE; 01953 } 01954 else if (stricmp(name.data(),"function" )==0) 01955 { 01956 p->spec=VhdlDocGen::FUNCTION; 01957 } 01958 else if (stricmp(name.data(),"procedure" )==0) 01959 { 01960 p->spec=VhdlDocGen::PROCEDURE; 01961 } 01962 else if (stricmp(name.data(),"units" )==0) 01963 { 01964 p->spec=VhdlDocGen::UNITS; 01965 } 01966 else 01967 { 01968 err("wrong type"); 01969 } 01970 p->section=Entry::VARIABLE_SEC; 01971 } 01972 01973 //------------------------------------------------------------------------- 01974 01975 /* 01976 * adds signals found in entities|records|units 01977 */ 01978 01979 void addSignals(const char* str,int line, Entry *e,const char *comment=0) 01980 { 01981 //printf("===> addSignals (%s) comment='%s'\n",str,comment); 01982 QList<QCString> ql; 01983 QCString bufio; 01984 ql.setAutoDelete(TRUE); 01985 01986 VhdlDocGen::getSigName(ql,str,bufio); 01987 int count = ql.count(); 01988 01989 QCString brief = current->brief; 01990 QCString doc = current->doc; 01991 Entry *tmpEntry = current; 01992 current = new Entry; 01993 initEntry(current); 01994 handleCommentBlock(comment,TRUE); 01995 if (!current->brief.isEmpty()) 01996 { 01997 if (doc.isEmpty()) 01998 { 01999 doc = brief; 02000 } 02001 else if (!brief.isEmpty()) 02002 { 02003 doc = brief + "<p>" + doc; 02004 } 02005 brief = current->brief; 02006 } 02007 delete current; 02008 current = tmpEntry; 02009 current->brief.resize(0); 02010 current->doc.resize(0); 02011 02012 for (int k=1;k<count;k++) 02013 { 02014 //printf("adding '%s' '%s'\n",ql.at(0)->data(),ql.at(k)->data()); 02015 Entry *pTemp=new Entry; 02016 initEntry(pTemp); 02017 pTemp->startLine = line; 02018 pTemp->bodyLine = line; 02019 pTemp->name = ql.at(k)->data(); 02020 pTemp->section = Entry::VARIABLE_SEC; 02021 pTemp->brief = brief; 02022 pTemp->doc = doc; 02023 QCString stSpec = ql.at(0)->data(); 02024 if (genPort==1) 02025 { 02026 pTemp->spec = VhdlDocGen::PORT; 02027 stSpec.stripPrefix(bufio.data()); 02028 stSpec=stSpec.stripWhiteSpace(); 02029 pTemp->args = stSpec; 02030 pTemp->type = bufio; 02031 } 02032 else if (genPort==2) // found record 02033 { 02034 pTemp->spec = VhdlDocGen::RECORD; 02035 pTemp->type = stSpec; 02036 pTemp->name.prepend(VhdlDocGen::getRecordNumber()); 02037 } 02038 else 02039 { 02040 pTemp->spec = VhdlDocGen::GENERIC; 02041 pTemp->type = stSpec; 02042 } 02043 addSubEntry(e,pTemp); 02044 }// for 02045 02046 /* found a unit */ 02047 if (genPort==3) 02048 { 02049 Entry *pTemp=new Entry; 02050 initEntry(pTemp); 02051 QCString tt(str); 02052 QStringList ql=QStringList::split("=",tt,FALSE); 02053 pTemp->spec=VhdlDocGen::UNITS; 02054 pTemp->section=Entry::VARIABLE_SEC; 02055 pTemp->startLine=line; 02056 pTemp->bodyLine=line; 02057 pTemp->type=(QCString)ql[1]; 02058 pTemp->name=(QCString)ql[0].stripWhiteSpace(); 02059 pTemp->name.prepend(VhdlDocGen::getRecordNumber()); 02060 addSubEntry(e,pTemp); 02061 } 02062 } 02063 02064 /* 02065 * this function parses a process prototype 02066 * and adds the signal to the process 02067 */ 02068 02069 static void parseProcessProto() 02070 { 02071 QStringList ql; 02072 QCString qcs; 02073 bool sem=FALSE; 02074 //Entry* ppEntry=new Entry; 02075 //ppEntry->fileName=yyFileName; 02076 //processEntry=ppEntry; 02077 QCString name; 02078 scantype=0; 02079 getBufText(qcs,0); 02080 if (qcs.contains('(') != qcs.contains(')')) return; 02081 VhdlDocGen::deleteAllChars(qcs,'\n'); 02082 VhdlDocGen::parseProcessProto(qcs.data(),name,ql); 02083 current->section=Entry::FUNCTION_SEC; 02084 current->stat=TRUE; 02085 current->spec=VhdlDocGen::PROCESS; 02086 current->startLine=iFuncLine; 02087 current->bodyLine=iFuncLine; 02088 current->fileName=yyFileName; 02089 if (!name.isEmpty()) 02090 { 02091 current->name=name.stripWhiteSpace(); 02092 } 02093 else // found an anonymous process, so we add a generated name 02094 { 02095 current->name=VhdlDocGen::getProcessNumber(); 02096 } 02097 02098 current->args+=" ( "; 02099 if (!ql.isEmpty()) 02100 { 02101 QValueList<QString>::Iterator iter = ql.begin(); 02102 for ( ; iter != ql.end(); ++iter) 02103 { 02104 if (sem) 02105 { 02106 current->args+=','; 02107 } 02108 Argument *arg=new Argument; 02109 arg->name=((QCString)*iter).stripWhiteSpace(); 02110 current->argList->append(arg); 02111 current->args+=(QCString)*iter; 02112 sem = TRUE; 02113 } 02114 } 02115 current->args+=" ) "; 02116 bufferClear(); 02117 }//parseProcessProto 02118 02119 02120 /* 02121 * parses a function|procedure protoype 02122 */ 02123 02124 static void parseFunctionProto() 02125 { 02126 QCString name,ret,qcs; 02127 bool sem=FALSE; 02128 QList<Argument> ql; 02129 ql.setAutoDelete(TRUE); 02130 getBufText(qcs,0); 02131 if (qcs.contains('(') != qcs.contains(')')) 02132 return; // function without a prototype 02133 if (qcs.contains("function",FALSE)==0 && qcs.contains("procedure",FALSE)==0) 02134 return; 02135 //Entry* ppEntry=new Entry; 02136 02137 VhdlDocGen::parseFuncProto(qcs.data(),ql,name,ret); 02138 current->name=name; 02139 current->startLine=iFuncLine; 02140 current->bodyLine=iFuncLine; 02141 02142 int count = ql.count(); 02143 02144 current->args+" ( "; 02145 for (int k=0;k<count;k++) 02146 { 02147 if (sem) 02148 { 02149 current->args+=","; 02150 } 02151 Argument *arg=new Argument(); 02152 Argument *hh=(Argument*)ql.at(k); 02153 arg->name=hh->name; 02154 arg->type=hh->type; 02155 arg->defval=hh->defval; 02156 arg->attrib=hh->attrib; 02157 current->argList->append(arg); 02158 current->args+=hh->name; 02159 sem=TRUE; 02160 } 02161 current->args+" )"; 02162 02163 if (ret.data()) 02164 current->spec=VhdlDocGen::FUNCTION; 02165 else 02166 current->spec=VhdlDocGen::PROCEDURE; 02167 02168 current->section=Entry::FUNCTION_SEC; 02169 current->type=ret; 02170 //addSubEntry(ee,ppEntry); 02171 if (lastCompound) 02172 { 02173 lastCompound->addSubEntry(current); 02174 current = new Entry; 02175 initEntry(current); 02176 } 02177 else 02178 { 02179 newEntry(); 02180 } 02181 bufferClear(); 02182 }//parseFunctionProto 02183 02184 02185 //------------------------------------------------------------------------- 02186 02187 02188 void parserInit() 02189 { 02190 iCounter=0; 02191 iTextCounter=0; 02192 yyLineNr=1; 02193 current=0; 02194 previous=0; 02195 isFunc=0; 02196 isBody=0; 02197 scantype=0; 02198 //pEntry=0; 02199 //pp=0; 02200 lastCompound=0; 02201 lastEntity=0; 02202 bropen=0; 02203 openGroups=0; 02204 //isPrevDoc=FALSE; 02205 //prevDocEntry.reset(); 02206 qrl.clear(); 02207 02208 if (!g_lexInit) 02209 { 02210 VhdlDocGen::init(); 02211 } 02212 02213 02214 uint SSIZE=inputFile.size()+1024; 02215 if (g_buf==0) 02216 g_buf=(char*)(calloc(SSIZE,sizeof(char))); 02217 02218 if (g_buf==0) 02219 { 02220 fprintf(stderr,"\n no enough memory"); 02221 return; 02222 } 02223 g_buf[SSIZE-1]='\0'; 02224 } 02225 02226 bool VHDLLanguageScanner::needsPreprocessing(const QCString &) 02227 { 02228 return FALSE; 02229 } 02230 02231 02232 void VHDLLanguageScanner::resetCodeParserState() 02233 { 02234 02235 } 02236 02237 #undef YY_INPUT 02238 #define YY_INPUT(buf,result,max_size) result=yyread(buf,max_size); 02239 02240 static int yyread(char *buf,int max_size) 02241 { 02242 int c=0; 02243 if (g_inputFromFile) 02244 { 02245 c = inputFile.readBlock(buf,max_size); 02246 if (c==-1) yy_fatal_error("input in flex scanner failed"); 02247 } 02248 else 02249 { 02250 while ( c < max_size && inputString[inputPosition] ) 02251 { 02252 *buf = inputString[inputPosition++] ; 02253 c++; buf++; 02254 } 02255 } 02256 return c; 02257 } 02258 02259 #if 0 02260 /* 02261 * adds a text line description [--#] to the the previous type 02262 */ 02263 02264 static void addOneTextLine(QCString& ss ) 02265 { 02266 Entry* pTemp=0; 02267 if (current && current->bodyLine==yyLineNr) 02268 pTemp=current; 02269 //else if (pEntry && pEntry->bodyLine==yyLineNr) 02270 // pTemp=pEntry; 02271 else 02272 pTemp=VhdlDocGen::getEntryAtLine(current_root,yyLineNr) ; 02273 02274 if (pTemp) 02275 { 02276 ss=ss.stripWhiteSpace(); 02277 ss.stripPrefix("--!"); 02278 pTemp->brief=ss; 02279 pTemp->briefLine=yyLineNr; 02280 } 02281 } 02282 #endif 02283 02284 /* start command character */ 02285 /* -------------- VHDL SECTION -----------------------------------*/ 02286 /* language parsing states */ 02287 02288 02289 02290 02291 02292 02293 02294 02295 02296 02297 02298 02299 02300 02301 #line 2302 "<stdout>" 02302 02303 #define INITIAL 0 02304 #define Start 1 02305 #define Comment 2 02306 #define FindTypeName 3 02307 #define ParseType 4 02308 #define ParseRecord 5 02309 #define ParseUnits 6 02310 #define ParseProcess 7 02311 #define FindName 8 02312 #define FindEntityName 9 02313 #define FindGenPort 10 02314 #define FindTypes 11 02315 #define FindSigName 12 02316 #define FindFuncName 13 02317 #define FindBegin 14 02318 02319 #ifndef YY_NO_UNISTD_H 02320 /* Special case for "unistd.h", since it is non-ANSI. We include it way 02321 * down here because we want the user's section 1 to have been scanned first. 02322 * The user has a chance to override it with an option. 02323 */ 02324 #include <unistd.h> 02325 #endif 02326 02327 #ifndef YY_EXTRA_TYPE 02328 #define YY_EXTRA_TYPE void * 02329 #endif 02330 02331 static int yy_init_globals (void ); 02332 02333 /* Macros after this point can all be overridden by user definitions in 02334 * section 1. 02335 */ 02336 02337 #ifndef YY_SKIP_YYWRAP 02338 #ifdef __cplusplus 02339 extern "C" int vhdlscanYYwrap (void ); 02340 #else 02341 extern int vhdlscanYYwrap (void ); 02342 #endif 02343 #endif 02344 02345 static void yyunput (int c,char *buf_ptr ); 02346 02347 #ifndef yytext_ptr 02348 static void yy_flex_strncpy (char *,yyconst char *,int ); 02349 #endif 02350 02351 #ifdef YY_NEED_STRLEN 02352 static int yy_flex_strlen (yyconst char * ); 02353 #endif 02354 02355 #ifndef YY_NO_INPUT 02356 02357 #ifdef __cplusplus 02358 static int yyinput (void ); 02359 #else 02360 static int input (void ); 02361 #endif 02362 02363 #endif 02364 02365 /* Amount of stuff to slurp up with each read. */ 02366 #ifndef YY_READ_BUF_SIZE 02367 #define YY_READ_BUF_SIZE 8192 02368 #endif 02369 02370 /* Copy whatever the last rule matched to the standard output. */ 02371 #ifndef ECHO 02372 /* This used to be an fputs(), but since the string might contain NUL's, 02373 * we now use fwrite(). 02374 */ 02375 #define ECHO (void) fwrite( vhdlscanYYtext, vhdlscanYYleng, 1, vhdlscanYYout ) 02376 #endif 02377 02378 /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, 02379 * is returned in "result". 02380 */ 02381 #ifndef YY_INPUT 02382 #define YY_INPUT(buf,result,max_size) \ 02383 if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ 02384 { \ 02385 int c = '*'; \ 02386 size_t n; \ 02387 for ( n = 0; n < max_size && \ 02388 (c = getc( vhdlscanYYin )) != EOF && c != '\n'; ++n ) \ 02389 buf[n] = (char) c; \ 02390 if ( c == '\n' ) \ 02391 buf[n++] = (char) c; \ 02392 if ( c == EOF && ferror( vhdlscanYYin ) ) \ 02393 YY_FATAL_ERROR( "input in flex scanner failed" ); \ 02394 result = n; \ 02395 } \ 02396 else \ 02397 { \ 02398 errno=0; \ 02399 while ( (result = fread(buf, 1, max_size, vhdlscanYYin))==0 && ferror(vhdlscanYYin)) \ 02400 { \ 02401 if( errno != EINTR) \ 02402 { \ 02403 YY_FATAL_ERROR( "input in flex scanner failed" ); \ 02404 break; \ 02405 } \ 02406 errno=0; \ 02407 clearerr(vhdlscanYYin); \ 02408 } \ 02409 }\ 02410 \ 02411 02412 #endif 02413 02414 /* No semi-colon after return; correct usage is to write "yyterminate();" - 02415 * we don't want an extra ';' after the "return" because that will cause 02416 * some compilers to complain about unreachable statements. 02417 */ 02418 #ifndef yyterminate 02419 #define yyterminate() return YY_NULL 02420 #endif 02421 02422 /* Number of entries by which start-condition stack grows. */ 02423 #ifndef YY_START_STACK_INCR 02424 #define YY_START_STACK_INCR 25 02425 #endif 02426 02427 /* Report a fatal error. */ 02428 #ifndef YY_FATAL_ERROR 02429 #define YY_FATAL_ERROR(msg) yy_fatal_error( msg ) 02430 #endif 02431 02432 /* end tables serialization structures and prototypes */ 02433 02434 /* Default declaration of generated scanner - a define so the user can 02435 * easily add parameters. 02436 */ 02437 #ifndef YY_DECL 02438 #define YY_DECL_IS_OURS 1 02439 02440 extern int vhdlscanYYlex (void); 02441 02442 #define YY_DECL int vhdlscanYYlex (void) 02443 #endif /* !YY_DECL */ 02444 02445 /* Code executed at the beginning of each rule, after vhdlscanYYtext and vhdlscanYYleng 02446 * have been set up. 02447 */ 02448 #ifndef YY_USER_ACTION 02449 #define YY_USER_ACTION 02450 #endif 02451 02452 /* Code executed at the end of each rule. */ 02453 #ifndef YY_BREAK 02454 #define YY_BREAK break; 02455 #endif 02456 02457 #define YY_RULE_SETUP \ 02458 if ( vhdlscanYYleng > 0 ) \ 02459 YY_CURRENT_BUFFER_LVALUE->yy_at_bol = \ 02460 (vhdlscanYYtext[vhdlscanYYleng - 1] == '\n'); \ 02461 YY_USER_ACTION 02462 02465 YY_DECL 02466 { 02467 register yy_state_type yy_current_state; 02468 register char *yy_cp, *yy_bp; 02469 register int yy_act; 02470 02471 #line 582 "vhdlscanner.l" 02472 02473 02474 #line 2475 "<stdout>" 02475 02476 if ( !(yy_init) ) 02477 { 02478 (yy_init) = 1; 02479 02480 #ifdef YY_USER_INIT 02481 YY_USER_INIT; 02482 #endif 02483 02484 /* Create the reject buffer large enough to save one state per allowed character. */ 02485 if ( ! (yy_state_buf) ) 02486 (yy_state_buf) = (yy_state_type *)vhdlscanYYalloc(YY_STATE_BUF_SIZE ); 02487 02488 if ( ! (yy_start) ) 02489 (yy_start) = 1; /* first start state */ 02490 02491 if ( ! vhdlscanYYin ) 02492 vhdlscanYYin = stdin; 02493 02494 if ( ! vhdlscanYYout ) 02495 vhdlscanYYout = stdout; 02496 02497 if ( ! YY_CURRENT_BUFFER ) { 02498 vhdlscanYYensure_buffer_stack (); 02499 YY_CURRENT_BUFFER_LVALUE = 02500 vhdlscanYY_create_buffer(vhdlscanYYin,YY_BUF_SIZE ); 02501 } 02502 02503 vhdlscanYY_load_buffer_state( ); 02504 } 02505 02506 while ( 1 ) /* loops until end-of-file is reached */ 02507 { 02508 yy_cp = (yy_c_buf_p); 02509 02510 /* Support of vhdlscanYYtext. */ 02511 *yy_cp = (yy_hold_char); 02512 02513 /* yy_bp points to the position in yy_ch_buf of the start of 02514 * the current run. 02515 */ 02516 yy_bp = yy_cp; 02517 02518 yy_current_state = (yy_start); 02519 yy_current_state += YY_AT_BOL(); 02520 02521 (yy_state_ptr) = (yy_state_buf); 02522 *(yy_state_ptr)++ = yy_current_state; 02523 02524 yy_match: 02525 do 02526 { 02527 register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; 02528 while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) 02529 { 02530 yy_current_state = (int) yy_def[yy_current_state]; 02531 if ( yy_current_state >= 849 ) 02532 yy_c = yy_meta[(unsigned int) yy_c]; 02533 } 02534 yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; 02535 *(yy_state_ptr)++ = yy_current_state; 02536 ++yy_cp; 02537 } 02538 while ( yy_base[yy_current_state] != 4076 ); 02539 02540 yy_find_action: 02541 yy_current_state = *--(yy_state_ptr); 02542 (yy_lp) = yy_accept[yy_current_state]; 02543 find_rule: /* we branch to this label when backing up */ 02544 for ( ; ; ) /* until we find what rule we matched */ 02545 { 02546 if ( (yy_lp) && (yy_lp) < yy_accept[yy_current_state + 1] ) 02547 { 02548 yy_act = yy_acclist[(yy_lp)]; 02549 if ( yy_act & YY_TRAILING_HEAD_MASK || 02550 yy_looking_for_trail_begin ) 02551 { 02552 if ( yy_act == yy_looking_for_trail_begin ) 02553 { 02554 yy_looking_for_trail_begin = 0; 02555 yy_act &= ~YY_TRAILING_HEAD_MASK; 02556 break; 02557 } 02558 } 02559 else if ( yy_act & YY_TRAILING_MASK ) 02560 { 02561 yy_looking_for_trail_begin = yy_act & ~YY_TRAILING_MASK; 02562 yy_looking_for_trail_begin |= YY_TRAILING_HEAD_MASK; 02563 } 02564 else 02565 { 02566 (yy_full_match) = yy_cp; 02567 yy_full_state = (yy_state_ptr); 02568 yy_full_lp = (yy_lp); 02569 break; 02570 } 02571 ++(yy_lp); 02572 goto find_rule; 02573 } 02574 --yy_cp; 02575 yy_current_state = *--(yy_state_ptr); 02576 (yy_lp) = yy_accept[yy_current_state]; 02577 } 02578 02579 YY_DO_BEFORE_ACTION; 02580 02581 do_action: /* This label is used only to access EOF actions. */ 02582 02583 switch ( yy_act ) 02584 { /* beginning of action switch */ 02585 case 1: 02586 /* rule 1 can match eol */ 02587 YY_RULE_SETUP 02588 #line 584 "vhdlscanner.l" 02589 { // found type constant|type|attribute and so on.. 02590 bropen=0; 02591 lineCount(); 02592 02593 bufferClear(); 02594 //pEntry=current; 02595 getType(current,vhdlscanYYtext); 02596 current->bodyLine=yyLineNr; 02597 if (current->spec==VhdlDocGen::UNITS) 02598 { 02599 //addSubEntry(current,pEntry); 02600 current->startLine=yyLineNr; 02601 current->bodyLine=yyLineNr; 02602 genPort=3; 02603 BEGIN(ParseRecord); 02604 } 02605 else 02606 { 02607 BEGIN(FindTypeName); 02608 } 02609 } 02610 YY_BREAK 02611 case 2: 02612 /* rule 2 can match eol */ 02613 YY_RULE_SETUP 02614 #line 606 "vhdlscanner.l" 02615 { //found architecure 02616 lineCount(); 02617 bropen=0; 02618 bufferClear(); 02619 isBody=0; 02620 lastCompound = current; 02621 QCString curName=VhdlDocGen::getIndexWord(vhdlscanYYtext,1); 02622 current->section=Entry::CLASS_SEC; //Entry::CLASS_SEC; 02623 current->spec=VhdlDocGen::ARCHITECTURE; 02624 current->protection=Private; 02625 current->name=curName; 02626 current->fileName=yyFileName; 02627 current->startLine=yyLineNr; 02628 current->bodyLine=yyLineNr; 02629 //printf("-> Architecture at line %d\n",yyLineNr); 02630 BEGIN(FindName); 02631 } 02632 YY_BREAK 02633 case 3: 02634 /* rule 3 can match eol */ 02635 YY_RULE_SETUP 02636 #line 625 "vhdlscanner.l" 02637 { //found process 02638 lineCount(); 02639 iFuncLine=yyLineNr; 02640 bropen=0; 02641 //printf("--> Process: line=%d\n",yyLineNr); 02642 bufferClear(); 02643 addText(vhdlscanYYtext,vhdlscanYYleng); 02644 QCString qcs(vhdlscanYYtext); 02645 if (qcs.contains('(')) 02646 { 02647 bropen=1; 02648 scantype=2; 02649 BEGIN(ParseType); 02650 } 02651 else 02652 { 02653 // iFuncLine--; 02654 parseProcessProto(); 02655 BEGIN(ParseProcess); 02656 } 02657 } 02658 YY_BREAK 02659 case 4: 02660 /* rule 4 can match eol */ 02661 YY_RULE_SETUP 02662 #line 647 "vhdlscanner.l" 02663 { // found library or package 02664 bropen=0; 02665 bufferClear(); 02666 isBody=0; 02667 QCString qcs=QCString(vhdlscanYYtext); 02668 // lowerString(qcs); 02669 qcs=qcs.stripWhiteSpace(); 02670 if (stricmp(qcs.data(),"use")==0) 02671 { 02672 current->spec=VhdlDocGen::USE; 02673 current->type="package"; 02674 } 02675 else 02676 { 02677 current->spec=VhdlDocGen::LIBRARY; 02678 current->type="library"; 02679 } 02680 current->section=Entry::VARIABLE_SEC; 02681 current->bodyLine=yyLineNr; 02682 lineCount(); 02683 BEGIN(FindName); 02684 } 02685 YY_BREAK 02686 case 5: 02687 YY_RULE_SETUP 02688 #line 670 "vhdlscanner.l" 02689 { // found a new function|procedure 02690 lineCount(); 02691 iFuncLine=yyLineNr; 02692 bropen=0; 02693 bufferClear(); 02694 isFunc=1; 02695 addText(vhdlscanYYtext,vhdlscanYYleng); 02696 BEGIN(FindFuncName); 02697 } 02698 YY_BREAK 02699 case 6: 02700 /* rule 6 can match eol */ 02701 YY_RULE_SETUP 02702 #line 680 "vhdlscanner.l" 02703 { // found entity|component|package 02704 lineCount(); 02705 //printf("--> Entity at line %d\n",yyLineNr); 02706 02707 bropen=0; 02708 bufferClear(); 02709 QCString word(vhdlscanYYtext); 02710 word=word.lower(); 02711 word=word.stripWhiteSpace(); 02712 02713 if (strcmp(word.data(),"entity")==0) 02714 { 02715 isBody=0; 02716 scantype=0; 02717 current->section=Entry::CLASS_SEC; 02718 current->spec=VhdlDocGen::ENTITY; 02719 current->protection=Public; 02720 current->bodyLine=yyLineNr; 02721 current->fileName=yyFileName; 02722 lastEntity = current; 02723 } 02724 else if (strcmp(word.data(),"component")==0) 02725 { 02726 current->section=Entry::VARIABLE_SEC; 02727 current->stat=TRUE; 02728 current->spec=VhdlDocGen::COMPONENT; 02729 current->bodyLine=yyLineNr; 02730 scantype=1; 02731 } 02732 else if (strcmp(word,"package")==0) 02733 { 02734 isBody=0; 02735 scantype=0; 02736 lastCompound = current; 02737 current->section=Entry::CLASS_SEC; 02738 current->spec=VhdlDocGen::PACKAGE; 02739 current->protection=Package; //VhdlDocGen::PACKAGE; 02740 current->bodyLine=yyLineNr; 02741 current->fileName=yyFileName; 02742 } 02743 else 02744 err("\n found wrong component at line [%d]",yyLineNr); 02745 02746 BEGIN(FindEntityName); 02747 } 02748 YY_BREAK 02749 case 7: 02750 /* rule 7 can match eol */ 02751 YY_RULE_SETUP 02752 #line 726 "vhdlscanner.l" 02753 { // found new mapped component aaa: bbb port map 02754 02755 lineCount(); 02756 QCString type; 02757 QCString tt(vhdlscanYYtext); 02758 tt = tt.stripWhiteSpace(); 02759 //printf(" tt=%s\n",tt.data()); 02760 //VhdlDocGen::deleteAllChars(tt,'\n'); 02761 QCString name = VhdlDocGen::getIndexWord(tt,0); 02762 int i=name.find(':'); 02763 if (i!=-1) 02764 { 02765 name = name.left(i); 02766 tt = tt.right(tt.length()-i-1); 02767 } 02768 int j = tt.find('.'); 02769 if (j!=-1) 02770 { 02771 int k=tt.find(" ",j,FALSE); 02772 if (k>(j+1)) 02773 type=tt.mid(j+1,k-j-1); 02774 } 02775 else 02776 { 02777 type=VhdlDocGen::getIndexWord(tt,1); 02778 if (type==":") type=VhdlDocGen::getIndexWord(tt,2); 02779 if (type=="component") type=VhdlDocGen::getIndexWord(tt,3); 02780 } 02781 //printf("Add mapping %s->%s\n",type.data(),name.data()); 02782 02783 current->spec=VhdlDocGen::PORTMAP; 02784 current->section=Entry::VARIABLE_SEC; 02785 current->startLine=yyLineNr; 02786 current->bodyLine=yyLineNr; 02787 current->type=type; 02788 current->name=name; 02789 if (lastCompound) 02790 { 02791 lastCompound->addSubEntry(current); 02792 current = new Entry; 02793 initEntry(current); 02794 } 02795 else 02796 { 02797 newEntry(); 02798 } 02799 02800 #if 0 02801 if (current && current->spec==VhdlDocGen::ARCHITECTURE) 02802 { 02803 if (!VhdlDocGen::foundInsertedComponent(name,current) && !name.isEmpty()) 02804 { 02805 BaseInfo *bb=new BaseInfo(name,Private,Normal); 02806 current->extends->append(bb); 02807 } 02808 } 02809 #endif 02810 } 02811 YY_BREAK 02812 case 8: 02813 /* rule 8 can match eol */ 02814 YY_RULE_SETUP 02815 #line 785 "vhdlscanner.l" 02816 { 02817 lineCount(); 02818 addText(vhdlscanYYtext,vhdlscanYYleng); 02819 BEGIN(Start); 02820 } 02821 YY_BREAK 02822 case 9: 02823 /* rule 9 can match eol */ 02824 YY_RULE_SETUP 02825 #line 791 "vhdlscanner.l" 02826 { 02827 // eat process body 02828 lineCount(); 02829 BEGIN(ParseProcess); 02830 } 02831 YY_BREAK 02832 case 10: 02833 /* rule 10 can match eol */ 02834 YY_RULE_SETUP 02835 #line 797 "vhdlscanner.l" 02836 { // find end of process 02837 lineCount(); 02838 current->endBodyLine=yyLineNr; 02839 //printf("Process: start=%d end=%d\n",current->bodyLine,current->endBodyLine); 02840 if (lastCompound) 02841 { 02842 lastCompound->addSubEntry(current); 02843 current = new Entry; 02844 initEntry(current); 02845 } 02846 else 02847 { 02848 newEntry(); 02849 } 02850 BEGIN(Start); 02851 } 02852 YY_BREAK 02853 case 11: 02854 /* rule 11 can match eol */ 02855 YY_RULE_SETUP 02856 #line 815 "vhdlscanner.l" 02857 { 02858 lineCount(); 02859 } 02860 YY_BREAK 02861 case 12: 02862 YY_RULE_SETUP 02863 #line 819 "vhdlscanner.l" 02864 { // parse record|unit body 02865 lineCount(); 02866 QCString zz(vhdlscanYYtext); 02867 addSignals(zz.data(),yyLineNr,current); 02868 BEGIN(ParseUnits); 02869 } 02870 YY_BREAK 02871 case 13: 02872 YY_RULE_SETUP 02873 #line 826 "vhdlscanner.l" 02874 { // found entity|architecture|component name 02875 lineCount(); 02876 02877 QCString qcs(vhdlscanYYtext); 02878 QCString qreal=QCString(vhdlscanYYtext); 02879 qcs=qcs.stripWhiteSpace(); 02880 if (current->spec==VhdlDocGen::USE) 02881 { 02882 int j=qcs.length(); 02883 int i=qcs.find("."); 02884 if (i>0) 02885 qcs=qcs.right(j-i-1); 02886 j=qcs.length(); 02887 i=qcs.find("."); 02888 if (i>0) 02889 qcs=qcs.left(i); 02890 current->name=qcs; 02891 } 02892 else if (current->spec==VhdlDocGen::ARCHITECTURE) 02893 { 02894 //current->name+=qcs.lower(); 02895 current->name.prepend(qcs+"::"); 02896 02897 if (lastEntity) 02898 { 02899 // inherit private inheritance relation between entity and architecture 02900 if (!VhdlDocGen::foundInsertedComponent(current->name,lastEntity)) 02901 { 02902 BaseInfo *bb=new BaseInfo(current->name,Private,Normal); 02903 lastEntity->extends->append(bb); 02904 } 02905 } 02906 02907 } 02908 else if (current->spec==VhdlDocGen::PACKAGE_BODY) 02909 { 02910 current->name+=qcs; 02911 } 02912 else 02913 { 02914 current->name+=qcs; 02915 } 02916 newEntry(); 02917 02918 BEGIN(Start); 02919 } 02920 YY_BREAK 02921 case 14: 02922 YY_RULE_SETUP 02923 #line 873 "vhdlscanner.l" 02924 { // found name of a process|function|procedure 02925 lineCount(); 02926 02927 addText(vhdlscanYYtext,vhdlscanYYleng); 02928 BEGIN(ParseType); 02929 } 02930 YY_BREAK 02931 case 15: 02932 /* rule 15 can match eol */ 02933 YY_RULE_SETUP 02934 #line 880 "vhdlscanner.l" 02935 { 02936 lineCount(); 02937 current->name=QCString(vhdlscanYYtext); 02938 BEGIN(ParseType); 02939 } 02940 YY_BREAK 02941 case 16: 02942 /* rule 16 can match eol */ 02943 YY_RULE_SETUP 02944 #line 886 "vhdlscanner.l" 02945 { // find record 02946 lineCount(); 02947 if (isFunc) 02948 { 02949 BEGIN(Start); 02950 } 02951 02952 genPort=2; 02953 current->section=Entry::VARIABLE_SEC; 02954 current->spec=VhdlDocGen::RECORD; 02955 addText(vhdlscanYYtext,vhdlscanYYleng); 02956 addSubEntry(current_root,current); 02957 current = new Entry; 02958 initEntry(current); 02959 BEGIN(ParseRecord); 02960 } 02961 YY_BREAK 02962 case 17: 02963 /* rule 17 can match eol */ 02964 YY_RULE_SETUP 02965 #line 903 "vhdlscanner.l" 02966 { 02967 lineCount(); 02968 } 02969 YY_BREAK 02970 case 18: 02971 /* rule 18 can match eol */ 02972 YY_RULE_SETUP 02973 #line 907 "vhdlscanner.l" 02974 { 02975 lineCount(); 02976 genPort=0; 02977 bufferClear(); 02978 BEGIN(Start); 02979 } 02980 YY_BREAK 02981 case 19: 02982 YY_RULE_SETUP 02983 #line 914 "vhdlscanner.l" 02984 { // parse record body 02985 lineCount(); 02986 QCString zz(vhdlscanYYtext); 02987 addSignals(zz.data(),yyLineNr,current); 02988 addText(vhdlscanYYtext,vhdlscanYYleng); 02989 BEGIN(ParseRecord); 02990 } 02991 YY_BREAK 02992 case 20: 02993 /* rule 20 can match eol */ 02994 YY_RULE_SETUP 02995 #line 922 "vhdlscanner.l" 02996 { // found a new function in an architecture ? 02997 addText(vhdlscanYYtext,vhdlscanYYleng); 02998 lineCount(); 02999 QCString ttt; 03000 bool bb=TRUE; 03001 getBufText(ttt,0); 03002 if (ttt.contains("--")) 03003 { 03004 unput('-');unput('-'); 03005 VhdlDocGen::deleteCharRev(ttt,'-'); 03006 VhdlDocGen::deleteCharRev(ttt,'-'); 03007 } 03008 if (ttt.contains('(') != ttt.contains(')')) 03009 { 03010 bb=FALSE; 03011 } 03012 bool ss = VhdlDocGen::isFunctionProto(ttt); 03013 if (ss && bb) 03014 { 03015 bufferClear(); 03016 addText(ttt.data(),ttt.length()); 03017 functionEntry=0; 03018 //eFuncBody=new Entry; 03019 ::parseFunctionProto(); 03020 #if 0 03021 03022 EntryListIterator eli(*eFuncBody->children()); 03023 Entry *rrt=eli.current(); 03024 03025 if (current && (current->spec==VhdlDocGen::ARCHITECTURE && rrt)) 03026 { 03027 Entry *ep=new Entry(*rrt); 03028 addSubEntry(current,ep); 03029 isBody=1; 03030 } 03031 if (rrt) 03032 { 03033 Entry *ef=VhdlDocGen::findFunction(current_root,rrt); 03034 if (ef) 03035 { 03036 ef->bodyLine=iFuncLine; 03037 functionEntry=ef; 03038 } 03039 else if ((current->spec==VhdlDocGen::PACKAGE_BODY))//VhdlDocGen::Package_Body)) 03040 { 03041 Entry *ep=new Entry(*rrt); 03042 addSubEntry(current,ep); 03043 ep->bodyLine=iFuncLine; 03044 functionEntry = ep; 03045 } 03046 } 03047 delete eFuncBody; 03048 eFuncBody=0; 03049 #endif 03050 } 03051 bufferClear(); 03052 BEGIN(ParseType); 03053 } 03054 YY_BREAK 03055 case 21: 03056 /* rule 21 can match eol */ 03057 YY_RULE_SETUP 03058 #line 982 "vhdlscanner.l" 03059 { 03060 lineCount(); 03061 addText(vhdlscanYYtext,vhdlscanYYleng); 03062 BEGIN(ParseType); 03063 } 03064 YY_BREAK 03065 case 22: 03066 YY_RULE_SETUP 03067 #line 988 "vhdlscanner.l" 03068 { 03069 lineCount(); 03070 bropen++; 03071 addText(vhdlscanYYtext,vhdlscanYYleng); 03072 BEGIN(ParseType); 03073 } 03074 YY_BREAK 03075 case 23: 03076 YY_RULE_SETUP 03077 #line 995 "vhdlscanner.l" 03078 { 03079 lineCount(); 03080 bropen--; 03081 addText(vhdlscanYYtext,vhdlscanYYleng); 03082 if (bropen==0 && scantype==2) // process 03083 { 03084 ::parseProcessProto(); 03085 BEGIN(ParseProcess); 03086 } // if 03087 else 03088 { 03089 BEGIN(ParseType); 03090 } 03091 } 03092 YY_BREAK 03093 case 24: 03094 /* rule 24 can match eol */ 03095 YY_RULE_SETUP 03096 #line 1011 "vhdlscanner.l" 03097 { // found end of function|process 03098 lineCount(); 03099 if (functionEntry) 03100 { 03101 functionEntry->endBodyLine=yyLineNr; 03102 functionEntry=0; 03103 } 03104 03105 if (isBody==1 && isFunc==1 && bropen==0) 03106 { 03107 isFunc=0; 03108 } 03109 03110 bufferClear(); 03111 BEGIN(Start); 03112 03113 } 03114 YY_BREAK 03115 case 25: 03116 /* rule 25 can match eol */ 03117 YY_RULE_SETUP 03118 #line 1030 "vhdlscanner.l" 03119 { 03120 lineCount(); 03121 QCString tt(vhdlscanYYtext); 03122 tt=tt.lower(); 03123 VhdlDocGen::deleteAllChars(tt,';'); 03124 tt.stripWhiteSpace(); 03125 QStringList ql=QStringList::split(" ",tt,FALSE); 03126 int index=ql.findIndex(QCString("if"))+1; 03127 index+=ql.findIndex(QCString("case"))+1; 03128 index+=ql.findIndex(QCString("loop"))+1; 03129 index+=ql.findIndex(QCString("generate"))+1; 03130 bufferClear(); 03131 if (functionEntry && index==0) 03132 { 03133 functionEntry->endBodyLine=yyLineNr; 03134 functionEntry=0; 03135 isFunc=0; 03136 BEGIN(Start); 03137 } 03138 else if (index==0) 03139 { 03140 BEGIN(Start); 03141 } 03142 else 03143 { 03144 BEGIN(ParseType); 03145 } 03146 } 03147 YY_BREAK 03148 case 26: 03149 YY_RULE_SETUP 03150 #line 1059 "vhdlscanner.l" 03151 { 03152 lineCount(); 03153 addText(vhdlscanYYtext,vhdlscanYYleng); 03154 if (bropen==0 && !(isFunc==1 && isBody==1) ) 03155 { 03156 if (isFunc) 03157 { 03158 parseFunctionProto(); 03159 }//if 03160 else 03161 { 03162 QCString qcs; 03163 getBufText(qcs,0); 03164 qcs=qcs.stripWhiteSpace(); 03165 current->section=Entry::VARIABLE_SEC; 03166 current->type+=qcs.data(); 03167 03168 if ((current->spec==VhdlDocGen::SIGNAL || 03169 current->spec==VhdlDocGen::CONSTANT || 03170 current->spec==VhdlDocGen::TYPE || 03171 current->spec==VhdlDocGen::SUBTYPE 03172 ) && 03173 qcs.stripPrefix(",")) 03174 { 03175 QList<QCString> ql; 03176 ql.setAutoDelete(TRUE); 03177 QCString buffer; 03178 if (current->spec==VhdlDocGen::SUBTYPE || 03179 current->spec==VhdlDocGen::TYPE) 03180 { 03181 VhdlDocGen::getSigTypeName(ql,qcs.data(),buffer); 03182 } 03183 else 03184 { 03185 VhdlDocGen::getSigName(ql,qcs.data(),buffer); 03186 } 03187 QCString doc = current->doc; 03188 QCString brief = current->brief; 03189 if (ql.count()>0) 03190 { 03191 for (uint j=1;j<ql.count();j++) 03192 { 03193 Entry *ppt = new Entry; 03194 initEntry(ppt); 03195 ppt->type += ql.at(0)->data(); 03196 ppt->section = Entry::VARIABLE_SEC; 03197 ppt->spec = current->spec; 03198 ppt->name += ql.at(j)->data(); 03199 ppt->bodyLine = yyLineNr; 03200 ppt->startLine = yyLineNr; 03201 ppt->brief = brief; 03202 ppt->doc = doc; 03203 if (lastCompound) 03204 { 03205 lastCompound->addSubEntry(ppt); 03206 } 03207 else 03208 { 03209 current->addSubEntry(ppt); 03210 } 03211 } 03212 current->type=ql.at(0)->data(); 03213 ql.clear(); 03214 } 03215 } 03216 if (lastCompound) 03217 { 03218 lastCompound->addSubEntry(current); 03219 current = new Entry; 03220 initEntry(current); 03221 } 03222 else 03223 { 03224 newEntry(); 03225 } 03226 } 03227 isFunc=0; 03228 //bufferClear(); 03229 BEGIN(Start); 03230 } 03231 else 03232 { 03233 BEGIN(ParseType); 03234 } 03235 } 03236 YY_BREAK 03237 case 27: 03238 /* rule 27 can match eol */ 03239 YY_RULE_SETUP 03240 #line 1145 "vhdlscanner.l" 03241 { 03242 lineCount(); 03243 BEGIN(ParseType); 03244 } 03245 YY_BREAK 03246 case 28: 03247 /* rule 28 can match eol */ 03248 YY_RULE_SETUP 03249 #line 1150 "vhdlscanner.l" 03250 { 03251 lineCount(); 03252 addText(vhdlscanYYtext,vhdlscanYYleng); 03253 BEGIN(ParseType); 03254 } 03255 YY_BREAK 03256 case 29: 03257 YY_RULE_SETUP 03258 #line 1156 "vhdlscanner.l" 03259 { // found name of an entity/architecture/package 03260 lineCount(); 03261 QCString qcs(vhdlscanYYtext); 03262 qcs=qcs.stripWhiteSpace(); 03263 qcs=qcs.lower(); 03264 if (strcmp(qcs.data(),"body")==0) // found package body 03265 { 03266 current->spec=VhdlDocGen::PACKAGE_BODY; 03267 current->section=Entry::CLASS_SEC; 03268 current->protection=Protected; 03269 current->name+=QCString("_"); 03270 isBody=1; 03271 BEGIN(FindName); 03272 } 03273 else if (scantype==1) // found a component 03274 { 03275 QCString qq(vhdlscanYYtext); 03276 qq=qq.stripWhiteSpace(); 03277 //qq=qq.lower(); 03278 03279 current->name=qq; 03280 if (lastCompound) 03281 { 03282 if (lastCompound->spec==VhdlDocGen::PACKAGE) 03283 { 03284 if (!VhdlDocGen::foundInsertedComponent(qq,lastCompound)) 03285 { 03286 BaseInfo *bb=new BaseInfo(qq,Private,Normal); 03287 lastCompound->extends->append(bb); 03288 } 03289 } 03290 03291 lastCompound->addSubEntry(current); 03292 current = new Entry; 03293 initEntry(current); 03294 } 03295 else 03296 { 03297 newEntry(); 03298 } 03299 BEGIN(Start); 03300 } 03301 else 03302 { 03303 QCString qq(vhdlscanYYtext); 03304 qq=qq.stripWhiteSpace(); 03305 current->name=qq; 03306 newEntry(); 03307 //QCString qreal=QCString(vhdlscanYYtext); 03308 BEGIN(Start); 03309 } 03310 } 03311 YY_BREAK 03312 case 30: 03313 /* rule 30 can match eol */ 03314 YY_RULE_SETUP 03315 #line 1209 "vhdlscanner.l" 03316 { // found generic|port in entity 03317 QCString genp(vhdlscanYYleng+1); 03318 deleteSpecChars(vhdlscanYYtext,genp.data()); 03319 VhdlDocGen::deleteCharRev(genp,'('); 03320 03321 if (stricmp(genp.data(),"port" )==0) 03322 { 03323 genPort=1; 03324 } 03325 else 03326 { 03327 genPort=0; 03328 } 03329 03330 bropen=1; 03331 bufferClear(); 03332 lineCount(); 03333 BEGIN(FindSigName); 03334 } 03335 YY_BREAK 03336 case 31: 03337 YY_RULE_SETUP 03338 #line 1229 "vhdlscanner.l" 03339 { 03340 lineCount(); 03341 bropen--; 03342 addText(vhdlscanYYtext,vhdlscanYYleng); 03343 if (bropen==0) 03344 { 03345 bufferClear(); 03346 BEGIN(Start); 03347 } 03348 else 03349 { 03350 BEGIN(FindSigName); 03351 } 03352 } 03353 YY_BREAK 03354 case 32: 03355 /* rule 32 can match eol */ 03356 YY_RULE_SETUP 03357 #line 1244 "vhdlscanner.l" 03358 { // found signals in entity 03359 QCString line(vhdlscanYYtext); 03360 03361 // note that line can be something like: 03362 // "var1, var2, var3 : in std_logic_vector(8 downto 0); --! Some comment" 03363 03364 // but also 03365 // "var4 --! Some comment 03366 // );" 03367 // which marks the end of a port 03368 03369 // and also 03370 // "-- Some comment 03371 // var1 : in std_logic;" 03372 03373 //printf("--> labelid='%s'\n",line.data()); 03374 QStringList ql; 03375 QCString comment; 03376 int openCount=line.contains('('); 03377 int closeCount=line.contains(')'); 03378 int semi = line.find(';'); 03379 int pos; 03380 //printf("=> signal: line='%s'\n",line.data()); 03381 if (semi!=-1 && (pos=line.find("--"))!=-1) 03382 { 03383 int eol = line.findRev('\n'); 03384 //printf("pos=%d eol=%d\n",pos,eol); 03385 if (eol>=pos+2) 03386 { 03387 QRegExp re("\\n[ \\t]*--!"); // comment continuation 03388 comment=line.mid(pos+2,eol-pos-2); 03389 //printf("Comment: '%s'\n",comment.data()); 03390 int p,l; 03391 while ((p=re.match(comment,0,&l))!=-1) 03392 { 03393 comment.remove(p,l); 03394 } 03395 line=line.left(pos)+line.right(line.length()-eol); 03396 } 03397 else 03398 { 03399 comment=line.mid(pos+2); 03400 line=line.left(pos); 03401 } 03402 comment.stripWhiteSpace(); 03403 if (!comment.stripPrefix("!")) // not a special comment 03404 { 03405 comment.resize(0); 03406 } 03407 } 03408 else 03409 { 03410 //printf("no ; or --: pos=%d semi=%d\n",pos,semi); 03411 } 03412 03413 int diff=openCount-closeCount; 03414 if (diff<0) 03415 { 03416 VhdlDocGen::deleteCharRev(line,')'); 03417 } 03418 03419 if (scantype!=1) // not a component 03420 { 03421 addText(vhdlscanYYtext,vhdlscanYYleng); 03422 addSignals(line,yyLineNr,lastEntity,comment); 03423 } 03424 03425 lineCount(); 03426 03427 if ((bropen+openCount-closeCount)==0) 03428 { 03429 bufferClear(); 03430 BEGIN(Start); 03431 } 03432 } 03433 YY_BREAK 03434 case 33: 03435 YY_RULE_SETUP 03436 #line 1321 "vhdlscanner.l" 03437 { 03438 lineCount(); 03439 bropen++; 03440 addText(vhdlscanYYtext,vhdlscanYYleng); 03441 } 03442 YY_BREAK 03443 case 34: 03444 /* rule 34 can match eol */ 03445 YY_RULE_SETUP 03446 #line 1328 "vhdlscanner.l" 03447 { 03448 lineCount(); 03449 addText(vhdlscanYYtext,vhdlscanYYleng); 03450 //BEGIN(FindSigName); 03451 } 03452 YY_BREAK 03453 case 35: 03454 /* rule 35 can match eol */ 03455 YY_RULE_SETUP 03456 #line 1335 "vhdlscanner.l" 03457 { 03458 //printf("\n found for[%s] [%d]",vhdlscanYYtext,yyLineNr); 03459 lineCount(); 03460 } 03461 YY_BREAK 03462 case 36: 03463 YY_RULE_SETUP 03464 #line 1340 "vhdlscanner.l" 03465 { // found digit 03466 addText(vhdlscanYYtext,vhdlscanYYleng); 03467 lineCount(); 03468 } 03469 YY_BREAK 03470 /* 03471 <*>{BR}*"--!"{B}*"@}" { // end group 03472 if (current) 03473 { 03474 Entry *pg=new Entry; 03475 addSubEntry(current,pg); 03476 pg->startLine=yyLineNr; 03477 pg->name="endgroup"; 03478 } 03479 lineCount(); 03480 } 03481 03482 <*>{BR}*"--!"{B}*"@{" { // start group 03483 if (current) 03484 { 03485 Entry *pg=new Entry; 03486 addSubEntry(current,pg); 03487 pg->startLine=yyLineNr; 03488 pg->name="startgroup"; 03489 } 03490 lineCount(); 03491 } 03492 */ 03493 case 37: 03494 /* rule 37 can match eol */ 03495 YY_RULE_SETUP 03496 #line 1369 "vhdlscanner.l" 03497 { // multi line comment 03498 if (YY_START!=Comment) // Start of the comment block 03499 { 03500 iTextCounter=iCounter; 03501 startComment=yyLineNr; 03502 g_lastCommentContext=YY_START; 03503 } 03504 addText(vhdlscanYYtext,vhdlscanYYleng); 03505 lineCount(); 03506 BEGIN(Comment); 03507 } 03508 YY_BREAK 03509 case 38: 03510 YY_RULE_SETUP 03511 #line 1381 "vhdlscanner.l" 03512 { 03513 addText(vhdlscanYYtext,vhdlscanYYleng); 03514 lineCount(); 03515 } 03516 YY_BREAK 03517 case 39: 03518 /* rule 39 can match eol */ 03519 YY_RULE_SETUP 03520 #line 1386 "vhdlscanner.l" 03521 { 03522 // found end of comment block 03523 QCString qcs; 03524 getBufText(qcs,iTextCounter); 03525 VhdlDocGen::prepareComment(qcs); 03526 handleCommentBlock(qcs,FALSE); 03527 bufferClear(); 03528 unput(*vhdlscanYYtext); 03529 BEGIN(g_lastCommentContext); 03530 } 03531 YY_BREAK 03532 case 40: 03533 YY_RULE_SETUP 03534 #line 1397 "vhdlscanner.l" 03535 { // one line comment 03536 QCString qcs(vhdlscanYYtext); 03537 int j=qcs.find("--!"); 03538 qcs=qcs.right(qcs.length()-3-j); 03539 //printf("--> handleCommentBlock line %d\n",yyLineNr); 03540 handleCommentBlock(qcs,TRUE); 03541 //printf("--> end: handleCommentBlock line %d\n",yyLineNr); 03542 bufferClear(); 03543 } 03544 YY_BREAK 03545 case 41: 03546 YY_RULE_SETUP 03547 #line 1407 "vhdlscanner.l" 03548 { 03549 } 03550 YY_BREAK 03551 case 42: 03552 /* rule 42 can match eol */ 03553 YY_RULE_SETUP 03554 #line 1410 "vhdlscanner.l" 03555 { 03556 lineCount(); 03557 addText(vhdlscanYYtext,vhdlscanYYleng); 03558 // printf("\n new-line [%d]",yyLineNr); 03559 BEGIN(Start); 03560 } 03561 YY_BREAK 03562 case 43: 03563 YY_RULE_SETUP 03564 #line 1417 "vhdlscanner.l" 03565 { 03566 addText(vhdlscanYYtext,vhdlscanYYleng); 03567 lineCount(); 03568 } 03569 YY_BREAK 03570 case 44: 03571 YY_RULE_SETUP 03572 #line 1422 "vhdlscanner.l" 03573 { 03574 addText(vhdlscanYYtext,vhdlscanYYleng); 03575 lineCount(); 03576 } 03577 YY_BREAK 03578 case 45: 03579 YY_RULE_SETUP 03580 #line 1427 "vhdlscanner.l" 03581 { 03582 addText(vhdlscanYYtext,vhdlscanYYleng); 03583 lineCount(); 03584 } 03585 YY_BREAK 03586 case 46: 03587 YY_RULE_SETUP 03588 #line 1433 "vhdlscanner.l" 03589 ECHO; 03590 YY_BREAK 03591 #line 3592 "<stdout>" 03592 case YY_STATE_EOF(INITIAL): 03593 case YY_STATE_EOF(Start): 03594 case YY_STATE_EOF(Comment): 03595 case YY_STATE_EOF(FindTypeName): 03596 case YY_STATE_EOF(ParseType): 03597 case YY_STATE_EOF(ParseRecord): 03598 case YY_STATE_EOF(ParseUnits): 03599 case YY_STATE_EOF(ParseProcess): 03600 case YY_STATE_EOF(FindName): 03601 case YY_STATE_EOF(FindEntityName): 03602 case YY_STATE_EOF(FindGenPort): 03603 case YY_STATE_EOF(FindTypes): 03604 case YY_STATE_EOF(FindSigName): 03605 case YY_STATE_EOF(FindFuncName): 03606 case YY_STATE_EOF(FindBegin): 03607 yyterminate(); 03608 03609 case YY_END_OF_BUFFER: 03610 { 03611 /* Amount of text matched not including the EOB char. */ 03612 int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1; 03613 03614 /* Undo the effects of YY_DO_BEFORE_ACTION. */ 03615 *yy_cp = (yy_hold_char); 03616 YY_RESTORE_YY_MORE_OFFSET 03617 03618 if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) 03619 { 03620 /* We're scanning a new file or input source. It's 03621 * possible that this happened because the user 03622 * just pointed vhdlscanYYin at a new source and called 03623 * vhdlscanYYlex(). If so, then we have to assure 03624 * consistency between YY_CURRENT_BUFFER and our 03625 * globals. Here is the right place to do so, because 03626 * this is the first action (other than possibly a 03627 * back-up) that will match for the new input source. 03628 */ 03629 (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; 03630 YY_CURRENT_BUFFER_LVALUE->yy_input_file = vhdlscanYYin; 03631 YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; 03632 } 03633 03634 /* Note that here we test for yy_c_buf_p "<=" to the position 03635 * of the first EOB in the buffer, since yy_c_buf_p will 03636 * already have been incremented past the NUL character 03637 * (since all states make transitions on EOB to the 03638 * end-of-buffer state). Contrast this with the test 03639 * in input(). 03640 */ 03641 if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) 03642 { /* This was really a NUL. */ 03643 yy_state_type yy_next_state; 03644 03645 (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; 03646 03647 yy_current_state = yy_get_previous_state( ); 03648 03649 /* Okay, we're now positioned to make the NUL 03650 * transition. We couldn't have 03651 * yy_get_previous_state() go ahead and do it 03652 * for us because it doesn't know how to deal 03653 * with the possibility of jamming (and we don't 03654 * want to build jamming into it because then it 03655 * will run more slowly). 03656 */ 03657 03658 yy_next_state = yy_try_NUL_trans( yy_current_state ); 03659 03660 yy_bp = (yytext_ptr) + YY_MORE_ADJ; 03661 03662 if ( yy_next_state ) 03663 { 03664 /* Consume the NUL. */ 03665 yy_cp = ++(yy_c_buf_p); 03666 yy_current_state = yy_next_state; 03667 goto yy_match; 03668 } 03669 03670 else 03671 { 03672 yy_cp = (yy_c_buf_p); 03673 goto yy_find_action; 03674 } 03675 } 03676 03677 else switch ( yy_get_next_buffer( ) ) 03678 { 03679 case EOB_ACT_END_OF_FILE: 03680 { 03681 (yy_did_buffer_switch_on_eof) = 0; 03682 03683 if ( vhdlscanYYwrap( ) ) 03684 { 03685 /* Note: because we've taken care in 03686 * yy_get_next_buffer() to have set up 03687 * vhdlscanYYtext, we can now set up 03688 * yy_c_buf_p so that if some total 03689 * hoser (like flex itself) wants to 03690 * call the scanner after we return the 03691 * YY_NULL, it'll still work - another 03692 * YY_NULL will get returned. 03693 */ 03694 (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ; 03695 03696 yy_act = YY_STATE_EOF(YY_START); 03697 goto do_action; 03698 } 03699 03700 else 03701 { 03702 if ( ! (yy_did_buffer_switch_on_eof) ) 03703 YY_NEW_FILE; 03704 } 03705 break; 03706 } 03707 03708 case EOB_ACT_CONTINUE_SCAN: 03709 (yy_c_buf_p) = 03710 (yytext_ptr) + yy_amount_of_matched_text; 03711 03712 yy_current_state = yy_get_previous_state( ); 03713 03714 yy_cp = (yy_c_buf_p); 03715 yy_bp = (yytext_ptr) + YY_MORE_ADJ; 03716 goto yy_match; 03717 03718 case EOB_ACT_LAST_MATCH: 03719 (yy_c_buf_p) = 03720 &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)]; 03721 03722 yy_current_state = yy_get_previous_state( ); 03723 03724 yy_cp = (yy_c_buf_p); 03725 yy_bp = (yytext_ptr) + YY_MORE_ADJ; 03726 goto yy_find_action; 03727 } 03728 break; 03729 } 03730 03731 default: 03732 YY_FATAL_ERROR( 03733 "fatal flex scanner internal error--no action found" ); 03734 } /* end of action switch */ 03735 } /* end of scanning one token */ 03736 } /* end of vhdlscanYYlex */ 03737 03738 /* yy_get_next_buffer - try to read in a new buffer 03739 * 03740 * Returns a code representing an action: 03741 * EOB_ACT_LAST_MATCH - 03742 * EOB_ACT_CONTINUE_SCAN - continue scanning from current position 03743 * EOB_ACT_END_OF_FILE - end of file 03744 */ 03745 static int yy_get_next_buffer (void) 03746 { 03747 register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; 03748 register char *source = (yytext_ptr); 03749 register int number_to_move, i; 03750 int ret_val; 03751 03752 if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) 03753 YY_FATAL_ERROR( 03754 "fatal flex scanner internal error--end of buffer missed" ); 03755 03756 if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) 03757 { /* Don't try to fill the buffer, so this is an EOF. */ 03758 if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 ) 03759 { 03760 /* We matched a single character, the EOB, so 03761 * treat this as a final EOF. 03762 */ 03763 return EOB_ACT_END_OF_FILE; 03764 } 03765 03766 else 03767 { 03768 /* We matched some text prior to the EOB, first 03769 * process it. 03770 */ 03771 return EOB_ACT_LAST_MATCH; 03772 } 03773 } 03774 03775 /* Try to read more data. */ 03776 03777 /* First move last chars to start of buffer. */ 03778 number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1; 03779 03780 for ( i = 0; i < number_to_move; ++i ) 03781 *(dest++) = *(source++); 03782 03783 if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) 03784 /* don't do the read, it's not guaranteed to return an EOF, 03785 * just force an EOF 03786 */ 03787 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0; 03788 03789 else 03790 { 03791 int num_to_read = 03792 YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; 03793 03794 while ( num_to_read <= 0 ) 03795 { /* Not enough room in the buffer - grow it. */ 03796 03797 YY_FATAL_ERROR( 03798 "input buffer overflow, can't enlarge buffer because scanner uses REJECT" ); 03799 03800 } 03801 03802 if ( num_to_read > YY_READ_BUF_SIZE ) 03803 num_to_read = YY_READ_BUF_SIZE; 03804 03805 /* Read in more data. */ 03806 YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), 03807 (yy_n_chars), num_to_read ); 03808 03809 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); 03810 } 03811 03812 if ( (yy_n_chars) == 0 ) 03813 { 03814 if ( number_to_move == YY_MORE_ADJ ) 03815 { 03816 ret_val = EOB_ACT_END_OF_FILE; 03817 vhdlscanYYrestart(vhdlscanYYin ); 03818 } 03819 03820 else 03821 { 03822 ret_val = EOB_ACT_LAST_MATCH; 03823 YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = 03824 YY_BUFFER_EOF_PENDING; 03825 } 03826 } 03827 03828 else 03829 ret_val = EOB_ACT_CONTINUE_SCAN; 03830 03831 (yy_n_chars) += number_to_move; 03832 YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; 03833 YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; 03834 03835 (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; 03836 03837 return ret_val; 03838 } 03839 03840 /* yy_get_previous_state - get the state just before the EOB char was reached */ 03841 03842 static yy_state_type yy_get_previous_state (void) 03843 { 03844 register yy_state_type yy_current_state; 03845 register char *yy_cp; 03846 03847 yy_current_state = (yy_start); 03848 yy_current_state += YY_AT_BOL(); 03849 03850 (yy_state_ptr) = (yy_state_buf); 03851 *(yy_state_ptr)++ = yy_current_state; 03852 03853 for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp ) 03854 { 03855 register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); 03856 while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) 03857 { 03858 yy_current_state = (int) yy_def[yy_current_state]; 03859 if ( yy_current_state >= 849 ) 03860 yy_c = yy_meta[(unsigned int) yy_c]; 03861 } 03862 yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; 03863 *(yy_state_ptr)++ = yy_current_state; 03864 } 03865 03866 return yy_current_state; 03867 } 03868 03869 /* yy_try_NUL_trans - try to make a transition on the NUL character 03870 * 03871 * synopsis 03872 * next_state = yy_try_NUL_trans( current_state ); 03873 */ 03874 static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state ) 03875 { 03876 register int yy_is_jam; 03877 03878 register YY_CHAR yy_c = 1; 03879 while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) 03880 { 03881 yy_current_state = (int) yy_def[yy_current_state]; 03882 if ( yy_current_state >= 849 ) 03883 yy_c = yy_meta[(unsigned int) yy_c]; 03884 } 03885 yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; 03886 yy_is_jam = (yy_current_state == 848); 03887 if ( ! yy_is_jam ) 03888 *(yy_state_ptr)++ = yy_current_state; 03889 03890 return yy_is_jam ? 0 : yy_current_state; 03891 } 03892 03893 static void yyunput (int c, register char * yy_bp ) 03894 { 03895 register char *yy_cp; 03896 03897 yy_cp = (yy_c_buf_p); 03898 03899 /* undo effects of setting up vhdlscanYYtext */ 03900 *yy_cp = (yy_hold_char); 03901 03902 if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) 03903 { /* need to shift things up to make room */ 03904 /* +2 for EOB chars. */ 03905 register int number_to_move = (yy_n_chars) + 2; 03906 register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[ 03907 YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; 03908 register char *source = 03909 &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]; 03910 03911 while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) 03912 *--dest = *--source; 03913 03914 yy_cp += (int) (dest - source); 03915 yy_bp += (int) (dest - source); 03916 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = 03917 (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size; 03918 03919 if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) 03920 YY_FATAL_ERROR( "flex scanner push-back overflow" ); 03921 } 03922 03923 *--yy_cp = (char) c; 03924 03925 (yytext_ptr) = yy_bp; 03926 (yy_hold_char) = *yy_cp; 03927 (yy_c_buf_p) = yy_cp; 03928 } 03929 03930 #ifndef YY_NO_INPUT 03931 #ifdef __cplusplus 03932 static int yyinput (void) 03933 #else 03934 static int input (void) 03935 #endif 03936 03937 { 03938 int c; 03939 03940 *(yy_c_buf_p) = (yy_hold_char); 03941 03942 if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR ) 03943 { 03944 /* yy_c_buf_p now points to the character we want to return. 03945 * If this occurs *before* the EOB characters, then it's a 03946 * valid NUL; if not, then we've hit the end of the buffer. 03947 */ 03948 if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) 03949 /* This was really a NUL. */ 03950 *(yy_c_buf_p) = '\0'; 03951 03952 else 03953 { /* need more input */ 03954 int offset = (yy_c_buf_p) - (yytext_ptr); 03955 ++(yy_c_buf_p); 03956 03957 switch ( yy_get_next_buffer( ) ) 03958 { 03959 case EOB_ACT_LAST_MATCH: 03960 /* This happens because yy_g_n_b() 03961 * sees that we've accumulated a 03962 * token and flags that we need to 03963 * try matching the token before 03964 * proceeding. But for input(), 03965 * there's no matching to consider. 03966 * So convert the EOB_ACT_LAST_MATCH 03967 * to EOB_ACT_END_OF_FILE. 03968 */ 03969 03970 /* Reset buffer status. */ 03971 vhdlscanYYrestart(vhdlscanYYin ); 03972 03973 /*FALLTHROUGH*/ 03974 03975 case EOB_ACT_END_OF_FILE: 03976 { 03977 if ( vhdlscanYYwrap( ) ) 03978 return 0; 03979 03980 if ( ! (yy_did_buffer_switch_on_eof) ) 03981 YY_NEW_FILE; 03982 #ifdef __cplusplus 03983 return yyinput(); 03984 #else 03985 return input(); 03986 #endif 03987 } 03988 03989 case EOB_ACT_CONTINUE_SCAN: 03990 (yy_c_buf_p) = (yytext_ptr) + offset; 03991 break; 03992 } 03993 } 03994 } 03995 03996 c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */ 03997 *(yy_c_buf_p) = '\0'; /* preserve vhdlscanYYtext */ 03998 (yy_hold_char) = *++(yy_c_buf_p); 03999 04000 YY_CURRENT_BUFFER_LVALUE->yy_at_bol = (c == '\n'); 04001 04002 return c; 04003 } 04004 #endif /* ifndef YY_NO_INPUT */ 04005 04011 void vhdlscanYYrestart (FILE * input_file ) 04012 { 04013 04014 if ( ! YY_CURRENT_BUFFER ){ 04015 vhdlscanYYensure_buffer_stack (); 04016 YY_CURRENT_BUFFER_LVALUE = 04017 vhdlscanYY_create_buffer(vhdlscanYYin,YY_BUF_SIZE ); 04018 } 04019 04020 vhdlscanYY_init_buffer(YY_CURRENT_BUFFER,input_file ); 04021 vhdlscanYY_load_buffer_state( ); 04022 } 04023 04028 void vhdlscanYY_switch_to_buffer (YY_BUFFER_STATE new_buffer ) 04029 { 04030 04031 /* TODO. We should be able to replace this entire function body 04032 * with 04033 * vhdlscanYYpop_buffer_state(); 04034 * vhdlscanYYpush_buffer_state(new_buffer); 04035 */ 04036 vhdlscanYYensure_buffer_stack (); 04037 if ( YY_CURRENT_BUFFER == new_buffer ) 04038 return; 04039 04040 if ( YY_CURRENT_BUFFER ) 04041 { 04042 /* Flush out information for old buffer. */ 04043 *(yy_c_buf_p) = (yy_hold_char); 04044 YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); 04045 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); 04046 } 04047 04048 YY_CURRENT_BUFFER_LVALUE = new_buffer; 04049 vhdlscanYY_load_buffer_state( ); 04050 04051 /* We don't actually know whether we did this switch during 04052 * EOF (vhdlscanYYwrap()) processing, but the only time this flag 04053 * is looked at is after vhdlscanYYwrap() is called, so it's safe 04054 * to go ahead and always set it. 04055 */ 04056 (yy_did_buffer_switch_on_eof) = 1; 04057 } 04058 04059 static void vhdlscanYY_load_buffer_state (void) 04060 { 04061 (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; 04062 (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; 04063 vhdlscanYYin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; 04064 (yy_hold_char) = *(yy_c_buf_p); 04065 } 04066 04073 YY_BUFFER_STATE vhdlscanYY_create_buffer (FILE * file, int size ) 04074 { 04075 YY_BUFFER_STATE b; 04076 04077 b = (YY_BUFFER_STATE) vhdlscanYYalloc(sizeof( struct yy_buffer_state ) ); 04078 if ( ! b ) 04079 YY_FATAL_ERROR( "out of dynamic memory in vhdlscanYY_create_buffer()" ); 04080 04081 b->yy_buf_size = size; 04082 04083 /* yy_ch_buf has to be 2 characters longer than the size given because 04084 * we need to put in 2 end-of-buffer characters. 04085 */ 04086 b->yy_ch_buf = (char *) vhdlscanYYalloc(b->yy_buf_size + 2 ); 04087 if ( ! b->yy_ch_buf ) 04088 YY_FATAL_ERROR( "out of dynamic memory in vhdlscanYY_create_buffer()" ); 04089 04090 b->yy_is_our_buffer = 1; 04091 04092 vhdlscanYY_init_buffer(b,file ); 04093 04094 return b; 04095 } 04096 04101 void vhdlscanYY_delete_buffer (YY_BUFFER_STATE b ) 04102 { 04103 04104 if ( ! b ) 04105 return; 04106 04107 if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ 04108 YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; 04109 04110 if ( b->yy_is_our_buffer ) 04111 vhdlscanYYfree((void *) b->yy_ch_buf ); 04112 04113 vhdlscanYYfree((void *) b ); 04114 } 04115 04116 #ifndef __cplusplus 04117 extern int isatty (int ); 04118 #endif /* __cplusplus */ 04119 04120 /* Initializes or reinitializes a buffer. 04121 * This function is sometimes called more than once on the same buffer, 04122 * such as during a vhdlscanYYrestart() or at EOF. 04123 */ 04124 static void vhdlscanYY_init_buffer (YY_BUFFER_STATE b, FILE * file ) 04125 04126 { 04127 int oerrno = errno; 04128 04129 vhdlscanYY_flush_buffer(b ); 04130 04131 b->yy_input_file = file; 04132 b->yy_fill_buffer = 1; 04133 04134 /* If b is the current buffer, then vhdlscanYY_init_buffer was _probably_ 04135 * called from vhdlscanYYrestart() or through yy_get_next_buffer. 04136 * In that case, we don't want to reset the lineno or column. 04137 */ 04138 if (b != YY_CURRENT_BUFFER){ 04139 b->yy_bs_lineno = 1; 04140 b->yy_bs_column = 0; 04141 } 04142 04143 b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0; 04144 04145 errno = oerrno; 04146 } 04147 04152 void vhdlscanYY_flush_buffer (YY_BUFFER_STATE b ) 04153 { 04154 if ( ! b ) 04155 return; 04156 04157 b->yy_n_chars = 0; 04158 04159 /* We always need two end-of-buffer characters. The first causes 04160 * a transition to the end-of-buffer state. The second causes 04161 * a jam in that state. 04162 */ 04163 b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; 04164 b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; 04165 04166 b->yy_buf_pos = &b->yy_ch_buf[0]; 04167 04168 b->yy_at_bol = 1; 04169 b->yy_buffer_status = YY_BUFFER_NEW; 04170 04171 if ( b == YY_CURRENT_BUFFER ) 04172 vhdlscanYY_load_buffer_state( ); 04173 } 04174 04181 void vhdlscanYYpush_buffer_state (YY_BUFFER_STATE new_buffer ) 04182 { 04183 if (new_buffer == NULL) 04184 return; 04185 04186 vhdlscanYYensure_buffer_stack(); 04187 04188 /* This block is copied from vhdlscanYY_switch_to_buffer. */ 04189 if ( YY_CURRENT_BUFFER ) 04190 { 04191 /* Flush out information for old buffer. */ 04192 *(yy_c_buf_p) = (yy_hold_char); 04193 YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); 04194 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); 04195 } 04196 04197 /* Only push if top exists. Otherwise, replace top. */ 04198 if (YY_CURRENT_BUFFER) 04199 (yy_buffer_stack_top)++; 04200 YY_CURRENT_BUFFER_LVALUE = new_buffer; 04201 04202 /* copied from vhdlscanYY_switch_to_buffer. */ 04203 vhdlscanYY_load_buffer_state( ); 04204 (yy_did_buffer_switch_on_eof) = 1; 04205 } 04206 04211 void vhdlscanYYpop_buffer_state (void) 04212 { 04213 if (!YY_CURRENT_BUFFER) 04214 return; 04215 04216 vhdlscanYY_delete_buffer(YY_CURRENT_BUFFER ); 04217 YY_CURRENT_BUFFER_LVALUE = NULL; 04218 if ((yy_buffer_stack_top) > 0) 04219 --(yy_buffer_stack_top); 04220 04221 if (YY_CURRENT_BUFFER) { 04222 vhdlscanYY_load_buffer_state( ); 04223 (yy_did_buffer_switch_on_eof) = 1; 04224 } 04225 } 04226 04227 /* Allocates the stack if it does not exist. 04228 * Guarantees space for at least one push. 04229 */ 04230 static void vhdlscanYYensure_buffer_stack (void) 04231 { 04232 int num_to_alloc; 04233 04234 if (!(yy_buffer_stack)) { 04235 04236 /* First allocation is just for 2 elements, since we don't know if this 04237 * scanner will even need a stack. We use 2 instead of 1 to avoid an 04238 * immediate realloc on the next call. 04239 */ 04240 num_to_alloc = 1; 04241 (yy_buffer_stack) = (struct yy_buffer_state**)vhdlscanYYalloc 04242 (num_to_alloc * sizeof(struct yy_buffer_state*) 04243 ); 04244 04245 memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); 04246 04247 (yy_buffer_stack_max) = num_to_alloc; 04248 (yy_buffer_stack_top) = 0; 04249 return; 04250 } 04251 04252 if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){ 04253 04254 /* Increase the buffer to prepare for a possible push. */ 04255 int grow_size = 8 /* arbitrary grow size */; 04256 04257 num_to_alloc = (yy_buffer_stack_max) + grow_size; 04258 (yy_buffer_stack) = (struct yy_buffer_state**)vhdlscanYYrealloc 04259 ((yy_buffer_stack), 04260 num_to_alloc * sizeof(struct yy_buffer_state*) 04261 ); 04262 04263 /* zero only the new slots.*/ 04264 memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); 04265 (yy_buffer_stack_max) = num_to_alloc; 04266 } 04267 } 04268 04275 YY_BUFFER_STATE vhdlscanYY_scan_buffer (char * base, yy_size_t size ) 04276 { 04277 YY_BUFFER_STATE b; 04278 04279 if ( size < 2 || 04280 base[size-2] != YY_END_OF_BUFFER_CHAR || 04281 base[size-1] != YY_END_OF_BUFFER_CHAR ) 04282 /* They forgot to leave room for the EOB's. */ 04283 return 0; 04284 04285 b = (YY_BUFFER_STATE) vhdlscanYYalloc(sizeof( struct yy_buffer_state ) ); 04286 if ( ! b ) 04287 YY_FATAL_ERROR( "out of dynamic memory in vhdlscanYY_scan_buffer()" ); 04288 04289 b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */ 04290 b->yy_buf_pos = b->yy_ch_buf = base; 04291 b->yy_is_our_buffer = 0; 04292 b->yy_input_file = 0; 04293 b->yy_n_chars = b->yy_buf_size; 04294 b->yy_is_interactive = 0; 04295 b->yy_at_bol = 1; 04296 b->yy_fill_buffer = 0; 04297 b->yy_buffer_status = YY_BUFFER_NEW; 04298 04299 vhdlscanYY_switch_to_buffer(b ); 04300 04301 return b; 04302 } 04303 04312 YY_BUFFER_STATE vhdlscanYY_scan_string (yyconst char * yystr ) 04313 { 04314 04315 return vhdlscanYY_scan_bytes(yystr,strlen(yystr) ); 04316 } 04317 04325 YY_BUFFER_STATE vhdlscanYY_scan_bytes (yyconst char * yybytes, int _yybytes_len ) 04326 { 04327 YY_BUFFER_STATE b; 04328 char *buf; 04329 yy_size_t n; 04330 int i; 04331 04332 /* Get memory for full buffer, including space for trailing EOB's. */ 04333 n = _yybytes_len + 2; 04334 buf = (char *) vhdlscanYYalloc(n ); 04335 if ( ! buf ) 04336 YY_FATAL_ERROR( "out of dynamic memory in vhdlscanYY_scan_bytes()" ); 04337 04338 for ( i = 0; i < _yybytes_len; ++i ) 04339 buf[i] = yybytes[i]; 04340 04341 buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; 04342 04343 b = vhdlscanYY_scan_buffer(buf,n ); 04344 if ( ! b ) 04345 YY_FATAL_ERROR( "bad buffer in vhdlscanYY_scan_bytes()" ); 04346 04347 /* It's okay to grow etc. this buffer, and we should throw it 04348 * away when we're done. 04349 */ 04350 b->yy_is_our_buffer = 1; 04351 04352 return b; 04353 } 04354 04355 #ifndef YY_EXIT_FAILURE 04356 #define YY_EXIT_FAILURE 2 04357 #endif 04358 04359 static void yy_fatal_error (yyconst char* msg ) 04360 { 04361 (void) fprintf( stderr, "%s\n", msg ); 04362 exit( YY_EXIT_FAILURE ); 04363 } 04364 04365 /* Redefine yyless() so it works in section 3 code. */ 04366 04367 #undef yyless 04368 #define yyless(n) \ 04369 do \ 04370 { \ 04371 /* Undo effects of setting up vhdlscanYYtext. */ \ 04372 int yyless_macro_arg = (n); \ 04373 YY_LESS_LINENO(yyless_macro_arg);\ 04374 vhdlscanYYtext[vhdlscanYYleng] = (yy_hold_char); \ 04375 (yy_c_buf_p) = vhdlscanYYtext + yyless_macro_arg; \ 04376 (yy_hold_char) = *(yy_c_buf_p); \ 04377 *(yy_c_buf_p) = '\0'; \ 04378 vhdlscanYYleng = yyless_macro_arg; \ 04379 } \ 04380 while ( 0 ) 04381 04382 /* Accessor methods (get/set functions) to struct members. */ 04383 04387 int vhdlscanYYget_lineno (void) 04388 { 04389 04390 return vhdlscanYYlineno; 04391 } 04392 04396 FILE *vhdlscanYYget_in (void) 04397 { 04398 return vhdlscanYYin; 04399 } 04400 04404 FILE *vhdlscanYYget_out (void) 04405 { 04406 return vhdlscanYYout; 04407 } 04408 04412 int vhdlscanYYget_leng (void) 04413 { 04414 return vhdlscanYYleng; 04415 } 04416 04421 char *vhdlscanYYget_text (void) 04422 { 04423 return vhdlscanYYtext; 04424 } 04425 04430 void vhdlscanYYset_lineno (int line_number ) 04431 { 04432 04433 vhdlscanYYlineno = line_number; 04434 } 04435 04442 void vhdlscanYYset_in (FILE * in_str ) 04443 { 04444 vhdlscanYYin = in_str ; 04445 } 04446 04447 void vhdlscanYYset_out (FILE * out_str ) 04448 { 04449 vhdlscanYYout = out_str ; 04450 } 04451 04452 int vhdlscanYYget_debug (void) 04453 { 04454 return vhdlscanYY_flex_debug; 04455 } 04456 04457 void vhdlscanYYset_debug (int bdebug ) 04458 { 04459 vhdlscanYY_flex_debug = bdebug ; 04460 } 04461 04462 static int yy_init_globals (void) 04463 { 04464 /* Initialization is the same as for the non-reentrant scanner. 04465 * This function is called from vhdlscanYYlex_destroy(), so don't allocate here. 04466 */ 04467 04468 (yy_buffer_stack) = 0; 04469 (yy_buffer_stack_top) = 0; 04470 (yy_buffer_stack_max) = 0; 04471 (yy_c_buf_p) = (char *) 0; 04472 (yy_init) = 0; 04473 (yy_start) = 0; 04474 04475 (yy_state_buf) = 0; 04476 (yy_state_ptr) = 0; 04477 (yy_full_match) = 0; 04478 (yy_lp) = 0; 04479 04480 /* Defined in main.c */ 04481 #ifdef YY_STDINIT 04482 vhdlscanYYin = stdin; 04483 vhdlscanYYout = stdout; 04484 #else 04485 vhdlscanYYin = (FILE *) 0; 04486 vhdlscanYYout = (FILE *) 0; 04487 #endif 04488 04489 /* For future reference: Set errno on error, since we are called by 04490 * vhdlscanYYlex_init() 04491 */ 04492 return 0; 04493 } 04494 04495 /* vhdlscanYYlex_destroy is for both reentrant and non-reentrant scanners. */ 04496 int vhdlscanYYlex_destroy (void) 04497 { 04498 04499 /* Pop the buffer stack, destroying each element. */ 04500 while(YY_CURRENT_BUFFER){ 04501 vhdlscanYY_delete_buffer(YY_CURRENT_BUFFER ); 04502 YY_CURRENT_BUFFER_LVALUE = NULL; 04503 vhdlscanYYpop_buffer_state(); 04504 } 04505 04506 /* Destroy the stack itself. */ 04507 vhdlscanYYfree((yy_buffer_stack) ); 04508 (yy_buffer_stack) = NULL; 04509 04510 vhdlscanYYfree ( (yy_state_buf) ); 04511 (yy_state_buf) = NULL; 04512 04513 /* Reset the globals. This is important in a non-reentrant scanner so the next time 04514 * vhdlscanYYlex() is called, initialization will occur. */ 04515 yy_init_globals( ); 04516 04517 return 0; 04518 } 04519 04520 /* 04521 * Internal utility routines. 04522 */ 04523 04524 #ifndef yytext_ptr 04525 static void yy_flex_strncpy (char* s1, yyconst char * s2, int n ) 04526 { 04527 register int i; 04528 for ( i = 0; i < n; ++i ) 04529 s1[i] = s2[i]; 04530 } 04531 #endif 04532 04533 #ifdef YY_NEED_STRLEN 04534 static int yy_flex_strlen (yyconst char * s ) 04535 { 04536 register int n; 04537 for ( n = 0; s[n]; ++n ) 04538 ; 04539 04540 return n; 04541 } 04542 #endif 04543 04544 void *vhdlscanYYalloc (yy_size_t size ) 04545 { 04546 return (void *) malloc( size ); 04547 } 04548 04549 void *vhdlscanYYrealloc (void * ptr, yy_size_t size ) 04550 { 04551 /* The cast to (char *) in the following accommodates both 04552 * implementations that use char* generic pointers, and those 04553 * that use void* generic pointers. It works with the latter 04554 * because both ANSI C and C++ allow castless assignment from 04555 * any pointer type to void*, and deal with argument conversions 04556 * as though doing an assignment. 04557 */ 04558 return (void *) realloc( (char *) ptr, size ); 04559 } 04560 04561 void vhdlscanYYfree (void * ptr ) 04562 { 04563 free( (char *) ptr ); /* see vhdlscanYYrealloc() for (char *) cast */ 04564 } 04565 04566 #define YYTABLES_NAME "yytables" 04567 04568 #line 1433 "vhdlscanner.l" 04569 04570 04571 04572 static void initEntry(Entry *e) 04573 { 04574 e->fileName = yyFileName; 04575 initGroupInfo(e); 04576 } 04577 04578 static void newEntry() 04579 { 04580 current_root->addSubEntry(current); 04581 previous = current; 04582 current = new Entry ; 04583 initEntry(current); 04584 } 04585 04586 static void handleCommentBlock(const QCString &doc,bool brief) 04587 { 04588 int position=0; 04589 bool needsEntry=FALSE; 04590 Protection protection=Public; 04591 //printf("parseCommentBlock %p [%s]\n",current,doc.data()); 04592 while (parseCommentBlock( 04593 g_thisParser, 04594 current, 04595 doc, // text 04596 yyFileName, // file 04597 brief ? current->briefLine : current->docLine, // line of block start 04598 brief, 04599 docBlockAutoBrief, 04600 FALSE, 04601 protection, 04602 position, 04603 needsEntry 04604 ) 04605 ) 04606 { 04607 //printf("parseCommentBlock position=%d [%s]\n",position,doc.data()+position); 04608 if (needsEntry) newEntry(); 04609 } 04610 if (needsEntry) 04611 { 04612 newEntry(); 04613 } 04614 04615 if (docBlockTerm) 04616 { 04617 unput(docBlockTerm); 04618 docBlockTerm=0; 04619 } 04620 } 04621 04622 #if 0 04623 04626 static void mergeGrouping(const Entry* ce,int) 04627 { 04628 EntryListIterator eli(*ce->children()); 04629 Entry *rt; 04630 for (;(rt=eli.current());++eli) 04631 { 04632 if (rt->section==Entry::GROUPDOC_SEC) 04633 { 04634 if (openGroups) 04635 { 04636 QCString tt=(QCString)qrl.last(); 04637 if (!tt.isEmpty()) 04638 { 04639 rt->groups->append(new Grouping(tt.data(),Grouping::GROUPING_LOWEST)); 04640 } 04641 } 04642 qrl.append(rt->name); 04643 } 04644 04645 if ((strcmp(rt->name.data(),"endgroup")==0) && !qrl.isEmpty()) 04646 { 04647 qrl.remove((QCString)qrl.last()); 04648 openGroups--; 04649 } 04650 04651 if ((strcmp(rt->name.data(),"startgroup")==0)) 04652 { 04653 openGroups++; 04654 } 04655 04656 if (rt->section!=Entry::GROUPDOC_SEC && openGroups && !qrl.isEmpty()) 04657 { 04658 rt->groups->append(new Grouping(qrl.last().data(),Grouping::GROUPING_LOWEST)); 04659 } 04660 04661 mergeGrouping(rt,openGroups); 04662 } 04663 } 04664 #endif 04665 04666 /* 04667 * adds the library|use statements to the next class (entity|package|architecture|package body 04668 * library ieee 04669 * entity xxx 04670 * ..... 04671 * library 04672 * package 04673 * enity zzz 04674 * ..... 04675 * and so on.. 04676 */ 04677 04678 void mapLibPackage(const Entry* ce) 04679 { 04680 while (TRUE) 04681 { 04682 bool found = FALSE; 04683 Entry *rt=0; 04684 //const QList<Entry> *epp=ce->children(); 04685 EntryListIterator eli(*ce->children()); 04686 EntryListIterator eli1=eli; 04687 for (;(rt=eli.current()),eli1=eli;++eli) 04688 { 04689 if (rt->spec==VhdlDocGen::LIBRARY || rt->spec==VhdlDocGen::USE) 04690 // top level library or use statement 04691 { 04692 Entry *temp=0; 04693 for (;(temp=eli1.current());++eli1) // find next entity 04694 { 04695 if (temp->spec==VhdlDocGen::ENTITY || temp->spec==VhdlDocGen::PACKAGE || temp->spec==VhdlDocGen::ARCHITECTURE || temp->spec==VhdlDocGen::PACKAGE_BODY) 04696 { 04697 Entry *ee=new Entry(*rt); //append a copy to entries sublist 04698 temp->addSubEntry(ee); 04699 found=TRUE; 04700 rt->spec=-1; //nullify entry 04701 rt->section=0; 04702 break; 04703 } 04704 }//for 04705 }//if 04706 }//for 04707 if (!found) // nothing left to do 04708 { 04709 return; 04710 } 04711 }//while 04712 }//MapLib 04713 04714 #if 0 04715 04718 void mergeBrief(const Entry* ce) 04719 { 04720 EntryListIterator eli(*ce->children()); 04721 Entry *rt; 04722 for (;(rt=eli.current());++eli) 04723 { 04724 04725 if (found && (!eMerge.brief.isEmpty() || !eMerge.doc.isEmpty())) 04726 { 04727 rt->doc+=eMerge.doc.data(); 04728 rt->docLine=eMerge.docLine; 04729 rt->brief+=eMerge.brief.data(); 04730 rt->briefLine=eMerge.briefLine; 04731 found=FALSE; 04732 } 04733 04734 if ((strcmp(rt->name.data(),"string")==0)) 04735 { 04736 eMerge.reset(); 04737 eMerge.doc+=rt->doc.data(); 04738 eMerge.docLine=rt->docLine; 04739 eMerge.brief+=rt->brief.data(); 04740 eMerge.briefLine=rt->briefLine; 04741 04742 found=TRUE; 04743 } 04744 MergeBrief(rt); 04745 } 04746 } 04747 #endif 04748 04749 04750 04751 void vhdlscanFreeScanner() 04752 { 04753 #if defined(YY_FLEX_SUBMINOR_VERSION) 04754 if (g_lexInit) 04755 { 04756 vhdlscanYYlex_destroy(); 04757 } 04758 04759 if (g_buf) 04760 { 04761 free(g_buf); 04762 } 04763 04764 g_buf=0; 04765 #endif 04766 04767 } 04768 04769 void VHDLLanguageScanner::parseInput(const char *fileName,const char *fileBuf,Entry *root) 04770 { 04771 inputFile.setName(fileName); 04772 //uint jfile=inputFile.size(); 04773 ::parserInit(); 04774 yyFileName=QCString(fileName); 04775 groupEnterFile(fileName,yyLineNr); 04776 g_thisParser = this; 04777 g_inputFromFile = FALSE; 04778 inputPosition = 0; 04779 assert(root!=0); 04780 inputString=fileBuf; 04781 current_root = root; 04782 global_root = root; 04783 current=new Entry; 04784 initEntry(current); 04785 //current_root->name=QCString("XXX"); // dummy name for root 04786 if (!inputFile.open(IO_ReadOnly)) 04787 { 04788 err("\n\n could not open file: %s !!\n\n",yyFileName.data()); 04789 return ; 04790 } 04791 04792 if (g_lexInit) 04793 { 04794 vhdlscanYYrestart(vhdlscanYYin); 04795 unput(' '); 04796 BEGIN(Start); 04797 } 04798 vhdlscanYYlex(); 04799 g_lexInit=TRUE; 04800 04801 free(g_buf); 04802 g_buf=0; 04803 04804 delete current; 04805 current=0; 04806 04807 groupLeaveFile(yyFileName,yyLineNr); 04808 04809 //mergeBrief(current_root); 04810 //mergeGrouping(current_root,0); 04811 mapLibPackage(current_root); 04812 } 04813 04814 04815 void VHDLLanguageScanner::parsePrototype(const char *text) 04816 { 04817 // will be called when a \fn command is found in a comment block 04818 04819 QCString ss,ret; 04820 bool sem=FALSE; 04821 bool func=FALSE; 04822 QList<Argument> qs; 04823 qs.setAutoDelete(TRUE); 04824 VhdlDocGen::parseFuncProto(text,qs,ss,ret,TRUE); 04825 int count=qs.count(); 04826 if (stricmp(ret.data(),"function")==0) 04827 { 04828 func=TRUE; 04829 } 04830 if (count<1 && !func) 04831 { 04832 return; 04833 } 04834 Entry *pp = new Entry; 04835 initEntry(pp); 04836 pp->name=ss.stripWhiteSpace(); 04837 pp->args+='('; 04838 for (int j=0;j<count;j++) 04839 { 04840 if (sem) 04841 { 04842 pp->args+=','; 04843 } 04844 04845 Argument *ars=(Argument*)(qs.at(j)); 04846 Argument *arg=new Argument; 04847 arg->attrib = ars->attrib; 04848 arg->name = ars->name; 04849 arg->type = ars->type; 04850 pp->args+=ars->name.data(); 04851 pp->args+=" "; 04852 pp->args+=ars->type.data(); 04853 pp->argList->append(arg); 04854 sem=TRUE; 04855 } 04856 pp->args+=')'; 04857 04858 if (!ret.isEmpty()) 04859 pp->spec=VhdlDocGen::FUNCTION; 04860 else 04861 pp->spec=VhdlDocGen::PROCEDURE; 04862 04863 if (pp->section == Entry::MEMBERDOC_SEC && pp->args.isEmpty()) 04864 pp->section = Entry::VARIABLEDOC_SEC; 04865 04866 pp->type=ret; 04867 current_root->addSubEntry(pp); 04868 } 04869 04870 void VHDLLanguageScanner::parseCode(CodeOutputInterface &codeOutIntf, 04871 const char *scopeName, 04872 const QCString &input, 04873 bool isExampleBlock, 04874 const char *exampleName, 04875 FileDef *fileDef, 04876 int startLine, 04877 int endLine, 04878 bool inlineFragment, 04879 MemberDef *memberDef 04880 ) 04881 { 04882 ::parseVhdlCode(codeOutIntf,scopeName,input,isExampleBlock,exampleName,fileDef,startLine,endLine,inlineFragment,memberDef); 04883 } 04884 04885