fortranscanner.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 fscanYYrestart(fscanYYin  )
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 fscanYYleng;
00155 
00156 extern FILE *fscanYYin, *fscanYYout;
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 fscanYYtext. */ \
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 fscanYYtext 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 fscanYYrestart()), so that the user can continue scanning by
00248          * just pointing fscanYYin 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 fscanYYtext is formed. */
00276 static char yy_hold_char;
00277 static int yy_n_chars;          /* number of characters read into yy_ch_buf */
00278 int fscanYYleng;
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 fscanYYwrap()'s to do buffer switches
00286  * instead of setting up a fresh fscanYYin.  A bit of a hack ...
00287  */
00288 static int yy_did_buffer_switch_on_eof;
00289 
00290 void fscanYYrestart (FILE *input_file  );
00291 void fscanYY_switch_to_buffer (YY_BUFFER_STATE new_buffer  );
00292 YY_BUFFER_STATE fscanYY_create_buffer (FILE *file,int size  );
00293 void fscanYY_delete_buffer (YY_BUFFER_STATE b  );
00294 void fscanYY_flush_buffer (YY_BUFFER_STATE b  );
00295 void fscanYYpush_buffer_state (YY_BUFFER_STATE new_buffer  );
00296 void fscanYYpop_buffer_state (void );
00297 
00298 static void fscanYYensure_buffer_stack (void );
00299 static void fscanYY_load_buffer_state (void );
00300 static void fscanYY_init_buffer (YY_BUFFER_STATE b,FILE *file  );
00301 
00302 #define YY_FLUSH_BUFFER fscanYY_flush_buffer(YY_CURRENT_BUFFER )
00303 
00304 YY_BUFFER_STATE fscanYY_scan_buffer (char *base,yy_size_t size  );
00305 YY_BUFFER_STATE fscanYY_scan_string (yyconst char *yy_str  );
00306 YY_BUFFER_STATE fscanYY_scan_bytes (yyconst char *bytes,int len  );
00307 
00308 void *fscanYYalloc (yy_size_t  );
00309 void *fscanYYrealloc (void *,yy_size_t  );
00310 void fscanYYfree (void *  );
00311 
00312 #define yy_new_buffer fscanYY_create_buffer
00313 
00314 #define yy_set_interactive(is_interactive) \
00315         { \
00316         if ( ! YY_CURRENT_BUFFER ){ \
00317         fscanYYensure_buffer_stack (); \
00318                 YY_CURRENT_BUFFER_LVALUE =    \
00319             fscanYY_create_buffer(fscanYYin,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         fscanYYensure_buffer_stack (); \
00328                 YY_CURRENT_BUFFER_LVALUE =    \
00329             fscanYY_create_buffer(fscanYYin,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 fscanYYwrap(n) 1
00339 #define YY_SKIP_YYWRAP
00340 
00341 typedef unsigned char YY_CHAR;
00342 
00343 FILE *fscanYYin = (FILE *) 0, *fscanYYout = (FILE *) 0;
00344 
00345 typedef int yy_state_type;
00346 
00347 extern int fscanYYlineno;
00348 
00349 int fscanYYlineno = 1;
00350 
00351 extern char *fscanYYtext;
00352 #define yytext_ptr fscanYYtext
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 fscanYYtext.
00361  */
00362 #define YY_DO_BEFORE_ACTION \
00363         (yytext_ptr) = yy_bp; \
00364         fscanYYleng = (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 70
00370 #define YY_END_OF_BUFFER 71
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[1444] =
00379     {   0,
00380        57,   57,   39,   39,   43,   43,   65,   65,   63,   63,
00381        71,   69,   70,   68,   70,   69,   70,    6,   69,   70,
00382        69,   70,   69,   70,   57,   69,   70,   58,   69,   70,
00383        69,   70,   60,   68,   70,   69,   70,   69,   70,   69,
00384        70,   37,   69,   70,   37,   69,   70,   37,   69,   70,
00385        37,   69,   70,   37,   69,   70,   37,   69,   70,   37,
00386        69,   70,   37,   69,   70,   37,   69,   70,   37,   69,
00387        70,   37,   69,   70,   37,   69,   70,   37,   69,   70,
00388        37,   69,   70,   69,   70,   34,   37,   69,   70,   34,
00389        37,   69,   70,   34,   37,   69,   70,   34,   37,   69,
00390 
00391        70,   34,   37,   69,   70,   34,   37,   69,   70,   34,
00392        37,   69,   70,   34,   37,   69,   70,   34,   37,   69,
00393        70,   34,   37,   69,   70,   34,   37,   69,   70,   34,
00394        37,   69,   70,   34,   37,   69,   70,   34,   37,   69,
00395        70,   37,   69,   70,   37,   69,   70,   37,   69,   70,
00396        37,   69,   70,   37,   69,   70,   34,   37,   69,   70,
00397        34,   37,   69,   70,   34,   37,   69,   70,   34,   37,
00398        69,   70,   34,   37,   69,   70,   25,   69,   70,   37,
00399        69,   70,   34,   37,   69,   70,   42,   69,   70,   39,
00400        42,   69,   70,   42,   69,   70,    6,   42,   69,   70,
00401 
00402        42,   69,   70,   38,   42,   69,   70,   42,   69,   70,
00403        42,   69,   70,   42,   69,   70,   42,   69,   70,   42,
00404        69,   70,   42,   69,   70,   42,   69,   70,   42,   69,
00405        70,   42,   69,   70,   42,   69,   70,   43,   69,   70,
00406        48,   68,   70,   69,   70,   44,   69,   70,   69,   70,
00407        46,   69,   70,   47,   69,   70,   54,   69,   70,   54,
00408        69,   70,   53,   68,   70,   53,   54,   69,   70,    6,
00409        54,   69,   70,   54,   69,   70,   49,   54,   69,   70,
00410        52,   54,   69,   70,   54,   69,   70,   51,   69,   70,
00411        51,   69,   70,    6,   51,   69,   70,   51,   69,   70,
00412 
00413        50,   51,   69,   70,   51,   69,   70,   30,   69,   70,
00414        30,   69,   70,   37,   69,   70,   37,   69,   70,   37,
00415        69,   70,   37,   69,   70,   37,   69,   70,   37,   69,
00416        70,   37,   69,   70,   37,   69,   70,   69,   70,   34,
00417        37,   69,   70,   34,   37,   69,   70,   34,   37,   69,
00418        70,   34,   37,   69,   70,   34,   37,   69,   70,   34,
00419        37,   69,   70,   34,   37,   69,   70,   34,   37,   69,
00420        70,   22,   69,   70,   22,   69,   70,   22,   69,   70,
00421         6,   22,   69,   70,   22,   69,   70,   22,   69,   70,
00422        22,   69,   70,   22,   69,   70,   22,   69,   70,   22,
00423 
00424        69,   70,   22,   69,   70,   22,   69,   70,   22,   69,
00425        70,   22,   69,   70,   22,   69,   70,   22,   69,   70,
00426         9,   69,   70,    8,   68,   70,    9,   69,   70,    6,
00427         9,   69,   70,    9,   69,   70,    9,   69,   70,    5,
00428        69,   70,    5,   69,   70,    4,    5,    6,   69,   70,
00429         5,   69,   70,    5,   69,   70,   16,   68,   70,   11,
00430        69,   70,   69,   70,   69,   70,   15,   69,   70,   14,
00431        69,   70,   21,   68,   70,   20,   69,   70,   65,   69,
00432        70,   67,   68,   70,   65,   69,   70,    6,   65,   69,
00433        70,   65,   69,   70,   65,   69,   70,   63,   69,   70,
00434 
00435        63,   69,   70,    6,   63,   69,   70,   63,   69,   70,
00436        63,   69,   70,    7,    1,    3,    2,   57,   58,   58,
00437        58,   60,   59,   64,   37,   37,   37,   37,   37,   37,
00438        37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
00439        37,   37,   37,   37,   37,   37,   37,   37,   34,   34,
00440        34,   34,   34,   37,   34,   37,   34,   37,   34,   37,
00441        34,   37,   34,   37,   34,   37,   34,   37,   34,   37,
00442        34,   37,   34,   37,   34,   37,   34,   37,   34,   37,
00443        34,   37,   34,   37,   34,   37,   34,   37,   34,   37,
00444        34,   37,   34,   37,   34,   37,   34,   37,   34,   37,
00445 
00446        37,   37,   37,   37,   37,   34,   37,   34,   37,   34,
00447        37,   34,   37,   34,   37,   25,   25,   25,   37,   37,
00448        34,   37,   34,   37,   39,   38,   38,   41,   43,   46,
00449        47,   62,   44,   44,   44,   45,   46,   52,   52,   30,
00450        30,   30,   30,   30,   37,   37,   37,   37,   37,   37,
00451        37,   37,   34,   37,   34,   37,   34,   37,   34,   37,
00452        34,   37,   34,   37,   34,   37,   34,   37,    8,    1,
00453         8,   11,   12,   11,   11,   14,   15,   15,   15,   14,
00454        20,   20,   20,   65,    7,   65,   65,    3,   65,    2,
00455        65,   63,    7,   63,   63,    3,   63,    2,   63,   37,
00456 
00457        37,   37,   37,   37,   32,   37,   37,   37,   37,   37,
00458        37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
00459        37,   37,   34,   34,   34,   34,   34,   34,   34,   37,
00460        34,   37,   34,   37,   34,   37,   34,   37,   32,   34,
00461        37,   34,   37,   34,   37,   34,   37,   34,   37,   34,
00462        37,   34,   37,   34,   37,   34,   37,   34,   37,   34,
00463        37,   34,   37,   34,   37,   34,   37,   34,   37,   34,
00464        37,   34,   37,   24,   37,   37,   37,   37,   24,   34,
00465        37,   34,   37,   34,   37,   34,   37,   37,   37,   34,
00466        37,   34,   37,   30,   30,   37,   37,   37,   37,   37,
00467 
00468        37,   37,   37,   34,   37,   34,   37,   34,   37,   34,
00469        37,   34,   37,   34,   37,   34,   37,   34,   37,   18,
00470        66,   66,   37,   37,   37,   37,   37,   32,   32,   32,
00471        37,   32,   37,   32,   37,   37,   37,   37,   37,   37,
00472        37,   37,   37,   37,   37,   37,16439,   37,   37,16419,
00473     16420,   37,   37,   37,   10,   34,   34,   34,   34,   37,
00474        34,   37,   34,   37,   34,   37,   34,   37,   32,   32,
00475        34,   37,   32,   32,   34,   37,   32,   34,   37,   34,
00476        37,   34,   37,   34,   37,   34,   37,   34,   37,   34,
00477        37,   34,   37,   34,   37,   34,   37,   34,   37,   34,
00478 
00479        37,16439,   34,   37,   34,   37,16419,16420,   34,   37,
00480        34,   37,   34,   37,   10,   24,   24,   24,   37,   24,
00481        37,   24,   37,   37,   37,   37,   24,   24,   34,   37,
00482        24,   24,   34,   37,   24,   34,   37,   34,   37,   34,
00483        37,   34,   37,   37,   37,   34,   37,   34,   37,   40,
00484        30,   30,   37,   37,   37,   37,   37,   37,   37,   34,
00485        37,   34,   37,   34,   37,   34,   37,   34,   37,   34,
00486        37,   34,   37,   18,   18,16439,   37,   37,   37,   37,
00487        37,   32,   32,   37,   37,   37,   37,   37,   37,   37,
00488        37,   37,   37,   37,   33,16439,   33,   37,   37,   37,
00489 
00490        37,   37,   34,   34,   34,   34,   37,   34,   37,   34,
00491        37,   34,   37,   34,   37,   32,   32,   32,   34,   34,
00492        37,   34,   37,   34,   37,   34,   37,   34,   37,   34,
00493        37,   34,   37,   34,   37,   34,   37,   34,   37,   34,
00494        37,   34,   37,   33,16439,   34,   37,   34,   37,   34,
00495        37,   34,   37,   34,   37,   24,   24,   37,   37,   28,
00496        24,   24,   24,   34,   34,   37,   34,   37,   28,   37,
00497        37,   34,   37,   34,   37,   30,   30,   37,   37,   37,
00498        37,   37,   33,   34,   37,   34,   37,   34,   37,   34,
00499        37,   34,   37,   33,   18,16439,   13,   37,   37,   37,
00500 
00501        37,   37,   32,   32,   37,   37,   37,   37,   37,   37,
00502        37,   37,   37,   37,   37,16419,16420,16439,16439,16439,
00503        37,   37,   37, 8227, 8228,   37,   34,   34,   34,   34,
00504        37,   34,   37,   34,   37,   34,   37,   34,   37,   34,
00505        37,   34,   37,   34,   37,   34,   37,   34,   37,   34,
00506        37,   34,   37,   34,   37,   34,   37,   34,   37,   34,
00507        37,   34,   37,16419,16420,16439,   34,16439,   34,   37,
00508        34,   37,   34,   37,   34,   37,   24,   24,   23,   37,
00509        37,   23,   34,   37,   34,   37,   37,   37,16419,16420,
00510        34,   37,   34,   37,16419,16420,   30,   29,   30,   37,
00511 
00512        37,   37,   37,   37,   34,   37,   34,   37,   34,   37,
00513        34,   37,   34,   37,   34,   18,16439,16439,   37,   37,
00514        37,   32,   32,   37,   37,   37,   37,   37,   33,16439,
00515        37,   37, 8227, 8227,   37,   34,   34,   34,   34,   37,
00516        34,   37,   34,   37,   34,   37,   34,   37,   34,   37,
00517        34,   37,   34,   37,   34,   37,   34,   37,   34,   37,
00518        34,   37,   24,   24,   37,   34,   37,   37,16419,16420,
00519        27,   34,   37,16419,16420,   37,   34,   37,   18,16439,
00520        37,   37,   37,   32,   32,   37,   37,   37,   37,   37,
00521        61,   37,   34,   34,   34,   34,   37,   34,   37,   34,
00522 
00523        37,   34,   37,   34,   37,   34,   37,   34,   37,   34,
00524        37,   34,   37,   61,   34,   37,   24,   24,   23,   23,
00525        26,   37,   31,   34,   37,   18,   37,   37,16439,   37,
00526     16419,16420,   32,   32,   56,   37,   37,   61,   61,   37,
00527        34,   34,   34,   34,   37,   34,   37,16439,   34,   37,
00528     16419,16420,   56,   17,   34,   37,   34,   37,   34,   37,
00529        61,   61,   34,   37,   24,   24,   37,   31,   34,   37,
00530     16439,   18,   37,   33,16439,   32,   32,16419,16420,   37,
00531        37,   17,   34,   34,   34,   37,   33,16439,   34,16419,
00532     16420,   34,   37,   34,   37,   24,   24,   33,   33,16439,
00533 
00534        18,16439,16439,16439,   32,   32,   37,   37,16439,   34,
00535     16439,   17,   34,   37,   34,   37,   28,   34,16439,16439,
00536        18,16439,   32,   32,   37,   37,   17,   17,   34,   37,
00537        34,   37,16439,   18,   32, 8247,   37, 8247,   34,   37,
00538        18,   17,   19
00539     } ;
00540 
00541 static yyconst flex_int16_t yy_accept[1196] =
00542     {   0,
00543         1,    1,    1,    2,    3,    3,    3,    3,    3,    3,
00544         3,    3,    3,    3,    3,    3,    3,    4,    5,    6,
00545         7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
00546         7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
00547         7,    8,    9,   10,   11,   11,   11,   12,   14,   16,
00548        18,   21,   23,   25,   28,   31,   33,   36,   38,   40,
00549        42,   45,   48,   51,   54,   57,   60,   63,   66,   69,
00550        72,   75,   78,   81,   84,   86,   90,   94,   98,  102,
00551       106,  110,  114,  118,  122,  126,  130,  134,  138,  142,
00552       145,  148,  151,  154,  157,  161,  165,  169,  173,  177,
00553 
00554       180,  183,  187,  190,  194,  197,  201,  204,  208,  211,
00555       214,  217,  220,  223,  226,  229,  232,  235,  238,  241,
00556       244,  246,  249,  251,  254,  257,  260,  263,  266,  270,
00557       274,  277,  281,  285,  288,  291,  294,  298,  301,  305,
00558       308,  311,  314,  317,  320,  323,  326,  329,  332,  335,
00559       338,  340,  344,  348,  352,  356,  360,  364,  368,  372,
00560       375,  378,  381,  385,  388,  391,  394,  397,  400,  403,
00561       406,  409,  412,  415,  418,  421,  424,  427,  430,  434,
00562       437,  440,  443,  446,  451,  454,  457,  460,  463,  465,
00563       467,  470,  473,  476,  479,  482,  485,  488,  492,  495,
00564 
00565       498,  501,  504,  508,  511,  514,  515,  515,  516,  517,
00566       518,  519,  520,  521,  522,  522,  523,  523,  523,  524,
00567       524,  524,  524,  525,  526,  527,  528,  529,  530,  531,
00568       532,  533,  534,  535,  536,  537,  538,  539,  540,  541,
00569       542,  543,  544,  545,  546,  547,  548,  549,  549,  550,
00570       551,  552,  553,  553,  555,  555,  557,  559,  561,  563,
00571       565,  567,  569,  571,  573,  575,  577,  579,  581,  583,
00572       585,  587,  589,  591,  593,  595,  597,  599,  601,  602,
00573       603,  604,  605,  606,  608,  610,  612,  614,  616,  617,
00574       618,  619,  620,  621,  623,  625,  626,  627,  628,  629,
00575 
00576       629,  629,  629,  629,  629,  629,  629,  629,  629,  629,
00577       629,  630,  630,  631,  632,  633,  634,  635,  636,  636,
00578       637,  638,  638,  639,  640,  641,  642,  643,  644,  645,
00579       646,  647,  648,  649,  650,  651,  652,  653,  653,  655,
00580       657,  659,  661,  663,  665,  667,  669,  669,  669,  669,
00581       669,  669,  669,  669,  669,  669,  669,  669,  670,  672,
00582       673,  674,  675,  676,  676,  676,  676,  677,  678,  679,
00583       680,  681,  682,  683,  684,  685,  685,  685,  687,  688,
00584       690,  692,  693,  695,  696,  698,  700,  701,  702,  703,
00585       704,  705,  707,  708,  709,  710,  711,  712,  713,  714,
00586 
00587       715,  716,  717,  718,  719,  720,  721,  722,  723,  724,
00588       725,  726,  727,  728,  728,  729,  731,  733,  735,  737,
00589       739,  742,  744,  746,  748,  750,  752,  754,  756,  758,
00590       760,  762,  764,  766,  768,  770,  772,  774,  776,  777,
00591       778,  779,  782,  784,  786,  788,  789,  790,  792,  794,
00592       794,  794,  794,  794,  794,  794,  794,  794,  794,  794,
00593       794,  795,  796,  797,  798,  799,  800,  801,  802,  803,
00594       804,  806,  808,  810,  812,  814,  816,  818,  820,  820,
00595       820,  820,  821,  821,  821,  821,  821,  821,  821,  821,
00596       821,  822,  823,  824,  825,  826,  827,  828,  829,  830,
00597 
00598       832,  834,  836,  837,  838,  839,  840,  841,  842,  843,
00599       844,  845,  846,  848,  849,  852,  853,  854,  855,  856,
00600       857,  858,  859,  861,  863,  865,  867,  869,  870,  873,
00601       874,  877,  880,  882,  884,  886,  888,  890,  892,  894,
00602       896,  898,  900,  903,  905,  909,  911,  913,  915,  916,
00603       917,  918,  920,  922,  924,  925,  926,  927,  928,  931,
00604       932,  935,  938,  940,  942,  944,  945,  946,  948,  950,
00605       950,  950,  950,  950,  950,  950,  950,  950,  950,  950,
00606       951,  951,  952,  953,  954,  955,  956,  956,  957,  958,
00607       959,  960,  962,  964,  966,  966,  968,  970,  972,  974,
00608 
00609       974,  974,  974,  975,  976,  976,  976,  976,  976,  977,
00610       977,  977,  977,  978,  979,  980,  981,  982,  983,  984,
00611       985,  986,  987,  988,  989,  990,  991,  992,  993,  994,
00612       995,  997,  997,  997,  998,  999, 1000, 1001, 1001, 1001,
00613      1002, 1003, 1003, 1003, 1004, 1005, 1006, 1008, 1010, 1012,
00614      1014, 1016, 1017, 1018, 1020, 1022, 1024, 1026, 1028, 1030,
00615      1032, 1034, 1036, 1038, 1040, 1042, 1044, 1046, 1046, 1048,
00616      1050, 1052, 1052, 1054, 1056, 1056, 1056, 1057, 1058, 1059,
00617      1060, 1061, 1061, 1062, 1063, 1065, 1067, 1069, 1070, 1071,
00618      1072, 1074, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076,
00619 
00620      1076, 1076, 1076, 1076, 1077, 1078, 1079, 1080, 1081, 1081,
00621      1082, 1083, 1084, 1084, 1084, 1084, 1084, 1086, 1088, 1090,
00622      1092, 1094, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1096,
00623      1096, 1096, 1096, 1096, 1097, 1097, 1097, 1097, 1097, 1097,
00624      1097, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105,
00625      1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115,
00626      1118, 1119, 1119, 1120, 1120, 1121, 1122, 1123, 1124, 1125,
00627      1126, 1127, 1127, 1128, 1129, 1130, 1132, 1134, 1136, 1138,
00628      1140, 1142, 1144, 1146, 1148, 1150, 1152, 1154, 1156, 1158,
00629      1160, 1162, 1166, 1167, 1167, 1169, 1171, 1173, 1175, 1177,
00630 
00631      1177, 1178, 1179, 1181, 1182, 1182, 1182, 1185, 1187, 1188,
00632      1191, 1193, 1197, 1197, 1197, 1197, 1197, 1197, 1197, 1197,
00633      1197, 1197, 1198, 1200, 1201, 1202, 1203, 1203, 1204, 1205,
00634      1205, 1205, 1205, 1205, 1205, 1205, 1207, 1209, 1211, 1213,
00635      1215, 1215, 1215, 1216, 1216, 1216, 1216, 1216, 1217, 1217,
00636      1217, 1217, 1217, 1217, 1218, 1218, 1219, 1219, 1219, 1219,
00637      1219, 1220, 1221, 1222, 1222, 1223, 1224, 1225, 1226, 1226,
00638      1226, 1227, 1228, 1229, 1231, 1232, 1233, 1233, 1233, 1234,
00639      1235, 1236, 1237, 1238, 1239, 1241, 1243, 1245, 1245, 1247,
00640      1249, 1249, 1249, 1251, 1253, 1255, 1257, 1259, 1261, 1261,
00641 
00642      1261, 1263, 1264, 1265, 1266, 1266, 1266, 1268, 1271, 1271,
00643      1272, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276,
00644      1276, 1277, 1277, 1277, 1279, 1279, 1279, 1279, 1280, 1280,
00645      1280, 1280, 1281, 1281, 1281, 1281, 1282, 1283, 1284, 1284,
00646      1285, 1286, 1287, 1287, 1287, 1287, 1288, 1289, 1290, 1291,
00647      1291, 1292, 1293, 1294, 1295, 1296, 1298, 1300, 1302, 1304,
00648      1304, 1304, 1304, 1306, 1308, 1310, 1312, 1314, 1314, 1315,
00649      1317, 1318, 1319, 1320, 1320, 1320, 1321, 1321, 1322, 1322,
00650      1322, 1322, 1322, 1322, 1322, 1322, 1322, 1323, 1323, 1324,
00651      1326, 1326, 1326, 1327, 1327, 1327, 1327, 1327, 1327, 1328,
00652 
00653      1330, 1333, 1333, 1334, 1335, 1336, 1336, 1336, 1337, 1338,
00654      1339, 1340, 1341, 1342, 1343, 1344, 1346, 1349, 1353, 1354,
00655      1354, 1354, 1357, 1359, 1361, 1362, 1363, 1365, 1366, 1367,
00656      1367, 1367, 1367, 1367, 1367, 1367, 1368, 1368, 1369, 1371,
00657      1372, 1372, 1373, 1373, 1373, 1373, 1373, 1374, 1376, 1376,
00658      1376, 1376, 1376, 1376, 1377, 1378, 1378, 1380, 1380, 1380,
00659      1381, 1382, 1384, 1385, 1387, 1389, 1389, 1389, 1389, 1389,
00660      1392, 1392, 1392, 1392, 1394, 1396, 1397, 1398, 1398, 1398,
00661      1398, 1398, 1398, 1398, 1398, 1398, 1399, 1399, 1399, 1399,
00662      1400, 1400, 1401, 1401, 1401, 1401, 1402, 1402, 1402, 1402,
00663 
00664      1403, 1403, 1404, 1404, 1404, 1405, 1405, 1405, 1406, 1407,
00665      1407, 1407, 1408, 1409, 1410, 1410, 1412, 1412, 1412, 1412,
00666      1413, 1415, 1417, 1417, 1418, 1418, 1418, 1418, 1418, 1418,
00667      1418, 1418, 1418, 1418, 1418, 1418, 1418, 1419, 1419, 1420,
00668      1420, 1420, 1421, 1421, 1422, 1422, 1422, 1422, 1422, 1423,
00669      1423, 1424, 1425, 1426, 1427, 1427, 1427, 1428, 1429, 1431,
00670      1433, 1433, 1433, 1433, 1433, 1434, 1434, 1435, 1435, 1435,
00671      1435, 1435, 1436, 1437, 1438, 1438, 1438, 1439, 1441, 1441,
00672      1441, 1442, 1442, 1442, 1442, 1442, 1443, 1443, 1443, 1443,
00673      1443, 1443, 1443, 1444, 1444
00674 
00675     } ;
00676 
00677 static yyconst flex_int32_t yy_ec[256] =
00678     {   0,
00679         1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
00680         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00681         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00682         1,    2,    4,    5,    1,    1,    6,    7,    8,    9,
00683        10,   11,    1,   12,    1,    1,    1,   13,   13,   13,
00684        13,   13,   13,   13,   13,   13,   13,   14,    1,   15,
00685        16,   17,    1,    1,   20,   21,   22,   23,   24,   25,
00686        26,   27,   28,   19,   19,   29,   30,   31,   32,   33,
00687        19,   34,   35,   36,   37,   38,   19,   39,   40,   19,
00688         1,   18,    1,    1,   19,    1,   20,   21,   22,   23,
00689 
00690        24,   25,   26,   27,   28,   19,   19,   29,   30,   31,
00691        32,   33,   19,   34,   35,   36,   37,   38,   19,   39,
00692        40,   19,    1,    1,    1,    1,    1,    1,    1,    1,
00693         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00694         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00695         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00696         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00697         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00698         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00699         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00700 
00701         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00702         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00703         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00704         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00705         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00706         1,    1,    1,    1,    1
00707     } ;
00708 
00709 static yyconst flex_int32_t yy_meta[41] =
00710     {   0,
00711         1,    2,    3,    1,    1,    4,    1,    1,    5,    6,
00712         1,    7,    8,    9,   10,    1,   10,    1,   11,   11,
00713        11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
00714        11,   11,   11,   11,   11,   11,   11,   11,   11,   11
00715     } ;
00716 
00717 static yyconst flex_int16_t yy_base[1271] =
00718     {   0,
00719         0,    6,   24,    0,   63,    0,   81,  121,  138,  143,
00720        13,   71,  179,    0,  196,  200,  236,    0,  276,    0,
00721       315,  332,  348,  364,  382,    0,  421,  456,  492,    0,
00722       357,  421,  429,  456,  532,    0,  572,    0,  612,    0,
00723       464,  650,  656,  662,  161,  219, 4149, 4150, 4150,    0,
00724      4150, 4145,  320, 4145,    6,  340, 4150, 4136,  345, 4128,
00725        63,  425,  665,  666,  669,  429,  670,  671,  680,  675,
00726       464,  698,  704,  693,  694,  714,  724,  730,  199,  715,
00727       294,  346,  327,  658,  718,  724,  738,  739,  737,  754,
00728       708, 4110,  767,  768,  751,  349,  767,  765,  775,  435,
00729 
00730        41,  785, 4150,  163,    0, 4150, 4140, 4140, 4127,  422,
00731      4111, 4111, 4099, 4106, 4103,  766, 4115, 4114,  804, 4150,
00732      4118,  470, 4122, 4129, 4150, 4150,  223, 4150,    0, 4150,
00733      4127, 4150, 4127,  457, 4150,    0, 4150, 4125, 4150,  697,
00734       728,  805,  808,  817,  819,  820,  821,  823,  818,  835,
00735      4125,  736,  829,  832,  835,  833,  845,  853,  854, 4150,
00736       866, 4109, 4150, 4122,  871,  851, 4092, 4092, 4085, 4090,
00737      4088, 4087, 4094, 4080, 4076, 4112, 4150, 4111, 4110, 4109,
00738       879, 4150,    0, 4150, 4108,  885, 4150,  831,  729,  886,
00739       771, 4108, 4150,  886,    0,   19,   62,    0, 4106,  897,
00740 
00741         0,  315,    0, 4105,  899, 4150, 4104, 4150, 4150, 4150,
00742      4104,  900,    0,  903,  909, 4150, 4095, 4094, 4150,  894,
00743      4066, 4065, 4150,  908,    0,  914,  917,  918,  919,  920,
00744       922,  928,  930,  931,  934,  939,  942,  947,  948,  951,
00745       950,  962,  961,  967,  971,  977,  979,  984,  985,  987,
00746      1002, 1012,  993,  868, 4091, 1004,  990,  999, 1000, 1007,
00747      1008, 1009, 1020, 1018, 1024, 1021, 1032, 1033, 1034, 1035,
00748      1043, 1051, 1053, 1049, 1063, 1059, 1065, 1050, 1083, 1088,
00749      1094, 1010, 1096, 1076, 1087, 1085, 1096, 1088, 1112,    0,
00750      1118, 1121, 1124, 1108, 1111, 1139, 4098, 4097, 4150, 4069,
00751 
00752      4067, 4060, 4059, 4058, 4059, 4064, 4063, 4069, 4051, 4054,
00753      1144, 4077, 4083, 4150, 4150, 1141,    0, 1142, 4074, 4150,
00754      4080, 1140, 4079, 4077, 1144,    0, 1152, 1153, 1155, 1157,
00755      1156, 1158, 1161, 1166, 1167, 1169, 1172, 4076, 1167, 1171,
00756      1177, 1165, 1164, 1180, 1188, 1184, 4051, 4040, 4005, 4018,
00757      4008, 4002, 4009, 3954, 3956, 3954, 3941, 4150, 4150, 1212,
00758      4150, 3961, 1215,  937, 3939, 1211, 3921, 1177,    0, 1213,
00759      3920, 1216,    0, 1224,    0,  344,  469,    0, 3909,    0,
00760         0,    0,    0, 3905,    0,    0, 1225, 1226, 1228, 1227,
00761      1229, 1261, 1230, 1242, 1296, 1297, 1298, 1239, 1300, 1299,
00762 
00763      1309, 1310, 1308, 1311, 1321, 1323, 1327, 1340, 1244, 1341,
00764      1350, 1355, 1356, 3897, 4150, 1112, 1339, 1343, 1355, 1351,
00765      1391, 1362, 1358, 1408, 1406, 1409, 1419, 1416, 1417, 1425,
00766      1429, 1432, 1436, 1438, 1447, 1451, 1460, 1492, 1527, 1528,
00767      1471, 1564, 1439, 1454, 1458, 1529, 1530, 1512, 1519, 3873,
00768      3880, 3879, 1284, 3872, 3879, 3865, 3857, 3865, 3869, 3866,
00769      1599, 1532, 1354, 1600, 1601, 1547, 1602, 1603, 1605, 1604,
00770      1593, 1525, 1603, 1617, 1614, 1615, 1623, 1627, 3857, 3856,
00771      3865, 3883, 3861, 3858, 3853, 3742, 3748, 3742, 3751, 3745,
00772      3768, 4150, 1647, 1650, 1651, 1652, 1655,    0, 1637, 3738,
00773 
00774      1684, 3716, 1719, 1720, 1721, 1722, 1660, 1723, 1724, 1725,
00775      1661, 1735, 1762, 1733, 1764, 1752, 1736, 1777, 3705, 1779,
00776      1787, 1789, 1772, 1783, 1740, 1644, 1780, 1804, 3701, 1246,
00777      1839, 3700, 1787, 1790, 1801, 1810, 1798, 1418, 1713, 1853,
00778      1804, 1854, 1888, 1864, 1890, 1613, 1871, 1892, 1339,    0,
00779      1881, 3698, 1924, 3697, 1959, 1960, 1965, 1966, 3695, 1552,
00780      1999, 3694, 1878, 1949, 2038, 1973, 1974, 1889, 1957, 3671,
00781      3661, 3655, 3657, 3657, 3652, 3650, 3643, 3656, 3647, 4150,
00782      3648, 2035, 2036, 2038, 2039, 2040,  327, 2048, 2050, 2064,
00783      2074, 2058, 1963, 2030, 2058, 2065, 2066, 2075, 2093, 3651,
00784 
00785      3639, 3638,    0,  826, 3629, 3638, 3640, 3632, 2102, 3615,
00786      1554, 3606, 2095, 2099, 2110, 2101, 2111, 3607, 3606, 2113,
00787      2125, 2116, 2126, 2135, 2136, 2137, 2139, 2141, 2145, 2151,
00788      2158, 3630,    4, 4150, 2164, 2165, 2169,  164, 3623, 2166,
00789      2174, 1742, 3626, 2182, 2183, 2198, 2188, 2187, 2189, 2196,
00790      2200, 1989, 2187,    0, 2167, 2206, 2212, 2210, 2216, 2218,
00791      2220, 2224, 2230, 2234, 2232, 2238, 2265, 3623, 2245, 2246,
00792      2248, 2277, 2260, 2262, 2220, 3622, 3579, 3566, 2275, 2289,
00793      2294,  654, 2299, 2301,    0, 2283, 2285, 2311, 2308, 2312,
00794      2292, 2300, 3558, 3532, 3532, 3526, 3529, 3528, 3534, 3531,
00795 
00796      3518, 3530, 3515, 2320, 2323, 2324, 2325, 2329, 3510, 2334,
00797      2335, 2341, 3537,  660, 2352, 3536, 2335, 2336, 2342, 2346,
00798      2344, 2370, 3533, 2373, 3532, 3517, 3514, 3512, 3504, 3506,
00799      3496, 3499, 3493, 2375, 3506, 1245, 3478, 3475, 3474, 2378,
00800      3499, 4150, 2377, 2379, 2382, 2383, 2391, 3477, 3486, 2385,
00801      2388, 2393, 2410, 2396, 2401, 2412, 2411, 2416, 2420, 2432,
00802      2426, 3494, 2440, 1619, 2446, 2443, 2449, 2467, 2430, 4150,
00803      2451, 3493, 2476, 2477, 2482, 2436, 2465, 2466, 2479, 2101,
00804      2476, 2376, 2482, 2508, 2493, 2491, 2495, 2501, 2502, 2505,
00805      2517, 2528, 2534, 3491, 2549, 2521, 2535, 2545, 2539, 3490,
00806 
00807      3474, 3462, 2544, 2552, 1885, 1454, 2467, 2546, 2573, 2585,
00808      2568, 2599, 3457, 3464, 3471, 2581, 3455, 3469, 3451, 3450,
00809      3459, 2598, 2599, 2601, 2602, 2604, 3448, 2610, 2614, 2619,
00810      3470, 2622, 1803, 2633, 3469, 2606, 2621, 2623, 2622, 2630,
00811      2656, 3455, 2649, 3454, 3426, 3422, 3458, 3410, 3407, 3322,
00812      3326, 2128, 3344, 2594, 2069, 2662, 3321, 3328, 3306, 3281,
00813      2660, 2664, 2663, 2153, 3264, 3229, 2665, 2668, 2630, 2670,
00814      2673, 2676, 2679, 2681, 2678, 2698, 2705, 3257,    0, 2702,
00815      2706, 2711, 2716, 2724, 2708, 2714, 2553, 2740, 2718, 2721,
00816      2742, 2729, 2732, 2735, 2739, 2745, 2743, 2747, 2774, 2783,
00817 
00818      2797, 3220, 3219, 2824, 3202, 3174, 2825,  449, 2829, 4150,
00819      1675, 2832, 3172, 3138, 3139, 2836, 2826, 3119, 3106, 3105,
00820      2836, 2283, 3101, 2823, 2842, 3056, 2498, 3055, 3034, 2513,
00821      3008, 2837, 3014, 2985, 2985, 2850, 2853, 2855, 2969, 2966,
00822      2920, 2863, 2846, 2919, 2911, 2867, 2864, 2875, 2877, 2915,
00823      2878, 2879, 2891, 2893, 2899, 2886, 2887, 2893, 2901, 2921,
00824      1297,  739, 2902, 2908, 2905, 2909, 2911,    0, 2953, 2915,
00825      2887, 2862, 2892, 2844, 2850, 2942, 2992, 4150, 2995, 2846,
00826      2833, 2998, 2822, 2803, 2760, 2746, 2995, 2744,    0, 2978,
00827      2724, 2722, 2721, 2725, 2691, 2685, 2678, 2678, 3005, 3005,
00828 
00829      3018, 2672, 2665, 2653, 2666, 2261, 2616, 3011, 3019,    0,
00830      3022, 3025, 3031, 3039, 3041, 3026, 3055, 3058, 3066, 3049,
00831      1069, 3044, 3042, 3046, 3083,    0, 3100, 2616, 2598, 2589,
00832      2566, 2564, 3124, 3126, 2545, 3128, 2546,    0, 3129, 3132,
00833      2544, 2539, 2490, 2449, 2430, 2442, 3136, 3150, 2443, 3142,
00834      3160, 2431, 2418, 2407, 2329, 3146,  343, 2302, 2349, 3159,
00835      3160, 3174, 3175, 3162, 3191, 2259, 3195, 2243, 3169,  908,
00836      1960, 3013, 3196, 3050, 3176,    0, 2205, 2190, 2203, 2188,
00837      3204, 2196, 3205, 2139, 3180, 3208, 2164, 3209, 2137, 3212,
00838      2136, 3218, 2108, 3222, 2087, 2086, 2057, 2011, 1946, 3223,
00839 
00840      1959, 3226, 3237, 1917, 1899, 1898, 1878, 1857, 1856, 1798,
00841      3231, 3236, 3241, 3253, 1808, 3254, 1770, 1772, 3234, 3268,
00842      3244, 3118, 1735, 4150, 1747, 1651, 3250, 3271, 1619, 3281,
00843      3283, 1613, 3285, 1519, 3292, 1527, 3288, 1479, 3282, 3302,
00844      1457, 3303, 1425, 1362, 1351, 1313, 1304, 1309, 3306, 1209,
00845         0, 1179, 3308, 3306, 3263, 1131, 3304, 3320, 3307, 3313,
00846      1094, 3334, 1009, 1032, 3322,  994,  983,  964,  970,  927,
00847       914,  884,  868, 3319, 3325,  850, 3321, 3326,  818,  782,
00848         0,  775,  772,  693, 3349, 4150,  657,  457,  463,  348,
00849       192,  138, 4150, 4150, 3359, 3370, 3381, 3392, 3403, 3414,
00850 
00851      3425, 3436, 3447, 3455, 3466, 3474, 3484, 3494, 3502, 3510,
00852      3521, 3529, 3537, 3545, 3553, 3564, 3575, 3586, 3597, 3608,
00853      3619, 3623, 3627, 3637, 3648, 3658, 3662, 3666, 3670, 3675,
00854      3679, 3683, 3693, 3704, 3715, 3726, 3737, 3748, 3759, 3769,
00855      3780, 3791, 3802, 3813, 3824, 3835, 3846, 3857, 3868, 3876,
00856      3886, 3890, 3898, 3909, 3913, 3924, 3935, 3946, 3957, 3967,
00857      3978, 3989, 4000, 4011, 4022, 4032, 4043, 4054, 4065, 4075
00858     } ;
00859 
00860 static yyconst flex_int16_t yy_def[1271] =
00861     {   0,
00862      1195, 1195, 1194,    3, 1195,    5, 1194, 1194,    7,    8,
00863         5,    5, 1194,   13,    7,    8, 1194,   17, 1194,   19,
00864      1196, 1196, 1197, 1197, 1194,   25,    7,    8, 1194,   29,
00865      1198, 1198, 1199, 1199, 1194,   35, 1194,   37, 1194,   39,
00866      1200, 1200, 1201, 1201,    5,    5, 1194, 1194, 1194, 1202,
00867      1194, 1203, 1194, 1194, 1204, 1194, 1194, 1205, 1194, 1202,
00868      1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206,
00869      1206, 1206, 1206, 1206, 1207, 1208, 1208, 1208,   78,   78,
00870        78,   78,   78,   78,   78,   78,   78,   78,   78, 1206,
00871      1206,   70, 1206, 1206,   78,   78,   78,   78,   78, 1209,
00872 
00873        70,   78, 1194, 1194, 1202, 1194, 1203, 1194, 1194, 1194,
00874      1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194,
00875      1202, 1210, 1211, 1194, 1194, 1194, 1194, 1194, 1202, 1194,
00876      1203, 1194, 1194, 1194, 1194, 1202, 1194, 1203, 1194, 1194,
00877      1212, 1212, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206,
00878      1207,   78,   78,   78,   78,   78,   78,   78,   78, 1194,
00879      1194, 1202, 1194, 1203, 1194, 1194, 1194, 1194, 1194, 1194,
00880      1194, 1194, 1194, 1194, 1194, 1194, 1194, 1202, 1194, 1203,
00881      1194, 1194, 1202, 1194, 1203, 1194, 1194, 1213, 1194, 1194,
00882      1214, 1194, 1194, 1215, 1216, 1194, 1217, 1216, 1218, 1216,
00883 
00884      1219, 1220, 1219, 1221, 1219, 1194, 1203, 1194, 1194, 1194,
00885      1194, 1204, 1222, 1204, 1194, 1194, 1205, 1205, 1194, 1194,
00886      1194, 1194, 1194, 1206, 1223, 1206, 1206, 1206, 1206, 1206,
00887      1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206,
00888      1206, 1206, 1206, 1206, 1206, 1206, 1206, 1207, 1224, 1224,
00889      1224, 1224, 1194,   78, 1225, 1226,   78,   78,   78,   78,
00890        78,   78,   78,   78,   78,   78,   78,   78,   78,   78,
00891        78,   78,   78,   78,   78,   78,   78,   78, 1206, 1206,
00892      1206, 1206, 1206,   78,   78,   78,   78,   78, 1209, 1227,
00893      1209, 1206, 1206,   78,   78, 1194, 1194, 1194, 1194, 1194,
00894 
00895      1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194,
00896      1194, 1211, 1194, 1194, 1194, 1210, 1228, 1210, 1211, 1194,
00897      1194, 1194, 1194, 1194, 1212, 1229, 1212, 1212, 1212, 1206,
00898      1206, 1206, 1206, 1206, 1206, 1206, 1206, 1207,   78,   78,
00899        78,   78,   78,   78,   78,   78, 1194, 1194, 1194, 1194,
00900      1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1213,
00901      1194, 1230, 1213, 1194, 1194, 1194, 1194, 1214, 1231, 1214,
00902      1194, 1215, 1232, 1215, 1216, 1194, 1194, 1216, 1218, 1216,
00903      1216, 1219, 1219, 1221, 1219, 1219, 1206, 1206, 1206, 1206,
00904      1206, 1194, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206,
00905 
00906      1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1233, 1224,
00907      1224, 1224, 1224, 1225, 1194,   78,   78,   78,   78,   78,
00908      1194,   78,   78,   78,   78,   78,   78,   78,   78,   78,
00909        78,   78,   78,   78,   78,   78,   78, 1194, 1206, 1206,
00910      1206, 1194,   78,   78,   78, 1206, 1206,   78,   78, 1194,
00911      1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194,
00912      1212, 1212, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206,
00913        78,   78,   78,   78,   78,   78,   78,   78, 1194, 1194,
00914      1194, 1234, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194,
00915      1194, 1194, 1206, 1206, 1206, 1206, 1206, 1235, 1235,  392,
00916 
00917      1194,  392, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206,
00918      1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1194, 1224,
00919      1224, 1224,   78,   78,   78,   78,   78, 1235,  421, 1236,
00920      1194,  421,   78,   78,   78,   78,   78,   78,   78,   78,
00921        78,   78,   78,   78,   78,   78,   78,   78, 1194, 1237,
00922      1237,  438, 1194,  438, 1206, 1206, 1206, 1237,  442, 1238,
00923      1194,  442,   78,   78,   78, 1206, 1206,   78,   78, 1194,
00924      1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194,
00925      1194, 1212, 1212, 1206, 1206, 1206, 1194, 1206, 1206,  513,
00926      1206,   78,   78,   78, 1194,   78,   78,  543,   78, 1194,
00927 
00928      1194, 1194, 1234, 1234, 1194, 1194, 1194, 1194, 1194, 1194,
00929      1194, 1194, 1206, 1206, 1206, 1206, 1206, 1235, 1235, 1206,
00930      1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206,
00931      1194, 1239, 1194, 1194, 1206, 1206, 1206, 1240, 1194, 1206,
00932      1206, 1194, 1241, 1224, 1224, 1224,   78,   78,   78,   78,
00933        78, 1235, 1236, 1235,   78,   78,   78,   78,   78,   78,
00934        78,   78,   78,   78,   78,   78, 1194, 1242,   78,   78,
00935        78, 1240,   78,   78, 1194, 1243, 1237, 1237, 1206, 1206,
00936      1194, 1194, 1237, 1238, 1237,   78,   78, 1194, 1206, 1206,
00937        78,   78, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194,
00938 
00939      1194, 1194, 1194, 1212, 1212, 1206, 1206, 1206, 1194, 1206,
00940      1206, 1194, 1244, 1194, 1194, 1245,   78,   78,   78,   78,
00941        78, 1194, 1246, 1194, 1247, 1194, 1194, 1194, 1234, 1194,
00942      1194, 1194, 1194, 1194, 1248, 1194, 1194, 1194, 1194, 1194,
00943      1249, 1194, 1206, 1206, 1206, 1206, 1206, 1235, 1235, 1206,
00944      1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206,
00945      1194, 1239, 1194, 1194, 1194, 1206, 1206, 1206, 1250, 1194,
00946      1206, 1241, 1224, 1224, 1224,   78,   78,   78,   78,   78,
00947        78,   78,   78,   78,   78,   78,   78,   78,   78,   78,
00948        78,   78, 1194, 1242, 1194,   78,   78,   78,   78, 1243,
00949 
00950      1237, 1237, 1206, 1206, 1194, 1194,   78,   78, 1206, 1206,
00951        78,   78, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194,
00952      1194, 1212, 1212, 1206, 1206, 1206, 1194, 1206, 1206, 1194,
00953      1244, 1194, 1194, 1194, 1245,   78,   78,   78,   78,   78,
00954      1194, 1246, 1194, 1247, 1194, 1194, 1194, 1234, 1194, 1194,
00955      1194, 1194, 1248, 1194, 1194, 1194, 1194, 1194, 1194, 1249,
00956      1206, 1206, 1206, 1194, 1235, 1235, 1206, 1206, 1194, 1194,
00957      1206, 1206, 1206, 1194, 1206, 1206, 1194, 1251, 1252, 1250,
00958      1206, 1224, 1224, 1224,   78,   78,   78, 1194,   78,   78,
00959      1194, 1225,   78,   78,   78,   78,   78,   78, 1194, 1194,
00960 
00961        78, 1237, 1237, 1206, 1194, 1194,   78,  810, 1240, 1194,
00962       812, 1240, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194,
00963      1206, 1194, 1194,   78, 1194, 1194, 1194, 1234, 1194, 1194,
00964      1194, 1194, 1194, 1194, 1194, 1206, 1206, 1206, 1194, 1235,
00965      1235, 1206, 1194, 1194, 1194, 1206, 1206, 1206, 1206, 1251,
00966      1253, 1206, 1224, 1224, 1224,   78,   78,   78,   78, 1225,
00967      1225, 1225,   78,   78,   78,   78,   78,  900, 1194,   78,
00968      1237, 1237, 1194, 1194, 1194, 1194, 1240, 1194, 1240, 1194,
00969      1194, 1194, 1194, 1194, 1194, 1194, 1206, 1194, 1254,   78,
00970      1194, 1194, 1234, 1194, 1194, 1194, 1194, 1194, 1206,  513,
00971 
00972       810, 1194, 1235, 1235, 1194, 1194, 1194, 1206, 1206, 1255,
00973      1253, 1206, 1224, 1224, 1224,   78,  543,  812, 1194, 1225,
00974      1225,   78,   78,   78, 1194,  969,   78, 1237, 1237, 1194,
00975      1194, 1194, 1194, 1194, 1194,  513, 1194, 1254,  543, 1194,
00976      1194, 1234, 1194, 1194, 1194, 1194, 1206, 1194, 1256, 1194,
00977      1240, 1257, 1194, 1235, 1235, 1194, 1194, 1194, 1194, 1206,
00978      1206, 1224, 1224,   78, 1194, 1258, 1240, 1259, 1225, 1194,
00979      1225, 1225, 1260,   78,   78, 1237, 1237, 1194, 1194, 1194,
00980      1194, 1261, 1194, 1194, 1194, 1194, 1262, 1194, 1194, 1194,
00981      1263, 1194, 1264, 1194, 1194, 1234, 1194, 1194, 1194, 1194,
00982 
00983      1256, 1194, 1194, 1265,  765, 1257, 1194, 1235, 1235, 1194,
00984      1194, 1206, 1206, 1194, 1258, 1194, 1259, 1225, 1225, 1266,
00985        78,   78, 1194, 1194, 1261, 1194, 1194, 1194, 1262, 1194,
00986      1194, 1267, 1194, 1194, 1194, 1263, 1194, 1264, 1194, 1194,
00987      1268, 1194, 1194, 1234, 1194, 1194, 1194, 1265, 1194, 1194,
00988      1235, 1235, 1206, 1206, 1194, 1269, 1270, 1266,   78,   78,
00989      1267, 1194, 1194, 1268, 1194, 1194, 1234, 1194, 1194, 1194,
00990      1194, 1235, 1194, 1206, 1269, 1269, 1194,   78, 1194, 1194,
00991      1234, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194,
00992      1194, 1194, 1194,    0, 1194, 1194, 1194, 1194, 1194, 1194,
00993 
00994      1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194,
00995      1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194,
00996      1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194,
00997      1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194,
00998      1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194,
00999      1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194,
01000      1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194
01001     } ;
01002 
01003 static yyconst flex_int16_t yy_nxt[4191] =
01004     {   0,
01005      1194, 1194,   49,   50,   51,  764,   52,   51,   49,   50,
01006        51,  212,   52,   51,   48,   49,  765,   53,  213, 1194,
01007       376,   48,  377,   53,   48,   54,   49,   50,   51,   55,
01008        52,   51,   48,   48,   48,   48,   48,   48,   48,   48,
01009        48,   53,   55,   55,   55,   55,   55,   55,   55,   55,
01010        55,   55,   55,   55,   55,   55,   55,   55,   55,   55,
01011        55,   55,   55,   55,   56,   57,   50,   51,  224,   52,
01012        51,   58,   48,   49,  292,  225,  375,  293,  375,   48,
01013        53,   48,   59,   49,   60,   51,   61,   52,   51,   48,
01014        48,   48,   48,   48,   48,   48,   48,   48,   53,   61,
01015 
01016        62,   61,   63,   64,   65,   66,   61,   61,   67,   68,
01017        61,   61,   69,   70,   71,   72,   73,   74,   61,   61,
01018        61,   48,   75,   49,   60,   51,   76,   52,   51,   48,
01019        48,   48,   48,   48,   48,   48,   48,   48,   53,   76,
01020        77,   76,   78,   79,   80,   81,   76,   76,   82,   83,
01021        76,   76,   84,   85,   86,   87,   88,   89,   76,   76,
01022        76,   90,   48,   49,  296,  638,   95,   91,  854,   48,
01023        92,   93,   96,   94,  297,   97,   98,  639,   99,   48,
01024        48,   49,   50,   51,  100,   52,   51,   48,   48,   48,
01025        48,   48,   48,   48,   48,   48,   53,  100,  100,  100,
01026 
01027       100,  100,  100,  100,  100,  100,  100,  100,  100,  100,
01028       100,  100,  100,  100,  100,  100,  100,  100,  100,   90,
01029        48,   49,  832,   95,  322,  257,  261,   48,  101,   93,
01030       262,   94,  102,   98,  323,   99,  103,  104,   49,  105,
01031       106,  103,  107,  106,  103,  103,  103,  108,  103,  109,
01032       103,  103,  103,  110,  103,  111,  103,  103,  112,  113,
01033       103,  103,  103,  114,  103,  103,  103,  115,  116,  103,
01034       117,  118,  103,  103,  103,  103,   48,  119,  120,  121,
01035        51,  122,   52,   51,  123,   48,   48,  124,   48,   48,
01036        48,  125,   48,   53,  122,  122,  122,  122,  122,  122,
01037 
01038       122,  122,  122,  122,  122,  122,  122,  122,  122,  122,
01039       122,  122,  122,  122,  122,  122,  127,  128,  129,  130,
01040       257,  131,  130,  132,  209,  257,  133,  209,  587,  382,
01041       265,  382,  134,  127,  128,  129,  130,  210,  131,  130,
01042       132,  215,  216,  133,  638,  376,  220,  377,  217,  134,
01043        49,  136,  137,  257,  138,  137,  639,  139,  267,  177,
01044       178,  179,  709,  180,  179,  140,   49,  136,  137,  221,
01045       138,  137,  257,  139,  181,  257,  266,  257,  763,  222,
01046       285,  140,   48,   48,   49,   50,   51,  141,   52,   51,
01047        48,   48,   48,   48,   48,   48,   48,   48,   48,   53,
01048 
01049       141,  141,  141,  141,  141,  141,  141,  141,  141,  141,
01050       141,  141,  141,  141,  142,  141,  141,  141,  141,  141,
01051       141,  141,   48,  177,  178,  179,  209,  180,  179,  209,
01052       224,   49,  183,  184,  224,  185,  184,  225,  181,  210,
01053       289,  225,  143,  144,  145,   61,  186,  290,  146,  147,
01054       977,  978,  978,  227,  148,  149,  150,  151,   49,  183,
01055       184,  209,  185,  184,  209,  234,  196,  197,  198,  224,
01056       199,  198,  491,  186,  210,  316,  225,  152,  153,  154,
01057        76,  200,  317,  155,  156,  492, 1193,  242, 1192,  157,
01058       158,  159,  160,  161,   49,  162,  163,  160,  164,  163,
01059 
01060       160,  160,  160,  160,  160,  160,  160,  160,  160,  165,
01061       160,  160,  160,  166,  167,  168,  169,  160,  160,  170,
01062       171,  172,  160,  160,  160,  173,  174,  175,  160,  160,
01063       160,  160,   48,   48,  187,   50,   51,  188,   52,   51,
01064        48,   48,   48,  189,   48,   48,   48,   48,   48,   53,
01065       188,  188,  188,  188,  188,  188,  188,  188,  188,  188,
01066       188,  188,  188,  188,  188,  188,  188,  188,  188,  188,
01067       188,  188,   48,  190,  187,   50,   51,  191,   52,   51,
01068        48,   48,   48,  192,   48,   48,   48,   48,   48,   53,
01069       191,  191,  191,  191,  191,  191,  191,  191,  191,  191,
01070 
01071       191,  191,  191,  191,  191,  191,  191,  191,  191,  191,
01072       191,  191,   48,   48,  193,   50,   51,  194,   52,   51,
01073        48,   48,   48,   48,   48,   48,   48,   48,   48,   53,
01074       194,  194,  194,  194,  194,  194,  194,  194,  194,  194,
01075       194,  194,  194,  194,  194,  194,  194,  194,  194,  194,
01076       194,  194,  196,  197,  198,  805,  199,  198,   49,  202,
01077       203,  833,  204,  203,   49,  202,  203,  200,  204,  203,
01078       224,  224,  834,  205,  224,  224,  224,  225,  225,  205,
01079       224,  225,  225,  225,  257,  224,  806,  225, 1191,  257,
01080       268,  228,  225,  230,  238,  248,  229,  231,  224,  232,
01081 
01082       235,  209,  236,  224,  209,  225,  239,  233,  240,  224,
01083       225,  241,  237,  224,  210,  253,  225,  243,  250,  254,
01084       225,  251,  255,  245, 1190,  253,  256,  247,  252,  254,
01085       364,  253,  255,  325,  244,  254,  256,  269,  255,  280,
01086       326,  257,  256,  246,  257,  263,  257,  273,  415,  270,
01087       257,  271,  258,  264,  272,  257,  259,  274,  276,  224,
01088       365,  260,  339,  257,  257,  257,  225,  340,  257,  257,
01089       257,  278,  224,  224,  275, 1021,  368,  257,  277,  225,
01090       225,  284,  257,  369,  279,  305,  269,  245,  287,  264,
01091       282,  257,  233,  257,  276, 1169,  257,  306,  270,  307,
01092 
01093       286,  257,  308,  272,  269,  311,  257,  283, 1189, 1188,
01094       325,  257,  312,  224,  288,  313,  270,  326,  294,  314,
01095       225,  295,  224,  224,  224,  224,  224,  604,  224,  225,
01096       225,  225,  225,  225,  330,  225,  360,  243,  328,  331,
01097       224,  329,  361,  362,  230, 1187,  336,  225,  332,  333,
01098       334, 1176,  335,  729,  245,  257,  261,  233,  257,  257,
01099       341,  257,  342,  257,  344,  343,  257,  220,  345, 1173,
01100       264,  257,  274,  276,  337,  209,  257,  347,  209,  257,
01101       257,  358,  348,  209,  257,  257,  209,  366,  210,  209,
01102       221,  372,  209,  346,  257,  220,  210,  367,  373,  257,
01103 
01104       222,  380,  210,  385,  380,  212,  385, 1151,  212,  638,
01105       215,  216,  213,  224,  381,  213,  386,  217,  221,  224,
01106       225,  639,  224,  224,  224,  224,  225,  224,  222,  225,
01107       225,  225,  225,  224,  225,  224,  224,  388,  364,  224,
01108       225, 1184,  225,  225,  224,  387,  225,  224,  389,  390,
01109       392,  225,  224,  224,  225,  224,  224, 1183,  391,  225,
01110       225,  394,  225,  225,  396,  393,  224,  224,  365,  395,
01111       401, 1173,  224,  225,  225,  399,  224,  397,  400,  225,
01112       398,  402,  224,  225,  224,  248,  253,  405,  253,  225,
01113       249,  225,  249,  255,  253,  255,  403,  409,  404,  409,
01114 
01115      1182,  255,  408,  253,  406,  253, 1181,  249,  250,  407,
01116       255,  251,  255,  253,  409,  224,  257,  249,  252,  417,
01117       255,  257,  225,  411,  409,  257,  257,  416, 1180,  402,
01118       257,  257,  412,  257,  257,  257,  418,  419,  257,  257,
01119       257, 1165,  421, 1179,  257,  420,  257,  257,  413,  257,
01120       257,  257,  257,  422,  423,  257,  424,  425,  257,  257,
01121       257,  257,  428,  257,  257,  257,  257,  427,  426,  257,
01122       429,  430,  431,  437,  257,  257,  257,  257,  415,  257,
01123       257,  257,  257,  434,  257,  257,  433,  432,  224,  257,
01124       257,  257,  435,  224,  257,  225,  257,  436,  442,  224,
01125 
01126       225,  224,  257, 1162, 1072,  438,  225,  257,  225,  443,
01127       439,  257,  429,  257,  257,  431,  444,  289,  257,  257,
01128       445,  400,  257,  289,  290,  440,  224,  257,  441,  224,
01129       290,  449, 1176,  225,  257,  448,  225,  257,  257,  257,
01130       296,  322,  257,  523,  447,  311,  316,  316,  446,  325,
01131       297,  323,  312,  317,  317,  313,  326,  325,  325,  314,
01132       325,  224,  224,  224,  326,  326,  224,  326,  225,  225,
01133       225,  224,  224,  225,  224,  462,  463,  224,  225,  225,
01134       461,  225,  368,  466,  225,  464,  471,  474,  469,  369,
01135       257,  257,  468,  257,  465,  257,  257,  257,  257,  475,
01136 
01137       472,  467,  257,  257,  470,  476,  257,  477,  257, 1172,
01138       257,  257,  366,  473,  257,  257,  478,  360,  368,  257,
01139       360,  372,  367,  361,  362,  369,  361,  362,  373,  372,
01140       224,  224,  224,  224,  224,  224,  373,  225,  225,  225,
01141       225,  225,  225, 1171,  224,  253,  855,  224,  414,  497,
01142       496,  225,  255,  503,  225,  654,  493,  856,  509,  494,
01143       495,  498,  499,  504,  498,  498,  500,  498,  498,  498,
01144       498,  498,  498,  501,  498,  498,  498,  498,  498,  502,
01145       502,  502,  502,  502,  502,  502,  502,  502,  502,  502,
01146       502,  502,  502,  502,  502,  502,  502,  502,  502,  502,
01147 
01148       502,  224,  224,  224,  224,  224,  415,  573,  225,  225,
01149       225,  225,  225,  224,  224,  224,  224,  574, 1149,  505,
01150       225,  225,  225,  225,  507,  508,  224, 1020,  224,  506,
01151       510, 1170,  224,  225,  515,  225,  511,  512,  513,  225,
01152       549,  519,  253, 1169,  514,  224,  249,  255,  517,  255,
01153       518,  253,  225,  409,  516,  249,  253,  253,  255,  224,
01154       249,  249,  409,  255,  255,  257,  225,  409,  409,  257,
01155       257,  527,  524, 1168,  257,  525,  522,  257,  526,  534,
01156       520,  257,  257, 1167,  257,  533,  257,  584,  257,  257,
01157       521,  498,  528,  257,  498,  498,  529,  498,  498,  530,
01158 
01159       498,  498,  498,  531,  498,  498,  498,  498,  498,  532,
01160       532,  532,  532,  532,  532,  532,  532,  532,  532,  532,
01161       532,  532,  532,  532,  532,  532,  532,  532,  532,  532,
01162       532,  535,  257,  537,  257,  257,  538,  257,  539,  257,
01163       257,  536,  257,  257,  257,  257,  540,  257,  257,  662,
01164       257,  257, 1166,  542,  541,  257,  257,  543,  257,  545,
01165       257,  549,  257,  257,  257,  257, 1165,  257,  544,  257,
01166       257,  546,  547,  257,  548,  563,  224,  257,  257,  564,
01167       257,  565,  257,  225,  257,  257,  257,  905, 1139,  257,
01168       906,  257,  550,  551,  557,  550,  550,  552,  550,  550,
01169 
01170       550,  550,  550,  550,  553,  550,  550,  550,  550,  550,
01171       554,  554,  554,  554,  554,  554,  554,  554,  554,  554,
01172       554,  554,  554,  554,  554,  554,  554,  554,  554,  554,
01173       554,  554,  224,  224,  224,  224, 1137,  325,  257,  225,
01174       225,  225,  225,  257,  326,  257, 1163,  569,  587,  568,
01175       257,  257,  224,  556,  414,  740,  257,  593,  567,  225,
01176       583,  685,  741,  555,  550,  558,  566,  550,  550,  559,
01177       550,  550,  560,  550,  550,  550,  561,  550,  550,  550,
01178       550,  550,  562,  562,  562,  562,  562,  562,  562,  562,
01179       562,  562,  562,  562,  562,  562,  562,  562,  562,  562,
01180 
01181       562,  562,  562,  562,  325,  224,  224,  224,  224,  224,
01182       224,  326,  225,  225,  225,  225,  225,  225,  595,  257,
01183       764,  586, 1162,  594,  257,  588,  592,  591, 1130,  257,
01184       589,  765,  585,  590,  257,  506,  582,  596,  499,  257,
01185       257,  257,  597,  257,  673,  257,  257,  536,  257,  257,
01186       599,  598,  224,  257,  257,  224,  224,  224,  257,  225,
01187       224,  618,  225,  225,  225,  224,  224,  225,  613,  614,
01188       257,  619,  225,  225,  650,  257,  979,  978,  978,  615,
01189       629,  625,  616,  617,  498,  498, 1085,  498,  498,  498,
01190       498,  498,  498,  498,  498,  498,  501,  498,  498,  498,
01191 
01192       498,  498,  501,  501,  501,  501,  501,  501,  501,  501,
01193       501,  501,  501,  501,  501,  501,  501,  501,  501,  501,
01194       501,  501,  501,  501,  224,  224,  224,  224,  224,  224,
01195       224,  225,  225,  225,  225,  225,  225,  225,  224,  257,
01196       224,  224,  663,  642,  257,  225,  622,  225,  225,  624,
01197       643,  623,  620,  627,  626,  621,  580,  224, 1124,  641,
01198       628,  637,  630,  631,  225,  638,  257,  224,  649,  224,
01199       632,  257,  633,  634,  225,  634,  225,  639,  642, 1070,
01200       253,  415,  224,  640,  249,  643,  635,  255,  253,  225,
01201       253,  409,  249,  647,  249,  255,  636,  255,  257,  409,
01202 
01203       644,  409,  648,  257,  833,  528,  257, 1072,  651,  257,
01204       645,  257,  530,  257,  257,  834,  257, 1116,  257,  661,
01205       655,  257,  646,  665,  257,  656,  657,  257,  618,  257,
01206       257,  658,  257, 1059,  659,  257,  257,  660,  619,  498,
01207       652,  257,  498,  498,  498,  498,  498,  530,  498,  498,
01208       498,  531,  498,  498,  498,  498,  498,  531,  531,  531,
01209       531,  531,  531,  531,  531,  531,  531,  531,  531,  531,
01210       531,  531,  531,  531,  531,  531,  531,  531,  531,  257,
01211       257,  666,  551, 1152,  257,  257,  805, 1151,  664,  667,
01212       257,  672,  671,  675,  674,  257,  668,  257,  633,  634,
01213 
01214       676,  634,  257,  639,  257, 1150,  686, 1057,  691,  257,
01215       677, 1105,  669,  678,  257,  257,  257,  806,  257,  257,
01216       257,  257,  670,  257,  550,  550, 1149,  550,  550,  550,
01217       550,  550,  550,  550,  550,  550,  553,  550,  550,  550,
01218       550,  550,  553,  553,  553,  553,  553,  553,  553,  553,
01219       553,  553,  553,  553,  553,  553,  553,  553,  553,  553,
01220       553,  553,  553,  553,  224,  224,  681,  558, 1102,  415,
01221       224,  225,  225,  643,  560,  257,  682,  225,  224,  224,
01222       257, 1147,  687,  257,  692,  225,  225,  679,  257,  257,
01223       652,  718,  689,  680,  257,  677, 1118,  530,  678,  550,
01224 
01225       683,  690,  550,  550,  550,  550,  550,  560,  550,  550,
01226       550,  561,  550,  550,  550,  550,  550,  561,  561,  561,
01227       561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
01228       561,  561,  561,  561,  561,  561,  561,  561,  561,  688,
01229       325,  325, 1146,  224,  224,  224,  676,  326,  326,  682,
01230       225,  225,  225,  224,  704,  224,  257,  706,  719,  595,
01231       225,  257,  225,  705,  257,  712,  255,  707,  708,  257,
01232       855,  711,  713,  710,  714,  715,  722,  717,  623,  224,
01233      1145,  856,  716,  723,  257,  714,  225,  721,  226,  257,
01234       720,  257,  257,  709,  724,  658,  257,  257,  226,  257,
01235 
01236       224,  725,  888,  734,  224, 1144,  224,  225, 1143,  257,
01237       735,  225,  736,  225,  743,  224,  224, 1139,  224,  257,
01238       744,  224,  225,  225,  257,  225,  737,  257,  225,  930,
01239       224,  224,  257,  745,  747,  746,  738,  225,  225,  752,
01240       224,  224,  224,  750,  224, 1137,  224,  225,  225,  225,
01241       224,  225,  751,  225,  864,  755,  224,  225, 1134,  761,
01242       931,  753,  757,  225,  758,  754,  632,  756,  633,  224,
01243       224,  224,  760, 1130,  224, 1126,  225,  225,  225,  224,
01244       759,  225,  737,  253,  253,  939,  225,  249,  249,  414,
01245       255,  255,  738,  257,  409,  409,  654,  781,  257,  253,
01246 
01247       766,  767,  771,  249,  768,  580,  255,  776,  777,  515,
01248       409,  580,  778,  257,  257,  257,  774,  773,  257,  257,
01249       257,  675,  257,  780, 1124, 1123,  257,  257,  676,  775,
01250       779,  257,  257,  782, 1076,  783,  257,  257,  257,  787,
01251       785,  257,  257,  257,  257,  784,  257,  257,  786,  257,
01252       257,  257, 1070,  789,  788,  257,  257,  790,  257,  792,
01253       257,  257, 1056,  257,  257,  257,  793,  791, 1116,  257,
01254      1057,  257,  257,  668,  257,  633,  257,  257,  672,  257,
01255       224,  796,  797,  798,  922,  255,  257,  225,  257,  737,
01256       639,  257, 1058,  257,  224,  681,  799,  545,  803,  738,
01257 
01258       683,  225,  643,  414,  808,  682,  807,  560,  804,  257,
01259       685,  257,  688,  224,  257,  988,  257,  224,  257,  676,
01260       225,  812,  682,  257,  225,  325,  257,  811,  325,  224,
01261       224,  257,  326,  810,  224,  326,  225,  225, 1110,  224,
01262       224,  225,  830,  809,  823,  824,  225,  225,  825,  713,
01263      1111,  714,  826,  715,  829,  822,  836,  828, 1057,  837,
01264       716,  257,  257,  840, 1109,  838,  257,  257,  257,  839,
01265       257,  841,  257,  257,  724,  257,  734,  257,  723,  740,
01266       714,  725,  224,  735,  224,  736,  741,  224,  224,  225,
01267       224,  225,  864,  224,  225,  225,  224,  225,  224,  737,
01268 
01269       225,  224,  257,  225,  867,  225,  224,  890,  225,  738,
01270       863,  869,  861,  225,  862,  224,  224,  224,  870,  868,
01271       513,  224,  225,  225,  225,  224,  513,  761,  225,  513,
01272       871,  872,  225,  638,  632,  769,  633,  224, 1108, 1107,
01273      1057,  874,  879,  760,  225,  639,  873,  874,  224,  515,
01274       737,  634, 1102,  634,  224,  225,  224,  634,  765,  634,
01275       738,  225,  257,  225,  737,  994, 1099,  257,  877,  876,
01276       737,  885,  224,  875,  738,  878, 1098,  253,  253,  225,
01277       738,  249,  249,  253,  255,  255,  881,  249,  409,  409,
01278       255,  257,  257,  257,  409,  889,  257,  257,  257,  927,
01279 
01280       886,  883,  257,  882,  543,  257,  887,  257,  257,  891,
01281       257, 1097,  893,  257,  930,  543,  892,  257,  884,  257,
01282       895,  257,  257,  543,  257,  894,  257,  257,  257,  672,
01283       992,  257,  257,  257,  257,  793,  257,  896,  545,  257,
01284       792,  639,  668,  257,  633,  931,  899,  257,  257,  224,
01285       874,  897,  257,  900,  257,  898,  225,  224,  737,  257,
01286       634,  257,  634, 1096,  225,  257,  257, 1095,  738, 1089,
01287       257,  257,  257,  737,  901,  907,  257,  257,  224,  257,
01288      1085,  904,  916,  738,  958,  225,  909,  910,  910,  917,
01289       224,  911, 1080, 1079,  257,  932,  908,  225,  639,  257,
01290 
01291       912,  910,  910,  325,  325,  922,  224,  224, 1078,  224,
01292       326,  326,  639,  225,  225,  224,  225, 1077,  737,  224,
01293       830,  823,  225,  634,  925,  257,  225,  713,  738,  714,
01294       257,  869,  257,  634,  634,  634,  921,  257,  870, 1076,
01295       590,  924,  590,  590,  634,  834,  634,  257,  257,  257,
01296       634, 1059,  257,  257,  257,  598,  257,  841,  598,  598,
01297       634,  257,  634,  932,  723,  224,  714, 1005,  224,  224,
01298       224,  943,  225,  224,  856,  225,  225,  225,  224,  936,
01299       225,  224,  932,  224,  224,  225,  737,  937,  225, 1055,
01300       225,  225, 1054,  515,  938, 1053,  738,  944,  942,  948,
01301 
01302       946,  945,  947,  224,  515,  737,  877,  769, 1046, 1045,
01303       225,  224,  253,  878,  879,  738,  249,  253,  225,  255,
01304      1044,  249, 1043,  409,  255,  253, 1005,  956,  409,  249,
01305       960,  949,  255,  952,  257,  954,  409,  957,  415,  257,
01306       257,  888,  953,  891,  257,  257,  545,  257,  255,  257,
01307       892,  959,  257,  963, 1042, 1041,  961, 1040,  257,  955,
01308       962,  257,  964,  257,  966,  257,  257,  545,  965,  257,
01309       257,  257,  939,  257,  257,  899,  257, 1037,  257,  580,
01310       967,  580,  900,  414,  968,  414,  414,  414,  969,  414,
01311       414,  414,  415,  414,  414,  414,  414,  414,  414,  414,
01312 
01313       414,  969,  969,  969,  969,  969,  969,  969,  969,  969,
01314       969,  969,  969,  969,  969,  969,  969,  969,  969,  969,
01315       969,  969,  969,  257,  970,  973,  976,  982,  257,  224,
01316       909,  910,  910,  912,  910,  910,  225,  916,  932, 1035,
01317       255,  224,  639,  925,  917,  639,  990,  943,  225,  257,
01318       255,  257, 1034,  983,  257,  224,  257,  984,  224,  987,
01319       224,  737,  225, 1033, 1005,  225, 1032,  225,  224,  224,
01320       999,  738,  224,  944,  988,  225,  225,  945, 1031,  225,
01321       224, 1030,  224,  951,  224, 1001, 1000,  225,  515,  225,
01322      1010,  225,  253,  973,  253, 1029,  249,  515,  249,  255,
01323 
01324       253,  255, 1019,  409,  249,  409, 1016,  255, 1009, 1012,
01325      1008,  409,  257,  257, 1014, 1028,  950,  257,  257,  257,
01326      1017, 1013,  960, 1018,  257, 1022, 1015,  257,  257,  545,
01327       415,  257,  257,  257,  257,  257,  257,  257,  545,  257,
01328       257,  257, 1024,  976, 1023, 1027,  257, 1007,  961, 1006,
01329       255, 1004,  962,  414,  414,  414,  414,  414,  969,  414,
01330       414,  414,  415,  414,  414, 1025,  414,  414,  414,  414,
01331       414, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026,
01332      1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026,
01333      1026, 1026, 1026,  977,  978,  978,  979,  978,  978,  982,
01334 
01335       224, 1003, 1002,  255,  257,  639, 1048,  225,  639,  257,
01336       224, 1039,  998, 1049, 1119, 1050,  224,  225,  997, 1051,
01337      1194, 1194, 1070,  225,  224,  983, 1052,  951, 1036,  984,
01338       224,  225, 1019, 1047, 1010,  996,  249,  225, 1060,  255,
01339       253,  995,  253,  409,  249, 1073,  249,  255,  942,  255,
01340      1069,  409,  257,  409, 1064, 1061, 1065,  257, 1070, 1067,
01341      1194, 1194, 1062, 1066,  994, 1050, 1068, 1019,  257, 1074,
01342       257, 1063,  257,  257,  255,  257,  257,  257,  993,  991,
01343      1071, 1121, 1075,  414,  414,  414,  414,  414,  414,  414,
01344       414,  414,  415,  414,  414, 1025,  414,  414,  414,  414,
01345 
01346       414, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
01347      1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
01348      1025, 1025, 1025,  959,  989, 1081,  257, 1083,  986, 1086,
01349      1090,  257, 1082, 1092,  580,  580, 1087, 1091, 1088, 1088,
01350      1093,  224, 1094, 1103,  257, 1160,  985, 1056,  225,  257,
01351      1104, 1100,  226,  257, 1105, 1057,  737, 1084, 1049,  515,
01352      1050, 1051,  226,  257,  224,  224,  738,  580, 1052,  981,
01353      1069,  225,  225,  639,  737, 1073,  253, 1058, 1070,  249,
01354       249, 1127,  255,  255,  738,  545,  409,  409,  257,  580,
01355      1112,  980, 1114,  257,  975, 1113, 1067, 1073, 1013, 1066,
01356 
01357      1071, 1050,  257, 1068,  255, 1081, 1083,  257,  639, 1128,
01358      1131, 1122, 1082, 1135,  580,  737, 1087, 1132, 1088, 1092,
01359      1091, 1133, 1088, 1140, 1100,  738, 1093,  874, 1094,  974,
01360      1141, 1049, 1111, 1050, 1142, 1119, 1084,  634, 1103,  634,
01361      1057,  224,  737, 1070,  972, 1104,  224,  737,  225, 1105,
01362       737, 1127,  738,  225, 1114,  874,  971,  738,  950,  580,
01363       738, 1066,  941, 1050, 1155,  634, 1153,  634, 1154, 1155,
01364       257, 1156, 1128, 1120, 1159,  257, 1156,  737,  737, 1087,
01365      1157, 1088,  634,  932, 1131,  940,  634,  738,  738,  634,
01366       854, 1132,  634, 1135,  634, 1133,  634, 1133,  634,  634,
01367 
01368      1091,  634, 1088, 1140,  932, 1155,  737,  874, 1177, 1173,
01369      1141,  224, 1156,  224, 1142, 1142,  738,  634,  225,  634,
01370       225, 1155, 1177,  932,  224, 1120, 1185,  737, 1156,  255,
01371       737,  225, 1157,  257, 1186,  634, 1174,  738,  257,  257,
01372       738,  935, 1153, 1178,  257,  634,  737,  634,  934, 1159,
01373      1185,  933,  257,  854,  609,  609,  738,  257, 1186,   48,
01374        48,   48,   48,   48,   48,   48,   48,   48,   48,   48,
01375       126,  126,  126,  126,  126,  126,  126,  126,  126,  126,
01376       126,  135,  135,  135,  135,  135,  135,  135,  135,  135,
01377       135,  135,  176,  176,  176,  176,  176,  176,  176,  176,
01378 
01379       176,  176,  176,  182,  182,  182,  182,  182,  182,  182,
01380       182,  182,  182,  182,  195,  195,  195,  195,  195,  195,
01381       195,  195,  195,  195,  195,  201,  201,  201,  201,  201,
01382       201,  201,  201,  201,  201,  201,  206,  206,  929,  206,
01383       206,  206,  206,  206,  206,  928,  206,  207,  207,  207,
01384       207,  207,  207,  207,  207,  207,  207,  207,  214,  927,
01385       609,  926,  214,  843,  843,  214,  218,  218,  218,  218,
01386       218,  218,  218,  218,  218,  218,  218,  226,  832,  832,
01387       923,  226,  580,  580,  226,  249,  920,  249,  919,  918,
01388       915,  914,  913,  903,  249,  257,  902,  257,  257,  795,
01389 
01390       795,  257,  763,  763,  257,  291,  866,  865,  854,  291,
01391       859,  858,  291,  318,  857,  854,  852,  318,  851,  850,
01392       318,  319,  319,  319,  319,  319,  319,  319,  319,  319,
01393       319,  319,  327,  849,  848,  847,  327,  846,  845,  327,
01394       363,  843,  843,  363,  363,  832,  832,  363,  370,  827,
01395       580,  580,  370,  821,  820,  370,  374,  819,  818,  817,
01396       374,  816,  815,  374,  375,  375,  814,  375,  375,  375,
01397       375,  375,  375,  375,  375,  378,  378,  813,  378,  378,
01398       378,  378,  378,  378,  378,  378,  379,  379,  379,  379,
01399       379,  379,  379,  379,  379,  379,  379,  382,  382,  802,
01400 
01401       382,  382,  382,  382,  382,  382,  382,  382,  383,  383,
01402       801,  383,  383,  383,  383,  383,  383,  383,  383,  384,
01403       384,  384,  384,  384,  384,  384,  384,  384,  384,  384,
01404       213,  795,  795,  213,  225,  763,  770,  225,  410,  763,
01405       410,  410,  749,  748,  410,  742,  739,  410,  414,  414,
01406       414,  414,  414,  414,  414,  414,  414,  414,  414,  256,
01407       733,  732,  256,  731,  730,  256,  728,  727,  256,  290,
01408       726,  703,  290,  317,  702,  701,  317,  326,  700,  699,
01409       326,  362,  362,  698,  697,  362,  369,  696,  695,  369,
01410       373,  694,  693,  373,  409,  683,  683,  409,  550,  550,
01411 
01412       409,  652,  652,  409,  603,  603,  519,  603,  603,  603,
01413       603,  603,  603,  603,  603,  498,  498,  498,  498,  498,
01414       498,  498,  498,  498,  498,  498,  653,  653,  653,  653,
01415       653,  653,  653,  653,  653,  653,  653,  550,  550,  498,
01416       550,  550,  550,  550,  550,  550,  550,  550,  684,  684,
01417       684,  684,  684,  684,  684,  684,  684,  684,  684,  762,
01418       762,  762,  762,  762,  762,  762,  762,  762,  762,  762,
01419       769,  491,  769,  612,  611,  610,  609,  769,  608,  769,
01420       772,  772,  772,  772,  772,  772,  772,  772,  772,  772,
01421       772,  794,  794,  794,  794,  794,  794,  794,  794,  794,
01422 
01423       794,  794,  800,  800,  800,  800,  800,  800,  800,  800,
01424       800,  800,  800,  831,  831,  831,  831,  831,  831,  831,
01425       831,  831,  831,  831,  835,  835,  835,  835,  835,  835,
01426       835,  835,  835,  835,  835,  842,  842,  842,  842,  842,
01427       842,  842,  842,  842,  842,  842,  844,  844,  844,  844,
01428       844,  844,  844,  844,  844,  844,  844,  853,  853,  853,
01429       853,  853,  853,  853,  853,  853,  853,  853,  860,  860,
01430       860,  860,  860,  860,  860,  860,  860,  860,  860,  880,
01431       607,  606,  605,  880,  604,  602,  880,  951,  601,  951,
01432       600,  581,  580,  579,  578,  577,  951,  879,  576,  575,
01433 
01434       879, 1011,  572,  571,  570, 1011,  415,  208, 1011, 1038,
01435      1038,  208, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
01436      1010,  371,  371, 1010, 1101, 1101, 1101, 1101, 1101, 1101,
01437      1101, 1101, 1101, 1101, 1101, 1106, 1106, 1106, 1106, 1106,
01438      1106, 1106, 1106, 1106, 1106, 1106, 1115, 1115, 1115, 1115,
01439      1115, 1115, 1115, 1115, 1115, 1115, 1115, 1117, 1117, 1117,
01440      1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1120,  490,
01441      1120, 1120,  361,  489,  488,  487,  486, 1120, 1125, 1125,
01442      1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1129,
01443      1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129,
01444 
01445      1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
01446      1136, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138,
01447      1138, 1138, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148,
01448      1148, 1148, 1148, 1158,  485, 1158, 1158,  484,  483, 1158,
01449       482,  481, 1158, 1161, 1161, 1161, 1161, 1161, 1161, 1161,
01450      1161, 1161, 1161, 1161, 1164, 1164, 1164, 1164, 1164, 1164,
01451      1164, 1164, 1164, 1164, 1164, 1175, 1175, 1175, 1175,  480,
01452       479, 1175, 1175, 1175, 1175, 1175, 1157,  338,  324, 1157,
01453       324,  321, 1157,  320,  321, 1157,  320,  460,  459,  458,
01454       457,  456,  455,  454,  453,  452,  451,  450,  298,  298,
01455 
01456       415,  356,  351,  219,  219,  211,  208,  208,  208,  371,
01457       208,  359,  358,  358,  358,  357,  356,  355,  354,  353,
01458       352,  351,  350,  349,  208,  223,  338,  208,  324,  208,
01459       321,  320,  315,  310,  309,  304,  303,  302,  301,  300,
01460       299,  298,  208,  281,  223,  219,  211,  208, 1194,   47,
01461      1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194,
01462      1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194,
01463      1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194,
01464      1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194
01465     } ;
01466 
01467 static yyconst flex_int16_t yy_chk[4191] =
01468     {   0,
01469         0,    0,    1,    1,    1,  633,    1,    1,    2,    2,
01470         2,   55,    2,    2,   11,   11,  633,    1,   55,    0,
01471       196,   11,  196,    2,    3,    3,    3,    3,    3,    3,
01472         3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
01473         3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
01474         3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
01475         3,    3,    3,    3,    5,    5,    5,    5,   61,    5,
01476         5,    5,   12,   12,  101,   61,  197,  101,  197,   12,
01477         5,    7,    7,    7,    7,    7,    7,    7,    7,    7,
01478         7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
01479 
01480         7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
01481         7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
01482         7,    8,    8,    8,    8,    8,    8,    8,    8,    8,
01483         8,    8,    8,    8,    8,    8,    8,    8,    8,    8,
01484         8,    8,    8,    8,    8,    8,    8,    8,    8,    8,
01485         8,    8,    8,    8,    8,    8,    8,    8,    8,    8,
01486         8,    9,   45,   45,  104,  638,   10,    9, 1192,   45,
01487         9,    9,   10,    9,  104,   10,   10,  638,   10,   13,
01488        13,   13,   13,   13,   13,   13,   13,   13,   13,   13,
01489        13,   13,   13,   13,   13,   13,   13,   13,   13,   13,
01490 
01491        13,   13,   13,   13,   13,   13,   13,   13,   13,   13,
01492        13,   13,   13,   13,   13,   13,   13,   13,   13,   15,
01493        46,   46, 1191,   16,  127,   79,   79,   46,   15,   15,
01494        79,   15,   16,   16,  127,   16,   17,   17,   17,   17,
01495        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
01496        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
01497        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
01498        17,   17,   17,   17,   17,   17,   19,   19,   19,   19,
01499        19,   19,   19,   19,   19,   19,   19,   19,   19,   19,
01500        19,   19,   19,   19,   19,   19,   19,   19,   19,   19,
01501 
01502        19,   19,   19,   19,   19,   19,   19,   19,   19,   19,
01503        19,   19,   19,   19,   19,   19,   21,   21,   21,   21,
01504        81,   21,   21,   21,   53,   81,   21,   53,  587,  202,
01505        81,  202,   21,   22,   22,   22,   22,   53,   22,   22,
01506        22,   56,   56,   22, 1057,  376,   59,  376,   56,   22,
01507        23,   23,   23,   83,   23,   23, 1057,   23,   83,   31,
01508        31,   31,  587,   31,   31,   23,   24,   24,   24,   59,
01509        24,   24,   82,   24,   31,   96,   82,   82, 1190,   59,
01510        96,   24,   25,   25,   25,   25,   25,   25,   25,   25,
01511        25,   25,   25,   25,   25,   25,   25,   25,   25,   25,
01512 
01513        25,   25,   25,   25,   25,   25,   25,   25,   25,   25,
01514        25,   25,   25,   25,   25,   25,   25,   25,   25,   25,
01515        25,   25,   27,   32,   32,   32,  110,   32,   32,  110,
01516        62,   33,   33,   33,   66,   33,   33,   62,   32,  110,
01517       100,   66,   27,   27,   27,   27,   33,  100,   27,   27,
01518       908,  908,  908,   62,   27,   27,   27,   28,   34,   34,
01519        34,  134,   34,   34,  134,   66,   41,   41,   41,   71,
01520        41,   41,  377,   34,  134,  122,   71,   28,   28,   28,
01521        28,   41,  122,   28,   28,  377, 1189,   71, 1188,   28,
01522        28,   28,   29,   29,   29,   29,   29,   29,   29,   29,
01523 
01524        29,   29,   29,   29,   29,   29,   29,   29,   29,   29,
01525        29,   29,   29,   29,   29,   29,   29,   29,   29,   29,
01526        29,   29,   29,   29,   29,   29,   29,   29,   29,   29,
01527        29,   29,   35,   35,   35,   35,   35,   35,   35,   35,
01528        35,   35,   35,   35,   35,   35,   35,   35,   35,   35,
01529        35,   35,   35,   35,   35,   35,   35,   35,   35,   35,
01530        35,   35,   35,   35,   35,   35,   35,   35,   35,   35,
01531        35,   35,   37,   37,   37,   37,   37,   37,   37,   37,
01532        37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
01533        37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
01534 
01535        37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
01536        37,   37,   39,   39,   39,   39,   39,   39,   39,   39,
01537        39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
01538        39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
01539        39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
01540        39,   39,   42,   42,   42,  682,   42,   42,   43,   43,
01541        43,  714,   43,   43,   44,   44,   44,   42,   44,   44,
01542        63,   64,  714,   43,   65,   67,   68,   63,   64,   44,
01543        70,   65,   67,   68,   84,   69,  682,   70, 1187,   84,
01544        84,   63,   69,   64,   70,   75,   63,   64,   74,   65,
01545 
01546        67,  140,   68,   72,  140,   74,   70,   65,   70,   73,
01547        72,   70,   69,   91,  140,   76,   73,   72,   75,   76,
01548        91,   75,   76,   73, 1184,   77,   76,   74,   75,   77,
01549       189,   78,   77,  141,   72,   78,   77,   85,   78,   91,
01550       141,   80,   78,   73,   85,   80,   80,   86,  962,   85,
01551        86,   85,   77,   80,   85,   86,   78,   87,   88,   90,
01552       189,   78,  152,   89,   87,   88,   90,  152,   89,   87,
01553        88,   89,   93,   94,   87,  962,  191,   95,   88,   93,
01554        94,   95,   95,  191,   90,  116,   97,   94,   98,   95,
01555        93,   98,   90,   97,   99, 1183,   98,  116,   97,  116,
01556 
01557        97,   99,  116,   97,  102,  119,   99,   94, 1182, 1180,
01558       142,  102,  119,  143,   99,  119,  102,  142,  102,  119,
01559       143,  102,  144,  149,  145,  146,  147,  604,  148,  144,
01560       149,  145,  146,  147,  143,  148,  188,  149,  142,  143,
01561       150,  142,  188,  188,  144, 1179,  148,  150,  144,  145,
01562       146, 1176,  147,  604,  150,  153,  153,  145,  154,  156,
01563       153,  155,  154,  154,  156,  155,  155,  161,  157, 1173,
01564       154,  157,  158,  159,  150,  165,  157,  166,  165,  158,
01565       159,  181,  166,  181,  158,  159,  181,  190,  165,  186,
01566       161,  194,  186,  159,  254,  220,  181,  190,  194,  254,
01567 
01568       161,  200,  186,  205,  200,  212,  205, 1172,  214, 1070,
01569       215,  215,  212,  224,  200,  214,  205,  215,  220,  226,
01570       224, 1070,  227,  228,  229,  230,  226,  231,  220,  227,
01571       228,  229,  230,  232,  231,  233,  234,  228,  364,  235,
01572       232, 1171,  233,  234,  236,  227,  235,  237,  229,  230,
01573       232,  236,  238,  239,  237,  241,  240, 1170,  231,  238,
01574       239,  234,  241,  240,  236,  233,  243,  242,  364,  235,
01575       241, 1169,  244,  243,  242,  239,  245,  237,  240,  244,
01576       238,  242,  246,  245,  247,  248,  249,  244,  250,  246,
01577       249,  247,  250,  249,  253,  250,  242,  249,  243,  250,
01578 
01579      1168,  253,  247,  251,  245,  256, 1167,  251,  248,  246,
01580       251,  248,  256,  252,  251,  282,  257,  252,  248,  259,
01581       252,  257,  282,  250,  252,  258,  259,  258, 1166,  282,
01582       258,  259,  251,  260,  261,  262,  260,  261,  260,  261,
01583       262, 1164,  263, 1163,  264,  262,  263,  266,  252,  264,
01584       265,  263,  266,  264,  265,  265,  266,  267,  267,  268,
01585       269,  270,  270,  267,  268,  269,  270,  269,  268,  271,
01586       271,  272,  273,  278,  271,  274,  278,  272, 1021,  273,
01587       274,  278,  272,  275,  273,  276,  274,  273,  279,  275,
01588       276,  277,  276,  280,  275,  279,  277,  277,  284,  281,
01589 
01590       280,  283,  284, 1161, 1021,  279,  281,  284,  283,  285,
01591       280,  286,  286,  285,  288,  287,  286,  289,  285,  288,
01592       288,  281,  287,  291,  289,  281,  292,  287,  283,  293,
01593       291,  295, 1156,  292,  294,  294,  293,  295,  416,  294,
01594       296,  322,  295,  416,  293,  311,  316,  318,  292,  325,
01595       296,  322,  311,  316,  318,  311,  325,  327,  328,  311,
01596       329,  331,  330,  332,  327,  328,  333,  329,  331,  330,
01597       332,  334,  335,  333,  336,  329,  330,  337,  334,  335,
01598       328,  336,  368,  333,  337,  331,  339,  342,  336,  368,
01599       343,  342,  335,  339,  332,  343,  342,  340,  339,  343,
01600 
01601       340,  334,  340,  341,  337,  344,  344,  345,  341, 1152,
01602       346,  344,  366,  341,  345,  346,  346,  360,  370,  345,
01603       363,  372,  366,  360,  360,  370,  363,  363,  372,  374,
01604       387,  388,  390,  389,  391,  393,  374,  387,  388,  390,
01605       389,  391,  393, 1150,  398,  409,  736,  394,  530,  391,
01606       390,  398,  409,  393,  394,  530,  387,  736,  398,  388,
01607       389,  392,  392,  394,  392,  392,  392,  392,  392,  392,
01608       392,  392,  392,  392,  392,  392,  392,  392,  392,  392,
01609       392,  392,  392,  392,  392,  392,  392,  392,  392,  392,
01610       392,  392,  392,  392,  392,  392,  392,  392,  392,  392,
01611 
01612       392,  395,  396,  397,  400,  399,  961,  453,  395,  396,
01613       397,  400,  399,  403,  401,  402,  404,  453, 1148,  395,
01614       403,  401,  402,  404,  396,  397,  405,  961,  406,  395,
01615       399, 1147,  407,  405,  404,  406,  400,  401,  402,  407,
01616       549,  408,  410, 1146,  403,  408,  410,  549,  406,  410,
01617       407,  411,  408,  410,  405,  411,  412,  413,  411,  463,
01618       412,  413,  411,  412,  413,  417,  463,  412,  413,  418,
01619       417,  420,  417, 1145,  418,  418,  413,  420,  419,  423,
01620       411,  419,  420, 1144,  423,  422,  419,  463,  422,  423,
01621       412,  421,  421,  422,  421,  421,  421,  421,  421,  421,
01622 
01623       421,  421,  421,  421,  421,  421,  421,  421,  421,  421,
01624       421,  421,  421,  421,  421,  421,  421,  421,  421,  421,
01625       421,  421,  421,  421,  421,  421,  421,  421,  421,  421,
01626       421,  424,  425,  425,  424,  426,  426,  425,  427,  424,
01627       426,  424,  428,  429,  538,  427,  428,  428,  429,  538,
01628       427,  430, 1143,  430,  429,  431,  430,  431,  432,  433,
01629       431,  437,  433,  432,  434,  443, 1141,  433,  432,  434,
01630       443,  434,  435,  435,  436,  443,  441,  436,  435,  444,
01631       444,  445,  436,  441,  445,  444,  437,  806, 1138,  445,
01632       806,  437,  438,  438,  441,  438,  438,  438,  438,  438,
01633 
01634       438,  438,  438,  438,  438,  438,  438,  438,  438,  438,
01635       438,  438,  438,  438,  438,  438,  438,  438,  438,  438,
01636       438,  438,  438,  438,  438,  438,  438,  438,  438,  438,
01637       438,  438,  439,  440,  446,  447, 1136,  462,  448,  439,
01638       440,  446,  447,  448,  462,  449, 1134,  449,  466,  448,
01639       449,  472,  466,  440,  560,  611,  472,  472,  447,  466,
01640       462,  560,  611,  439,  442,  442,  446,  442,  442,  442,
01641       442,  442,  442,  442,  442,  442,  442,  442,  442,  442,
01642       442,  442,  442,  442,  442,  442,  442,  442,  442,  442,
01643       442,  442,  442,  442,  442,  442,  442,  442,  442,  442,
01644 
01645       442,  442,  442,  442,  461,  464,  465,  467,  468,  470,
01646       469,  461,  464,  465,  467,  468,  470,  469,  474,  471,
01647       764,  465, 1132,  473,  471,  467,  471,  470, 1129,  473,
01648       468,  764,  464,  469,  473,  467,  461,  475,  499,  546,
01649       475,  476,  476,  474,  546,  475,  476,  475,  474,  477,
01650       478,  477,  493,  478,  477,  494,  495,  496,  478,  493,
01651       497,  499,  494,  495,  496,  507,  511,  497,  493,  494,
01652       526,  499,  507,  511,  526,  526,  911,  911,  911,  495,
01653       511,  507,  496,  497,  501,  501, 1126,  501,  501,  501,
01654       501,  501,  501,  501,  501,  501,  501,  501,  501,  501,
01655 
01656       501,  501,  501,  501,  501,  501,  501,  501,  501,  501,
01657       501,  501,  501,  501,  501,  501,  501,  501,  501,  501,
01658       501,  501,  501,  501,  503,  504,  505,  506,  508,  509,
01659       510,  503,  504,  505,  506,  508,  509,  510,  514,  539,
01660       512,  517,  539,  642,  539,  514,  505,  512,  517,  506,
01661       642,  505,  503,  509,  508,  504, 1125,  516, 1123,  517,
01662       510,  514,  512,  513,  516,  515,  525,  513,  525,  515,
01663       513,  525,  513,  513,  513,  513,  515,  515,  518, 1117,
01664       520, 1118,  518,  516,  520,  518,  513,  520,  521,  518,
01665       522,  520,  521,  523,  522,  521,  513,  522,  523,  521,
01666 
01667       520,  522,  524,  523,  833,  528,  527, 1118,  527,  524,
01668       521,  527,  528,  533,  524,  833,  534, 1115,  533,  537,
01669       533,  534,  522,  541,  537,  534,  535,  535,  528,  537,
01670       541,  535,  535, 1110,  535,  541,  536,  536,  528,  531,
01671       531,  536,  531,  531,  531,  531,  531,  531,  531,  531,
01672       531,  531,  531,  531,  531,  531,  531,  531,  531,  531,
01673       531,  531,  531,  531,  531,  531,  531,  531,  531,  531,
01674       531,  531,  531,  531,  531,  531,  531,  531,  531,  540,
01675       542,  542,  551, 1109,  540,  542,  805, 1108,  540,  543,
01676       544,  545,  544,  548,  547,  544,  543,  547,  543,  543,
01677 
01678       548,  543,  547,  545,  563, 1107,  563, 1106,  568,  563,
01679       551, 1105,  543,  551,  543,  568,  545,  805,  548,  543,
01680       568,  545,  543,  548,  553,  553, 1104,  553,  553,  553,
01681       553,  553,  553,  553,  553,  553,  553,  553,  553,  553,
01682       553,  553,  553,  553,  553,  553,  553,  553,  553,  553,
01683       553,  553,  553,  553,  553,  553,  553,  553,  553,  553,
01684       553,  553,  553,  553,  555,  556,  557,  558, 1101, 1071,
01685       557,  555,  556,  557,  558,  564,  557,  557,  566,  567,
01686       564, 1099,  564,  569,  569,  566,  567,  555,  569,  593,
01687       652,  593,  566,  556,  593,  558, 1071,  652,  558,  561,
01688 
01689       561,  567,  561,  561,  561,  561,  561,  561,  561,  561,
01690       561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
01691       561,  561,  561,  561,  561,  561,  561,  561,  561,  561,
01692       561,  561,  561,  561,  561,  561,  561,  561,  561,  565,
01693       582,  583, 1098,  584,  585,  586,  565,  582,  583,  565,
01694       584,  585,  586,  588,  582,  589,  594,  584,  594,  595,
01695       588,  594,  589,  583,  565,  590,  595,  585,  586,  565,
01696       855,  589,  590,  588,  590,  591,  598,  592,  588,  591,
01697      1097,  855,  591,  598,  592,  598,  591,  597,  590,  592,
01698       596,  596,  597,  595,  599,  596,  596,  597,  590,  598,
01699 
01700       613,  599,  780,  609,  614, 1096,  616,  613, 1095,  598,
01701       609,  614,  609,  616,  613,  615,  617, 1093,  620,  599,
01702       614,  622,  615,  617,  599,  620,  609,  780,  622,  852,
01703       621,  623,  780,  615,  617,  616,  609,  621,  623,  622,
01704       624,  625,  626,  620,  627, 1091,  628,  624,  625,  626,
01705       629,  627,  621,  628,  864,  625,  630,  629, 1089,  631,
01706       852,  623,  627,  630,  628,  624,  631,  626,  631,  635,
01707       636,  640,  630, 1087,  637, 1084,  635,  636,  640,  641,
01708       629,  637,  631,  644,  645,  864,  641,  644,  645,  653,
01709       644,  645,  631,  655,  644,  645,  653,  655,  655,  646,
01710 
01711       635,  636,  640,  646,  637, 1082,  646,  647,  648,  641,
01712       646, 1080,  649,  648,  647,  649,  645,  644,  648,  647,
01713       649,  675,  650,  651, 1079, 1078,  651,  650,  675,  646,
01714       650,  651,  656,  656, 1077,  657,  658,  656,  657,  661,
01715       659,  658,  659,  657,  660,  658,  661,  659,  660,  660,
01716       662,  661, 1068,  663,  662,  662,  663,  664,  665,  666,
01717       664,  663, 1006,  665,  666,  664,  667,  665, 1066,  666,
01718      1006,  669,  670,  667,  671,  667,  669,  670,  672,  671,
01719       679,  669,  670,  671,  922,  672,  673,  679,  674,  667,
01720       672,  673, 1006,  674,  680,  681,  673,  674,  679,  667,
01721 
01722       683,  680,  681,  684,  687,  681,  686,  683,  680,  686,
01723       684,  687,  688,  689,  686,  922,  687,  690,  691,  688,
01724       689,  692,  688,  691,  690,  704,  692,  691,  705,  706,
01725       707,  692,  704,  690,  708,  705,  706,  707, 1058,  710,
01726       711,  708,  712,  689,  705,  706,  710,  711,  707,  712,
01727      1059,  712,  708,  715,  711,  704,  717,  710, 1059,  718,
01728       715,  717,  718,  721, 1055,  719,  717,  718,  719,  720,
01729       721,  722,  720,  719,  724,  721,  734,  720,  722,  740,
01730       722,  724,  743,  734,  744,  734,  740,  745,  746,  743,
01731       750,  744,  747,  751,  745,  746,  747,  750,  752,  734,
01732 
01733       751,  754,  782,  747,  750,  752,  755,  782,  754,  734,
01734       746,  753,  743,  755,  744,  753,  757,  756,  753,  751,
01735       745,  758,  753,  757,  756,  759,  752,  761,  758,  755,
01736       754,  756,  759,  760,  761,  769,  761,  760, 1054, 1053,
01737      1052,  763,  769,  759,  760,  760,  757,  765,  766,  758,
01738       761,  763, 1049,  763,  767,  766,  771,  765,  765,  765,
01739       761,  767,  776,  771,  763, 1046, 1045,  776,  768,  767,
01740       765,  776,  768,  766,  763,  768, 1044,  773,  774,  768,
01741       765,  773,  774,  775,  773,  774,  771,  775,  773,  774,
01742       775,  777,  778,  807,  775,  781,  777,  778,  807,  927,
01743 
01744       777,  774,  781,  773,  778,  779,  779,  781,  783,  784,
01745       779, 1043,  785,  783,  930,  783,  784,  786,  775,  785,
01746       788,  787,  786,  787,  785,  786,  787,  788,  789,  792,
01747       927,  790,  788,  789,  784,  793,  790,  789,  790,  784,
01748       791,  792,  793,  791,  793,  930,  798,  796,  791,  803,
01749       795,  796,  796,  798,  792,  797,  803,  804,  793,  792,
01750       795,  797,  795, 1042,  804,  799,  797, 1041,  793, 1037,
01751       799,  798,  808,  795,  799,  808,  798,  808,  809,  887,
01752      1035,  804,  816,  795,  887,  809,  810,  810,  810,  816,
01753       810,  811, 1032, 1031,  811,  854,  809,  810,  810,  811,
01754 
01755       812,  812,  812,  822,  823,  826,  824,  825, 1030,  826,
01756       822,  823,  812,  824,  825,  828,  826, 1029,  854,  829,
01757       830,  822,  828,  832,  838,  812,  829,  830,  854,  830,
01758       812,  869,  836,  832,  834,  832,  824,  836,  869, 1028,
01759       825,  836,  829,  828,  834,  834,  834,  837,  839,  838,
01760       843, 1007,  837,  839,  838,  839,  840,  841,  840,  837,
01761       843,  840,  843,  856,  841,  861,  841, 1005,  863,  862,
01762       867,  870,  861,  868,  856,  863,  862,  867,  871,  861,
01763       868,  872,  874,  875,  873,  871,  856,  862,  872, 1004,
01764       875,  873, 1003,  867,  863, 1002,  856,  870,  868,  875,
01765 
01766       871,  870,  873,  876,  872,  874,  877,  880,  998,  997,
01767       876,  881,  882,  877,  880,  874,  882,  883,  881,  882,
01768       996,  883,  995,  882,  883,  884,  994,  885,  883,  884,
01769       892,  876,  884,  881,  885,  883,  884,  886,  892,  885,
01770       886,  888,  882,  891,  889,  886,  889,  890,  888,  889,
01771       891,  890,  890,  893,  993,  992,  892,  991,  893,  884,
01772       892,  894,  894,  893,  897,  895,  894,  895,  896,  897,
01773       895,  896,  888,  898,  897,  899,  896,  988,  898,  986,
01774       898,  985,  899,  900,  900,  900,  900,  900,  900,  900,
01775       900,  900,  900,  900,  900,  900,  900,  900,  900,  900,
01776 
01777       900,  900,  900,  900,  900,  900,  900,  900,  900,  900,
01778       900,  900,  900,  900,  900,  900,  900,  900,  900,  900,
01779       900,  900,  900,  901,  901,  904,  907,  917,  901,  904,
01780       909,  909,  909,  912,  912,  912,  904,  916,  932,  984,
01781       912,  921,  909,  925,  916,  912,  924,  943,  921,  924,
01782       925,  907,  983,  917,  924,  936,  907,  917,  937,  921,
01783       938,  932,  936,  981,  942,  937,  980,  938,  942,  947,
01784       936,  932,  946,  943,  925,  942,  947,  943,  975,  946,
01785       948,  974,  949,  951,  952,  938,  937,  948,  946,  949,
01786       951,  952,  953,  973,  954,  972,  953,  947,  954,  953,
01787 
01788       955,  954,  959,  953,  955,  954,  956,  955,  949,  952,
01789       948,  955,  956,  957,  954,  971,  950,  956,  957,  958,
01790       957,  953,  960,  958,  958,  963,  955,  959,  963,  964,
01791       960,  965,  959,  963,  964,  966,  965,  967,  965,  964,
01792       966,  970,  967,  976,  966,  970,  970,  945,  960,  944,
01793       976,  941,  960,  969,  969,  969,  969,  969,  969,  969,
01794       969,  969,  969,  969,  969,  969,  969,  969,  969,  969,
01795       969,  969,  969,  969,  969,  969,  969,  969,  969,  969,
01796       969,  969,  969,  969,  969,  969,  969,  969,  969,  969,
01797       969,  969,  969,  977,  977,  977,  979,  979,  979,  982,
01798 
01799       987,  940,  939,  979,  990,  977, 1000,  987,  979,  990,
01800       999,  990,  935, 1000, 1072, 1000, 1008,  999,  934, 1001,
01801      1001, 1001, 1072, 1008, 1009,  982, 1001, 1011,  987,  982,
01802      1012, 1009, 1013,  999, 1011,  933, 1013, 1012, 1008, 1013,
01803      1014,  931, 1015, 1013, 1014, 1022, 1015, 1014, 1012, 1015,
01804      1020, 1014, 1016, 1015, 1016, 1009, 1017, 1016, 1020, 1018,
01805      1018, 1018, 1014, 1017,  929, 1017, 1018, 1019, 1023, 1023,
01806      1022, 1015, 1024, 1023, 1019, 1022, 1074, 1024,  928,  926,
01807      1020, 1074, 1024, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
01808      1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
01809 
01810      1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
01811      1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
01812      1025, 1025, 1025, 1027,  923, 1033, 1027, 1034,  920, 1036,
01813      1039, 1027, 1033, 1040,  919, 1034, 1036, 1039, 1036, 1039,
01814      1040, 1047, 1040, 1050, 1122, 1122,  918, 1056, 1047, 1122,
01815      1050, 1048, 1036, 1039, 1050, 1056, 1040, 1034, 1048, 1047,
01816      1048, 1051, 1036, 1039, 1060, 1061, 1040,  915, 1051,  914,
01817      1069, 1060, 1061, 1051, 1048, 1062, 1063, 1056, 1069, 1062,
01818      1063, 1085, 1062, 1063, 1048, 1064, 1062, 1063, 1064, 1085,
01819      1060,  913, 1065, 1064,  906, 1061, 1067, 1073, 1063, 1065,
01820 
01821      1069, 1065, 1075, 1067, 1073, 1081, 1083, 1075, 1067, 1086,
01822      1088, 1075, 1081, 1090, 1083, 1065, 1086, 1088, 1086, 1092,
01823      1090, 1088, 1090, 1094, 1100, 1065, 1092, 1102, 1092,  905,
01824      1094, 1100, 1111, 1100, 1094, 1119, 1083, 1102, 1103, 1102,
01825      1111, 1112, 1092, 1119,  903, 1103, 1113, 1100, 1112, 1103,
01826      1102, 1127, 1092, 1113, 1114, 1116,  902, 1100,  878, 1127,
01827      1102, 1114,  866, 1114, 1155, 1116, 1112, 1116, 1113, 1120,
01828      1121, 1155, 1128, 1120, 1121, 1121, 1120, 1114, 1116, 1128,
01829      1120, 1128, 1130, 1139, 1131,  865, 1133, 1114, 1116, 1137,
01830       860, 1131, 1130, 1135, 1130, 1131, 1133, 1133, 1133, 1137,
01831 
01832      1135, 1137, 1135, 1140, 1142, 1157, 1139, 1149, 1159, 1153,
01833      1140, 1154, 1157, 1153, 1140, 1142, 1139, 1149, 1154, 1149,
01834      1153, 1158, 1177, 1165, 1174, 1158, 1175, 1142, 1158, 1177,
01835      1149, 1174, 1158, 1159, 1175, 1162, 1154, 1142, 1159, 1160,
01836      1149,  859, 1174, 1160, 1160, 1162, 1165, 1162,  858, 1178,
01837      1185,  857, 1178,  853,  851,  850, 1165, 1178, 1185, 1195,
01838      1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195,
01839      1196, 1196, 1196, 1196, 1196, 1196, 1196, 1196, 1196, 1196,
01840      1196, 1197, 1197, 1197, 1197, 1197, 1197, 1197, 1197, 1197,
01841      1197, 1197, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198,
01842 
01843      1198, 1198, 1198, 1199, 1199, 1199, 1199, 1199, 1199, 1199,
01844      1199, 1199, 1199, 1199, 1200, 1200, 1200, 1200, 1200, 1200,
01845      1200, 1200, 1200, 1200, 1200, 1201, 1201, 1201, 1201, 1201,
01846      1201, 1201, 1201, 1201, 1201, 1201, 1202, 1202,  849, 1202,
01847      1202, 1202, 1202, 1202, 1202,  848, 1202, 1203, 1203, 1203,
01848      1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1204,  847,
01849       846,  845, 1204,  844,  842, 1204, 1205, 1205, 1205, 1205,
01850      1205, 1205, 1205, 1205, 1205, 1205, 1205, 1206,  835,  831,
01851       827, 1206,  821,  820, 1206, 1207,  819, 1207,  818,  817,
01852       815,  814,  813,  802, 1207, 1208,  801, 1208, 1208,  800,
01853 
01854       794, 1208,  772,  762, 1208, 1209,  749,  748,  741, 1209,
01855       739,  738, 1209, 1210,  737,  735,  733, 1210,  732,  731,
01856      1210, 1211, 1211, 1211, 1211, 1211, 1211, 1211, 1211, 1211,
01857      1211, 1211, 1212,  730,  729,  728, 1212,  727,  726, 1212,
01858      1213,  725,  723, 1213, 1213,  716,  713, 1213, 1214,  709,
01859       703,  702, 1214,  701,  700, 1214, 1215,  699,  698,  697,
01860      1215,  696,  695, 1215, 1216, 1216,  694, 1216, 1216, 1216,
01861      1216, 1216, 1216, 1216, 1216, 1217, 1217,  693, 1217, 1217,
01862      1217, 1217, 1217, 1217, 1217, 1217, 1218, 1218, 1218, 1218,
01863      1218, 1218, 1218, 1218, 1218, 1218, 1218, 1219, 1219,  678,
01864 
01865      1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1220, 1220,
01866       677, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1221,
01867      1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221,
01868      1222,  676,  668, 1222, 1223,  643,  639, 1223, 1224,  632,
01869      1224, 1224,  619,  618, 1224,  612,  610, 1224, 1225, 1225,
01870      1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1226,
01871       608,  607, 1226,  606,  605, 1226,  602,  601, 1226, 1227,
01872       600,  581, 1227, 1228,  579,  578, 1228, 1229,  577,  576,
01873      1229, 1230, 1230,  575,  574, 1230, 1231,  573,  572, 1231,
01874      1232,  571,  570, 1232, 1233,  562,  559, 1233,  554,  552,
01875 
01876      1233,  532,  529, 1233, 1234, 1234,  519, 1234, 1234, 1234,
01877      1234, 1234, 1234, 1234, 1234, 1235, 1235,  502, 1235, 1235,
01878      1235, 1235, 1235, 1235, 1235, 1235, 1236, 1236, 1236, 1236,
01879      1236, 1236, 1236, 1236, 1236, 1236, 1236, 1237, 1237,  500,
01880      1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1238, 1238,
01881      1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1239,
01882      1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,
01883      1240,  491, 1240,  490,  489,  488,  487, 1240,  486, 1240,
01884      1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241,
01885      1241, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242,
01886 
01887      1242, 1242, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243,
01888      1243, 1243, 1243, 1244, 1244, 1244, 1244, 1244, 1244, 1244,
01889      1244, 1244, 1244, 1244, 1245, 1245, 1245, 1245, 1245, 1245,
01890      1245, 1245, 1245, 1245, 1245, 1246, 1246, 1246, 1246, 1246,
01891      1246, 1246, 1246, 1246, 1246, 1246, 1247, 1247, 1247, 1247,
01892      1247, 1247, 1247, 1247, 1247, 1247, 1247, 1248, 1248, 1248,
01893      1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1249, 1249,
01894      1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1250,
01895       485,  484,  483, 1250,  482,  481, 1250, 1251,  480, 1251,
01896       479,  460,  459,  458,  457,  456, 1251, 1252,  455,  454,
01897 
01898      1252, 1253,  452,  451,  450, 1253,  414,  384, 1253, 1254,
01899      1254,  379, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254,
01900      1255,  371,  367, 1255, 1256, 1256, 1256, 1256, 1256, 1256,
01901      1256, 1256, 1256, 1256, 1256, 1257, 1257, 1257, 1257, 1257,
01902      1257, 1257, 1257, 1257, 1257, 1257, 1258, 1258, 1258, 1258,
01903      1258, 1258, 1258, 1258, 1258, 1258, 1258, 1259, 1259, 1259,
01904      1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1260,  365,
01905      1260, 1260,  362,  357,  356,  355,  354, 1260, 1261, 1261,
01906      1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1262,
01907      1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262,
01908 
01909      1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263,
01910      1263, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264,
01911      1264, 1264, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
01912      1265, 1265, 1265, 1266,  353, 1266, 1266,  352,  351, 1266,
01913       350,  349, 1266, 1267, 1267, 1267, 1267, 1267, 1267, 1267,
01914      1267, 1267, 1267, 1267, 1268, 1268, 1268, 1268, 1268, 1268,
01915      1268, 1268, 1268, 1268, 1268, 1269, 1269, 1269, 1269,  348,
01916       347, 1269, 1269, 1269, 1269, 1269, 1270,  338,  324, 1270,
01917       323,  321, 1270,  319,  313, 1270,  312,  310,  309,  308,
01918       307,  306,  305,  304,  303,  302,  301,  300,  298,  297,
01919 
01920       255,  222,  221,  218,  217,  211,  207,  204,  199,  192,
01921       185,  180,  179,  178,  176,  175,  174,  173,  172,  171,
01922       170,  169,  168,  167,  164,  162,  151,  138,  133,  131,
01923       124,  123,  121,  118,  117,  115,  114,  113,  112,  111,
01924       109,  108,  107,   92,   60,   58,   54,   52,   47, 1194,
01925      1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194,
01926      1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194,
01927      1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194,
01928      1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194
01929     } ;
01930 
01931 extern int fscanYY_flex_debug;
01932 int fscanYY_flex_debug = 0;
01933 
01934 static yy_state_type *yy_state_buf=0, *yy_state_ptr=0;
01935 static char *yy_full_match;
01936 static int yy_lp;
01937 static int yy_looking_for_trail_begin = 0;
01938 static int yy_full_lp;
01939 static int *yy_full_state;
01940 #define YY_TRAILING_MASK 0x2000
01941 #define YY_TRAILING_HEAD_MASK 0x4000
01942 #define REJECT \
01943 { \
01944 *yy_cp = (yy_hold_char); /* undo effects of setting up fscanYYtext */ \
01945 yy_cp = (yy_full_match); /* restore poss. backed-over text */ \
01946 (yy_lp) = yy_full_lp; /* restore orig. accepting pos. */ \
01947 (yy_state_ptr) = yy_full_state; /* restore orig. state */ \
01948 yy_current_state = *(yy_state_ptr); /* restore curr. state */ \
01949 ++(yy_lp); \
01950 goto find_rule; \
01951 }
01952 
01953 #define yymore() yymore_used_but_not_detected
01954 #define YY_MORE_ADJ 0
01955 #define YY_RESTORE_YY_MORE_OFFSET
01956 char *fscanYYtext;
01957 #line 1 "fortranscanner.l"
01958 /* -*- mode: fundamental; indent-tabs-mode: 1; -*- */
01959 /*****************************************************************************
01960  * Parser for Fortran90 F subset
01961  *
01962  * Copyright (C) by Anke Visser
01963  * based on the work of Dimitri van Heesch.
01964  *
01965  * Permission to use, copy, modify, and distribute this software and its
01966  * documentation under the terms of the GNU General Public License is hereby 
01967  * granted. No representations are made about the suitability of this software 
01968  * for any purpose. It is provided "as is" without express or implied warranty.
01969  * See the GNU General Public License for more details.
01970  *
01971  * Documents produced by Doxygen are derivative works derived from the
01972  * input used in their production; they are not affected by this license.
01973  *
01974  */ 
01975 /* Developer notes.
01976  *
01977  * - Consider using startScope(), endScope() functions with  module, program, 
01978  * subroutine or any other scope in fortran program.
01979  *
01980  * - Symbol modifiers (attributes) are collected using SymbolModifiers |= operator during
01981  * substructure parsing. When substructure ends all modifiers are applied to actual
01982  * entries in applyModifiers() functions.
01983  * 
01984  * - How case insensitiveness should be handled in code?
01985  * On one side we have arg->name and entry->name, on another side modifierMap[name].
01986  * In entries and arguments case is the same as in code, in modifier map case is lowered and
01987  * then it is compared to lowered entry/argument names.
01988  *
01989  * - Do not like constructs like aa{BS} or {BS}bb. Should try to handle blank space
01990  * with separate rule?: It seems it is often necessary, because we may parse something like 
01991  * "functionA" or "MyInterface". So constructs like `(^|[ \t])interface({BS_}{ID})?/[ \t\n]'
01992  * are desired.
01993  */
01994 #line 40 "fortranscanner.l"
01995 
01996 #include <stdio.h> 
01997 #include <stdlib.h>
01998 #include <assert.h>
01999 #include <ctype.h>
02000 
02001 #include "qtbc.h"
02002 #include <qarray.h>
02003 #include <qstack.h>
02004 #include <qregexp.h>
02005 #include <unistd.h> 
02006 #include <qfile.h>
02007 #include <qmap.h>
02008   
02009 #include "fortranscanner.h"
02010 #include "entry.h"
02011 #include "message.h"
02012 #include "config.h"
02013 #include "doxygen.h"
02014 #include "util.h"
02015 #include "defargs.h"
02016 #include "language.h"
02017 #include "commentscan.h" 
02018 #include "fortrancode.h"
02019 #include "pre.h"
02020 
02021 #define YY_NEVER_INTERACTIVE 1
02022 
02023 enum ScanVar { V_IGNORE, V_VARIABLE, V_PARAMETER};
02024 
02025 // {{{ ----- Helper structs -----
02027 struct SymbolModifiers {
02028   enum Protection {NONE_P, PUBLIC, PRIVATE};
02029   enum Direction {NONE_D, IN, OUT, INOUT};
02030 
02032   QCString type, returnName;
02033   Protection protection;
02034   Direction direction;
02035   bool optional;
02036   QCString dimension;
02037   bool allocatable;
02038   bool external;
02039   bool intrinsic;
02040   bool parameter;
02041   bool pointer;
02042   bool target;
02043   bool save;
02044 
02045   SymbolModifiers() : type(), returnName(), protection(NONE_P), direction(NONE_D),
02046     optional(FALSE), dimension(), allocatable(FALSE),
02047     external(FALSE), intrinsic(FALSE), parameter(FALSE),
02048     pointer(FALSE), target(FALSE), save(FALSE) {}
02049 
02050   SymbolModifiers& operator|=(const SymbolModifiers &mdfs);
02051   SymbolModifiers& operator|=(QCString mdfrString);
02052 };
02053 
02054 //ostream& operator<<(ostream& out, const SymbolModifiers& mdfs);
02055 
02056 static const char *directionStrs[] = 
02057 {
02058    "", "intent(in)", "intent(out)", "intent(inout)"
02059 };
02060 
02061 // }}}
02062 
02063 /* -----------------------------------------------------------------
02064  *
02065  *      statics
02066  */
02067 static ParserInterface *g_thisParser; 
02068 static const char *     inputString;
02069 static int              inputPosition;
02070 static QFile            inputFile;
02071 static QCString         yyFileName;
02072 static int              yyLineNr     = 1 ;
02073 static Entry*           current_root = 0 ;
02074 static Entry*           global_root  = 0 ;
02075 static Entry*           file_root    = 0 ;
02076 static Entry*           current      = 0 ;
02077 static Entry*           last_entry   = 0 ;
02078 static ScanVar          v_type       = V_IGNORE; // type of parsed variable
02079 static QList<Entry>     moduleProcedures; // list of all interfaces which contain unresolved 
02080                                           // module procedures
02081 static QCString         docBlock;
02082 static QCString         docBlockName;
02083 static bool             docBlockInBody;
02084 static bool             docBlockJavaStyle;
02085 
02086 static MethodTypes      mtype;
02087 static bool             gstat;
02088 static Specifier        virt;
02089 
02090 static QCString          debugStr;
02091 static QCString          result; // function result
02092 static Argument          *parameter; // element of parameter list
02093 static QCString          argType;  // fortran type of an argument of a parameter list
02094 static QCString          argName;  // last identifier name in variable list
02095 static QCString          initializer;  // initial value of a variable
02096 static QCString          useModuleName;  // name of module in the use statement
02097 static Protection        defaultProtection;
02098 
02099 static char              stringStartSymbol; // single or double quote
02100 
02102 static SymbolModifiers currentModifiers;
02104 static QMap<Entry*,QMap<QCString,SymbolModifiers> > modifiers;
02105 
02106 //-----------------------------------------------------------------------------
02107 
02108 static int yyread(char *buf,int max_size);
02109 static void startCommentBlock(bool);
02110 static void handleCommentBlock(const QCString &doc,bool brief);
02111 static void addCurrentEntry();
02112 static void addInterface(QCString name);
02113 static Argument *addFortranParameter(const QCString &type,const QCString &name, const QCString docs);
02114 static void scanner_abort();
02115 
02116 static void startScope(Entry *scope);
02117 static bool endScope(Entry *scope);
02118 static QCString getFullName(Entry *e);
02119 static bool isTypeName(QCString name);
02120 static void resolveModuleProcedures(QList<Entry> &moduleProcedures, Entry *current_root);
02121 
02122 //-----------------------------------------------------------------------------
02123 #undef  YY_INPUT
02124 #define YY_INPUT(buf,result,max_size) result=yyread(buf,max_size);
02125 //-----------------------------------------------------------------------------
02126 
02127 //-----------------------------------------------------------------------------
02128 //-----------------------------------------------------------------------------
02129 /* Assume that attribute statements are almost the same as attributes. */
02130 /*%option debug */
02131 //---------------------------------------------------------------------------------
02156 #line 2157 "<stdout>"
02157 
02158 #define INITIAL 0
02159 #define Subprog 1
02160 #define Parameterlist 2
02161 #define SubprogBody 3
02162 #define Start 4
02163 #define Comment 5
02164 #define Module 6
02165 #define ModuleBody 7
02166 #define AttributeList 8
02167 #define Variable 9
02168 #define Initialization 10
02169 #define ArrayInitializer 11
02170 #define Typedef 12
02171 #define TypedefBody 13
02172 #define InterfaceBody 14
02173 #define StrIgnore 15
02174 #define String 16
02175 #define Use 17
02176 #define UseOnly 18
02177 #define ModuleProcedure 19
02178 #define DocBlock 20
02179 #define DocBackLine 21
02180 #define EndDoc 22
02181 
02182 #ifndef YY_NO_UNISTD_H
02183 /* Special case for "unistd.h", since it is non-ANSI. We include it way
02184  * down here because we want the user's section 1 to have been scanned first.
02185  * The user has a chance to override it with an option.
02186  */
02187 #include <unistd.h>
02188 #endif
02189 
02190 #ifndef YY_EXTRA_TYPE
02191 #define YY_EXTRA_TYPE void *
02192 #endif
02193 
02194 static int yy_init_globals (void );
02195 
02196 /* Macros after this point can all be overridden by user definitions in
02197  * section 1.
02198  */
02199 
02200 #ifndef YY_SKIP_YYWRAP
02201 #ifdef __cplusplus
02202 extern "C" int fscanYYwrap (void );
02203 #else
02204 extern int fscanYYwrap (void );
02205 #endif
02206 #endif
02207 
02208     static void yyunput (int c,char *buf_ptr  );
02209     
02210 #ifndef yytext_ptr
02211 static void yy_flex_strncpy (char *,yyconst char *,int );
02212 #endif
02213 
02214 #ifdef YY_NEED_STRLEN
02215 static int yy_flex_strlen (yyconst char * );
02216 #endif
02217 
02218 #ifndef YY_NO_INPUT
02219 
02220 #ifdef __cplusplus
02221 static int yyinput (void );
02222 #else
02223 static int input (void );
02224 #endif
02225 
02226 #endif
02227 
02228         static int yy_start_stack_ptr = 0;
02229         static int yy_start_stack_depth = 0;
02230         static int *yy_start_stack = NULL;
02231     
02232     static void yy_push_state (int new_state );
02233     
02234     static void yy_pop_state (void );
02235     
02236     static int yy_top_state (void );
02237     
02238 /* Amount of stuff to slurp up with each read. */
02239 #ifndef YY_READ_BUF_SIZE
02240 #define YY_READ_BUF_SIZE 8192
02241 #endif
02242 
02243 /* Copy whatever the last rule matched to the standard output. */
02244 #ifndef ECHO
02245 /* This used to be an fputs(), but since the string might contain NUL's,
02246  * we now use fwrite().
02247  */
02248 #define ECHO (void) fwrite( fscanYYtext, fscanYYleng, 1, fscanYYout )
02249 #endif
02250 
02251 /* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
02252  * is returned in "result".
02253  */
02254 #ifndef YY_INPUT
02255 #define YY_INPUT(buf,result,max_size) \
02256         if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
02257                 { \
02258                 int c = '*'; \
02259                 size_t n; \
02260                 for ( n = 0; n < max_size && \
02261                              (c = getc( fscanYYin )) != EOF && c != '\n'; ++n ) \
02262                         buf[n] = (char) c; \
02263                 if ( c == '\n' ) \
02264                         buf[n++] = (char) c; \
02265                 if ( c == EOF && ferror( fscanYYin ) ) \
02266                         YY_FATAL_ERROR( "input in flex scanner failed" ); \
02267                 result = n; \
02268                 } \
02269         else \
02270                 { \
02271                 errno=0; \
02272                 while ( (result = fread(buf, 1, max_size, fscanYYin))==0 && ferror(fscanYYin)) \
02273                         { \
02274                         if( errno != EINTR) \
02275                                 { \
02276                                 YY_FATAL_ERROR( "input in flex scanner failed" ); \
02277                                 break; \
02278                                 } \
02279                         errno=0; \
02280                         clearerr(fscanYYin); \
02281                         } \
02282                 }\
02283 \
02284 
02285 #endif
02286 
02287 /* No semi-colon after return; correct usage is to write "yyterminate();" -
02288  * we don't want an extra ';' after the "return" because that will cause
02289  * some compilers to complain about unreachable statements.
02290  */
02291 #ifndef yyterminate
02292 #define yyterminate() return YY_NULL
02293 #endif
02294 
02295 /* Number of entries by which start-condition stack grows. */
02296 #ifndef YY_START_STACK_INCR
02297 #define YY_START_STACK_INCR 25
02298 #endif
02299 
02300 /* Report a fatal error. */
02301 #ifndef YY_FATAL_ERROR
02302 #define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
02303 #endif
02304 
02305 /* end tables serialization structures and prototypes */
02306 
02307 /* Default declaration of generated scanner - a define so the user can
02308  * easily add parameters.
02309  */
02310 #ifndef YY_DECL
02311 #define YY_DECL_IS_OURS 1
02312 
02313 extern int fscanYYlex (void);
02314 
02315 #define YY_DECL int fscanYYlex (void)
02316 #endif /* !YY_DECL */
02317 
02318 /* Code executed at the beginning of each rule, after fscanYYtext and fscanYYleng
02319  * have been set up.
02320  */
02321 #ifndef YY_USER_ACTION
02322 #define YY_USER_ACTION
02323 #endif
02324 
02325 /* Code executed at the end of each rule. */
02326 #ifndef YY_BREAK
02327 #define YY_BREAK break;
02328 #endif
02329 
02330 #define YY_RULE_SETUP \
02331         if ( fscanYYleng > 0 ) \
02332                 YY_CURRENT_BUFFER_LVALUE->yy_at_bol = \
02333                                 (fscanYYtext[fscanYYleng - 1] == '\n'); \
02334         YY_USER_ACTION
02335 
02338 YY_DECL
02339 {
02340         register yy_state_type yy_current_state;
02341         register char *yy_cp, *yy_bp;
02342         register int yy_act;
02343     
02344 #line 234 "fortranscanner.l"
02345 
02346 
02347  /*-----------------------------------------------------------------------------------*/
02348 
02349 #line 2350 "<stdout>"
02350 
02351         if ( !(yy_init) )
02352                 {
02353                 (yy_init) = 1;
02354 
02355 #ifdef YY_USER_INIT
02356                 YY_USER_INIT;
02357 #endif
02358 
02359         /* Create the reject buffer large enough to save one state per allowed character. */
02360         if ( ! (yy_state_buf) )
02361             (yy_state_buf) = (yy_state_type *)fscanYYalloc(YY_STATE_BUF_SIZE  );
02362 
02363                 if ( ! (yy_start) )
02364                         (yy_start) = 1; /* first start state */
02365 
02366                 if ( ! fscanYYin )
02367                         fscanYYin = stdin;
02368 
02369                 if ( ! fscanYYout )
02370                         fscanYYout = stdout;
02371 
02372                 if ( ! YY_CURRENT_BUFFER ) {
02373                         fscanYYensure_buffer_stack ();
02374                         YY_CURRENT_BUFFER_LVALUE =
02375                                 fscanYY_create_buffer(fscanYYin,YY_BUF_SIZE );
02376                 }
02377 
02378                 fscanYY_load_buffer_state( );
02379                 }
02380 
02381         while ( 1 )             /* loops until end-of-file is reached */
02382                 {
02383                 yy_cp = (yy_c_buf_p);
02384 
02385                 /* Support of fscanYYtext. */
02386                 *yy_cp = (yy_hold_char);
02387 
02388                 /* yy_bp points to the position in yy_ch_buf of the start of
02389                  * the current run.
02390                  */
02391                 yy_bp = yy_cp;
02392 
02393                 yy_current_state = (yy_start);
02394                 yy_current_state += YY_AT_BOL();
02395 
02396                 (yy_state_ptr) = (yy_state_buf);
02397                 *(yy_state_ptr)++ = yy_current_state;
02398 
02399 yy_match:
02400                 do
02401                         {
02402                         register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
02403                         while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
02404                                 {
02405                                 yy_current_state = (int) yy_def[yy_current_state];
02406                                 if ( yy_current_state >= 1195 )
02407                                         yy_c = yy_meta[(unsigned int) yy_c];
02408                                 }
02409                         yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
02410                         *(yy_state_ptr)++ = yy_current_state;
02411                         ++yy_cp;
02412                         }
02413                 while ( yy_base[yy_current_state] != 4150 );
02414 
02415 yy_find_action:
02416                 yy_current_state = *--(yy_state_ptr);
02417                 (yy_lp) = yy_accept[yy_current_state];
02418 find_rule: /* we branch to this label when backing up */
02419                 for ( ; ; ) /* until we find what rule we matched */
02420                         {
02421                         if ( (yy_lp) && (yy_lp) < yy_accept[yy_current_state + 1] )
02422                                 {
02423                                 yy_act = yy_acclist[(yy_lp)];
02424                                 if ( yy_act & YY_TRAILING_HEAD_MASK ||
02425                                      yy_looking_for_trail_begin )
02426                                         {
02427                                         if ( yy_act == yy_looking_for_trail_begin )
02428                                                 {
02429                                                 yy_looking_for_trail_begin = 0;
02430                                                 yy_act &= ~YY_TRAILING_HEAD_MASK;
02431                                                 break;
02432                                                 }
02433                                         }
02434                                 else if ( yy_act & YY_TRAILING_MASK )
02435                                         {
02436                                         yy_looking_for_trail_begin = yy_act & ~YY_TRAILING_MASK;
02437                                         yy_looking_for_trail_begin |= YY_TRAILING_HEAD_MASK;
02438                                         (yy_full_match) = yy_cp;
02439                                         yy_full_state = (yy_state_ptr);
02440                                         yy_full_lp = (yy_lp);
02441                                         }
02442                                 else
02443                                         {
02444                                         (yy_full_match) = yy_cp;
02445                                         yy_full_state = (yy_state_ptr);
02446                                         yy_full_lp = (yy_lp);
02447                                         break;
02448                                         }
02449                                 ++(yy_lp);
02450                                 goto find_rule;
02451                                 }
02452                         --yy_cp;
02453                         yy_current_state = *--(yy_state_ptr);
02454                         (yy_lp) = yy_accept[yy_current_state];
02455                         }
02456 
02457                 YY_DO_BEFORE_ACTION;
02458 
02459 do_action:      /* This label is used only to access EOF actions. */
02460 
02461                 switch ( yy_act )
02462         { /* beginning of action switch */
02463 case 1:
02464 /* rule 1 can match eol */
02465 YY_RULE_SETUP
02466 #line 238 "fortranscanner.l"
02467 { if (YY_START == String) REJECT; // "&" is ignored in strings
02468                                           yyLineNr++;}  /* line not finished -> read next line (text after "&" may be 
02469                                                            comment and has to be ignored */
02470         YY_BREAK
02471 /*------ ignore strings */ 
02472 case 2:
02473 YY_RULE_SETUP
02474 #line 243 "fortranscanner.l"
02475 { /* ignore \\  */}
02476         YY_BREAK
02477 case 3:
02478 YY_RULE_SETUP
02479 #line 244 "fortranscanner.l"
02480 { /* ignore \" and \'  */}
02481         YY_BREAK
02482 case 4:
02483 YY_RULE_SETUP
02484 #line 246 "fortranscanner.l"
02485 { // string ends with next quote without previous backspace
02486                                           if (fscanYYtext[0]!=stringStartSymbol) REJECT; // single vs double quote
02487                                           // fprintf(stderr,"string end: %s\n",debugStr.data());
02488                                           yy_pop_state();
02489                                         }           
02490         YY_BREAK
02491 case 5:
02492 YY_RULE_SETUP
02493 #line 252 "fortranscanner.l"
02494 { debugStr+=fscanYYtext; } // ignore String contents (especially '!') 
02495         YY_BREAK
02496 case 6:
02497 YY_RULE_SETUP
02498 #line 254 "fortranscanner.l"
02499 { /* string starts */
02500                                           if (YY_START == StrIgnore) REJECT; // ignore in simple comments
02501                                           // fprintf(stderr,"string start: %c %d\n",fscanYYtext[0],yyLineNr);
02502                                           yy_push_state(YY_START);
02503                                           stringStartSymbol=fscanYYtext[0]; // single or double quote
02504                                           BEGIN(String); debugStr="!^!";
02505                                         }
02506         YY_BREAK
02507 /*------ ignore simple comment (not documentation comments) */
02508 case 7:
02509 *yy_cp = (yy_hold_char); /* undo effects of setting up fscanYYtext */
02510 (yy_c_buf_p) = yy_cp = yy_bp + 1;
02511 YY_DO_BEFORE_ACTION; /* set up fscanYYtext again */
02512 YY_RULE_SETUP
02513 #line 264 "fortranscanner.l"
02514 {  if (YY_START == String) REJECT; // "!" is ignored in strings
02515                                           // skip comment line (without docu comments "!>" "!<" ) 
02516                                           /* ignore further "!" and ignore comments in Strings */
02517                                           if ((YY_START != StrIgnore) && (YY_START != String)) 
02518                                           {
02519                                             yy_push_state(YY_START);
02520                                             BEGIN(StrIgnore); 
02521                                             debugStr="*!";
02522                                             //fprintf(stderr,"start comment %d\n",yyLineNr);
02523                                            }      
02524                                         }
02525         YY_BREAK
02526 case 8:
02527 /* rule 8 can match eol */
02528 *yy_cp = (yy_hold_char); /* undo effects of setting up fscanYYtext */
02529 (yy_c_buf_p) = yy_cp -= 1;
02530 YY_DO_BEFORE_ACTION; /* set up fscanYYtext again */
02531 YY_RULE_SETUP
02532 #line 275 "fortranscanner.l"
02533 { yy_pop_state(); // comment ends with endline character
02534                                           //fprintf(stderr,"end comment %d %s\n",yyLineNr,debugStr.data());
02535                                         } // comment line ends
02536         YY_BREAK
02537 case 9:
02538 YY_RULE_SETUP
02539 #line 278 "fortranscanner.l"
02540 { debugStr+=fscanYYtext; } 
02541         YY_BREAK
02542 /*------ use handling ------------------------------------------------------------*/
02543 case 10:
02544 YY_RULE_SETUP
02545 #line 283 "fortranscanner.l"
02546 { 
02547                                           yy_push_state(YY_START);
02548                                           BEGIN(Use);     
02549                                         }
02550         YY_BREAK
02551 case 11:
02552 YY_RULE_SETUP
02553 #line 287 "fortranscanner.l"
02554 { 
02555                                           //fprintf(stderr,"using dir %s\n",fscanYYtext);
02556                                           current->name=fscanYYtext;
02557                                           current->fileName = yyFileName; 
02558                                           current->section=Entry::USINGDIR_SEC;
02559                                           current_root->addSubEntry(current);
02560                                           current = new Entry;
02561                                           yy_pop_state();
02562                                         }
02563         YY_BREAK
02564 case 12:
02565 *yy_cp = (yy_hold_char); /* undo effects of setting up fscanYYtext */
02566 (yy_c_buf_p) = yy_cp -= 1;
02567 YY_DO_BEFORE_ACTION; /* set up fscanYYtext again */
02568 YY_RULE_SETUP
02569 #line 296 "fortranscanner.l"
02570 { 
02571                                           useModuleName=fscanYYtext;
02572                                         }
02573         YY_BREAK
02574 case 13:
02575 YY_RULE_SETUP
02576 #line 299 "fortranscanner.l"
02577 { BEGIN(UseOnly); 
02578                                         }           
02579         YY_BREAK
02580 case 14:
02581 YY_RULE_SETUP
02582 #line 301 "fortranscanner.l"
02583 {}
02584         YY_BREAK
02585 case 15:
02586 YY_RULE_SETUP
02587 #line 302 "fortranscanner.l"
02588 {
02589                                           current->name= useModuleName+"::"+fscanYYtext;
02590                                           current->fileName = yyFileName; 
02591                                           current->section=Entry::USINGDECL_SEC;
02592                                           current_root->addSubEntry(current);
02593                                           current = new Entry ;
02594                                         }
02595         YY_BREAK
02596 case 16:
02597 /* rule 16 can match eol */
02598 YY_RULE_SETUP
02599 #line 309 "fortranscanner.l"
02600 {
02601                                           unput(*fscanYYtext);
02602                                           yy_pop_state();
02603                                         }
02604         YY_BREAK
02605 /*------ ignore special fortran statements */
02606 case 17:
02607 /* rule 17 can match eol */
02608 YY_RULE_SETUP
02609 #line 315 "fortranscanner.l"
02610 { // handle interface block
02611                                           QCString name = fscanYYtext;
02612                                           int index = name.find("interface", 0, FALSE);
02613                                           index = name.find(QRegExp("[^ \\t]"), index+9);
02614                                           //printf(stderr,"%s,%d\n",name.data(),index);
02615                                           if (index!=-1)
02616                                             name = name.right(name.length()-index);
02617                                           else // interface without name, must be inside subprog
02618                                             name = "interface"; 
02619                                           addInterface(name);
02620                                           yy_push_state(InterfaceBody);
02621                                           startScope(last_entry);
02622                                         }
02623         YY_BREAK
02624 case 18:
02625 YY_RULE_SETUP
02626 #line 328 "fortranscanner.l"
02627 {
02628                                           if (!endScope(current_root))
02629                                             yyterminate();
02630                                           yy_pop_state();
02631                                         }
02632         YY_BREAK
02633 case 19:
02634 YY_RULE_SETUP
02635 #line 333 "fortranscanner.l"
02636 { yy_push_state(YY_START);
02637                                           BEGIN(ModuleProcedure);
02638                                         }
02639         YY_BREAK
02640 case 20:
02641 YY_RULE_SETUP
02642 #line 336 "fortranscanner.l"
02643 {                                               
02644                                           current->section = Entry::FUNCTION_SEC ;
02645                                           current->name = fscanYYtext; 
02646                                           moduleProcedures.append(current);
02647                                           addCurrentEntry();
02648                                         }
02649         YY_BREAK
02650 case 21:
02651 /* rule 21 can match eol */
02652 YY_RULE_SETUP
02653 #line 342 "fortranscanner.l"
02654 { unput(*fscanYYtext); 
02655                                           yy_pop_state();
02656                                         }
02657         YY_BREAK
02658 case 22:
02659 YY_RULE_SETUP
02660 #line 345 "fortranscanner.l"
02661 {}
02662         YY_BREAK
02663 /*------ module handling ------------------------------------------------------------*/ 
02664 case 23:
02665 YY_RULE_SETUP
02666 #line 348 "fortranscanner.l"
02667 {  //
02668                                             BEGIN(Module);
02669                                             defaultProtection = Public;
02670                                        }
02671         YY_BREAK
02672 case 24:
02673 YY_RULE_SETUP
02674 #line 352 "fortranscanner.l"
02675 { // end module 
02676                                             resolveModuleProcedures(moduleProcedures, current_root);
02677                                             if (!endScope(current_root))
02678                                               yyterminate();
02679                                             defaultProtection = Public;
02680                                             BEGIN(Start);
02681                                        }
02682         YY_BREAK
02683 case 25:
02684 YY_RULE_SETUP
02685 #line 359 "fortranscanner.l"
02686 {  
02687                                             //cout << "0=========> got module " << fscanYYtext  << endl; 
02688                                             current->section = Entry::NAMESPACE_SEC;
02689                                             current->name = fscanYYtext;
02690                                             current->type = "module";
02691                                             current->fileName  = yyFileName;
02692                                             current->bodyLine  = yyLineNr; // used for source reference
02693                                             current->protection = Public ;
02694 
02695                                             addCurrentEntry();
02696                                             startScope(last_entry);
02697 
02698                                             BEGIN(ModuleBody);
02699                                        }
02700         YY_BREAK
02701 /*------- access specification --------------------------------------------------------------------------*/
02702 case 26:
02703 /* rule 26 can match eol */
02704 *yy_cp = (yy_hold_char); /* undo effects of setting up fscanYYtext */
02705 (yy_c_buf_p) = yy_cp = yy_bp + 7;
02706 YY_DO_BEFORE_ACTION; /* set up fscanYYtext again */
02707 YY_RULE_SETUP
02708 #line 376 "fortranscanner.l"
02709 { defaultProtection = Private; }
02710         YY_BREAK
02711 case 27:
02712 /* rule 27 can match eol */
02713 *yy_cp = (yy_hold_char); /* undo effects of setting up fscanYYtext */
02714 (yy_c_buf_p) = yy_cp = yy_bp + 6;
02715 YY_DO_BEFORE_ACTION; /* set up fscanYYtext again */
02716 YY_RULE_SETUP
02717 #line 377 "fortranscanner.l"
02718 { defaultProtection = Public; }
02719         YY_BREAK
02720 /*------- type definition  -------------------------------------------------------------------------------*/
02721 case 28:
02722 YY_RULE_SETUP
02723 #line 381 "fortranscanner.l"
02724 { /* type definition found : TYPE , access-spec::type-name |*/
02725                                             yy_push_state(YY_START);
02726                                             BEGIN(Typedef);
02727                                             current->protection = defaultProtection;
02728                                         }
02729         YY_BREAK
02730 case 29:
02731 YY_RULE_SETUP
02732 #line 386 "fortranscanner.l"
02733 {       
02734                                             QCString type= fscanYYtext;                             
02735                                         }
02736         YY_BREAK
02737 case 30:
02738 YY_RULE_SETUP
02739 #line 389 "fortranscanner.l"
02740 { /* type name found */
02741                                             //cout << "=========> got typedef " << fscanYYtext << ": " << yyLineNr << endl; 
02742                                             current->section = Entry::CLASS_SEC; // was Entry::STRUCT_SEC;
02743                                             current->spec = Entry::Struct;              
02744                                             current->name = fscanYYtext;
02745 
02746                                             /* if type is part of a module, mod name is necessary for output */
02747                                             if ((current_root) && 
02748                                                (current_root->section ==  Entry::CLASS_SEC ||
02749                                                 current_root->section ==  Entry::NAMESPACE_SEC))
02750                                                 //current_root->section ==  Entry::INTERFACE_SEC)) 
02751                                             {
02752                                               current->name= current_root->name+"::"+current->name;
02753                                             }
02754                                             current->fileName = yyFileName;
02755                                             current->bodyLine  = yyLineNr; 
02756                                             addCurrentEntry();
02757                                             startScope(last_entry); 
02758                                             BEGIN(TypedefBody);
02759                                         }
02760         YY_BREAK
02761 case 31:
02762 YY_RULE_SETUP
02763 #line 409 "fortranscanner.l"
02764 { /* end type definition */
02765                                            //cout << "=========> got typedef end "<< endl; 
02766                                            if (!endScope(current_root))
02767                                              yyterminate();
02768                                            yy_pop_state();
02769                                         } 
02770         YY_BREAK
02771 /*------- module/global/typedef variable ---------------------------------------------------*/
02772 case 32:
02773 YY_RULE_SETUP
02774 #line 418 "fortranscanner.l"
02775 {  
02776                                            //cout << "1e=========> got end subprog: " << fscanYYtext << endl;
02777 
02778                                            /* args is used for parameters in list of functions, argList for 
02779                                              parameters in detailed function descripttion */
02780                                            //current->args = argListToString(current->argList); 
02781                                            //current->endBodyLine  = yyLineNr; // ??? what ist endBodyLine for
02782                                            if (!endScope(current_root))
02783                                              yyterminate();
02784                                            yy_pop_state() ;
02785                                        } 
02786         YY_BREAK
02787 
02788 case 33:
02789 /* rule 33 can match eol */
02790 *yy_cp = (yy_hold_char); /* undo effects of setting up fscanYYtext */
02791 (yy_c_buf_p) = yy_cp -= 1;
02792 YY_DO_BEFORE_ACTION; /* set up fscanYYtext again */
02793 YY_RULE_SETUP
02794 #line 430 "fortranscanner.l"
02795 {
02796                                           /* variable declaration starts */
02797                                           //fprintf(stderr,"4=========> got variable type: %s\n",fscanYYtext);
02798                                           QCString help=fscanYYtext;
02799                                           help= help.simplifyWhiteSpace();
02800                                           argType= help;
02801                                           yy_push_state(AttributeList);
02802                                         }
02803         YY_BREAK
02804 case 34:
02805 /* rule 34 can match eol */
02806 YY_RULE_SETUP
02807 #line 438 "fortranscanner.l"
02808 { /* check for preprocessor symbol expand to type */
02809                                           QCString str = fscanYYtext;
02810                                           str = str.stripWhiteSpace();
02811                                           DefineDict* defines = getFileDefineDict();
02812                                           QCString name;
02813                                           int index = str.find("(");
02814                                           if (index != -1)
02815                                             name = str.left(index).stripWhiteSpace();
02816                                           else
02817                                             name = str;
02818 
02819                                           Define *define = (*defines)[name];
02820                                           if (define != 0 && isTypeName(define->definition)) 
02821                                           {
02822                                             argType = str;
02823                                             yy_push_state(AttributeList);
02824                                           } 
02825                                           else 
02826                                           {
02827                                             REJECT;
02828                                           }
02829                                         }
02830         YY_BREAK
02831 case 35:
02832 /* rule 35 can match eol */
02833 #line 461 "fortranscanner.l"
02834 case 36:
02835 /* rule 36 can match eol */
02836 YY_RULE_SETUP
02837 #line 461 "fortranscanner.l"
02838 { 
02839                                           /* attribute statement starts */
02840                                           //fprintf(stderr,"5=========> Attribute statement: %s\n", fscanYYtext); 
02841                                           QCString tmp = fscanYYtext;
02842                                           currentModifiers |= tmp.stripWhiteSpace();
02843                                           argType="";
02844                                           yy_push_state(YY_START);
02845                                           BEGIN( AttributeList ) ;
02846                                        }
02847         YY_BREAK
02848 case 37:
02849 YY_RULE_SETUP
02850 #line 470 "fortranscanner.l"
02851 {
02852                                        }  
02853         YY_BREAK
02854 
02855 
02856 case 38:
02857 YY_RULE_SETUP
02858 #line 474 "fortranscanner.l"
02859 {}
02860         YY_BREAK
02861 case 39:
02862 YY_RULE_SETUP
02863 #line 475 "fortranscanner.l"
02864 {}
02865         YY_BREAK
02866 case 40:
02867 /* rule 40 can match eol */
02868 YY_RULE_SETUP
02869 #line 476 "fortranscanner.l"
02870 { /* update current modifiers */
02871                                           QCString tmp = fscanYYtext;
02872                                           currentModifiers |= (tmp);
02873                                         }
02874         YY_BREAK
02875 case 41:
02876 YY_RULE_SETUP
02877 #line 480 "fortranscanner.l"
02878 { /* end attribute list */
02879                                           BEGIN( Variable );
02880                                         }
02881         YY_BREAK
02882 case 42:
02883 YY_RULE_SETUP
02884 #line 483 "fortranscanner.l"
02885 { /* unknown attribute, consider variable name */
02886                                           //cout<<"start variables, unput "<<*fscanYYtext<<endl;
02887                                           unput(*fscanYYtext);
02888                                           BEGIN( Variable );
02889                                         }
02890         YY_BREAK
02891 
02892 case 43:
02893 YY_RULE_SETUP
02894 #line 490 "fortranscanner.l"
02895 {}
02896         YY_BREAK
02897 case 44:
02898 YY_RULE_SETUP
02899 #line 491 "fortranscanner.l"
02900 { /* parse variable declaration */
02901                                           //cout << "5=========> got variable: " << argType << "::" << fscanYYtext << endl;
02902                                           /* work around for bug in QCString.replace (QCString works) */
02903                                           QCString name=fscanYYtext;
02904                                           /* remember attributes for the symbol */
02905                                           modifiers[current_root][name.lower()] |= currentModifiers;
02906                                           argName= name;
02907                                           int last= yy_top_state();
02908 
02909                                           v_type= V_IGNORE;
02910                                           if (!argType.isEmpty() && last != SubprogBody) 
02911                                           { // new variable entry
02912                                             v_type = V_VARIABLE;
02913                                             current->section = Entry::VARIABLE_SEC;
02914                                             current->name = argName;
02915                                             current->type = argType;
02916                                             current->fileName = yyFileName;
02917                                             current->bodyLine  = yyLineNr; // used for source reference
02918                                             addCurrentEntry();
02919                                           } 
02920                                           else if (!argType.isEmpty())
02921                                           { // deklaration of parameter list: add type for corr. parameter 
02922                                             parameter= addFortranParameter(argType,argName,docBlock);
02923                                             if (parameter) v_type= V_PARAMETER;
02924                                             // save, it may be function return type
02925                                             modifiers[current_root][name.lower()].type = argType;
02926                                             // any accumulated doc for argument should be emptied,
02927                                             // because it is handled other way and this doc can be
02928                                             // unexpectedly passed to the next member.
02929                                             current->doc.resize(0);
02930                                             current->brief.resize(0);
02931                                           } 
02932                                         }
02933         YY_BREAK
02934 case 45:
02935 /* rule 45 can match eol */
02936 YY_RULE_SETUP
02937 #line 524 "fortranscanner.l"
02938 { /* dimension of the previous entry. */
02939                                           QCString name(argName);
02940                                           QCString attr("dimension");
02941                                           attr += fscanYYtext;
02942                                           modifiers[current_root][name] |= attr;
02943                                         }
02944         YY_BREAK
02945 case 46:
02946 YY_RULE_SETUP
02947 #line 530 "fortranscanner.l"
02948 {}
02949         YY_BREAK
02950 case 47:
02951 YY_RULE_SETUP
02952 #line 531 "fortranscanner.l"
02953 { yy_push_state(YY_START);
02954                                           initializer="";
02955                                           BEGIN(Initialization);
02956                                         }
02957         YY_BREAK
02958 case 48:
02959 /* rule 48 can match eol */
02960 YY_RULE_SETUP
02961 #line 535 "fortranscanner.l"
02962 { currentModifiers = SymbolModifiers();
02963                                           yy_pop_state(); // end variable deklaration list
02964                                           yyLineNr++;
02965                                           docBlock.resize(0);
02966                                         }
02967         YY_BREAK
02968 case 49:
02969 YY_RULE_SETUP
02970 #line 541 "fortranscanner.l"
02971 { initializer+=fscanYYtext; 
02972                                           BEGIN(ArrayInitializer); // initializer may contain comma
02973                                         }
02974         YY_BREAK
02975 case 50:
02976 YY_RULE_SETUP
02977 #line 544 "fortranscanner.l"
02978 { initializer+=fscanYYtext;
02979                                           BEGIN(Initialization);
02980                                         }
02981         YY_BREAK
02982 case 51:
02983 YY_RULE_SETUP
02984 #line 547 "fortranscanner.l"
02985 { initializer+=fscanYYtext; }
02986         YY_BREAK
02987 case 52:
02988 YY_RULE_SETUP
02989 #line 548 "fortranscanner.l"
02990 { yy_pop_state(); // end initialization
02991                                           if (v_type == V_VARIABLE) last_entry->initializer= initializer;
02992                                         }
02993         YY_BREAK
02994 case 53:
02995 /* rule 53 can match eol */
02996 YY_RULE_SETUP
02997 #line 551 "fortranscanner.l"
02998 { //| 
02999                                           yy_pop_state(); // end initialization
03000                                           if (v_type == V_VARIABLE) last_entry->initializer= initializer;
03001                                           unput(*fscanYYtext);
03002                                         }
03003         YY_BREAK
03004 case 54:
03005 YY_RULE_SETUP
03006 #line 556 "fortranscanner.l"
03007 { initializer+=fscanYYtext; }
03008         YY_BREAK
03009 /*------ fortran subroutine/function handling ------------------------------------------------------------*/
03010 /*       Start is initial condition                                                                       */
03011 case 55:
03012 /* rule 55 can match eol */
03013 YY_RULE_SETUP
03014 #line 561 "fortranscanner.l"
03015 {   
03016                                            // TYPE_SPEC is for old function style function result
03017                                            result= fscanYYtext; 
03018                                            result= result.stripWhiteSpace();
03019                                            current->type = result;
03020                                        }              
03021         YY_BREAK
03022 case 56:
03023 YY_RULE_SETUP
03024 #line 567 "fortranscanner.l"
03025 {   // Fortran subroutine or function found
03026                                            //fprintf(stderr,"1=========> got subprog, type: %s\n",fscanYYtext); 
03027                                            current->section = Entry::FUNCTION_SEC ;
03028                                            QCString subtype = fscanYYtext; subtype=subtype.lower().stripWhiteSpace();
03029                                            if (!current->type) current->type = subtype;
03030                                            current->fileName  = yyFileName;
03031                                            current->bodyLine  = yyLineNr; // used for source reference
03032                                            current->startLine = -1; // ??? what is startLine for?
03033                                            current->args.resize(0);
03034                                            current->argList->clear();
03035                                            yy_push_state(Subprog);
03036                                            docBlock.resize(0);
03037                                        }
03038         YY_BREAK
03039 case 57:
03040 YY_RULE_SETUP
03041 #line 580 "fortranscanner.l"
03042 {   /* ignore white space */   }
03043         YY_BREAK
03044 case 58:
03045 YY_RULE_SETUP
03046 #line 581 "fortranscanner.l"
03047 {   current->name = fscanYYtext; 
03048                                            //cout << "1a==========> got " << current->type << " " << fscanYYtext << " " << yyLineNr << endl;
03049                                            modifiers[current_root][current->name.lower()].returnName = current->name;
03050                                            BEGIN(Parameterlist);
03051                                        } 
03052         YY_BREAK
03053 case 59:
03054 /* rule 59 can match eol */
03055 YY_RULE_SETUP
03056 #line 586 "fortranscanner.l"
03057 {   
03058                                            //current->type not yet available
03059                                            QCString arglist= fscanYYtext;
03060                                            //cout << "3=========> got parameterlist " << fscanYYtext << endl;
03061                                            yyLineNr+= arglist.contains('\n');
03062                                            static QRegExp re("&[^\n]*\n");
03063                                            arglist = arglist.replace(re,"");
03064                                            //cout << "3=========> got parameterlist " << arglist << endl;
03065                                            current->args = arglist;
03066                                            current->args = removeRedundantWhiteSpace(current->args);
03067                                            stringToArgumentList(current->args, current->argList);
03068                                            addCurrentEntry();
03069                                            startScope(last_entry);
03070                                            BEGIN(SubprogBody);
03071                                        } 
03072         YY_BREAK
03073 case 60:
03074 /* rule 60 can match eol */
03075 YY_RULE_SETUP
03076 #line 601 "fortranscanner.l"
03077 {   
03078                                            yyLineNr++;
03079                                            //cout << "3=========> without parameterlist " <<endl;
03080                                            stringToArgumentList("", current->argList);
03081                                            addCurrentEntry();
03082                                            startScope(last_entry);
03083                                            BEGIN(SubprogBody);                                     
03084 }
03085         YY_BREAK
03086 case 61:
03087 YY_RULE_SETUP
03088 #line 609 "fortranscanner.l"
03089 {  
03090                                            result= fscanYYtext;
03091                                            result= result.right(result.length()-result.find("(")-1);
03092                                            result= result.stripWhiteSpace();
03093                                            modifiers[current_root->parent()][current_root->name.lower()].returnName = result;
03094                                            //cout << "=====> got result " <<  result << endl;
03095                                        } 
03096         YY_BREAK
03097 /*---- documentation comments --------------------------------------------------------------------*/
03098 case 62:
03099 YY_RULE_SETUP
03100 #line 619 "fortranscanner.l"
03101 { /* backward docu comment (only one line) */
03102                                           if (v_type != V_IGNORE) {
03103                                            yy_push_state(YY_START);
03104                                            current->docLine  = yyLineNr;
03105                                            docBlockJavaStyle = FALSE;
03106                                            docBlock.resize(0);
03107                                            docBlockJavaStyle = Config_getBool("JAVADOC_AUTOBRIEF");
03108                                            startCommentBlock(TRUE);
03109                                            BEGIN(DocBackLine);
03110                                           }
03111                                          }
03112         YY_BREAK
03113 case 63:
03114 YY_RULE_SETUP
03115 #line 630 "fortranscanner.l"
03116 { // contents of current comment line
03117                                           docBlock=fscanYYtext;
03118                                           if (v_type == V_VARIABLE) 
03119                                           {
03120                                             Entry *tmp_entry = current; 
03121                                             current = last_entry; // temporarily switch to the previous entry
03122                                             handleCommentBlock(docBlock,TRUE);
03123                                             current=tmp_entry;
03124                                           }
03125                                           else if (v_type == V_PARAMETER) 
03126                                           {
03127                                             parameter->docs=docBlock;
03128                                           }
03129                                           yy_pop_state();
03130                                          }
03131         YY_BREAK
03132 case 64:
03133 YY_RULE_SETUP
03134 #line 646 "fortranscanner.l"
03135 {
03136                                           yy_push_state(YY_START);
03137                                           current->docLine  = yyLineNr;
03138                                           docBlockJavaStyle = FALSE;
03139                                           docBlock.resize(0);
03140                                           docBlockJavaStyle = Config_getBool("JAVADOC_AUTOBRIEF");
03141                                           startCommentBlock(TRUE);
03142                                           BEGIN(DocBlock);
03143                                           //cout << "start DocBlock " << endl;
03144                                         }
03145         YY_BREAK
03146 case 65:
03147 YY_RULE_SETUP
03148 #line 657 "fortranscanner.l"
03149 { // contents of current comment line
03150                                           docBlock+=fscanYYtext;
03151                                         }
03152         YY_BREAK
03153 case 66:
03154 /* rule 66 can match eol */
03155 YY_RULE_SETUP
03156 #line 660 "fortranscanner.l"
03157 { // comment block (next line is also comment line)
03158                                           docBlock+="\n"; // \n is necessary for lists
03159                                           yyLineNr++;
03160                                         }
03161         YY_BREAK
03162 case 67:
03163 /* rule 67 can match eol */
03164 YY_RULE_SETUP
03165 #line 664 "fortranscanner.l"
03166 { // comment block ends at the end of this line
03167                                           //cout <<"3=========> comment block : "<< docBlock << endl;
03168                                           unput(*fscanYYtext);                                        
03169                                           handleCommentBlock(docBlock,TRUE);
03170                                           yy_pop_state();                                          
03171                                         }
03172         YY_BREAK
03173 /*------------------------------------------------------------------------------------------------*/
03174 case 68:
03175 /* rule 68 can match eol */
03176 YY_RULE_SETUP
03177 #line 673 "fortranscanner.l"
03178 {
03179                                           yyLineNr++;
03180                                           //if (debugStr.stripWhiteSpace().length() > 0) cout << "ignored text: " << debugStr << " state: " <<YY_START << endl;
03181                                           debugStr="";
03182                                         }
03183         YY_BREAK
03184 /*---- error: EOF in wrong state --------------------------------------------------------------------*/
03185 case YY_STATE_EOF(SubprogBody):
03186 case YY_STATE_EOF(ModuleBody):
03187 case YY_STATE_EOF(String):
03188 case YY_STATE_EOF(StrIgnore):
03189 case YY_STATE_EOF(InterfaceBody):
03190 #line 680 "fortranscanner.l"
03191 {
03192                                           fprintf(stderr,"==== Error: EOF reached in wrong state (end missing)");
03193                                           scanner_abort();
03194                                           yyterminate();
03195                                         }
03196         YY_BREAK
03197 case 69:
03198 YY_RULE_SETUP
03199 #line 685 "fortranscanner.l"
03200 {
03201                                           debugStr+=fscanYYtext;
03202                                         } // ignore remaining text 
03203         YY_BREAK
03204 /**********************************************************************************/
03205 /**********************************************************************************/
03206 /**********************************************************************************/
03207 case 70:
03208 YY_RULE_SETUP
03209 #line 692 "fortranscanner.l"
03210 ECHO;
03211         YY_BREAK
03212 #line 3213 "<stdout>"
03213                         case YY_STATE_EOF(INITIAL):
03214                         case YY_STATE_EOF(Subprog):
03215                         case YY_STATE_EOF(Parameterlist):
03216                         case YY_STATE_EOF(Start):
03217                         case YY_STATE_EOF(Comment):
03218                         case YY_STATE_EOF(Module):
03219                         case YY_STATE_EOF(AttributeList):
03220                         case YY_STATE_EOF(Variable):
03221                         case YY_STATE_EOF(Initialization):
03222                         case YY_STATE_EOF(ArrayInitializer):
03223                         case YY_STATE_EOF(Typedef):
03224                         case YY_STATE_EOF(TypedefBody):
03225                         case YY_STATE_EOF(Use):
03226                         case YY_STATE_EOF(UseOnly):
03227                         case YY_STATE_EOF(ModuleProcedure):
03228                         case YY_STATE_EOF(DocBlock):
03229                         case YY_STATE_EOF(DocBackLine):
03230                         case YY_STATE_EOF(EndDoc):
03231                                 yyterminate();
03232 
03233         case YY_END_OF_BUFFER:
03234                 {
03235                 /* Amount of text matched not including the EOB char. */
03236                 int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1;
03237 
03238                 /* Undo the effects of YY_DO_BEFORE_ACTION. */
03239                 *yy_cp = (yy_hold_char);
03240                 YY_RESTORE_YY_MORE_OFFSET
03241 
03242                 if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
03243                         {
03244                         /* We're scanning a new file or input source.  It's
03245                          * possible that this happened because the user
03246                          * just pointed fscanYYin at a new source and called
03247                          * fscanYYlex().  If so, then we have to assure
03248                          * consistency between YY_CURRENT_BUFFER and our
03249                          * globals.  Here is the right place to do so, because
03250                          * this is the first action (other than possibly a
03251                          * back-up) that will match for the new input source.
03252                          */
03253                         (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
03254                         YY_CURRENT_BUFFER_LVALUE->yy_input_file = fscanYYin;
03255                         YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
03256                         }
03257 
03258                 /* Note that here we test for yy_c_buf_p "<=" to the position
03259                  * of the first EOB in the buffer, since yy_c_buf_p will
03260                  * already have been incremented past the NUL character
03261                  * (since all states make transitions on EOB to the
03262                  * end-of-buffer state).  Contrast this with the test
03263                  * in input().
03264                  */
03265                 if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
03266                         { /* This was really a NUL. */
03267                         yy_state_type yy_next_state;
03268 
03269                         (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text;
03270 
03271                         yy_current_state = yy_get_previous_state(  );
03272 
03273                         /* Okay, we're now positioned to make the NUL
03274                          * transition.  We couldn't have
03275                          * yy_get_previous_state() go ahead and do it
03276                          * for us because it doesn't know how to deal
03277                          * with the possibility of jamming (and we don't
03278                          * want to build jamming into it because then it
03279                          * will run more slowly).
03280                          */
03281 
03282                         yy_next_state = yy_try_NUL_trans( yy_current_state );
03283 
03284                         yy_bp = (yytext_ptr) + YY_MORE_ADJ;
03285 
03286                         if ( yy_next_state )
03287                                 {
03288                                 /* Consume the NUL. */
03289                                 yy_cp = ++(yy_c_buf_p);
03290                                 yy_current_state = yy_next_state;
03291                                 goto yy_match;
03292                                 }
03293 
03294                         else
03295                                 {
03296                                 yy_cp = (yy_c_buf_p);
03297                                 goto yy_find_action;
03298                                 }
03299                         }
03300 
03301                 else switch ( yy_get_next_buffer(  ) )
03302                         {
03303                         case EOB_ACT_END_OF_FILE:
03304                                 {
03305                                 (yy_did_buffer_switch_on_eof) = 0;
03306 
03307                                 if ( fscanYYwrap( ) )
03308                                         {
03309                                         /* Note: because we've taken care in
03310                                          * yy_get_next_buffer() to have set up
03311                                          * fscanYYtext, we can now set up
03312                                          * yy_c_buf_p so that if some total
03313                                          * hoser (like flex itself) wants to
03314                                          * call the scanner after we return the
03315                                          * YY_NULL, it'll still work - another
03316                                          * YY_NULL will get returned.
03317                                          */
03318                                         (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ;
03319 
03320                                         yy_act = YY_STATE_EOF(YY_START);
03321                                         goto do_action;
03322                                         }
03323 
03324                                 else
03325                                         {
03326                                         if ( ! (yy_did_buffer_switch_on_eof) )
03327                                                 YY_NEW_FILE;
03328                                         }
03329                                 break;
03330                                 }
03331 
03332                         case EOB_ACT_CONTINUE_SCAN:
03333                                 (yy_c_buf_p) =
03334                                         (yytext_ptr) + yy_amount_of_matched_text;
03335 
03336                                 yy_current_state = yy_get_previous_state(  );
03337 
03338                                 yy_cp = (yy_c_buf_p);
03339                                 yy_bp = (yytext_ptr) + YY_MORE_ADJ;
03340                                 goto yy_match;
03341 
03342                         case EOB_ACT_LAST_MATCH:
03343                                 (yy_c_buf_p) =
03344                                 &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)];
03345 
03346                                 yy_current_state = yy_get_previous_state(  );
03347 
03348                                 yy_cp = (yy_c_buf_p);
03349                                 yy_bp = (yytext_ptr) + YY_MORE_ADJ;
03350                                 goto yy_find_action;
03351                         }
03352                 break;
03353                 }
03354 
03355         default:
03356                 YY_FATAL_ERROR(
03357                         "fatal flex scanner internal error--no action found" );
03358         } /* end of action switch */
03359                 } /* end of scanning one token */
03360 } /* end of fscanYYlex */
03361 
03362 /* yy_get_next_buffer - try to read in a new buffer
03363  *
03364  * Returns a code representing an action:
03365  *      EOB_ACT_LAST_MATCH -
03366  *      EOB_ACT_CONTINUE_SCAN - continue scanning from current position
03367  *      EOB_ACT_END_OF_FILE - end of file
03368  */
03369 static int yy_get_next_buffer (void)
03370 {
03371         register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
03372         register char *source = (yytext_ptr);
03373         register int number_to_move, i;
03374         int ret_val;
03375 
03376         if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
03377                 YY_FATAL_ERROR(
03378                 "fatal flex scanner internal error--end of buffer missed" );
03379 
03380         if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
03381                 { /* Don't try to fill the buffer, so this is an EOF. */
03382                 if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 )
03383                         {
03384                         /* We matched a single character, the EOB, so
03385                          * treat this as a final EOF.
03386                          */
03387                         return EOB_ACT_END_OF_FILE;
03388                         }
03389 
03390                 else
03391                         {
03392                         /* We matched some text prior to the EOB, first
03393                          * process it.
03394                          */
03395                         return EOB_ACT_LAST_MATCH;
03396                         }
03397                 }
03398 
03399         /* Try to read more data. */
03400 
03401         /* First move last chars to start of buffer. */
03402         number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1;
03403 
03404         for ( i = 0; i < number_to_move; ++i )
03405                 *(dest++) = *(source++);
03406 
03407         if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
03408                 /* don't do the read, it's not guaranteed to return an EOF,
03409                  * just force an EOF
03410                  */
03411                 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0;
03412 
03413         else
03414                 {
03415                         int num_to_read =
03416                         YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
03417 
03418                 while ( num_to_read <= 0 )
03419                         { /* Not enough room in the buffer - grow it. */
03420 
03421                         YY_FATAL_ERROR(
03422 "input buffer overflow, can't enlarge buffer because scanner uses REJECT" );
03423 
03424                         }
03425 
03426                 if ( num_to_read > YY_READ_BUF_SIZE )
03427                         num_to_read = YY_READ_BUF_SIZE;
03428 
03429                 /* Read in more data. */
03430                 YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
03431                         (yy_n_chars), num_to_read );
03432 
03433                 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
03434                 }
03435 
03436         if ( (yy_n_chars) == 0 )
03437                 {
03438                 if ( number_to_move == YY_MORE_ADJ )
03439                         {
03440                         ret_val = EOB_ACT_END_OF_FILE;
03441                         fscanYYrestart(fscanYYin  );
03442                         }
03443 
03444                 else
03445                         {
03446                         ret_val = EOB_ACT_LAST_MATCH;
03447                         YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
03448                                 YY_BUFFER_EOF_PENDING;
03449                         }
03450                 }
03451 
03452         else
03453                 ret_val = EOB_ACT_CONTINUE_SCAN;
03454 
03455         (yy_n_chars) += number_to_move;
03456         YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
03457         YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
03458 
03459         (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
03460 
03461         return ret_val;
03462 }
03463 
03464 /* yy_get_previous_state - get the state just before the EOB char was reached */
03465 
03466     static yy_state_type yy_get_previous_state (void)
03467 {
03468         register yy_state_type yy_current_state;
03469         register char *yy_cp;
03470     
03471         yy_current_state = (yy_start);
03472         yy_current_state += YY_AT_BOL();
03473 
03474         (yy_state_ptr) = (yy_state_buf);
03475         *(yy_state_ptr)++ = yy_current_state;
03476 
03477         for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
03478                 {
03479                 register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
03480                 while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
03481                         {
03482                         yy_current_state = (int) yy_def[yy_current_state];
03483                         if ( yy_current_state >= 1195 )
03484                                 yy_c = yy_meta[(unsigned int) yy_c];
03485                         }
03486                 yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
03487                 *(yy_state_ptr)++ = yy_current_state;
03488                 }
03489 
03490         return yy_current_state;
03491 }
03492 
03493 /* yy_try_NUL_trans - try to make a transition on the NUL character
03494  *
03495  * synopsis
03496  *      next_state = yy_try_NUL_trans( current_state );
03497  */
03498     static yy_state_type yy_try_NUL_trans  (yy_state_type yy_current_state )
03499 {
03500         register int yy_is_jam;
03501     
03502         register YY_CHAR yy_c = 1;
03503         while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
03504                 {
03505                 yy_current_state = (int) yy_def[yy_current_state];
03506                 if ( yy_current_state >= 1195 )
03507                         yy_c = yy_meta[(unsigned int) yy_c];
03508                 }
03509         yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
03510         yy_is_jam = (yy_current_state == 1194);
03511         if ( ! yy_is_jam )
03512                 *(yy_state_ptr)++ = yy_current_state;
03513 
03514         return yy_is_jam ? 0 : yy_current_state;
03515 }
03516 
03517     static void yyunput (int c, register char * yy_bp )
03518 {
03519         register char *yy_cp;
03520     
03521     yy_cp = (yy_c_buf_p);
03522 
03523         /* undo effects of setting up fscanYYtext */
03524         *yy_cp = (yy_hold_char);
03525 
03526         if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
03527                 { /* need to shift things up to make room */
03528                 /* +2 for EOB chars. */
03529                 register int number_to_move = (yy_n_chars) + 2;
03530                 register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
03531                                         YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
03532                 register char *source =
03533                                 &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];
03534 
03535                 while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
03536                         *--dest = *--source;
03537 
03538                 yy_cp += (int) (dest - source);
03539                 yy_bp += (int) (dest - source);
03540                 YY_CURRENT_BUFFER_LVALUE->yy_n_chars =
03541                         (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size;
03542 
03543                 if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
03544                         YY_FATAL_ERROR( "flex scanner push-back overflow" );
03545                 }
03546 
03547         *--yy_cp = (char) c;
03548 
03549         (yytext_ptr) = yy_bp;
03550         (yy_hold_char) = *yy_cp;
03551         (yy_c_buf_p) = yy_cp;
03552 }
03553 
03554 #ifndef YY_NO_INPUT
03555 #ifdef __cplusplus
03556     static int yyinput (void)
03557 #else
03558     static int input  (void)
03559 #endif
03560 
03561 {
03562         int c;
03563     
03564         *(yy_c_buf_p) = (yy_hold_char);
03565 
03566         if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR )
03567                 {
03568                 /* yy_c_buf_p now points to the character we want to return.
03569                  * If this occurs *before* the EOB characters, then it's a
03570                  * valid NUL; if not, then we've hit the end of the buffer.
03571                  */
03572                 if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
03573                         /* This was really a NUL. */
03574                         *(yy_c_buf_p) = '\0';
03575 
03576                 else
03577                         { /* need more input */
03578                         int offset = (yy_c_buf_p) - (yytext_ptr);
03579                         ++(yy_c_buf_p);
03580 
03581                         switch ( yy_get_next_buffer(  ) )
03582                                 {
03583                                 case EOB_ACT_LAST_MATCH:
03584                                         /* This happens because yy_g_n_b()
03585                                          * sees that we've accumulated a
03586                                          * token and flags that we need to
03587                                          * try matching the token before
03588                                          * proceeding.  But for input(),
03589                                          * there's no matching to consider.
03590                                          * So convert the EOB_ACT_LAST_MATCH
03591                                          * to EOB_ACT_END_OF_FILE.
03592                                          */
03593 
03594                                         /* Reset buffer status. */
03595                                         fscanYYrestart(fscanYYin );
03596 
03597                                         /*FALLTHROUGH*/
03598 
03599                                 case EOB_ACT_END_OF_FILE:
03600                                         {
03601                                         if ( fscanYYwrap( ) )
03602                                                 return 0;
03603 
03604                                         if ( ! (yy_did_buffer_switch_on_eof) )
03605                                                 YY_NEW_FILE;
03606 #ifdef __cplusplus
03607                                         return yyinput();
03608 #else
03609                                         return input();
03610 #endif
03611                                         }
03612 
03613                                 case EOB_ACT_CONTINUE_SCAN:
03614                                         (yy_c_buf_p) = (yytext_ptr) + offset;
03615                                         break;
03616                                 }
03617                         }
03618                 }
03619 
03620         c = *(unsigned char *) (yy_c_buf_p);    /* cast for 8-bit char's */
03621         *(yy_c_buf_p) = '\0';   /* preserve fscanYYtext */
03622         (yy_hold_char) = *++(yy_c_buf_p);
03623 
03624         YY_CURRENT_BUFFER_LVALUE->yy_at_bol = (c == '\n');
03625 
03626         return c;
03627 }
03628 #endif  /* ifndef YY_NO_INPUT */
03629 
03635     void fscanYYrestart  (FILE * input_file )
03636 {
03637     
03638         if ( ! YY_CURRENT_BUFFER ){
03639         fscanYYensure_buffer_stack ();
03640                 YY_CURRENT_BUFFER_LVALUE =
03641             fscanYY_create_buffer(fscanYYin,YY_BUF_SIZE );
03642         }
03643 
03644         fscanYY_init_buffer(YY_CURRENT_BUFFER,input_file );
03645         fscanYY_load_buffer_state( );
03646 }
03647 
03652     void fscanYY_switch_to_buffer  (YY_BUFFER_STATE  new_buffer )
03653 {
03654     
03655         /* TODO. We should be able to replace this entire function body
03656          * with
03657          *              fscanYYpop_buffer_state();
03658          *              fscanYYpush_buffer_state(new_buffer);
03659      */
03660         fscanYYensure_buffer_stack ();
03661         if ( YY_CURRENT_BUFFER == new_buffer )
03662                 return;
03663 
03664         if ( YY_CURRENT_BUFFER )
03665                 {
03666                 /* Flush out information for old buffer. */
03667                 *(yy_c_buf_p) = (yy_hold_char);
03668                 YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
03669                 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
03670                 }
03671 
03672         YY_CURRENT_BUFFER_LVALUE = new_buffer;
03673         fscanYY_load_buffer_state( );
03674 
03675         /* We don't actually know whether we did this switch during
03676          * EOF (fscanYYwrap()) processing, but the only time this flag
03677          * is looked at is after fscanYYwrap() is called, so it's safe
03678          * to go ahead and always set it.
03679          */
03680         (yy_did_buffer_switch_on_eof) = 1;
03681 }
03682 
03683 static void fscanYY_load_buffer_state  (void)
03684 {
03685         (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
03686         (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
03687         fscanYYin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
03688         (yy_hold_char) = *(yy_c_buf_p);
03689 }
03690 
03697     YY_BUFFER_STATE fscanYY_create_buffer  (FILE * file, int  size )
03698 {
03699         YY_BUFFER_STATE b;
03700     
03701         b = (YY_BUFFER_STATE) fscanYYalloc(sizeof( struct yy_buffer_state )  );
03702         if ( ! b )
03703                 YY_FATAL_ERROR( "out of dynamic memory in fscanYY_create_buffer()" );
03704 
03705         b->yy_buf_size = size;
03706 
03707         /* yy_ch_buf has to be 2 characters longer than the size given because
03708          * we need to put in 2 end-of-buffer characters.
03709          */
03710         b->yy_ch_buf = (char *) fscanYYalloc(b->yy_buf_size + 2  );
03711         if ( ! b->yy_ch_buf )
03712                 YY_FATAL_ERROR( "out of dynamic memory in fscanYY_create_buffer()" );
03713 
03714         b->yy_is_our_buffer = 1;
03715 
03716         fscanYY_init_buffer(b,file );
03717 
03718         return b;
03719 }
03720 
03725     void fscanYY_delete_buffer (YY_BUFFER_STATE  b )
03726 {
03727     
03728         if ( ! b )
03729                 return;
03730 
03731         if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
03732                 YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
03733 
03734         if ( b->yy_is_our_buffer )
03735                 fscanYYfree((void *) b->yy_ch_buf  );
03736 
03737         fscanYYfree((void *) b  );
03738 }
03739 
03740 #ifndef __cplusplus
03741 extern int isatty (int );
03742 #endif /* __cplusplus */
03743     
03744 /* Initializes or reinitializes a buffer.
03745  * This function is sometimes called more than once on the same buffer,
03746  * such as during a fscanYYrestart() or at EOF.
03747  */
03748     static void fscanYY_init_buffer  (YY_BUFFER_STATE  b, FILE * file )
03749 
03750 {
03751         int oerrno = errno;
03752     
03753         fscanYY_flush_buffer(b );
03754 
03755         b->yy_input_file = file;
03756         b->yy_fill_buffer = 1;
03757 
03758     /* If b is the current buffer, then fscanYY_init_buffer was _probably_
03759      * called from fscanYYrestart() or through yy_get_next_buffer.
03760      * In that case, we don't want to reset the lineno or column.
03761      */
03762     if (b != YY_CURRENT_BUFFER){
03763         b->yy_bs_lineno = 1;
03764         b->yy_bs_column = 0;
03765     }
03766 
03767         b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
03768     
03769         errno = oerrno;
03770 }
03771 
03776     void fscanYY_flush_buffer (YY_BUFFER_STATE  b )
03777 {
03778         if ( ! b )
03779                 return;
03780 
03781         b->yy_n_chars = 0;
03782 
03783         /* We always need two end-of-buffer characters.  The first causes
03784          * a transition to the end-of-buffer state.  The second causes
03785          * a jam in that state.
03786          */
03787         b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
03788         b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
03789 
03790         b->yy_buf_pos = &b->yy_ch_buf[0];
03791 
03792         b->yy_at_bol = 1;
03793         b->yy_buffer_status = YY_BUFFER_NEW;
03794 
03795         if ( b == YY_CURRENT_BUFFER )
03796                 fscanYY_load_buffer_state( );
03797 }
03798 
03805 void fscanYYpush_buffer_state (YY_BUFFER_STATE new_buffer )
03806 {
03807         if (new_buffer == NULL)
03808                 return;
03809 
03810         fscanYYensure_buffer_stack();
03811 
03812         /* This block is copied from fscanYY_switch_to_buffer. */
03813         if ( YY_CURRENT_BUFFER )
03814                 {
03815                 /* Flush out information for old buffer. */
03816                 *(yy_c_buf_p) = (yy_hold_char);
03817                 YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
03818                 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
03819                 }
03820 
03821         /* Only push if top exists. Otherwise, replace top. */
03822         if (YY_CURRENT_BUFFER)
03823                 (yy_buffer_stack_top)++;
03824         YY_CURRENT_BUFFER_LVALUE = new_buffer;
03825 
03826         /* copied from fscanYY_switch_to_buffer. */
03827         fscanYY_load_buffer_state( );
03828         (yy_did_buffer_switch_on_eof) = 1;
03829 }
03830 
03835 void fscanYYpop_buffer_state (void)
03836 {
03837         if (!YY_CURRENT_BUFFER)
03838                 return;
03839 
03840         fscanYY_delete_buffer(YY_CURRENT_BUFFER );
03841         YY_CURRENT_BUFFER_LVALUE = NULL;
03842         if ((yy_buffer_stack_top) > 0)
03843                 --(yy_buffer_stack_top);
03844 
03845         if (YY_CURRENT_BUFFER) {
03846                 fscanYY_load_buffer_state( );
03847                 (yy_did_buffer_switch_on_eof) = 1;
03848         }
03849 }
03850 
03851 /* Allocates the stack if it does not exist.
03852  *  Guarantees space for at least one push.
03853  */
03854 static void fscanYYensure_buffer_stack (void)
03855 {
03856         int num_to_alloc;
03857     
03858         if (!(yy_buffer_stack)) {
03859 
03860                 /* First allocation is just for 2 elements, since we don't know if this
03861                  * scanner will even need a stack. We use 2 instead of 1 to avoid an
03862                  * immediate realloc on the next call.
03863          */
03864                 num_to_alloc = 1;
03865                 (yy_buffer_stack) = (struct yy_buffer_state**)fscanYYalloc
03866                                                                 (num_to_alloc * sizeof(struct yy_buffer_state*)
03867                                                                 );
03868                 
03869                 memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
03870                                 
03871                 (yy_buffer_stack_max) = num_to_alloc;
03872                 (yy_buffer_stack_top) = 0;
03873                 return;
03874         }
03875 
03876         if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
03877 
03878                 /* Increase the buffer to prepare for a possible push. */
03879                 int grow_size = 8 /* arbitrary grow size */;
03880 
03881                 num_to_alloc = (yy_buffer_stack_max) + grow_size;
03882                 (yy_buffer_stack) = (struct yy_buffer_state**)fscanYYrealloc
03883                                                                 ((yy_buffer_stack),
03884                                                                 num_to_alloc * sizeof(struct yy_buffer_state*)
03885                                                                 );
03886 
03887                 /* zero only the new slots.*/
03888                 memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
03889                 (yy_buffer_stack_max) = num_to_alloc;
03890         }
03891 }
03892 
03899 YY_BUFFER_STATE fscanYY_scan_buffer  (char * base, yy_size_t  size )
03900 {
03901         YY_BUFFER_STATE b;
03902     
03903         if ( size < 2 ||
03904              base[size-2] != YY_END_OF_BUFFER_CHAR ||
03905              base[size-1] != YY_END_OF_BUFFER_CHAR )
03906                 /* They forgot to leave room for the EOB's. */
03907                 return 0;
03908 
03909         b = (YY_BUFFER_STATE) fscanYYalloc(sizeof( struct yy_buffer_state )  );
03910         if ( ! b )
03911                 YY_FATAL_ERROR( "out of dynamic memory in fscanYY_scan_buffer()" );
03912 
03913         b->yy_buf_size = size - 2;      /* "- 2" to take care of EOB's */
03914         b->yy_buf_pos = b->yy_ch_buf = base;
03915         b->yy_is_our_buffer = 0;
03916         b->yy_input_file = 0;
03917         b->yy_n_chars = b->yy_buf_size;
03918         b->yy_is_interactive = 0;
03919         b->yy_at_bol = 1;
03920         b->yy_fill_buffer = 0;
03921         b->yy_buffer_status = YY_BUFFER_NEW;
03922 
03923         fscanYY_switch_to_buffer(b  );
03924 
03925         return b;
03926 }
03927 
03936 YY_BUFFER_STATE fscanYY_scan_string (yyconst char * yystr )
03937 {
03938     
03939         return fscanYY_scan_bytes(yystr,strlen(yystr) );
03940 }
03941 
03949 YY_BUFFER_STATE fscanYY_scan_bytes  (yyconst char * yybytes, int  _yybytes_len )
03950 {
03951         YY_BUFFER_STATE b;
03952         char *buf;
03953         yy_size_t n;
03954         int i;
03955     
03956         /* Get memory for full buffer, including space for trailing EOB's. */
03957         n = _yybytes_len + 2;
03958         buf = (char *) fscanYYalloc(n  );
03959         if ( ! buf )
03960                 YY_FATAL_ERROR( "out of dynamic memory in fscanYY_scan_bytes()" );
03961 
03962         for ( i = 0; i < _yybytes_len; ++i )
03963                 buf[i] = yybytes[i];
03964 
03965         buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
03966 
03967         b = fscanYY_scan_buffer(buf,n );
03968         if ( ! b )
03969                 YY_FATAL_ERROR( "bad buffer in fscanYY_scan_bytes()" );
03970 
03971         /* It's okay to grow etc. this buffer, and we should throw it
03972          * away when we're done.
03973          */
03974         b->yy_is_our_buffer = 1;
03975 
03976         return b;
03977 }
03978 
03979     static void yy_push_state (int  new_state )
03980 {
03981         if ( (yy_start_stack_ptr) >= (yy_start_stack_depth) )
03982                 {
03983                 yy_size_t new_size;
03984 
03985                 (yy_start_stack_depth) += YY_START_STACK_INCR;
03986                 new_size = (yy_start_stack_depth) * sizeof( int );
03987 
03988                 if ( ! (yy_start_stack) )
03989                         (yy_start_stack) = (int *) fscanYYalloc(new_size  );
03990 
03991                 else
03992                         (yy_start_stack) = (int *) fscanYYrealloc((void *) (yy_start_stack),new_size  );
03993 
03994                 if ( ! (yy_start_stack) )
03995                         YY_FATAL_ERROR(
03996                         "out of memory expanding start-condition stack" );
03997                 }
03998 
03999         (yy_start_stack)[(yy_start_stack_ptr)++] = YY_START;
04000 
04001         BEGIN(new_state);
04002 }
04003 
04004     static void yy_pop_state  (void)
04005 {
04006         if ( --(yy_start_stack_ptr) < 0 )
04007                 YY_FATAL_ERROR( "start-condition stack underflow" );
04008 
04009         BEGIN((yy_start_stack)[(yy_start_stack_ptr)]);
04010 }
04011 
04012     static int yy_top_state  (void)
04013 {
04014         return (yy_start_stack)[(yy_start_stack_ptr) - 1];
04015 }
04016 
04017 #ifndef YY_EXIT_FAILURE
04018 #define YY_EXIT_FAILURE 2
04019 #endif
04020 
04021 static void yy_fatal_error (yyconst char* msg )
04022 {
04023         (void) fprintf( stderr, "%s\n", msg );
04024         exit( YY_EXIT_FAILURE );
04025 }
04026 
04027 /* Redefine yyless() so it works in section 3 code. */
04028 
04029 #undef yyless
04030 #define yyless(n) \
04031         do \
04032                 { \
04033                 /* Undo effects of setting up fscanYYtext. */ \
04034         int yyless_macro_arg = (n); \
04035         YY_LESS_LINENO(yyless_macro_arg);\
04036                 fscanYYtext[fscanYYleng] = (yy_hold_char); \
04037                 (yy_c_buf_p) = fscanYYtext + yyless_macro_arg; \
04038                 (yy_hold_char) = *(yy_c_buf_p); \
04039                 *(yy_c_buf_p) = '\0'; \
04040                 fscanYYleng = yyless_macro_arg; \
04041                 } \
04042         while ( 0 )
04043 
04044 /* Accessor  methods (get/set functions) to struct members. */
04045 
04049 int fscanYYget_lineno  (void)
04050 {
04051         
04052     return fscanYYlineno;
04053 }
04054 
04058 FILE *fscanYYget_in  (void)
04059 {
04060         return fscanYYin;
04061 }
04062 
04066 FILE *fscanYYget_out  (void)
04067 {
04068         return fscanYYout;
04069 }
04070 
04074 int fscanYYget_leng  (void)
04075 {
04076         return fscanYYleng;
04077 }
04078 
04083 char *fscanYYget_text  (void)
04084 {
04085         return fscanYYtext;
04086 }
04087 
04092 void fscanYYset_lineno (int  line_number )
04093 {
04094     
04095     fscanYYlineno = line_number;
04096 }
04097 
04104 void fscanYYset_in (FILE *  in_str )
04105 {
04106         fscanYYin = in_str ;
04107 }
04108 
04109 void fscanYYset_out (FILE *  out_str )
04110 {
04111         fscanYYout = out_str ;
04112 }
04113 
04114 int fscanYYget_debug  (void)
04115 {
04116         return fscanYY_flex_debug;
04117 }
04118 
04119 void fscanYYset_debug (int  bdebug )
04120 {
04121         fscanYY_flex_debug = bdebug ;
04122 }
04123 
04124 static int yy_init_globals (void)
04125 {
04126         /* Initialization is the same as for the non-reentrant scanner.
04127      * This function is called from fscanYYlex_destroy(), so don't allocate here.
04128      */
04129 
04130     (yy_buffer_stack) = 0;
04131     (yy_buffer_stack_top) = 0;
04132     (yy_buffer_stack_max) = 0;
04133     (yy_c_buf_p) = (char *) 0;
04134     (yy_init) = 0;
04135     (yy_start) = 0;
04136 
04137     (yy_start_stack_ptr) = 0;
04138     (yy_start_stack_depth) = 0;
04139     (yy_start_stack) =  NULL;
04140 
04141     (yy_state_buf) = 0;
04142     (yy_state_ptr) = 0;
04143     (yy_full_match) = 0;
04144     (yy_lp) = 0;
04145 
04146 /* Defined in main.c */
04147 #ifdef YY_STDINIT
04148     fscanYYin = stdin;
04149     fscanYYout = stdout;
04150 #else
04151     fscanYYin = (FILE *) 0;
04152     fscanYYout = (FILE *) 0;
04153 #endif
04154 
04155     /* For future reference: Set errno on error, since we are called by
04156      * fscanYYlex_init()
04157      */
04158     return 0;
04159 }
04160 
04161 /* fscanYYlex_destroy is for both reentrant and non-reentrant scanners. */
04162 int fscanYYlex_destroy  (void)
04163 {
04164     
04165     /* Pop the buffer stack, destroying each element. */
04166         while(YY_CURRENT_BUFFER){
04167                 fscanYY_delete_buffer(YY_CURRENT_BUFFER  );
04168                 YY_CURRENT_BUFFER_LVALUE = NULL;
04169                 fscanYYpop_buffer_state();
04170         }
04171 
04172         /* Destroy the stack itself. */
04173         fscanYYfree((yy_buffer_stack) );
04174         (yy_buffer_stack) = NULL;
04175 
04176     /* Destroy the start condition stack. */
04177         fscanYYfree((yy_start_stack)  );
04178         (yy_start_stack) = NULL;
04179 
04180     fscanYYfree ( (yy_state_buf) );
04181     (yy_state_buf)  = NULL;
04182 
04183     /* Reset the globals. This is important in a non-reentrant scanner so the next time
04184      * fscanYYlex() is called, initialization will occur. */
04185     yy_init_globals( );
04186 
04187     return 0;
04188 }
04189 
04190 /*
04191  * Internal utility routines.
04192  */
04193 
04194 #ifndef yytext_ptr
04195 static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
04196 {
04197         register int i;
04198         for ( i = 0; i < n; ++i )
04199                 s1[i] = s2[i];
04200 }
04201 #endif
04202 
04203 #ifdef YY_NEED_STRLEN
04204 static int yy_flex_strlen (yyconst char * s )
04205 {
04206         register int n;
04207         for ( n = 0; s[n]; ++n )
04208                 ;
04209 
04210         return n;
04211 }
04212 #endif
04213 
04214 void *fscanYYalloc (yy_size_t  size )
04215 {
04216         return (void *) malloc( size );
04217 }
04218 
04219 void *fscanYYrealloc  (void * ptr, yy_size_t  size )
04220 {
04221         /* The cast to (char *) in the following accommodates both
04222          * implementations that use char* generic pointers, and those
04223          * that use void* generic pointers.  It works with the latter
04224          * because both ANSI C and C++ allow castless assignment from
04225          * any pointer type to void*, and deal with argument conversions
04226          * as though doing an assignment.
04227          */
04228         return (void *) realloc( (char *) ptr, size );
04229 }
04230 
04231 void fscanYYfree (void * ptr )
04232 {
04233         free( (char *) ptr );   /* see fscanYYrealloc() for (char *) cast */
04234 }
04235 
04236 #define YYTABLES_NAME "yytables"
04237 
04238 #line 692 "fortranscanner.l"
04239 
04240 
04241 //----------------------------------------------------------------------------
04242 
04244 static void copyEntry(Entry *dest, Entry *src) 
04245 {
04246    dest->type     = src->type;
04247    dest->fileName = src->fileName;
04248    dest->bodyLine = src->bodyLine;
04249    dest->args     = src->args;
04250    dest->argList  = new ArgumentList(*src->argList);
04251 }
04252 
04257 void resolveModuleProcedures(QList<Entry> &moduleProcedures, Entry *current_root)
04258 {
04259   if (moduleProcedures.isEmpty()) return;
04260  
04261   EntryListIterator eli1(moduleProcedures);
04262   // for all module procedures
04263   for (Entry *ce1; (ce1=eli1.current()); ++eli1) 
04264   {
04265     // check all entries in this module
04266     EntryListIterator eli2(*current_root->children());
04267     for (Entry *ce2; (ce2=eli2.current()); ++eli2) 
04268     {
04269       if (ce1->name == ce2->name) 
04270       {
04271         copyEntry(ce1, ce2);
04272       }
04273     } // for procedures in current module
04274   } // for all interface module procedures
04275   moduleProcedures.clear();
04276 }
04277 
04278 static bool isTypeName(QCString name)
04279 {
04280   name = name.lower();
04281   return name=="integer" || name == "real" || 
04282     name=="complex" || name == "logical";
04283 }
04284 
04286 static QCString extractFromParens(const QCString name)
04287 {
04288   QCString extracted = name;
04289   int start = extracted.find("(");
04290   if (start != -1) 
04291   {
04292     extracted.remove(0, start+1);
04293   }
04294   int end = extracted.findRev(")");
04295   if (end != -1) 
04296   {
04297     int length = extracted.length();
04298     extracted.remove(end, length);
04299   }
04300   extracted = extracted.stripWhiteSpace();
04301 
04302   return extracted;
04303 }
04304 
04306 SymbolModifiers& SymbolModifiers::operator|=(const SymbolModifiers &mdfs)
04307 {
04308   if (mdfs.protection!=NONE_P) protection = mdfs.protection;
04309   if (mdfs.direction!=NONE_D) direction = mdfs.direction;
04310   optional |= mdfs.optional;
04311   if (!mdfs.dimension.isNull()) dimension = mdfs.dimension;
04312   allocatable |= mdfs.allocatable;
04313   external |= mdfs.external;
04314   intrinsic |= mdfs.intrinsic;
04315   parameter |= mdfs.parameter;
04316   pointer |= mdfs.pointer;
04317   target |= mdfs.target;
04318   save |= mdfs.save;
04319   return *this;
04320 }
04321 
04323 SymbolModifiers& SymbolModifiers::operator|=(QCString mdfString)
04324 {
04325   mdfString = mdfString.lower();
04326   SymbolModifiers newMdf;
04327 
04328   if (mdfString.find("dimension")==0) 
04329   {
04330     newMdf.dimension=mdfString;
04331   }
04332   else if (mdfString.contains("intent")) 
04333   {
04334     QCString tmp = extractFromParens(mdfString);
04335     bool isin = tmp.contains("in");
04336     bool isout = tmp.contains("out");
04337     if (isin && isout) newMdf.direction = SymbolModifiers::INOUT;
04338     else if (isin) newMdf.direction = SymbolModifiers::IN;
04339     else if (isout) newMdf.direction = SymbolModifiers::OUT;
04340   }
04341   else if (mdfString=="public") 
04342   {
04343     newMdf.protection = SymbolModifiers::PUBLIC;
04344   }
04345   else if (mdfString=="private") 
04346   {
04347     newMdf.protection = SymbolModifiers::PRIVATE;
04348   }
04349   else if (mdfString=="optional") 
04350   {
04351     newMdf.optional = TRUE;
04352   }
04353   else if (mdfString=="allocatable") 
04354   {
04355     newMdf.allocatable = TRUE;
04356   }
04357   else if (mdfString=="external") 
04358   {
04359     newMdf.external = TRUE;
04360   }
04361   else if (mdfString=="intrinsic") 
04362   {
04363     newMdf.intrinsic = TRUE;
04364   }
04365   else if (mdfString=="parameter") 
04366   {
04367     newMdf.parameter = TRUE;
04368   }
04369   else if (mdfString=="pointer") 
04370   {
04371     newMdf.pointer = TRUE;
04372   }
04373   else if (mdfString=="target") 
04374   {
04375     newMdf.target = TRUE;
04376   }
04377   else if (mdfString=="save") 
04378   {
04379     newMdf.save = TRUE;
04380   }
04381 
04382   (*this) |= newMdf;
04383   return *this;
04384 }
04385 
04387 //ostream& operator<<(ostream& out, const SymbolModifiers& mdfs)
04388 //{
04389 //  out<<mdfs.protection<<", "<<mdfs.direction<<", "<<mdfs.optional<<
04390 //    ", "<<(mdfs.dimension.isNull() ? "" : mdfs.dimension.latin1())<<
04391 //    ", "<<mdfs.allocatable<<", "<<mdfs.external<<", "<<mdfs.intrinsic;
04392 //
04393 //  return out;
04394 //}
04395 
04397 static Argument *findArgument(Entry* subprog, QCString name, bool byTypeName = FALSE)
04398 {
04399   QCString cname(name.lower());
04400   for (unsigned int i=0; i<subprog->argList->count(); i++) 
04401   {
04402     Argument *arg = subprog->argList->at(i);
04403     if (!byTypeName && arg->name.lower() == cname ||
04404         byTypeName && arg->type.lower() == cname)
04405       return arg;
04406   }
04407 
04408   return 0;
04409 }
04410 
04412 #if 0
04413 static Entry *findFunction(Entry* entry, QCString name)
04414 {
04415   QCString cname(name.lower());
04416 
04417   EntryListIterator eli(*entry->children());
04418   Entry *ce;
04419   for (;(ce=eli.current());++eli) 
04420   {
04421     if (ce->section != Entry::FUNCTION_SEC)
04422       continue;
04423 
04424     if (ce->name.lower() == cname)
04425       return ce;
04426   }
04427 
04428   return 0;
04429 }
04430 #endif
04431 
04433 static QCString applyModifiers(QCString typeName, SymbolModifiers& mdfs) 
04434 {
04435   if (!mdfs.dimension.isNull()) 
04436   {
04437     typeName += ",";
04438     typeName += mdfs.dimension;
04439   }
04440   if (mdfs.direction!=SymbolModifiers::NONE_D) 
04441   {
04442     typeName += ",";
04443     typeName += directionStrs[mdfs.direction];
04444   }
04445   if (mdfs.optional) 
04446   {
04447     typeName += ",";
04448     typeName += "optional";
04449   }
04450   if (mdfs.allocatable) 
04451   {
04452     typeName += ",";
04453     typeName += "allocatable";
04454   }
04455   if (mdfs.external) 
04456   {
04457     typeName += ",";
04458     typeName += "external";
04459   }
04460   if (mdfs.intrinsic) 
04461   {
04462     typeName += ",";
04463     typeName += "intrinsic";
04464   }
04465   if (mdfs.parameter) 
04466   {
04467     typeName += ",";
04468     typeName += "parameter";
04469   }
04470   if (mdfs.pointer) 
04471   {
04472     typeName += ",";
04473     typeName += "pointer";
04474   }
04475   if (mdfs.target) 
04476   {
04477     typeName += ",";
04478     typeName += "target";
04479   }
04480   if (mdfs.save) 
04481   {
04482     typeName += ",";
04483     typeName += "save";
04484   }
04485 
04486   return typeName;
04487 }
04488 
04490 static void applyModifiers(Argument *arg, SymbolModifiers& mdfs)
04491 {
04492   QCString tmp = arg->type;
04493   arg->type = applyModifiers(tmp, mdfs);
04494 }
04495 
04497 static void applyModifiers(Entry *ent, SymbolModifiers& mdfs)
04498 {
04499   QCString tmp = ent->type;
04500   ent->type = applyModifiers(tmp, mdfs);
04501 
04502   if (mdfs.protection == SymbolModifiers::PUBLIC)
04503     ent->protection = Public;
04504   else if (mdfs.protection == SymbolModifiers::PRIVATE)
04505     ent->protection = Private;
04506 }
04507 
04512 static void startScope(Entry *scope) 
04513 {
04514   //cout<<"start scope: "<<scope->name<<endl;
04515   current_root= scope; /* start substructure */
04516 
04517   QMap<QCString,SymbolModifiers> mdfMap;
04518   modifiers.insert(scope, mdfMap);
04519 }
04520 
04524 static bool endScope(Entry *scope) 
04525 {
04526   //cout<<"end scope: "<<scope->name<<endl;
04527   if (current_root->parent())
04528   {
04529     current_root= current_root->parent(); /* end substructure */
04530   }
04531   else 
04532   {
04533     fprintf(stderr,"parse error in end <scopename>");
04534     scanner_abort();
04535     return FALSE;
04536   }
04537 
04538   // update variables or subprogram arguments with modifiers
04539   QMap<QCString,SymbolModifiers>& mdfsMap = modifiers[scope];
04540 
04541   if (scope->section == Entry::FUNCTION_SEC) 
04542   {
04543     // iterate all symbol modifiers of the scope
04544     for (QMap<QCString,SymbolModifiers>::Iterator it=mdfsMap.begin(); it!=mdfsMap.end(); it++) 
04545     {
04546       //cout<<it.key()<<": "<<it.data()<<endl;
04547       Argument *arg = findArgument(scope, it.key());
04548 
04549       if (arg)
04550         applyModifiers(arg, it.data());
04551     }
04552 
04553     // find return type for function
04554     //cout<<"RETURN NAME "<<modifiers[current_root][scope->name.lower()].returnName<<endl;
04555     QCString returnName = modifiers[current_root][scope->name.lower()].returnName.lower();
04556     if (modifiers[scope].contains(returnName)) 
04557     {
04558       scope->type = modifiers[scope][returnName].type; // returning type works
04559       applyModifiers(scope, modifiers[scope][returnName]); // returning array works
04560     }
04561 
04562   } 
04563   if (scope->section == Entry::CLASS_SEC) 
04564   { // was INTERFACE_SEC
04565     if (scope->parent()->section == Entry::FUNCTION_SEC) 
04566     { // interface within function
04567       // iterate functions of interface and 
04568       // try to find types for dummy(ie. argument) procedures.
04569       //cout<<"Search in "<<scope->name<<endl;
04570       EntryListIterator eli(*scope->children());
04571       Entry *ce;
04572       for (;(ce=eli.current());++eli) 
04573       {
04574         if (ce->section != Entry::FUNCTION_SEC)
04575           continue;
04576 
04577         Argument *arg = findArgument(scope->parent(), ce->name, TRUE);
04578         if (arg != 0) 
04579         {
04580           // set type of dummy procedure argument to interface
04581           arg->name = arg->type;
04582           arg->type = scope->name;
04583         }
04584       }
04585     }
04586   } 
04587   if (scope->section!=Entry::FUNCTION_SEC) 
04588   { // not function section 
04589     // iterate variables: get and apply modifiers
04590     EntryListIterator eli(*scope->children());
04591     Entry *ce;
04592     for (;(ce=eli.current());++eli) 
04593     {
04594       if (ce->section != Entry::VARIABLE_SEC && ce->section != Entry::FUNCTION_SEC)
04595         continue;
04596 
04597       //cout<<ce->name<<", "<<mdfsMap.contains(ce->name.lower())<<mdfsMap.count()<<endl;
04598       if (mdfsMap.contains(ce->name.lower()))
04599         applyModifiers(ce, mdfsMap[ce->name.lower()]);
04600     }
04601   }
04602 
04603   // clear all modifiers of the scope
04604   modifiers.remove(scope);
04605 
04606   return TRUE;
04607 }
04608 
04610 static QCString getFullName(Entry *e) 
04611 {
04612   QCString name = e->name;
04613   if (e->section == Entry::CLASS_SEC //  || e->section == Entry::INTERFACE_SEC
04614      || !e->parent() || e->parent()->name.isEmpty())
04615     return name;
04616 
04617   return getFullName(e->parent())+"::"+name;
04618 }
04619 
04620 static int yyread(char *buf,int max_size)
04621 {
04622   int c=0;
04623   while ( c < max_size && inputString[inputPosition] )
04624   {
04625     *buf = inputString[inputPosition++] ;
04626     c++; buf++;
04627   }
04628   return c;
04629 }
04630 
04631 static void initParser()
04632 {
04633   last_entry = 0;
04634 }
04635 
04636 static void initEntry()
04637 {
04638   current->protection = defaultProtection ;
04639   current->mtype      = mtype;
04640   current->virt       = virt;
04641   current->stat       = gstat;
04642   initGroupInfo(current);
04643 }
04644 
04648 static void addCurrentEntry()
04649 {
04650   //cout << "Adding entry " <<current->name.data() << endl;
04651   current_root->addSubEntry(current);
04652   last_entry = current;
04653   current = new Entry ;
04654   initEntry();
04655 }
04656 
04661 static void addInterface(QCString name) 
04662 {
04663   current->section = Entry::CLASS_SEC; // was Entry::INTERFACE_SEC;
04664   current->spec = Entry::Interface;
04665   current->name = name;
04666 
04667   /* if type is part of a module, mod name is necessary for output */
04668   if ((current_root) && 
04669       (current_root->section ==  Entry::CLASS_SEC ||
04670        current_root->section ==  Entry::NAMESPACE_SEC)) 
04671   {
04672     current->name= current_root->name+"::"+current->name;
04673   }
04674   if ((current_root) &&
04675       (current_root->section ==  Entry::FUNCTION_SEC)) 
04676   {
04677     current->name = getFullName(current_root) + "__" + QCString(current->name);
04678   }
04679 
04680   current->fileName = yyFileName;
04681   current->bodyLine  = yyLineNr; 
04682   addCurrentEntry();
04683 }
04684 
04685 
04686 //-----------------------------------------------------------------------------
04687 
04690 static Argument *addFortranParameter(const QCString &type,const QCString &name, const QCString docs)
04691 {
04692   //cout<<"addFortranParameter(): "<<name<<" DOCS:"<<(docs.isNull()?QCString("null"):docs)<<endl;
04693   Argument *ret = 0;
04694   if (current_root->argList==0) return 0;
04695   ArgumentListIterator ali(*current_root->argList);
04696   Argument *a;
04697   for (ali.toFirst();(a=ali.current());++ali)
04698   {
04699     if (a->type.lower()==name.lower())
04700     {
04701       ret=a;
04702 //cout << "addParameter found:   " << type << " , " << name << endl;
04703       a->type=type.stripWhiteSpace();
04704       a->name=name.stripWhiteSpace();
04705       if (!docs.isNull())
04706         a->docs = docs;
04707       break;
04708     }
04709   } // for
04710   return ret;
04711 }
04712 
04713   //----------------------------------------------------------------------------
04714 static void startCommentBlock(bool brief)
04715 {
04716   if (brief)
04717   {
04718     current->briefFile = yyFileName;
04719     current->briefLine = yyLineNr;
04720   }
04721   else
04722   {
04723     current->docFile = yyFileName;
04724     current->docLine = yyLineNr;
04725   }
04726 }
04727 
04728   //----------------------------------------------------------------------------
04729 static void handleCommentBlock(const QCString &doc,bool brief)
04730 {
04731   docBlockInBody = FALSE;
04732   bool needsEntry = FALSE;
04733   static bool hideInBodyDocs = Config_getBool("HIDE_IN_BODY_DOCS");
04734   int position=0;
04735   if (docBlockInBody && hideInBodyDocs) return;
04736   //fprintf(stderr,"call parseCommentBlock [%s]\n",doc.data());
04737   while (parseCommentBlock(
04738         g_thisParser,
04739         docBlockInBody ? last_entry : current,
04740         doc,        // text
04741         yyFileName, // file
04742         brief ? current->briefLine : current->docLine,   // line of block start
04743         docBlockInBody ? FALSE : brief, 
04744         docBlockInBody ? FALSE : docBlockJavaStyle,
04745         docBlockInBody,
04746         defaultProtection,
04747         position,
04748         needsEntry
04749         )) 
04750   {
04751            //fprintf(stderr,"parseCommentBlock position=%d [%s]  needsEntry=%d\n",position,doc.data()+position,needsEntry);
04752    if (needsEntry) addCurrentEntry();
04753   }
04754   //fprintf(stderr,"parseCommentBlock position=%d [%s]  needsEntry=%d\n",position,doc.data()+position,needsEntry);
04755 
04756   if (needsEntry) addCurrentEntry();
04757 }
04758 
04759 //----------------------------------------------------------------------------
04760 static int level=0;
04761 static void debugCompounds(Entry *rt)  // print Entry structure (for debugging)
04762 {
04763  level++;
04764   printf("%d) debugCompounds(%s) line %d\n",level, rt->name.data(), rt->bodyLine);
04765   EntryListIterator eli(*rt->children());
04766   Entry *ce;
04767   for (;(ce=eli.current());++eli)
04768   {
04769      debugCompounds(ce); 
04770   } 
04771 level--;
04772 }
04773 
04774 
04775 static void parseMain(const char *fileName,const char *fileBuf,Entry *rt)
04776 {
04777   initParser();
04778 
04779   defaultProtection = Public;
04780   inputString = fileBuf;
04781   inputPosition = 0;
04782 
04783   //anonCount     = 0;  // don't reset per file
04784   mtype         = Method;
04785   gstat         = FALSE;
04786   virt          = Normal;
04787   current_root  = rt;
04788   global_root   = rt;
04789   inputFile.setName(fileName);
04790   if (inputFile.open(IO_ReadOnly))
04791   {
04792     yyLineNr= 1 ; 
04793     yyFileName = fileName;
04794     msg("Parsing file %s...\n",yyFileName.data());
04795 
04796     current_root  = rt ;
04797     initParser();
04798     groupEnterFile(yyFileName,yyLineNr);
04799 
04800     current          = new Entry;
04801     current->name    = yyFileName;
04802     current->section = Entry::SOURCE_SEC;
04803     current_root->addSubEntry(current);
04804     file_root        = current;
04805     current          = new Entry;
04806 
04807     fscanYYrestart( fscanYYin );
04808     {
04809       BEGIN( Start );
04810     }
04811 
04812     fscanYYlex();
04813     groupLeaveFile(yyFileName,yyLineNr);
04814 
04815     //debugCompounds(rt); //debug 
04816 
04817     rt->program.resize(0);
04818     delete current; current=0;
04819     moduleProcedures.clear();
04820 
04821     inputFile.close();
04822   }
04823 }
04824 
04825 //----------------------------------------------------------------------------
04826 
04827 void FortranLanguageScanner::parseInput(const char *fileName,const char *fileBuf,Entry *root)
04828 {
04829   g_thisParser = this;
04830   ::parseMain(fileName,fileBuf,root);
04831 }
04832 
04833 void FortranLanguageScanner::parseCode(CodeOutputInterface & codeOutIntf,
04834                    const char * scopeName,
04835                    const QCString & input,
04836                    bool isExampleBlock,
04837                    const char * exampleName,
04838                    FileDef * fileDef,
04839                    int startLine,
04840                    int endLine,
04841                    bool inlineFragment,
04842                    MemberDef *memberDef
04843                   )
04844 {
04845   ::parseFortranCode(codeOutIntf,scopeName,input,isExampleBlock,exampleName,
04846                      fileDef,startLine,endLine,inlineFragment,memberDef);
04847 }
04848 
04849 bool FortranLanguageScanner::needsPreprocessing(const QCString &extension)
04850 {
04851   (void)extension;
04852   return TRUE;
04853 }
04854 void FortranLanguageScanner::resetCodeParserState()
04855 {
04856   ::resetFortranCodeParserState();
04857 }
04858 
04859 void FortranLanguageScanner::parsePrototype(const char *text)
04860 {
04861   (void)text;
04862 }
04863 
04864 static void scanner_abort() 
04865 {
04866   fprintf(stderr,"********************************************************************\n");
04867   fprintf(stderr,"Error in file %s line: %d, state: %d\n",yyFileName.data(),yyLineNr,YY_START);
04868   fprintf(stderr,"********************************************************************\n");
04869    
04870   EntryListIterator eli(*global_root->children());
04871   Entry *ce;
04872   bool start=FALSE;
04873 
04874   for (;(ce=eli.current());++eli)
04875   {
04876      if (ce == file_root) start=TRUE;
04877      if (start) ce->reset(); 
04878   } 
04879   
04880   return;
04881   //exit(-1);
04882 }
04883 
04884 //----------------------------------------------------------------------------
04885 
04886 #if !defined(YY_FLEX_SUBMINOR_VERSION) 
04887 //----------------------------------------------------------------------------
04888 extern "C" { // some bogus code to keep the compiler happy
04889   void fscannerYYdummy() { yy_flex_realloc(0,0); yy_top_state(); } 
04890 }
04891 #endif
04892 
04893 



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