vhdlscanner.cpp

Go to the documentation of this file.
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 



Generated on Mon Mar 31 10:58:50 2008 by  doxygen 1.5.1