#line 2 "verilogscanner.cpp"

#line 4 "verilogscanner.cpp"

#define  YY_INT_ALIGNED short int

/* A lexical scanner generated by flex */

/* %not-for-header */

/* %if-c-only */
/* %if-not-reentrant */
#define yy_create_buffer verilogscannerYY_create_buffer
#define yy_delete_buffer verilogscannerYY_delete_buffer
#define yy_flex_debug verilogscannerYY_flex_debug
#define yy_init_buffer verilogscannerYY_init_buffer
#define yy_flush_buffer verilogscannerYY_flush_buffer
#define yy_load_buffer_state verilogscannerYY_load_buffer_state
#define yy_switch_to_buffer verilogscannerYY_switch_to_buffer
#define yyin verilogscannerYYin
#define yyleng verilogscannerYYleng
#define yylex verilogscannerYYlex
#define yylineno verilogscannerYYlineno
#define yyout verilogscannerYYout
#define yyrestart verilogscannerYYrestart
#define yytext verilogscannerYYtext
#define yywrap verilogscannerYYwrap
#define yyalloc verilogscannerYYalloc
#define yyrealloc verilogscannerYYrealloc
#define yyfree verilogscannerYYfree

/* %endif */
/* %endif */
/* %ok-for-header */

#define FLEX_SCANNER
#define YY_FLEX_MAJOR_VERSION 2
#define YY_FLEX_MINOR_VERSION 5
#define YY_FLEX_SUBMINOR_VERSION 37
#if YY_FLEX_SUBMINOR_VERSION > 0
#define FLEX_BETA
#endif

/* %if-c++-only */
/* %endif */

/* %if-c-only */
    
/* %endif */

/* %if-c-only */

/* %endif */

/* First, we deal with  platform-specific or compiler-specific issues. */

/* begin standard C headers. */
/* %if-c-only */
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <stdlib.h>
/* %endif */

/* %if-tables-serialization */
/* %endif */
/* end standard C headers. */

/* %if-c-or-c++ */
/* flex integer type definitions */

#ifndef FLEXINT_H
#define FLEXINT_H

/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */

#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L

/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
 * if you want the limit (max/min) macros for int types. 
 */
#ifndef __STDC_LIMIT_MACROS
#define __STDC_LIMIT_MACROS 1
#endif

#include <inttypes.h>
typedef int8_t flex_int8_t;
typedef uint8_t flex_uint8_t;
typedef int16_t flex_int16_t;
typedef uint16_t flex_uint16_t;
typedef int32_t flex_int32_t;
typedef uint32_t flex_uint32_t;
#else
typedef signed char flex_int8_t;
typedef short int flex_int16_t;
typedef int flex_int32_t;
typedef unsigned char flex_uint8_t; 
typedef unsigned short int flex_uint16_t;
typedef unsigned int flex_uint32_t;

/* Limits of integral types. */
#ifndef INT8_MIN
#define INT8_MIN               (-128)
#endif
#ifndef INT16_MIN
#define INT16_MIN              (-32767-1)
#endif
#ifndef INT32_MIN
#define INT32_MIN              (-2147483647-1)
#endif
#ifndef INT8_MAX
#define INT8_MAX               (127)
#endif
#ifndef INT16_MAX
#define INT16_MAX              (32767)
#endif
#ifndef INT32_MAX
#define INT32_MAX              (2147483647)
#endif
#ifndef UINT8_MAX
#define UINT8_MAX              (255U)
#endif
#ifndef UINT16_MAX
#define UINT16_MAX             (65535U)
#endif
#ifndef UINT32_MAX
#define UINT32_MAX             (4294967295U)
#endif

#endif /* ! C99 */

#endif /* ! FLEXINT_H */

/* %endif */

/* %if-c++-only */
/* %endif */

#ifdef __cplusplus

/* The "const" storage-class-modifier is valid. */
#define YY_USE_CONST

#else	/* ! __cplusplus */

/* C99 requires __STDC__ to be defined as 1. */
#if defined (__STDC__)

#define YY_USE_CONST

#endif	/* defined (__STDC__) */
#endif	/* ! __cplusplus */

#ifdef YY_USE_CONST
#define yyconst const
#else
#define yyconst
#endif

/* %not-for-header */

/* Returned upon end-of-file. */
#define YY_NULL 0
/* %ok-for-header */

/* %not-for-header */

/* Promotes a possibly negative, possibly signed char to an unsigned
 * integer for use as an array index.  If the signed char is negative,
 * we want to instead treat it as an 8-bit unsigned char, hence the
 * double cast.
 */
#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
/* %ok-for-header */

/* %if-reentrant */
/* %endif */

/* %if-not-reentrant */

/* %endif */

/* Enter a start condition.  This macro really ought to take a parameter,
 * but we do it the disgusting crufty way forced on us by the ()-less
 * definition of BEGIN.
 */
#define BEGIN (yy_start) = 1 + 2 *

/* Translate the current start state into a value that can be later handed
 * to BEGIN to return to the state.  The YYSTATE alias is for lex
 * compatibility.
 */
#define YY_START (((yy_start) - 1) / 2)
#define YYSTATE YY_START

/* Action number for EOF rule of a given start state. */
#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)

/* Special action meaning "start processing a new file". */
#define YY_NEW_FILE verilogscannerYYrestart(verilogscannerYYin  )

#define YY_END_OF_BUFFER_CHAR 0

/* Size of default input buffer. */
#ifndef YY_BUF_SIZE
#define YY_BUF_SIZE 16384
#endif

/* The state buf must be large enough to hold one state per character in the main buffer.
 */
#define YY_STATE_BUF_SIZE   ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))

#ifndef YY_TYPEDEF_YY_BUFFER_STATE
#define YY_TYPEDEF_YY_BUFFER_STATE
typedef struct yy_buffer_state *YY_BUFFER_STATE;
#endif

#ifndef YY_TYPEDEF_YY_SIZE_T
#define YY_TYPEDEF_YY_SIZE_T
typedef size_t yy_size_t;
#endif

/* %if-not-reentrant */
extern yy_size_t verilogscannerYYleng;
/* %endif */

/* %if-c-only */
/* %if-not-reentrant */
extern FILE *verilogscannerYYin, *verilogscannerYYout;
/* %endif */
/* %endif */

#define EOB_ACT_CONTINUE_SCAN 0
#define EOB_ACT_END_OF_FILE 1
#define EOB_ACT_LAST_MATCH 2

    #define YY_LESS_LINENO(n)
    
/* Return all but the first "n" matched characters back to the input stream. */
#define yyless(n) \
	do \
		{ \
		/* Undo effects of setting up verilogscannerYYtext. */ \
        int yyless_macro_arg = (n); \
        YY_LESS_LINENO(yyless_macro_arg);\
		*yy_cp = (yy_hold_char); \
		YY_RESTORE_YY_MORE_OFFSET \
		(yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
		YY_DO_BEFORE_ACTION; /* set up verilogscannerYYtext again */ \
		} \
	while ( 0 )

#define unput(c) yyunput( c, (yytext_ptr)  )

#ifndef YY_STRUCT_YY_BUFFER_STATE
#define YY_STRUCT_YY_BUFFER_STATE
struct yy_buffer_state
	{
/* %if-c-only */
	FILE *yy_input_file;
/* %endif */

/* %if-c++-only */
/* %endif */

	char *yy_ch_buf;		/* input buffer */
	char *yy_buf_pos;		/* current position in input buffer */

	/* Size of input buffer in bytes, not including room for EOB
	 * characters.
	 */
	yy_size_t yy_buf_size;

	/* Number of characters read into yy_ch_buf, not including EOB
	 * characters.
	 */
	yy_size_t yy_n_chars;

	/* Whether we "own" the buffer - i.e., we know we created it,
	 * and can realloc() it to grow it, and should free() it to
	 * delete it.
	 */
	int yy_is_our_buffer;

	/* Whether this is an "interactive" input source; if so, and
	 * if we're using stdio for input, then we want to use getc()
	 * instead of fread(), to make sure we stop fetching input after
	 * each newline.
	 */
	int yy_is_interactive;

	/* Whether we're considered to be at the beginning of a line.
	 * If so, '^' rules will be active on the next match, otherwise
	 * not.
	 */
	int yy_at_bol;

    int yy_bs_lineno; /**< The line count. */
    int yy_bs_column; /**< The column count. */
    
	/* Whether to try to fill the input buffer when we reach the
	 * end of it.
	 */
	int yy_fill_buffer;

	int yy_buffer_status;

#define YY_BUFFER_NEW 0
#define YY_BUFFER_NORMAL 1
	/* When an EOF's been seen but there's still some text to process
	 * then we mark the buffer as YY_EOF_PENDING, to indicate that we
	 * shouldn't try reading from the input source any more.  We might
	 * still have a bunch of tokens to match, though, because of
	 * possible backing-up.
	 *
	 * When we actually see the EOF, we change the status to "new"
	 * (via verilogscannerYYrestart()), so that the user can continue scanning by
	 * just pointing verilogscannerYYin at a new input file.
	 */
#define YY_BUFFER_EOF_PENDING 2

	};
#endif /* !YY_STRUCT_YY_BUFFER_STATE */

/* %if-c-only Standard (non-C++) definition */
/* %not-for-header */

/* %if-not-reentrant */

/* Stack of input buffers. */
static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */
static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */
static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
/* %endif */
/* %ok-for-header */

/* %endif */

/* We provide macros for accessing buffer states in case in the
 * future we want to put the buffer states in a more general
 * "scanner state".
 *
 * Returns the top of the stack, or NULL.
 */
#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
                          ? (yy_buffer_stack)[(yy_buffer_stack_top)] \
                          : NULL)

/* Same as previous macro, but useful when we know that the buffer stack is not
 * NULL or when we need an lvalue. For internal use only.
 */
#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)]

/* %if-c-only Standard (non-C++) definition */

/* %if-not-reentrant */
/* %not-for-header */

/* yy_hold_char holds the character lost when verilogscannerYYtext is formed. */
static char yy_hold_char;
static yy_size_t yy_n_chars;		/* number of characters read into yy_ch_buf */
yy_size_t verilogscannerYYleng;

/* Points to current character in buffer. */
static char *yy_c_buf_p = (char *) 0;
static int yy_init = 0;		/* whether we need to initialize */
static int yy_start = 0;	/* start state number */

/* Flag which is used to allow verilogscannerYYwrap()'s to do buffer switches
 * instead of setting up a fresh verilogscannerYYin.  A bit of a hack ...
 */
static int yy_did_buffer_switch_on_eof;
/* %ok-for-header */

/* %endif */

void verilogscannerYYrestart (FILE *input_file  );
void verilogscannerYY_switch_to_buffer (YY_BUFFER_STATE new_buffer  );
YY_BUFFER_STATE verilogscannerYY_create_buffer (FILE *file,int size  );
void verilogscannerYY_delete_buffer (YY_BUFFER_STATE b  );
void verilogscannerYY_flush_buffer (YY_BUFFER_STATE b  );
void verilogscannerYYpush_buffer_state (YY_BUFFER_STATE new_buffer  );
void verilogscannerYYpop_buffer_state (void );

static void verilogscannerYYensure_buffer_stack (void );
static void verilogscannerYY_load_buffer_state (void );
static void verilogscannerYY_init_buffer (YY_BUFFER_STATE b,FILE *file  );

#define YY_FLUSH_BUFFER verilogscannerYY_flush_buffer(YY_CURRENT_BUFFER )

YY_BUFFER_STATE verilogscannerYY_scan_buffer (char *base,yy_size_t size  );
YY_BUFFER_STATE verilogscannerYY_scan_string (yyconst char *yy_str  );
YY_BUFFER_STATE verilogscannerYY_scan_bytes (yyconst char *bytes,yy_size_t len  );

/* %endif */

void *verilogscannerYYalloc (yy_size_t  );
void *verilogscannerYYrealloc (void *,yy_size_t  );
void verilogscannerYYfree (void *  );

#define yy_new_buffer verilogscannerYY_create_buffer

#define yy_set_interactive(is_interactive) \
	{ \
	if ( ! YY_CURRENT_BUFFER ){ \
        verilogscannerYYensure_buffer_stack (); \
		YY_CURRENT_BUFFER_LVALUE =    \
            verilogscannerYY_create_buffer(verilogscannerYYin,YY_BUF_SIZE ); \
	} \
	YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
	}

#define yy_set_bol(at_bol) \
	{ \
	if ( ! YY_CURRENT_BUFFER ){\
        verilogscannerYYensure_buffer_stack (); \
		YY_CURRENT_BUFFER_LVALUE =    \
            verilogscannerYY_create_buffer(verilogscannerYYin,YY_BUF_SIZE ); \
	} \
	YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
	}

#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)

/* %% [1.0] verilogscannerYYtext/verilogscannerYYin/verilogscannerYYout/yy_state_type/verilogscannerYYlineno etc. def's & init go here */
/* Begin user sect3 */

#define verilogscannerYYwrap() 1
#define YY_SKIP_YYWRAP

#define FLEX_DEBUG

typedef unsigned char YY_CHAR;

FILE *verilogscannerYYin = (FILE *) 0, *verilogscannerYYout = (FILE *) 0;

typedef int yy_state_type;

extern int verilogscannerYYlineno;

int verilogscannerYYlineno = 1;

extern char *verilogscannerYYtext;
#define yytext_ptr verilogscannerYYtext

/* %if-c-only Standard (non-C++) definition */

static yy_state_type yy_get_previous_state (void );
static yy_state_type yy_try_NUL_trans (yy_state_type current_state  );
static int yy_get_next_buffer (void );
static void yy_fatal_error (yyconst char msg[]  );

/* %endif */

/* Done after the current pattern has been matched and before the
 * corresponding action - sets up verilogscannerYYtext.
 */
#define YY_DO_BEFORE_ACTION \
	(yytext_ptr) = yy_bp; \
/* %% [2.0] code to fiddle verilogscannerYYtext and verilogscannerYYleng for yymore() goes here \ */\
	(yytext_ptr) -= (yy_more_len); \
	verilogscannerYYleng = (size_t) (yy_cp - (yytext_ptr)); \
	(yy_hold_char) = *yy_cp; \
	*yy_cp = '\0'; \
/* %% [3.0] code to copy yytext_ptr to verilogscannerYYtext[] goes here, if %array \ */\
	(yy_c_buf_p) = yy_cp;

/* %% [4.0] data tables for the DFA and the user's section 1 definitions go here */
#define YY_NUM_RULES 150
#define YY_END_OF_BUFFER 151
/* This struct is not used in this scanner,
   but its presence is necessary. */
struct yy_trans_info
	{
	flex_int32_t yy_verify;
	flex_int32_t yy_nxt;
	};
static yyconst flex_int16_t yy_acclist[1274] =
    {   0,
      151,    1,  150,  150,    1,  150,    1,  150,  111,  150,
      106,  111,  150,  107,  150,  108,  111,  150,  111,  119,
      150,  111,  150,  111,  144,  150,  111,  145,  150,  111,
      142,  150,  111,  134,  150,  111,  150,  111,  128,  150,
      111,  129,  150,  111,  141,  150,  111,  125,  150,  111,
      123,  150,  111,  126,  150,  111,  122,  150,  111,  147,
      150,  109,  111,  150,  111,  127,  150,  111,  121,  150,
      111,  137,  150,  111,  136,  150,  111,  138,  150,  111,
      124,  150,  111,  143,  150,  110,  111,  150,  110,  111,
      150,  111,  132,  150,  111,  133,  150,  111,  139,  150,

      111,  120,  150,  111,  150,  110,  111,  150,  110,  111,
      150,  110,  111,  150,  110,  111,  150,  110,  111,  150,
      110,  111,  150,  110,  111,  150,  110,  111,  150,  110,
      111,  150,  110,  111,  150,  110,  111,  150,  110,  111,
      150,  110,  111,  150,  110,  111,  150,  110,  111,  150,
      110,  111,  150,  110,  111,  150,  110,  111,  150,  110,
      111,  150,  110,  111,  150,  110,  111,  150,  110,  111,
      150,  111,  131,  150,  111,  135,  150,  111,  130,  150,
      111,  140,  150,  111,  150,  150,  150,  150,  150,  148,
      150,  150,  150,  102,  150,  102,  150,  102,  150,    2,

      150,    2,  150,    2,  150,    3,  150,  108,  105,  110,
      110,  110,  110,  110,  110,  110,  110,  110,  117,  109,
      109,  112,  113,  146,  104,  109,  109,  110,  110,  115,
        6,    6,    6,    6,    6,    6,    6,    6,    6,    6,
        6,    6,    6,  110,  110,  110,  110,  110,  110,  110,
      110,  110,  110,  110,  110,  110,  110,  110,  110,  110,
      110,  110,  110,   59,  110,  110,  110,  110,  110,  110,
      110,  110,  110,  110,  110,  110,  110,   99,  110,  110,
      110,  110,  110,  110,  110,  110,  110,  110,  110,  110,
      110,  110,  110,  110,  110,  110,  110,  110,  110,  110,

      110,  110,  110,  110,  110,  110,  110,  110,  110,  118,
      114,  149,  148,    2,    2,    2,    2,  103,  110,  110,
      110,  110,  110,  110,  110,  110,  110,  116,  109,  109,
      104,  103,  104,  109,  109,    6,    6,    6,    6,    6,
        6,    6,    6,    6,    6,    6,    6,    6,    6,    6,
        6,    6,    6,    6,    6,  110,  110,  110,  110,   99,
      110,  110,  110,  110,  110,  110,  110,  110,  110,  110,
      110,   41,  110,  110,   66,  110,  110,  110,  110,  110,
      110,  110,  110,  110,  110,  110,  110,  110,  110,  110,
      110,  110,  110,  110,  110,  110,  110,   99,  110,  110,

      110,  110,  110,  110,  110,  110,  110,   80,  110,  110,
      110,  110,  110,  110,  110,  110,  110,  110,  110,  110,
      110,  110,  110,  110,  110,   96,  110,   14,  110,  110,
      110,  110,  110,  110,  110,   96,  110,  110,    4,  103,
      101,  103,    2,  103,    2,  103,  103,  110,  110,  110,
      110,  110,  110,  110,  110,  110,  110,  103,  104,  103,
      104,  109,  109,    6,    6,    6,    6,    6,    6,    6,
        6,    6,    6,    6,    6,    6,    6,    6,    6,    6,
        6,    6,    6,    6,    6,    6,    6,    6,    6,    6,
        6,  110,  110,  110,  110,  110,   58,  110,   17,  110,

      110,  110,  110,  110,  110,  110,   22,  110,   52,  110,
      110,  110,  110,  110,  110,  110,  110,  110,  110,  110,
       43,  110,  110,  110,  110,  110,  110,  110,  110,  110,
      110,  110,  110,   65,  110,  110,  110,  110,  110,  110,
      110,  110,  110,  110,  110,  110,  110,  110,  110,  110,
      110,  110,   83,  110,  110,  110,  110,  110,  110,  110,
      110,  110,  110,  110,  110,  110,  110,   71,  110,   37,
      110,   99,  110,   96,  110,  110,  110,  110,  110,   64,
      110,  110,  110,  103,  103,  148,  103,  101,  103,  101,
      103,  101,    2,  103,    2,  103,    2,  103,16484,  110,

       30,  110,  110,  110,  110,  110,  110,  110,   34,  110,
      110,  110,  103,  104,    6,    6,    6,    6,    6,    6,
        6,    5,    6,    6,    6,    6,    6,    6,    6,    6,
        6,    6,    6,    6,    6,    6,    6,    6,    6,    6,
        6,    6,    6,    6,    6,    6,    6,  110,  110,  110,
       42,  110,  110,   57,  110,   56,  110,  110,  110,  110,
      110,  110,  110,  110,  110,  110,  110,  110,  110,  110,
      110,   84,  110,   63,  110,  110,  110,  110,  110,  110,
      110,  110,  110,   93,  110,   92,  110,  110,  110,   90,
      110,  110,  110,  110,  110,  110,  110,  110,  110,  110,

      110,  110,  110,  110,   97,  110,   98,  110,  110,  110,
      110,  110,  110,  110,   99,  110,  110,  110,  110,   88,
      110,  110,  110,  110,  110,   72,  110,  110,  110,  110,
      110,   53,  110,  103,16484,  103,  148,  103,  148,  148,
      101,  103,  101,  101,    2,  103,    2,  110,  110,  110,
      110,  110,  110,   31,  110,  110,   35,  110,    6,    6,
        6,    6,    6,    6,    6,    5,    6,    5,    6,    6,
        6,    6,    6,    6,    6,    6,    6,    6,    6,    6,
        6,    6,    6,    6,    6,    6,    6,    6,    6,    6,
       67,  110,   85,  110,  110,   99,  110,   11,  110,  110,

      110,  110,    9,  110,  110,  110,  110,  110,  110,  110,
      110,  110,  110,  110,  110,  110,  110,   46,  110,    7,
      110,  110,  110,  110,  110,  110,  110,  110,  110,   89,
      110,   78,  110,  110,  110,   91,  110,  110,  110,  110,
      110,  110,  110,  110,   54,  110,  110,  110,  110,   49,
      110,  110,  110,  110,  110,  110,  110,  148,  101,    2,
      110,  110,   36,  110,  110,   26,  110,  110,  110,  110,
        6,    6,    6,    6,    6,    6,    6,    6,    6,    6,
        6,    6,    6,    6,    6,    6,    6,    6,    6,    6,
        6,    6,  110,  110,   47,   50,  110,  110,   60,  110,

       51,  110,  110,  110,  110,  110,  110,  110,  110,   70,
      110,   55,  110,  110,  110,   13,  110,   74,  110,  110,
       81,  110,   15,  110,  110,  110,  110,   23,  110,  110,
      110,   24,  110,  110,  110,  110,  110,   62,  110,  110,
      110,  110,   40,  110,  110,   96,   97,  110,   96,   98,
      110,  110, 8292,  110,  110,  110,   27,  110,  110,  110,
        6,    6,    6,    6,    6,    6,    6,    6,    6,    6,
        6,    6,    6,    6,    6,    6,    6,    6,    6,    6,
        6,  110,   61,  110,   82,  110,  110,  110,  110,  110,
      110,  110,   73,  110,   69,  110,   44,  110,   16,  110,

      110,  110,  110,  110,  110,  110,    8,  110,   86,  110,
      110,  110,   87,  110, 8292,   25,  110,   29,  110,   33,
      110,  110,   28,  110,    6,    6,    6,    6,    6,    6,
        6,    6,    6,    6,    6,    6,    6,    6,    6,    6,
        6,    6,    6,    6,    6,   48,  110,   12,  110,  110,
      110,   79,  110,  110,  110,   10,   10,  110,  110,  110,
       94,  110,   76,  110,  110,  110,   38,  110,   32,  110,
        6,    6,    6,    6,    6,    6,    6,    6,    6,    6,
        6,    6,    6,    6,    6,    6,    6,    6,    6,    6,
        6,    6,  110,  110,  110,   39,  110,   95,  110,  110,

      110,  110,  110,    6,    6,    6,    6,    6,    6,    6,
        6,    6,    6,    6,    6,    6,    6,    6,    6,    6,
        6,   68,  110,   45,  110,  110,   77,  110,  110,  110,
      110,    6,    6,    6,    6,    6,    6,    6,    6,    6,
        6,    6,    6,    6,    6,    6,    6,    6,    6,   75,
      110,  110,  110,  110,    6,    6,    6,    6,    6,    6,
        6,    6,    6,    6,    6,    6,    6,    6,    6,    6,
        6,    6,  110,  110,   18,  110,    6,    6,    6,    6,
        6,    6,    6,    6,    6,    6,    6,    6,    6,    6,
        6,    6,    6,  110,  110,  110,    6,    6,    6,    6,

        6,    6,    6,    6,    6,    6,    6,    6,    6,    6,
        6,    6,    6,   19,  110,  110,  110,    6,    6,    6,
        6,    6,    6,    6,    6,    6,    6,    6,    6,    6,
      110,  110,    6,    6,    6,    6,    6,    6,    6,    6,
        6,    6,    6,    6,  110,  110,    6,    6,    6,    6,
        6,    6,    6,    6,  110,   20,  110,    6,    6,    6,
        6,    6,   21,  110,    6,    6,    6,    6,    6,    6,
        6,    6,    6
    } ;

static yyconst flex_int16_t yy_accept[1078] =
    {   0,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    2,
        4,    5,    7,    9,   11,   14,   16,   19,   22,   24,
       27,   30,   33,   36,   38,   41,   44,   47,   50,   53,
       56,   59,   62,   65,   68,   71,   74,   77,   80,   83,
       86,   89,   92,   95,   98,  101,  104,  106,  109,  112,
      115,  118,  121,  124,  127,  130,  133,  136,  139,  142,
      145,  148,  151,  154,  157,  160,  163,  166,  169,  172,
      175,  178,  181,  184,  186,  187,  188,  189,  190,  192,
      193,  194,  196,  198,  200,  202,  204,  206,  208,  208,

      208,  208,  209,  209,  210,  211,  212,  213,  214,  215,
      216,  217,  218,  219,  220,  221,  222,  222,  223,  224,
      225,  226,  226,  226,  227,  228,  229,  230,  231,  232,
      233,  234,  235,  236,  237,  238,  239,  240,  241,  242,
      243,  244,  245,  246,  247,  248,  249,  250,  251,  252,
      253,  254,  255,  256,  257,  258,  259,  260,  261,  262,
      263,  264,  266,  267,  268,  269,  270,  271,  272,  273,
      274,  275,  276,  277,  278,  280,  281,  282,  283,  284,
      285,  286,  287,  288,  289,  290,  291,  292,  293,  294,
      295,  296,  297,  298,  299,  300,  301,  302,  303,  304,

      305,  306,  307,  308,  309,  310,  311,  312,  312,  313,
      313,  314,  314,  314,  314,  314,  314,  314,  315,  316,
      317,  318,  319,  319,  320,  321,  322,  323,  324,  325,
      326,  327,  328,  329,  330,  331,  332,  334,  335,  335,
      336,  337,  338,  339,  340,  341,  342,  343,  344,  345,
      346,  347,  348,  349,  350,  351,  352,  353,  354,  355,
      356,  357,  358,  359,  360,  362,  363,  364,  365,  366,
      367,  368,  369,  370,  371,  372,  374,  375,  377,  378,
      379,  380,  381,  382,  383,  384,  385,  386,  387,  388,
      389,  390,  391,  392,  393,  394,  395,  396,  397,  398,

      400,  401,  402,  403,  404,  405,  406,  407,  408,  410,
      411,  412,  413,  414,  415,  416,  417,  418,  419,  420,
      421,  422,  423,  424,  425,  426,  428,  430,  431,  432,
      433,  434,  435,  436,  438,  439,  440,  441,  441,  443,
      443,  445,  446,  447,  448,  448,  449,  450,  451,  452,
      453,  454,  455,  456,  457,  458,  460,  462,  463,  464,
      465,  466,  467,  468,  469,  470,  471,  472,  473,  474,
      475,  476,  477,  478,  479,  480,  481,  482,  483,  484,
      485,  486,  487,  488,  489,  490,  491,  492,  493,  494,
      495,  496,  497,  499,  501,  502,  503,  504,  505,  506,

      507,  509,  511,  512,  513,  514,  515,  516,  517,  518,
      519,  520,  521,  523,  524,  525,  526,  527,  528,  529,
      530,  531,  532,  533,  534,  536,  537,  538,  539,  540,
      541,  542,  543,  544,  545,  546,  547,  548,  549,  550,
      551,  552,  553,  555,  556,  557,  558,  559,  560,  561,
      562,  563,  564,  565,  566,  567,  568,  570,  572,  574,
      576,  577,  578,  579,  580,  582,  583,  584,  585,  587,
      588,  588,  590,  592,  593,  595,  597,  598,  599,  600,
      600,  601,  603,  604,  605,  606,  607,  608,  609,  611,
      612,  613,  615,  616,  617,  618,  619,  620,  621,  622,

      624,  625,  626,  627,  628,  629,  630,  631,  632,  633,
      634,  635,  636,  637,  638,  639,  640,  641,  642,  643,
      644,  645,  646,  647,  648,  649,  650,  651,  653,  654,
      656,  658,  659,  660,  661,  662,  663,  664,  665,  666,
      667,  668,  669,  670,  671,  672,  674,  676,  677,  678,
      679,  680,  681,  682,  683,  684,  686,  688,  689,  690,
      692,  693,  694,  695,  696,  697,  698,  699,  700,  701,
      702,  703,  704,  705,  707,  709,  710,  711,  712,  713,
      714,  715,  717,  718,  719,  720,  722,  723,  724,  725,
      726,  728,  729,  730,  731,  732,  734,  735,  736,  738,

      740,  740,  741,  743,  744,  745,  747,  748,  748,  748,
      748,  749,  750,  751,  752,  753,  754,  756,  757,  759,
      760,  761,  762,  763,  764,  765,  766,  768,  770,  771,
      772,  773,  774,  775,  776,  777,  778,  779,  780,  781,
      782,  783,  784,  785,  786,  787,  788,  789,  790,  791,
      793,  795,  796,  798,  800,  801,  802,  803,  805,  806,
      807,  808,  809,  810,  811,  812,  813,  814,  815,  816,
      817,  818,  820,  822,  823,  824,  825,  826,  827,  828,
      829,  830,  832,  834,  835,  836,  838,  839,  840,  841,
      842,  843,  844,  845,  847,  848,  849,  850,  852,  853,

      854,  855,  856,  857,  858,  858,  858,  858,  859,  860,
      861,  861,  862,  863,  865,  866,  868,  869,  870,  871,
      872,  873,  874,  875,  876,  877,  878,  879,  880,  881,
      882,  883,  884,  885,  886,  887,  888,  889,  890,  891,
      892,  893,  894,  895,  898,  899,  901,  903,  904,  905,
      906,  907,  908,  909,  910,  912,  914,  915,  916,  918,
      920,  921,  923,  925,  926,  927,  928,  930,  931,  932,
      934,  935,  936,  937,  938,  940,  941,  942,  943,  945,
      946,  949,  952,  953,  953,  954,  955,  956,  957,  959,
      960,  961,  962,  963,  964,  965,  966,  967,  968,  969,

      970,  971,  972,  973,  974,  975,  976,  977,  978,  979,
      980,  981,  982,  983,  985,  987,  988,  989,  990,  991,
      992,  993,  995,  997,  999, 1001, 1001, 1002, 1003, 1004,
     1005, 1006, 1007, 1009, 1011, 1012, 1013, 1015, 1016, 1018,
     1020, 1022, 1023, 1025, 1026, 1027, 1028, 1029, 1030, 1031,
     1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041,
     1042, 1043, 1044, 1045, 1046, 1048, 1050, 1051, 1052, 1054,
     1055, 1056, 1057, 1058, 1059, 1060, 1061, 1063, 1065, 1066,
     1067, 1069, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078,
     1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088,

     1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1098, 1100,
     1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110,
     1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120,
     1121, 1122, 1124, 1126, 1127, 1129, 1130, 1131, 1132, 1133,
     1134, 1135, 1136, 1137, 1138, 1139, 1140, 1141, 1142, 1143,
     1144, 1145, 1146, 1147, 1148, 1149, 1150, 1152, 1153, 1154,
     1155, 1156, 1157, 1158, 1159, 1160, 1161, 1162, 1163, 1164,
     1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174,
     1175, 1177, 1178, 1179, 1180, 1181, 1182, 1183, 1184, 1185,
     1186, 1187, 1188, 1189, 1190, 1191, 1192, 1193, 1194, 1195,

     1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205,
     1206, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1216,
     1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226,
     1227, 1228, 1229, 1230, 1231, 1232, 1233, 1234, 1235, 1236,
     1237, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246,
     1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256,
     1258, 1259, 1260, 1261, 1262, 1263, 1265, 1266, 1267, 1268,
     1269, 1270, 1271, 1272, 1273, 1274, 1274
    } ;

static yyconst flex_int32_t yy_ec[256] =
    {   0,
        1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
        1,    1,    4,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    5,    6,    7,    8,    9,   10,   11,   12,   13,
       14,   15,   16,   17,   18,   19,   20,   21,   22,   23,
       23,   23,   23,   23,   23,   23,   23,   24,   25,   26,
       27,   28,   29,   30,   31,   32,   31,   33,   34,   31,
       31,   35,   31,   31,   31,   31,   31,   31,   36,   31,
       31,   31,   37,   31,   31,   31,   31,   31,   31,   31,
       38,   39,   40,   41,   42,   43,   44,   45,   46,   47,

       48,   49,   50,   51,   52,   53,   54,   55,   56,   57,
       58,   59,   31,   60,   61,   62,   63,   64,   65,   66,
       67,   68,   69,   70,   71,   72,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,   73,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,   74,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,

        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1
    } ;

static yyconst flex_int32_t yy_meta[75] =
    {   0,
        1,    1,    2,    1,    3,    1,    1,    1,    4,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        5,    5,    5,    1,    6,    1,    1,    1,    3,    1,
        5,    5,    5,    5,    5,    5,    5,    1,    7,    1,
        1,    5,    1,    5,    5,    5,    5,    5,    5,    5,
        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
        5,    5,    5,    5,    5,    5,    5,    5,    8,    1,
        8,    1,    1,    9
    } ;

static yyconst flex_int16_t yy_base[1117] =
    {   0,
        0,    1,   33,    0,   93,   94,   90,   91,   97,  100,
       96,   98,   99,  101,  104,  107,  131,  132, 2425, 3852,
     3852, 2400,  117, 3852, 3852, 3852, 2410, 3852, 2407, 3852,
       96, 3852, 2402,  151, 2396, 3852, 2391, 3852, 3852, 3852,
     3852,    2,  155, 3852, 3852, 3852, 3852, 3852, 3852, 3852,
      159,  183, 3852, 3852, 2332,    0,  182,  226,  159,  202,
      218,  214,   83,  236,  247,  241,  253,  262,  268,  269,
      273,  287,  296,  311,  327,  321,  293,  342,  347, 3852,
     2325, 3852, 2353,    0, 2369, 2366,  122, 2364, 2362,    3,
      128, 3852, 2352,  130,    0, 2343,  159, 3852, 2351, 2339,

      179, 2350, 2347, 3852,    0, 2289, 2289, 2288, 2291, 2290,
      111, 2278, 2277, 2316, 3852, 2318,  374, 3852, 3852, 3852,
     2312,  379,  412,  426,  210,  383,  422, 3852,  480,  147,
     2268,  137,  198,  151, 2256, 2245,  163, 2253, 2236, 2246,
     2238,  407,  511,  395,  412,  507,  516,  517,  526,  538,
      536,  546,  543,  555,  556,  567,  577,  583,  577,  587,
      596,  597,  615,  623,  628,  637,  644,  647,  656,  659,
      607,  668,  680,  680,  689,  692,  701,  715,  711,  723,
      722,  743,  748,  761,  764,  767,  770,  785,  786,  791,
      802,  807,  813,  807,  829,  830,  835,  846,  844,  862,

      865,  868,  871,  886,  889, 3852, 3852, 2214, 3852, 2272,
     2264,    0,    4,  345, 2268, 2250,  204,    0, 2254, 2243,
      247,  169, 2251, 2202, 2201, 2205, 2189,  226, 2186, 2193,
     2176, 2180, 3852, 2221, 2214,    0,  185, 2213,  903,  930,
      958,    0, 2163, 2146, 2152,  120, 2144, 2141,  241, 2142,
      272,  172, 2143,  911, 2133,  242,  134, 2125, 2118, 2124,
      912,  983,  919,  984,  999,  940,  989,  999, 1004, 1009,
     1025, 1030, 1031, 1046, 1047, 1050, 1053, 1067, 1071, 1079,
     1088, 1094, 1090, 1099, 1102, 1109, 1112, 1132, 1122, 1132,
     1137, 1155, 1158, 1171, 1165, 1177, 1177, 1182, 1191, 1192,

     1201, 1213, 1211, 1219, 1232, 1224, 1238, 1234, 1243, 1255,
     1261, 1264, 1270, 1277, 1275, 1282, 1285, 1294, 1295, 1315,
     1316, 1321, 1326, 1321, 1331, 1369, 1349, 1352, 1368, 1375,
     1384, 1380, 1400, 1401, 1406, 3852,  393,    1,  252, 2154,
      330, 2151, 2151,    0,    0, 2094, 2098, 2093, 2089,  288,
     2075, 2069, 2066, 2081, 2064, 2122,    0, 2117, 2115, 2069,
     2051, 2051,  263, 2056, 1981,  340, 1906,  377, 1903, 1898,
     1898, 1888, 1889, 1892, 1892, 1870, 1887, 1869, 1868, 1860,
     1869, 1855, 1856, 1863, 1849, 1855, 1850, 1407, 1423, 1424,
     1428, 1429, 1438, 1439, 1453, 1452, 1462, 1474, 1483, 1490,

     1496, 1499, 1505, 1501, 1521, 1522, 1527, 1538, 1544, 1545,
     1560, 1561, 1566, 1579, 1582, 1588, 1595, 1593, 1603, 1610,
     1613, 1622, 1601, 1638, 1643, 1649, 1654, 1660, 1654, 1675,
     1665, 1675, 1680, 1696, 1701, 1701, 1707, 1722, 1723, 1739,
     1729, 1727, 1736, 1757, 1760, 1762, 1765, 1772, 1786, 1792,
     1793, 1797, 1804, 1807, 1814, 1799, 1828, 1834, 1835,    0,
     1839, 1844, 1862, 1865, 1868, 1906, 1886,   10,   11,  456,
      724, 1894,    0,  295,  358, 1856,  576, 1886,    7, 1885,
     1824,    0, 1837, 1822, 1810, 1825, 1802, 1794,    0, 1785,
     1794, 1836, 1777, 1783, 1777, 1758, 1757, 1745, 1766, 1948,

     1761, 1754, 1759, 1757, 1743, 1738, 1743, 1741, 1720, 1719,
     2022, 1728, 1713, 1712, 1694, 1702, 1701, 1690, 1694, 1675,
     1672, 1669, 1664, 1675, 1876, 2042, 2054, 2060, 2092, 2063,
     2079, 2080, 2095, 2085, 2095, 2102, 2105, 2112, 2115, 2122,
     2125, 2134, 2135, 2155, 2149, 2159, 2160, 2180, 2181, 2186,
     2187, 2231, 2202, 2218, 2211, 2224, 2227, 2229, 2233, 2249,
     2239, 2249, 2256, 2270, 2276, 2277, 2292, 2293, 2322, 2309,
     2312, 2325, 2318,    0,    0, 2334, 2340, 2330, 2345, 2346,
     2355, 2367, 2366, 2387, 2390, 2396, 2407, 2413, 2414, 2429,
     2430, 2435, 2450, 2451, 2456, 2467,  560, 1043,  573, 1706,

      605,  634, 1711, 1710,    0,  378,  440,  710, 1683, 1697,
     1641, 1635, 1643, 1641, 1625, 1636, 1627, 1618,    0, 1621,
     1595, 1607, 1597, 1599, 1592, 1578, 2505,    0, 1583, 1574,
     1570, 1574, 1571, 1568, 1565, 2553,    0, 1564, 1567, 1548,
     1540, 1540, 1537, 1547, 1544, 1536, 1537, 1528, 1528, 2473,
     2474, 2578,    0, 2535, 2579, 2594, 2595, 2601, 2610, 2616,
     2621, 2627, 2632, 2632, 2638, 2653, 2643, 2653, 2658, 2676,
     2679, 2682, 2695, 2698, 2700, 2703, 2710, 2717, 2720, 2738,
     2741, 2744, 2747, 2760, 2763, 2766, 2769, 2782, 2785, 2788,
     2801, 2804, 2810, 2817, 2823, 2826, 2828, 2831, 2838, 2843,

     2855, 2887, 2893, 2863, 1166,  398,  666,  694, 1570,  553,
     1562, 1520, 1517,    0, 1500,    0, 1504, 1493, 1502, 1485,
     1483, 1488, 1474, 1473, 1480, 1484, 1469, 1459, 1478, 1464,
     1456, 1446, 1434, 1437, 1431, 1439, 1415, 1434, 1420, 1409,
     1425, 2874, 2870, 2879, 2893, 2899, 2900, 2915, 2906, 2921,
     2915, 2928, 2935, 2949, 2955, 2956, 2960, 2962, 2978, 2981,
     2984, 2987, 3000, 3044, 3006, 3013, 3007, 3024, 3029, 3035,
     3050, 3040, 3050, 3068, 3071, 3100, 3087, 3092, 3093, 3108,
        0,    0, 3111,  551, 3852, 1396, 1412, 1386,    0, 1397,
     1382, 1402, 1395, 1384, 1392, 1363, 1378, 1359, 1368, 1363,

     1345, 1358, 1357, 1355, 1354, 1344, 1339, 1350,  282, 1340,
     1324, 1315, 3117, 3124, 3130, 3133, 3146, 3149, 3152, 3155,
     3170, 3176, 3177, 3183, 3192,    3, 3198, 3188, 3198, 3203,
     3221, 3213, 3223, 3226, 3244, 3247, 3250, 1353,    0,    0,
        0, 1320,    0, 1304, 1305, 1304,  609, 1307, 1294, 1286,
     1286, 1285, 1281, 1267, 1282, 1281, 1255, 1267, 1264, 1260,
     1258, 1253, 1251, 1244, 3253, 3266, 3269, 3272, 3275, 3288,
     3291,    0,   26, 3294, 3296, 3299, 3306, 3309, 3327, 3319,
     3329,    0, 1236, 1236, 1230, 1225, 1222, 1205, 1211, 1193,
     1190, 1192, 1174, 1185, 1186, 1153,  426, 1151, 1164, 1161,

        0, 1146, 1145, 1156, 3332, 3350, 3353, 3356, 3371, 3372,
     3377, 3390, 3382, 1162, 1155, 1134, 1139, 1142, 1118, 1096,
     1103, 1087, 1086, 1093, 1096, 1086, 1089, 1063, 1074, 1063,
     1074, 3392, 3395, 3413, 3416, 3418, 1043, 3422, 1033, 1049,
     1030, 1025,  555, 1018, 1028, 1019, 1013, 1020, 1003,  976,
      975,  985,  985,  973,  985,  938, 3438, 3428,  942, 3440,
      949,  920,  919,  937,  931,  934,  927,  929,  921,  906,
      903,  914,  901,  913,  899,  899,  885,  885, 3444,  537,
     3460,  886,  883,  863,  864,  850,  848,  859,  837,  841,
      839,  838,  845,  821,  839,  824,  828,  813, 3463,  818,

      795,  794,  792,  805,  806,  783,  782,  775,  782,  784,
      771,  780,  765,  761,  766,  762,  741,  739, 3469,  735,
      746,  732,  737,  727,  722,  726,  714,  708,  712,  711,
      717,  698,  697,  690,  700,  688,  674,  677,  670,  674,
      659,  635,  634,  639,  631,  604,  594,  584,  583,  564,
      503,  429,  401,  412,  392,  382,  367,  358,  358,    0,
      354,  341,  317,  311,  308,    0,  276,  265,  246,  232,
      223,  203,  151,  147,  115, 3852, 3527, 3536, 3545, 3554,
     3563, 3572, 3578, 3580,    2, 3585, 3593, 3602, 3609, 3614,
     3623, 3632, 3639, 3644, 3653, 3662, 3671, 3680, 3689, 3698,

     3707, 3716, 3725, 3734, 3743, 3752, 3761, 3770, 3779, 3788,
     3797, 3806, 3815, 3824, 3833, 3842
    } ;

static yyconst flex_int16_t yy_def[1117] =
    {   0,
     1077, 1077, 1076,    3, 1078, 1078, 1078, 1078, 1079, 1079,
     1080, 1080, 1078, 1078, 1078, 1078, 1081, 1081, 1076, 1076,
     1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1082, 1076,
     1083, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076,
     1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076,
     1084, 1084, 1076, 1076, 1076, 1083, 1085, 1084,   58,   58,
       60,   58,   58,   60,   60,   58,   60,   60,   60,   60,
       58,   60,   60,   73,   60,   58,   60,   60,   60, 1076,
     1076, 1076, 1076, 1086, 1076, 1076, 1076, 1087, 1076, 1087,
     1087, 1076, 1076, 1076, 1088, 1088, 1088, 1076, 1076, 1076,

     1076, 1076, 1082, 1076, 1083, 1083, 1083, 1083, 1083, 1083,
     1083, 1083, 1083, 1076, 1076, 1089, 1076, 1076, 1076, 1076,
     1090, 1076, 1076, 1076, 1076,   60,   60, 1076, 1076,  129,
      129,  129,  129,  129,  129,  129,  129,  129,  129,  129,
      129,   60,   60,   58,   58,   58,   58,   58,   58,   60,
       58,   58,   58,   58,   58,   58,   60,   60,   58,   58,
       58,   58,   73,   58,   58,   58,   58,   58,   58,   58,
       58,   58,   60,   58,   58,   58,   58,   60,   58,   58,
       58,   60,   60,   60,   60,   60,   60,   60,   60,   60,
       60,   60,   60,   58,   60,   60,   60,   60,   58,   60,

       60,   60,   60,   60,   60, 1076, 1076, 1086, 1076, 1087,
     1076, 1087, 1087, 1087, 1076, 1076, 1076, 1088, 1088, 1088,
     1088, 1091, 1076, 1083, 1083, 1083, 1083, 1083, 1083, 1083,
     1083, 1083, 1076, 1089, 1089, 1090, 1092, 1093, 1076, 1076,
      129,  129,  129,  129,  129,  129,  129,  129,  129,  129,
      129,  129,  129,  129,  129,  129,  129,  129,  129,  129,
       60,   60,   60,   60,   60,   60,   58,   58,   58,   58,
       60,   60,   60,   60,   60,   73,   58,   73,   73,   60,
       60,   60,   58,   58,   58,   58,   58,   60,   58,   58,
       58,   60,   60,   60,   58,   58,   60,   58,   58,   58,

       58,   60,   58,   60,   60,   58,   60,   58,   58,   60,
       60,   60,   60,   60,   58,   58,   58,   58,   58,   60,
       60,   58,   58,   60,   58,   60,   60,   60,   60,   60,
       60,   58,   60,   60,   60, 1076, 1094, 1087, 1095, 1076,
     1096, 1088, 1097, 1098, 1099, 1083, 1083, 1083, 1083, 1083,
     1083, 1083, 1083, 1083, 1083, 1100, 1101, 1093, 1093,  129,
      129,  129,  129,  129,  129,  129,  129,  129,  129,  129,
      129,  129,  129,  129,  129,  129,  129,  129,  129,  129,
      129,  129,  129,  129,  129,  129,  129,   60,   60,   60,
       58,   58,   58,   58,   58,   58,   58,   60,   60,   60,

       60,   60,   60,   58,   60,   60,   60,   60,   60,   60,
       60,   60,   60,   60,   60,   60,   60,   58,   58,   58,
       58,   58,   60,   60,   60,   60,   60,   60,   58,   60,
       58,   58,   58,   60,   60,   58,   60,   60,   60,   58,
       60,   58,   58,   60,   60,   58,   58,   58,   60,   60,
       60,   58,   58,   58,   58,   60,   60,   60,   60, 1083,
       58,   58,   60,   60,   60, 1084,   60, 1102, 1097, 1103,
     1104, 1105, 1106, 1107, 1108, 1109, 1110, 1097, 1076, 1111,
     1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083,
     1083, 1100,  129,  129,  129,  129,  129,  129,  129, 1076,

      129,  129,  129,  129,  129,  129,  129,  129,  129,  129,
     1076,  129,  129,  129,  129,  129,  129,  129,  129,  129,
      129,  129,  129,  129,   58,   58,   60,   60, 1084,   60,
       60,   60,   60,   58,   58,   58,   58,   58,   58,   58,
       58,   58,   58,   60,   58,   58,   58,   60,   60,   60,
       60, 1084,   60,   60,   60,   60,   60,   58,   60,   60,
       58,   58,   58,   60,   60,   60,   60,   60, 1084,   60,
       60,   60,   60, 1083, 1083,   60,   60,   58,   58,   58,
       58,   58,   58,   60,   60,   60,   60,   60,   60,   60,
       60,   60,   60,   60,   60,   60, 1102, 1087, 1097, 1098,

     1112, 1111, 1105, 1113, 1114, 1108, 1115, 1076, 1076, 1111,
     1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083,  129,
      129,  129,  129,  129,  129,  129,  500,  500,  129,  129,
      129,  129,  129,  129,  129,  511,  511,  129,  129,  129,
      129,  129,  129,  129,  129,  129,  129,  129,  129,   60,
       60,   60, 1083,   60,   60,   60,   60,   60,   60,   60,
       60,   60,   60,   58,   60,   60,   58,   58,   58,   60,
       60,   60,   60,   60,   58,   58,   58,   58,   58,   60,
       60,   60,   60,   60,   60,   60,   60,   60,   60,   60,
       60,   60,   60,   60,   60,   60,   58,   58,   58,   58,

     1084, 1084, 1084,   60, 1087, 1087, 1112, 1111, 1113, 1115,
     1076, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083,  129,
      129,  129,  129,  129,  129,  129,  129,  129,  129,  129,
      129,  129,  129,  129,  129,  129,  129,  129,  129,  129,
      129,   60,   58,   58,   60,   60,   60,   60,   60,   60,
       58,   58,   58,   60,   60,   60,   58,   60,   60,   60,
       60,   60,   60,   60,   60,   60,   60,   60,   60,   60,
       60,   58,   58,   60,   60, 1084,   60,   60,   60,   60,
     1083, 1083,   60, 1087, 1076, 1083, 1083, 1083, 1083, 1083,
     1083,  129,  129,  129,  129,  129,  129,  129,  129,  129,

      129,  129,  129,  129,  129,  129,  129,  511,  129,  129,
      129,  129,   60,   60,   60,   60,   60,   60,   60,   60,
       60,   60,   60,   60,   60, 1116,   60,   58,   58,   58,
       60,   58,   58,   58,   60,   60,   60, 1087, 1083, 1083,
     1083, 1083, 1083,  129,  129,  129,  129,  129,  129,  129,
      129,  129,  129,  129,  129,  129,  129,  129,  129,  511,
      129,  129,  129,  129,   60,   60,   60,   60,   60,   60,
       60, 1116, 1116,   60,   58,   58,   58,   58,   60,   58,
       58, 1083,  129,  129,  129,  129,  129,  129,  129,  129,
      129,  129,  129,  129,  129,  129,  129,  129,  129,  129,

      511,  129,  129,  129,   58,   60,   60,   60,   60,   60,
       60,   60,   58,  129,  129,  129,  129,  129,  129,  129,
      129,  129,  129,  129,  129,  129,  129,  129,  129,  129,
      129,   58,   58,   60,   60,   58, 1083,   60,  129,  129,
      129,  129,  129,  129,  129,  129,  129,  129,  129,  129,
      129,  129,  129,  129,  129,  129,   60,   58, 1083,   58,
      129,  129,  129,  129,  129,  129,  129,  129,  129,  129,
      129,  129,  129,  129,  129,  129,  129,  129,   60, 1083,
       60,  129,  129,  129,  129,  129,  129,  129,  129,  129,
      129,  129,  129,  129,  129,  129,  129,  129,   60, 1083,

     1083,  129,  129,  129,  129,  129,  129,  129,  129,  129,
      129,  129,  129,  129,  129,  129,  129,  129,   60, 1083,
     1083,  129,  129,  129,  129,  129,  129,  129,  129,  129,
      129,  129,  129,  129, 1083, 1083,  129,  129,  129,  129,
      129,  129,  129,  129,  129,  129,  129,  129, 1083, 1083,
      129,  129,  129,  129,  129,  129,  129,  129, 1083, 1083,
      129,  129,  129,  129,  129, 1083,  129,  129,  129,  129,
      129,  129,  129,  129,  129,    0, 1076, 1076, 1076, 1076,
     1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076,
     1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076,

     1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076,
     1076, 1076, 1076, 1076, 1076, 1076
    } ;

static yyconst flex_int16_t yy_nxt[3927] =
    {   0,
     1076, 1076,   21,   21,  873,  873,  129,  873,  608,  337,
      471,  608,  598,  479,  211,  211,  120,  211,  211,   22,
       22,  121,  212,  338,  599,  599,  609,  873,  873, 1076,
      873,   23,   23,   24,   25,   26,   25,   27,   28,   29,
       30,   31,   32,   33,   34,   35,   36,   37,   38,   39,
       40,   41,   42,   43,   43,   43,   44,   45,   46,   47,
       48,   49,   50,   51,   52,   51,   51,   51,   51,   51,
       53,   24,   54,   55,   56,   57,   58,   59,   60,   61,
       62,   63,   64,   65,   66,   67,   51,   68,   69,   70,
       71,   72,   73,   74,   75,   76,   77,   78,   79,   51,

       51,   80,   81,   82,   83,   84,   24,   85,   85,   86,
       86,   89,   86,   86,   89,   93,   90,   93,   86,   90,
       86,   87,   87,   86,   87,   87,   86,   94,   91,   94,
       87,   91,   87,   26,   26,   87,  100,  126,   87,  126,
      158,  100,  211,  126,  106,  159,  107,  213,  101,  216,
       96,   96,  108,  101,  109,  110,  111,  112,  229,  214,
      113,  217,   97,   97,  230,  511,  122,  105,  363,   98,
       98,  115,  115,  123,  364,  124,  124,  124,  220,  105,
      105,  105,  116,  116,  246,  116,  116,  117,  247,  383,
      221,  105,  243,  511,  384,  116,  125,  116,  100,  251,

      105,  116,  100,  105,  105,  105,  146,  252,  116,  244,
      101,  117, 1075,  126,  127,  126,  115,  372,  115,  126,
      255,  147,  256,  216,  105,  130,  373,  131,  132,  133,
      125,  125,  125,  134,  105,  217,  135,  344,  136,  344,
      137,  138,  139,  140,  141,  148,  105,  105,  105,  149,
     1074,  125,  248,  357,  249,  357,  126,  150,  126,  151,
      154,  126,  126,  250,  126,  152,  220,  105,  155,  153,
      156,  350, 1073,  126,  126,  126,  126,  157,  221,  126,
      142,  351,  143,  160,  367,  381,  144,  368,  145,  162,
      126,  126,  511,  126,  126,  126,  126,  163,  161,  382,

      126,  126,  126,  126,  126,  165,  496, 1072,  126,  126,
      164,  168,  171,  166,  497,  169,  172,  126,  370,  167,
      473, 1071,  473,  126,  173,  170,  174,  126,  371,  126,
      177,  861,  175,  126,  126,  176,  126, 1070,  862,  126,
      198,  182,  178,  183,  179,  485,  180,  486,  126,  181,
      126,  126,  184,  126,  185,  511,  187,  186,  126,  211,
      479,  188,  189,  605,  213,  605,  190,  126,  343,  191,
      194,  511,  192,  193,  126,  126,  214,  126,  195, 1069,
      479,  197,  126,  126,  126,  199,  196,  500, 1068,  200,
      126,  501,  201,  202,  126,  210,  478,  126,  476,  203,

      476, 1067,  126,  204,  205,  116,  116,  469,  116,  116,
      238,  238,  211,  238,  238,  239,  478,  784,  116, 1066,
      116, 1065,  503,  238,  116,  238,  126,  511,  504,  238,
      126,  116,  240,  240,  240,  505,  238,  122,  126,  239,
      126,  100,  479, 1064,  123,  240,  124,  124,  124,  126,
      126,  126,  511,  127,  126,  262, 1063,  126,  210,  240,
     1062,  470,  126,  470,  126,  126,  126,  125,  126,  126,
      600,  261,  126,  263,  126,  925,  511,  126,  610,  126,
      241,  241,  926,  241,  241,  241,  241,  241,  241,  241,
      241,  241,  241,  241,  241,  241,  241,  241,  241,  241,

      242,  242,  242,  241,  241,  241,  241,  241,  241,  241,
      242,  242,  242,  242,  242,  242,  242,  241,  241,  241,
      241,  242,  241,  242,  242,  242,  242,  242,  242,  242,
      242,  242,  242,  242,  242,  242,  242,  242,  242,  242,
      242,  242,  242,  242,  242,  242,  242,  242,  241,  241,
      241,  241,  241,  241,  126,  479,  264,  175,  126, 1061,
      838,  126,  598,  126,  265,  211,  126,  126,  126,  126,
      126,  126,  126,  126,  599,  479,  126,  266,  126,  126,
      267,  126,  126, 1000, 1001,  126,  126,  599,  126,  270,
      126,  610,  269,  126,  271,  268,  126,  126,  126,  126,

      126,  965,  126,  273,  274,  126,  272,  598,  126,  126,
      126,  126,  126,  276,  480,  126,  275,  126,  126,  708,
      126,  126,  966,  126,  277, 1060,  126,  126, 1059,  126,
      126,  126,  126,  279,  126, 1058,  479,  126,  126,  126,
      126,  126,  278,  280,  218,  281,  218,  126,  708,  126,
      126,  126,  126,  282,  511,  886,  126,  126,  126,  126,
      283,  126,  126,  296,  511,  887,  284,  126,  598,  126,
      888,  126,  285,  286,  289,  287,  288,  126, 1057,  126,
      708,  291,  126,  126,  126,  126, 1056,  290,  126,  292,
      126,  126,  293,  126,  511,  511,  479,  126,  126,  126,

      126,  126,  294,  126,  126,  295,  126,  126,  708,  126,
      126,  608,  126,  126,  608,  126,  126,  297,  126,  126,
     1055,  126,  126,  126,  126, 1054,  210,  126,  126,  609,
      126, 1053, 1052, 1051,  126,  126,  126,  298,  602,  175,
      299,  300,  126,  126, 1050,  126,  126, 1049,  126,  126,
      511,  126,  126,  301,  126,  126, 1048,  126,  126, 1047,
      302,  126,  126,  126, 1046,  126, 1045,  126, 1044, 1043,
      126,  304,  303,  126,  305, 1042,  306,  126,  126,  126,
     1041, 1040,  126,  126,  126,  126,  126, 1039, 1038, 1037,
      126,  308,  210, 1036,  210,  126, 1035,  309,  307,  511,

      126,  511,  310,  126,  126,  126,  311,  126,  126, 1034,
      126,  126, 1033,  315,  126, 1032,  312,  126,  126,  313,
     1031,  126,  126, 1030,  126,  126,  314,  126,  126,  126,
     1029, 1028,  126,  126,  318,  317, 1027, 1026,  126,  511,
      126,  126,  316,  126, 1025,  126,  126, 1024,  126,  319,
      126,  322,  511, 1023,  126, 1022,  126,  126, 1021,  126,
      126,  126,  126,  126,  126, 1020,  320,  323,  126,  126,
      126,  321,  126,  325, 1018, 1017,  126,  126,  126, 1016,
     1015,  326,  327, 1014,  324,  126,  126,  126, 1013,  126,
      126,  328,  126,  126, 1012,  329, 1011, 1010,  126, 1009,

      330,  126, 1008,  126,  126,  331,  126, 1007,  126,  126,
     1006,  126,  126, 1005,  126,  126,  332,  126,  126,  126,
      126, 1004,  126,  126, 1003,  126,  126,  333,  126,  126,
      334, 1002,  126,  126,  238,  238,  126,  238,  238,  998,
      997,  126,  996,  335,  126,  995,  126,  238,  175,  238,
      240,  240,  240,  238,  375,  388,  994,  993,  376,  126,
      238,  992,  126,  240,  991,  990,  126,  126,  511,  126,
      377,  378,  989,  379,  126,  988,  390,  240,  241,  241,
      241,  987,  986,  126,  985,  984,  983,  393,  241,  241,
      241,  241,  241,  241,  241,  126,  982,  126,  980,  241,

      978,  241,  241,  241,  241,  241,  241,  241,  241,  241,
      241,  241,  241,  241,  241,  241,  241,  241,  241,  241,
      241,  241,  241,  241,  241,  241,  126,  126,  977,  976,
      126,  126,  975,  974,  389,  391,  973,  972,  126,  126,
      126,  126,  126,  394,  705,  126,  126,  705,  971,  126,
      392,  126,  395,  126,  126,  126,  126,  211,  126,  175,
      126,  126,  706,  126,  126,  126,  126,  511,  397,  396,
      970,  126,  126,  126,  400,  969,  968,  126,  126,  967,
      126,  399,  126,  398,  964,  126,  126,  126,  126,  126,
      126,  963,  962,  401,  402,  403,  961,  126,  404,  405,

      959,  126,  126,  126,  126,  406,  126,  126,  407,  410,
      408,  409,  411,  126,  412,  126,  414,  956,  126,  955,
      413,  954,  126,  126,  953,  126,  415,  126,  126,  126,
      952,  126,  126,  951,  126,  126,  126,  126,  417,  950,
      949,  126,  416,  126,  419,  126,  126,  948,  947,  126,
      126,  418,  126,  126,  946,  126,  126,  945,  126,  126,
      420,  126,  126,  126,  421,  126,  126,  705,  126,  126,
      705,  422,  126,  423,  126,  126,  126,  944,  425,  424,
      211,  426,  126,  943,  126,  706,  126,  126,  126,  126,
      942,  427,  126,  126,  126,  941,  428,  126,  429,  126,

      940,  126,  126,  939,  931,  126,  930,  929,  511,  928,
      126,  927,  126,  126,  126,  126,  924,  430,  126,  126,
      126,  126,  431,  175,  433,  126,  126,  432,  126,  923,
      922,  126,  126,  126,  126,  511,  126,  126,  126,  126,
      921,  434,  175,  435,  126,  126,  126,  126,  126,  920,
      919,  126,  126,  126,  126,  126,  437,  126,  918,  436,
      126,  126,  126,  126,  917,  126,  438,  126,  126,  916,
      126,  175,  915,  126,  126,  126,  126,  511,  440,  126,
      126,  126,  914,  511,  441,  126,  126,  439,  443,  126,
      126,  511,  904,  126,  126,  442,  126,  126,  126,  126,

      903,  902,  444,  126,  126,  126,  901,  126,  445,  900,
      126,  126,  126,  126,  899,  898,  126,  126,  126,  126,
      448,  446,  897,  896,  126,  126,  895,  447,  894,  449,
      893,  126,  126,  892,  126,  126,  126,  126,  126,  126,
      453,  451,  126,  891,  126,  126,  450,  126,  452,  126,
      126,  126,  890,  889,  126,  126,  126,  126,  126,  126,
      885,  884,  126,  126,  126,  883,  882,  211,  458,  864,
      126,  126,  454,  126,  455,  456,  126,  126,  126,  457,
      126,  126,  126,  126,  863,  126,  126,  459,  126,  460,
      460,  126,  126,  126,  511,  126,  126,  860,  859,  126,

      858,  857,  856,  855,  126,  854,  126,  126,  853,  126,
      852,  126,  461,  464,  851,  126,  126,  850,  126,  849,
      848,  334,  126,  126,  126,  126,  462,  126,  463,  465,
      126,  126,  126,  847,  467,  846,  126,  466,  845,  126,
      126,  126,  126,  126,  126,  844,  843,  334,  126,  126,
      126,  842,  841,  126,  126,  126,  126,  126,  126,  840,
      839,  126,  126,  126,  126,  175,  126,  126,  812,  811,
      126,  126,  526,  525,  810,  809,  808,  529,  126,  527,
      126,  126,  126,  126,  528,  126,  807,  806,  126,  126,
      126,  126,  126,  126,  126,  126,  805,  804,  126,  126,

      126,  126,  803,  530,  532,  531,  126,  126,  126,  126,
      802,  500,  533,  126,  126,  126,  126,  535,  126,  801,
      800,  126,  126,  799,  534,  798,  126,  797,  796,  126,
      126,  126,  536,  126,  537,  795,  794,  126,  126,  126,
      126,  793,  126,  126,  792,  126,  126,  126,  538,  791,
      790,  126,  126,  126,  126,  126,  126,  126,  789,  788,
      126,  126,  539,  540,  126,  126,  787,  786,  541,  126,
      126,  785,  479,  741,  126,  740,  126,  126,  126,  542,
      739,  126,  126,  738,  126,  126,  543,  545,  126,  737,
      511,  126,  126,  126,  736,  126,  544,  735,  734,  126,

      126,  126,  126,  126,  126,  733,  546,  547,  126,  126,
      732,  731,  511,  126,  730,  126,  126,  126,  126,  500,
      729,  126,  126,  126,  548,  126,  126,  728,  727,  126,
      726,  551,  725,  724,  126,  126,  126,  126,  126,  126,
      549,  550,  126,  126,  558,  126,  500,  126,  126,  553,
      126,  723,  126,  126,  722,  126,  126,  126,  126,  126,
      721,  555,  552,  126,  126,  554,  126,  126,  720,  126,
      126,  719,  126,  126,  556,  126,  126,  718,  126,  717,
      716,  126,  126,  557,  126,  126,  126,  559,  715,  714,
      126,  713,  126,  126,  712,  126,  560,  126,  126,  479,

      126,  126,  711,  562,  126,  561,  126,  126,  563,  126,
      126,  126,  479,  479,  126,  126,  126,  126,  126,  126,
      600,  126,  126,  500,  649,  126,  567,  565,  648,  566,
      126,  126,  564,  647,  126,  126,  126,  126,  646,  126,
      126,  645,  126,  126,  126,  644,  643,  642,  126,  569,
      126,  126,  641,  568,  126,  126,  126,  126,  126,  574,
      575,  126,  571,  570,  126,  126,  126,  640,  572,  126,
      126,  639,  126,  638,  573,  635,  578,  126,  126,  126,
      126,  126,  634,  126,  126,  576,  126,  175,  633,  126,
      126,  500,  126,  126,  632,  126,  126,  579,  126,  126,

      580,  577,  631,  581,  126,  500,  630,  126,  629,  500,
      626,  625,  126,  624,  126,  126,  126,  126,  126,  126,
      623,  126,  175,  622,  126,  175,  126,  126,  582,  583,
      621,  620,  126,  126,  126,  126,  126,  584,  479,  126,
      585,  126,  126,  126,  619,  618,  591,  126,  126,  126,
      126,  586,  617,  126,  126,  587,  126,  126,  126,  126,
      126,  126,  588,  589,  126,  616,  126,  126,  590,  126,
      126,  126,  615,  614,  126,  126,  126,  126,  126,  613,
      612,  126,  126,  126,  611,  126,  592,  479,  479,  126,
      126,  126,  126,  126,  344,  593,  479,  524,  126,  126,

      126,  126,  523,  334,  126,  126,  126,  522,  126,  594,
      521,  126,  126,  520,  105,  126,  519,  126,  518,  126,
      126,  517,  595,  126,  516,  126,  574,  575,  105,  126,
      126,  515,  126,  596,  514,  513,  650,  512,  126,  511,
      510,  126,  509,  126,  508,  507,  506,  105,  627,  627,
      502,  627,  627,  627,  627,  627,  627,  627,  627,  627,
      627,  627,  627,  627,  627,  627,  627,  627,  628,  628,
      628,  627,  627,  627,  627,  627,  627,  627,  628,  628,
      628,  628,  628,  628,  628,  627,  627,  627,  627,  628,
      627,  628,  628,  628,  628,  628,  628,  628,  628,  628,

      628,  628,  628,  628,  628,  628,  628,  628,  628,  628,
      628,  628,  628,  628,  628,  628,  627,  627,  627,  627,
      627,  627,  636,  636,  499,  636,  636,  636,  636,  636,
      636,  636,  636,  636,  636,  636,  636,  636,  636,  636,
      636,  636,  637,  637,  637,  636,  636,  636,  636,  636,
      636,  636,  637,  637,  637,  637,  637,  637,  637,  636,
      636,  636,  636,  637,  636,  637,  637,  637,  637,  637,
      637,  637,  637,  637,  637,  637,  637,  637,  637,  637,
      637,  637,  637,  637,  637,  637,  637,  637,  637,  637,
      636,  636,  636,  636,  636,  636,  126,  652,  651,  498,

      105,  126,  126,  126,  126,  495,  126,  126,  494,  126,
      126,  126,  653,  653,  105,  126,  493,  126,  126, 1076,
      126, 1076,  126,  126,  479,  491,  126,  126,  490,  654,
      489,  488,  487,  105,  126,  126,  126,  126,  126,  656,
      484,  126,  126,  483,  482,  126,  655,  126,  481,  126,
      126,  126,  126,  479,  657,  126,  126,  126,  658,  659,
      477,  126,  126,  474,  126,  126,  126,  126,  126,  126,
      387,  661,  660,  386,  126,  126,  126,  126,  662,  126,
      664,  663,  126,  385,  126,  126,  665,  126,  126,  126,
      126,  126,  380,  667,  126,  126,  126,  126,  126,  374,

      369,  366,  666,  126,  365,  126,  362,  361,  360,  668,
      126,  126,  126,  126,  126,  126,  126,  358, 1076,  126,
      126,  126,  126,  126,  126, 1076,  355,  669,  126,  671,
      126,  354,  670,  126,  126,  126,  126,  126,  126,  105,
      353,  126,  126,  126,  126,  126,  672,  352,  349,  673,
      348,  574,  575,  105,  675,  347,  346,  126,  126,  126,
      345,  126,  342,  341,  674,  126,  126,  126,  126,  340,
      126,  126,  105,  126,  126,  126,  126,  339,  211,  126,
      677,  126,  126,  126,  126,  676,  211,  336,  126,  126,
      126,  126,  126,  126,  260,  126,  126,  259,  258,  678,

      257,  126,  254,  126,  126,  126,  126,  253,  679,  126,
      126,  126,  126,  126,  680,  245,  126,  126,  126,  126,
      126,  237,  234,  126,  683,  681,  233,  126,  232,  231,
      105,  682,  126,  126,  126,  126,  126,  228,  227,  126,
      126,  684,  653,  653,  105,  226,  225,  126,  126,  126,
      126,  224,  126,  104,  102,  126,  126,  685,  223,  687,
      222,  126,  219,  105,  126,  126,  126,  126,  126,  126,
      686,  215,  126,  126,  688,  126,  211,  126,  211,  689,
      126,  126,  126,  126,  126,   99,  126,  126,  209,  126,
      691,  690,  126,  207,  206,  126,  692,  126,  175,  126,

      126,  126,  126,  128,  119,  126,  693,  126,  126,  126,
      118,  126,  114,  104,  102,  126,  694,  126,  695,   99,
      126,  126,  126,  126, 1076,  696,  126,  126,  126,  126,
      697, 1076, 1076,  126,  126, 1076,  698,  126, 1076,  126,
     1076, 1076,  126,  126,  126,  126, 1076,  126, 1076, 1076,
      126,  126, 1076,  126,  126,  699,  700,  126, 1076, 1076,
      126,  126,  126,  701,  126, 1076, 1076, 1076,  126,  126,
      126,  126,  126,  126, 1076, 1076,  126,  126,  126, 1076,
     1076, 1076,  126,  703,  126,  126,  126,  126, 1076, 1076,
      126, 1076,  126,  126,  126,  702,  334,  126,  126,  126,

      334, 1076, 1076,  126, 1076,  126,  126,  126,  126, 1076,
      126,  126, 1076,  126,  126,  704,  126,  126, 1076, 1076,
      126,  126,  126, 1076,  126,  627,  627,  627,  126,  126,
      126,  126, 1076, 1076, 1076,  627,  627,  627,  627,  627,
      627,  627, 1076, 1076, 1076, 1076,  627, 1076,  627,  627,
      627,  627,  627,  627,  627,  627,  627,  627,  627,  627,
      627,  627,  627,  627,  627,  627,  627,  627,  627,  627,
      627,  627,  627,  636,  636,  636, 1076, 1076,  126, 1076,
     1076, 1076,  126,  636,  636,  636,  636,  636,  636,  636,
      126, 1076,  126, 1076,  636, 1076,  636,  636,  636,  636,

      636,  636,  636,  636,  636,  636,  636,  636,  636,  636,
      636,  636,  636,  636,  636,  636,  636,  636,  636,  636,
      636,  126,  126, 1076, 1076,  126,  126, 1076,  743, 1076,
     1076, 1076, 1076,  126,  126,  126,  126,  126,  745,  742,
     1076,  126,  126, 1076,  126, 1076, 1076, 1076,  126,  126,
      126,  126,  126,  126, 1076,  744,  126,  746,  126,  126,
     1076, 1076, 1076,  747,  126,  126, 1076,  126,  126,  748,
      126,  126,  749,  126,  126,  126,  126, 1076,  126,  750,
     1076,  126,  126, 1076,  126,  126,  126,  126,  126,  126,
     1076, 1076,  126,  752,  751,  126,  126,  754,  753,  126,

      126, 1076, 1076,  126, 1076,  126,  755,  126,  126,  126,
      126, 1076,  126,  126,  126,  126, 1076,  756,  126,  126,
      126, 1076,  126,  126, 1076,  126,  126, 1076, 1076,  126,
     1076,  126, 1076,  757,  126, 1076,  126,  126,  126,  126,
      758,  126,  126, 1076, 1076,  759, 1076, 1076,  761, 1076,
      126, 1076,  126,  126,  760,  126,  126,  126, 1076,  126,
      126, 1076,  126,  126,  126,  126,  126, 1076, 1076,  762,
      126,  126,  126,  126,  126, 1076,  126,  126,  763,  126,
      126,  765,  126, 1076,  126,  126,  764,  126,  126, 1076,
      126,  126, 1076,  126,  126,  126,  126, 1076,  766,  126,

     1076,  126,  126,  126,  126, 1076,  126,  767,  768,  126,
      126, 1076,  126,  126, 1076,  126,  126,  126,  126, 1076,
      126,  126, 1076,  126,  126,  126,  126, 1076,  126,  770,
      769,  126,  126, 1076, 1076,  126,  771,  126, 1076,  126,
      126, 1076,  126,  126,  126,  126, 1076,  126,  126, 1076,
     1076,  126,  772,  126, 1076, 1076,  126,  775,  126,  774,
      126,  126,  773,  105,  126,  126,  126,  126, 1076,  126,
      126,  776,  126,  777,  126,  574,  575,  105,  126, 1076,
      126,  126,  126,  126,  778,  126, 1076,  126,  126, 1076,
      126,  126,  126,  126,  126,  105,  105,  126,  126,  126,

      126,  105,  780,  126,  779,  126,  126,  781,  782,  105,
      783, 1076, 1076,  653,  653,  105, 1076,  126,  126, 1076,
      126,  126, 1076, 1076,  126,  813,  814, 1076,  105,  126,
      126,  126,  126,  126,  105,  126,  126, 1076, 1076,  126,
      126,  126,  126,  126, 1076, 1076,  126,  126,  815,  126,
      126, 1076, 1076,  126,  126,  126,  126,  126,  126, 1076,
     1076,  126,  126,  126,  126, 1076,  816,  817,  126,  819,
      126,  126,  126, 1076, 1076,  126,  126,  126,  126,  820,
      818, 1076,  126, 1076,  126, 1076,  821, 1076,  126,  126,
      126,  126,  126, 1076, 1076,  126,  822,  126,  126,  126,

     1076, 1076,  126,  126,  126,  126,  126, 1076, 1076,  824,
      126,  126,  126,  126,  126, 1076,  823,  126, 1076,  126,
      126,  126,  126, 1076,  126,  126, 1076,  126,  126, 1076,
      126,  825, 1076,  126,  126,  126,  126, 1076,  126,  126,
     1076,  126,  126,  126,  126,  826,  826,  126,  826,  126,
      126, 1076, 1076,  126,  126,  126,  126,  126, 1076,  828,
      126,  126,  126,  126,  126,  827, 1076,  829,  126, 1076,
      126,  126,  126, 1076, 1076, 1076,  830, 1076,  126,  126,
     1076,  126,  126, 1076,  126, 1076,  126,  126, 1076, 1076,
      126,  126,  126,  126,  126, 1076,  175,  126, 1076,  126,

      126,  126,  126, 1076,  126,  126,  126,  126,  105, 1076,
      126,  126,  126,  831,  126,  833,  832, 1076,  126, 1076,
      653,  653,  105,  126, 1076,  126,  126, 1076,  126, 1076,
      126, 1076, 1076,  834,  126,  126,  126,  835, 1076,  126,
      126,  105,  126, 1076,  126, 1076, 1076,  126,  126,  126,
      126,  836, 1076, 1076,  126,  126, 1076,  837,  126, 1076,
      126, 1076,  865,  126,  126,  126,  126,  126,  126, 1076,
     1076,  126,  126,  126,  126, 1076,  126,  126, 1076,  126,
      126,  126,  866, 1076, 1076,  126, 1076,  126,  126,  126,
      126, 1076,  868,  126, 1076,  126,  126,  867,  126,  869,

     1076,  126,  126,  126,  126, 1076,  126,  126, 1076,  126,
      126, 1076,  126,  126, 1076, 1076,  870,  126,  871,  126,
      126, 1076, 1076,  126,  126,  126,  126,  126, 1076, 1076,
      126,  126,  126,  126,  126,  126, 1076, 1076,  126,  126,
      126,  874,  126, 1076,  126,  126, 1076,  126,  126,  126,
      875, 1076,  126,  126,  876,  126, 1076,  126,  126,  126,
      126, 1076,  877,  126,  126,  126, 1076,  879,  878,  126,
     1076, 1076, 1076,  126, 1076,  126,  126,  126,  126,  126,
      126, 1076,  126,  126, 1076,  126,  126,  126,  126, 1076,
      126,  880, 1076,  126,  126, 1076,  126,  126, 1076,  126,

      126,  126,  881, 1076,  126,  126, 1076,  126,  126,  126,
      126, 1076,  126,  126, 1076,  126,  126, 1076,  126,  126,
     1076,  126,  126,  126,  126, 1076,  905,  126, 1076,  126,
      126,  126,  126,  906,  126,  126, 1076,  126,  126,  907,
     1076,  126, 1076,  126,  911,  126,  126, 1076,  126,  909,
      910,  126,  126,  126, 1076,  126,  126,  908,  126,  126,
      126,  126,  126,  126, 1076,  126,  126, 1076,  126,  126,
      126,  126, 1076,  913,  912,  126, 1076, 1076, 1076,  126,
     1076,  126,  126,  126,  126,  126,  126, 1076,  932,  126,
     1076,  126,  126,  126,  126, 1076,  126,  933, 1076,  126,

      126, 1076, 1076,  126, 1076,  126, 1076,  126,  126, 1076,
      126,  126, 1076,  126,  126,  126,  934, 1076,  126,  935,
      126, 1076, 1076, 1076,  936, 1076,  126,  126,  126,  126,
     1076,  937,  126,  126,  126, 1076,  938,  126,  126, 1076,
     1076, 1076,  126, 1076,  126,  126,  126,  126,  126,  126,
     1076,  126,  126, 1076,  126,  126,  126,  126, 1076,  126,
      957, 1076, 1076,  126, 1076,  126, 1076, 1076,  126,  960,
      126,  126,  958,  126,  126, 1076, 1076,  126,  126,  126,
      126,  126,  979, 1076,  126,  126,  981,  126,  126, 1076,
      126,  999, 1076,  126,  126,  126,  126, 1076, 1076,  126,

      126,  126,  126,  126, 1076, 1076,  126,  126, 1076, 1019,
      126, 1076,  126, 1076, 1076,  126,  126,  126,  126, 1076,
      126, 1076, 1076, 1076,  126, 1076,  126,   20,   20,   20,
       20,   20,   20,   20,   20,   20,   21,   21,   21,   21,
       21,   21,   21,   21,   21,   88,   88,   88,   88,   88,
       88,   88,   88,   88,   92,   92,   92,   92,   92,   92,
       92,   92,   92,   95,   95,   95,   95,   95,   95,   95,
       95,   95,  103,  103,  103,  103,  103,  103,  103,  103,
      103,  105,  105,  126,  126,  208,  208,  208,  208,  208,
      208,  208,  208,  210,  210,  210,  210,  210,  210,  210,

      210,  210,  218, 1076,  218,  218,  218,  218, 1076,  218,
      218,  235, 1076,  235,  236, 1076,  236,  236,  236,  236,
      236,  236,  236,  343, 1076,  343,  343,  343,  343,  343,
      343,  343,  356, 1076,  356,  356,  356,  356,  356,  356,
      356,  359, 1076,  359,  468,  468,  468,  468,  468,  468,
      468,  468,  468,  472, 1076,  472,  472,  472,  472,  472,
      472,  472,  475, 1076,  475,  475,  475,  475,  475,  475,
      475,  478,  478,  478,  478,  478,  478,  478,  478,  478,
      344, 1076,  344,  344,  344,  344,  344,  344,  344,  480,
     1076,  480,  480,  480,  480,  480, 1076,  480,  492,  492,

      492,  492,  492,  492,  492,  492,  492,  357, 1076,  357,
      357,  357,  357,  357,  357,  357,  597,  597,  597,  597,
      597,  597,  597,  597,  597,  470,  470,  470,  470,  470,
      470,  470,  470,  470,  601,  601,  601,  601,  601,  601,
      601,  601,  601,  603,  603,  603,  603,  603,  603,  603,
      603,  603,  473, 1076,  473,  473,  473,  473,  473,  473,
      473,  604, 1076,  604,  604,  604,  604,  604,  604,  604,
      606,  606,  606,  606,  606,  606,  606,  606,  606,  476,
     1076,  476,  476,  476,  476,  476,  476,  476,  607, 1076,
      607,  607,  607,  607,  607,  607,  607,  610,  610,  610,

      610,  610,  610,  610,  610,  610,  707,  707,  707,  707,
      707,  707,  707,  707,  707,  709,  709,  709,  709,  709,
      709,  709,  709,  709,  605, 1076,  605,  605,  605,  605,
      605,  605,  605,  710,  710,  710,  710,  710,  710,  710,
      710,  710,  872,  872,  872,  872,  872, 1076,  872,  872,
      872,   19, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076,
     1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076,
     1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076,
     1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076,
     1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076,

     1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076,
     1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076,
     1076, 1076, 1076, 1076, 1076, 1076
    } ;

static yyconst flex_int16_t yy_chk[3927] =
    {   0,
        0,    0,    1,    2,  826,  826, 1085,  826,  479,  212,
      338,  479,  468,  469,  212,  338,   42,   90,  213,    1,
        2,   42,   90,  213,  468,  469,  479,  873,  873,    0,
      873,    1,    2,    3,    3,    3,    3,    3,    3,    3,
        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,

        3,    3,    3,    3,    3,    3,    3,    5,    6,    7,
        8,    9,    5,    6,   10,   11,    9,   12,   13,   10,
       14,    7,    8,   15,    5,    6,   16,   11,    9,   12,
       13,   10,   14,   17,   18,   15,   23,   63,   16,   63,
       63,   87,   91,   63,   31,   63,   31,   91,   23,   94,
       17,   18,   31,   87,   31,   31,   31,   31,  111,   91,
       31,   94,   17,   18,  111, 1075,   43,   51,  246,   17,
       18,   34,   34,   43,  246,   43,   43,   43,   97,   51,
       51,   51,   34,   34,  132,   34,   34,   34,  132,  257,
       97,   52,  130, 1074,  257,   34,   43,   34,  101,  134,

       51,   34,   52,   52,   52,   52,   59,  134,   34,  130,
      101,   34, 1073,   59,   52,   59,   34,  252,   34,   59,
      137,   59,  137,  217,   52,   57,  252,   57,   57,   57,
      125,  125,  125,   57,   58,  217,   57,  222,   57,  222,
       57,   57,   57,   57,   57,   60,   58,   58,   58,   60,
     1072,  125,  133,  237,  133,  237,   60,   60,   60,   60,
       62,   61,   60,  133,   60,   61,  221,   58,   62,   61,
       62,  228, 1071,   61,   62,   61,   62,   62,  221,   64,
       58,  228,   58,   64,  249,  256,   58,  249,   58,   66,
       65,   64, 1070,   64,   65,   66,   67,   66,   65,  256,

       67,   66,   65,   66,   65,   68,  363, 1069,   67,   68,
       67,   69,   70,   68,  363,   69,   70,   68,  251,   68,
      339, 1068,  339,   69,   70,   69,   70,   71,  251,   71,
       72,  809,   71,   71,   72,   71,   77, 1067,  809,   73,
       77,   73,   72,   73,   72,  350,   72,  350,   77,   72,
       77,   73,   73,   73,   73, 1065,   74,   73,   74,  214,
      475,   74,   74,  474,  214,  474,   74,   74,  341,   74,
       75, 1064,   74,   74,   75,   76,  214,   76,   75, 1063,
      606,   76,   75,   76,   75,   78,   75,  366, 1062,   78,
       79,  366,   78,   78,   79,  337,  475,   78,  341,   78,

      341, 1061,   79,   79,   79,  117,  117,  337,  117,  117,
      122,  122,  706,  122,  122,  122,  606,  706,  117, 1059,
      117, 1058,  368,  122,  117,  122,  126, 1057,  368,  122,
      126,  117,  123,  123,  123,  368,  122,  124,  126,  122,
      126,  127,  607, 1056,  124,  123,  124,  124,  124,  144,
      142,  144, 1055,  127,  142,  144, 1054,  144,  470,  123,
     1053,  337,  142,  337,  142,  127,  145,  124,  145,  127,
      470,  142,  145,  145,  145,  897, 1052,  127,  607,  127,
      129,  129,  897,  129,  129,  129,  129,  129,  129,  129,
      129,  129,  129,  129,  129,  129,  129,  129,  129,  129,

      129,  129,  129,  129,  129,  129,  129,  129,  129,  129,
      129,  129,  129,  129,  129,  129,  129,  129,  129,  129,
      129,  129,  129,  129,  129,  129,  129,  129,  129,  129,
      129,  129,  129,  129,  129,  129,  129,  129,  129,  129,
      129,  129,  129,  129,  129,  129,  129,  129,  129,  129,
      129,  129,  129,  129,  143,  710,  146,  143,  143, 1051,
      784,  146,  597,  146,  147,  784,  143,  146,  143,  146,
      147,  148,  147,  148,  597,  599,  147,  148,  147,  148,
      149,  150,  149,  980,  980,  150,  149,  599,  149,  152,
      151,  710,  151,  150,  152,  150,  151,  153,  151,  153,

      152,  943,  152,  153,  154,  153,  152,  601,  152,  154,
      155,  154,  155,  156,  477,  154,  155,  154,  155,  601,
      157,  156,  943,  156,  157, 1050,  158,  156, 1049,  156,
      158,  159,  157,  159,  157, 1048,  602,  159,  158,  159,
      158,  160,  158,  160,  477,  161,  477,  160,  602,  160,
      161,  162,  161,  162, 1047,  847,  161,  162,  161,  162,
      163,  171,  163,  171, 1046,  847,  163,  171,  707,  171,
      847,  163,  163,  163,  164,  163,  163,  164, 1045,  164,
      707,  166,  165,  164,  165,  164, 1044,  165,  165,  167,
      165,  166,  168,  166, 1043, 1042,  708,  166,  167,  166,

      167,  168,  169,  168,  167,  170,  167,  168,  708,  168,
      169,  608,  169,  170,  608,  170,  169,  172,  169,  170,
     1041,  170,  172,  173,  172, 1040,  471,  173,  172,  608,
      172, 1039, 1038, 1037,  174,  173,  174,  173,  471,  174,
      174,  174,  174,  175, 1036,  175,  176, 1035,  176,  175,
     1034,  175,  176,  176,  176,  177, 1033,  177,  178, 1032,
      177,  177,  178,  177, 1031,  179, 1030,  179, 1029, 1028,
      178,  179,  178,  179,  180, 1027,  181,  180,  181,  180,
     1026, 1025,  181,  180,  181,  180,  182, 1024, 1023, 1022,
      182,  183,  471, 1021,  471,  183, 1020,  183,  182, 1018,

      182, 1017,  183,  183,  184,  183,  183,  185,  184, 1016,
      186,  185, 1015,  187,  186, 1014,  184,  187,  184,  185,
     1013,  185,  186, 1012,  186,  187,  186,  187,  188,  189,
     1011, 1010,  188,  189,  190,  189, 1009, 1008,  190, 1007,
      188,  189,  188,  189, 1006,  191,  190, 1005,  190,  191,
      192,  194, 1004, 1003,  192, 1002,  193,  191, 1001,  191,
      193,  194,  192,  194,  192, 1000,  192,  194,  193,  194,
      193,  193,  195,  196,  998,  997,  195,  196,  197,  996,
      995,  196,  197,  994,  195,  196,  195,  196,  993,  198,
      197,  198,  197,  198,  992,  199,  991,  990,  199,  989,

      199,  198,  988,  198,  199,  200,  199,  987,  201,  200,
      986,  202,  201,  985,  203,  202,  201,  200,  203,  200,
      201,  984,  201,  202,  983,  202,  203,  202,  203,  204,
      203,  982,  205,  204,  239,  239,  205,  239,  239,  978,
      977,  204,  976,  204,  205,  975,  205,  239,  205,  239,
      240,  240,  240,  239,  254,  261,  974,  973,  254,  261,
      239,  972,  263,  240,  971,  970,  263,  261,  969,  261,
      254,  254,  968,  254,  263,  967,  263,  240,  241,  241,
      241,  966,  965,  266,  964,  963,  962,  266,  241,  241,
      241,  241,  241,  241,  241,  266,  961,  266,  959,  241,

      956,  241,  241,  241,  241,  241,  241,  241,  241,  241,
      241,  241,  241,  241,  241,  241,  241,  241,  241,  241,
      241,  241,  241,  241,  241,  241,  262,  264,  955,  954,
      262,  264,  953,  952,  262,  264,  951,  950,  262,  264,
      262,  264,  265,  267,  598,  267,  265,  598,  949,  267,
      265,  267,  269,  268,  265,  268,  265,  598,  269,  268,
      269,  268,  598,  270,  269,  270,  269,  948,  271,  270,
      947,  270,  271,  272,  273,  946,  945,  272,  273,  944,
      271,  272,  271,  271,  942,  272,  273,  272,  273,  274,
      275,  941,  940,  274,  275,  276,  939,  276,  276,  276,

      937,  274,  275,  274,  275,  276,  276,  277,  276,  277,
      276,  276,  278,  277,  278,  277,  279,  931,  279,  930,
      278,  929,  280,  278,  928,  278,  280,  279,  278,  279,
      927,  281,  279,  926,  280,  281,  280,  282,  281,  925,
      924,  282,  280,  281,  283,  281,  283,  923,  922,  282,
      283,  282,  283,  284,  921,  284,  285,  920,  285,  284,
      284,  284,  285,  286,  285,  286,  287,  705,  287,  286,
      705,  286,  287,  287,  287,  288,  289,  919,  289,  288,
      705,  290,  289,  918,  289,  705,  290,  288,  290,  288,
      917,  291,  290,  291,  290,  916,  291,  291,  292,  291,

      915,  293,  292,  914,  904,  293,  903,  902,  900,  899,
      292,  898,  292,  293,  294,  293,  896,  293,  294,  295,
      297,  295,  294,  296,  297,  295,  294,  295,  294,  895,
      894,  296,  297,  296,  297,  893,  298,  296,  298,  296,
      892,  299,  298,  300,  298,  299,  300,  299,  300,  891,
      890,  299,  300,  299,  300,  301,  302,  301,  889,  301,
      302,  301,  304,  301,  888,  303,  304,  303,  302,  887,
      302,  303,  886,  303,  304,  305,  304,  885,  306,  305,
      306,  307,  884,  883,  306,  307,  306,  305,  308,  305,
      308,  864,  863,  307,  308,  307,  308,  309,  310,  309,

      862,  861,  310,  309,  311,  309,  860,  312,  311,  859,
      310,  312,  310,  313,  858,  857,  311,  313,  311,  312,
      314,  312,  856,  855,  314,  313,  854,  313,  853,  315,
      852,  315,  314,  851,  314,  315,  316,  315,  316,  317,
      319,  317,  316,  850,  316,  317,  316,  317,  318,  319,
      318,  319,  849,  848,  318,  319,  318,  319,  320,  321,
      846,  845,  320,  321,  324,  844,  842,  838,  324,  812,
      320,  321,  320,  321,  321,  322,  324,  322,  324,  323,
      323,  322,  323,  322,  811,  325,  323,  325,  323,  326,
      326,  325,  327,  325,  810,  328,  327,  808,  807,  328,

      806,  805,  804,  803,  327,  802,  327,  328,  801,  328,
      800,  329,  326,  328,  799,  329,  326,  798,  330,  797,
      796,  330,  330,  329,  326,  329,  326,  331,  326,  329,
      330,  331,  330,  795,  332,  794,  332,  331,  793,  331,
      332,  331,  332,  333,  334,  792,  791,  333,  334,  335,
      388,  790,  788,  335,  388,  333,  334,  333,  334,  787,
      786,  335,  388,  335,  388,  335,  389,  390,  741,  740,
      389,  390,  389,  388,  739,  738,  737,  392,  389,  390,
      389,  390,  391,  392,  391,  392,  736,  735,  391,  392,
      391,  392,  393,  394,  393,  394,  734,  733,  393,  394,

      393,  394,  732,  393,  395,  393,  396,  395,  396,  395,
      731,  730,  396,  395,  396,  395,  397,  398,  397,  729,
      728,  398,  397,  727,  397,  726,  399,  725,  724,  398,
      399,  398,  399,  400,  400,  723,  722,  400,  399,  401,
      399,  721,  402,  401,  720,  400,  402,  400,  403,  719,
      718,  401,  403,  401,  402,  404,  402,  404,  717,  715,
      403,  404,  403,  404,  405,  406,  713,  712,  405,  406,
      407,  711,  709,  649,  407,  648,  405,  406,  405,  406,
      647,  408,  407,  646,  407,  408,  407,  409,  410,  645,
      644,  409,  410,  408,  643,  408,  408,  642,  641,  409,

      410,  409,  410,  411,  412,  640,  410,  411,  412,  413,
      639,  638,  635,  413,  634,  411,  412,  411,  412,  633,
      632,  413,  414,  413,  412,  415,  414,  631,  630,  415,
      629,  416,  626,  625,  414,  416,  414,  415,  417,  415,
      414,  415,  417,  416,  423,  416,  624,  418,  423,  418,
      417,  623,  417,  418,  622,  418,  423,  419,  423,  419,
      621,  420,  417,  419,  420,  419,  420,  421,  620,  421,
      420,  618,  420,  421,  421,  421,  422,  617,  422,  616,
      615,  424,  422,  422,  422,  424,  425,  424,  614,  613,
      425,  612,  426,  424,  611,  424,  426,  427,  425,  610,

      425,  427,  609,  428,  426,  427,  426,  428,  429,  427,
      429,  427,  604,  603,  429,  428,  429,  428,  430,  431,
      600,  431,  430,  524,  523,  431,  433,  431,  522,  432,
      430,  432,  430,  521,  433,  432,  433,  432,  520,  434,
      433,  519,  433,  434,  435,  518,  517,  516,  435,  435,
      437,  434,  515,  434,  437,  436,  435,  436,  435,  440,
      440,  436,  437,  436,  437,  438,  439,  514,  438,  438,
      439,  513,  441,  512,  439,  510,  441,  438,  439,  438,
      439,  442,  509,  442,  441,  440,  441,  442,  508,  442,
      443,  507,  443,  440,  506,  440,  443,  443,  443,  440,

      444,  440,  505,  445,  444,  504,  503,  445,  502,  501,
      499,  498,  444,  497,  444,  445,  446,  445,  446,  447,
      496,  447,  446,  495,  446,  447,  448,  447,  448,  449,
      494,  493,  448,  449,  448,  450,  451,  450,  492,  450,
      451,  449,  456,  449,  491,  490,  456,  450,  451,  450,
      451,  452,  488,  452,  456,  453,  456,  452,  453,  452,
      453,  454,  453,  454,  453,  487,  453,  454,  455,  454,
      455,  457,  486,  485,  455,  457,  455,  458,  459,  484,
      483,  458,  459,  457,  481,  457,  459,  480,  478,  458,
      459,  458,  459,  461,  476,  461,  472,  387,  462,  461,

      462,  461,  386,  462,  462,  463,  462,  385,  464,  463,
      384,  465,  464,  383,  466,  465,  382,  463,  381,  463,
      464,  380,  464,  465,  379,  465,  466,  466,  466,  467,
      525,  378,  525,  467,  377,  376,  525,  375,  525,  374,
      373,  467,  372,  467,  371,  370,  369,  466,  500,  500,
      367,  500,  500,  500,  500,  500,  500,  500,  500,  500,
      500,  500,  500,  500,  500,  500,  500,  500,  500,  500,
      500,  500,  500,  500,  500,  500,  500,  500,  500,  500,
      500,  500,  500,  500,  500,  500,  500,  500,  500,  500,
      500,  500,  500,  500,  500,  500,  500,  500,  500,  500,

      500,  500,  500,  500,  500,  500,  500,  500,  500,  500,
      500,  500,  500,  500,  500,  500,  500,  500,  500,  500,
      500,  500,  511,  511,  365,  511,  511,  511,  511,  511,
      511,  511,  511,  511,  511,  511,  511,  511,  511,  511,
      511,  511,  511,  511,  511,  511,  511,  511,  511,  511,
      511,  511,  511,  511,  511,  511,  511,  511,  511,  511,
      511,  511,  511,  511,  511,  511,  511,  511,  511,  511,
      511,  511,  511,  511,  511,  511,  511,  511,  511,  511,
      511,  511,  511,  511,  511,  511,  511,  511,  511,  511,
      511,  511,  511,  511,  511,  511,  526,  527,  526,  364,

      529,  527,  526,  528,  526,  362,  530,  528,  361,  527,
      530,  527,  529,  529,  529,  528,  360,  528,  530,  359,
      530,  358,  531,  532,  356,  355,  531,  532,  354,  532,
      353,  352,  351,  529,  531,  532,  531,  532,  533,  534,
      349,  534,  533,  348,  347,  534,  533,  534,  346,  535,
      533,  535,  533,  343,  535,  535,  536,  535,  536,  537,
      342,  537,  536,  340,  536,  537,  538,  537,  538,  539,
      260,  539,  538,  259,  538,  539,  540,  539,  540,  541,
      542,  541,  540,  258,  540,  541,  543,  541,  542,  543,
      542,  543,  255,  545,  542,  543,  542,  543,  544,  253,

      250,  248,  544,  545,  247,  545,  245,  244,  243,  545,
      544,  545,  544,  546,  547,  546,  547,  238,  235,  546,
      547,  546,  547,  548,  549,  234,  232,  548,  549,  550,
      551,  231,  549,  550,  551,  548,  549,  548,  549,  552,
      230,  550,  551,  550,  551,  553,  551,  229,  227,  553,
      226,  552,  552,  552,  555,  225,  224,  553,  555,  553,
      223,  554,  220,  219,  554,  554,  555,  556,  555,  216,
      557,  556,  552,  554,  557,  554,  559,  215,  211,  556,
      559,  556,  557,  558,  557,  558,  210,  208,  559,  558,
      559,  558,  560,  561,  141,  561,  560,  140,  139,  561,

      138,  561,  136,  562,  560,  562,  560,  135,  562,  562,
      563,  562,  563,  564,  563,  131,  563,  564,  563,  565,
      566,  121,  116,  565,  566,  564,  114,  564,  113,  112,
      569,  565,  566,  565,  566,  567,  568,  110,  109,  567,
      568,  567,  569,  569,  569,  108,  107,  567,  568,  567,
      568,  106,  570,  103,  102,  571,  570,  568,  100,  571,
       99,  573,   96,  569,  570,  573,  570,  571,  572,  571,
      570,   93,  572,  573,  572,  573,   89,  576,   88,  573,
      572,  576,  572,  577,  578,   86,  578,  577,   85,  576,
      578,  576,  578,   83,   81,  577,  579,  577,  577,  579,

      580,  579,  580,   55,   37,  579,  580,  579,  580,  581,
       35,  581,   33,   29,   27,  581,  581,  581,  582,   22,
      583,  582,  583,  582,   19,  583,  583,  582,  583,  582,
      584,    0,    0,  585,  584,    0,  585,  585,    0,  586,
        0,    0,  584,  586,  584,  585,    0,  585,    0,    0,
      587,  586,    0,  586,  587,  587,  588,  589,    0,    0,
      588,  589,  587,  589,  587,    0,    0,    0,  588,  589,
      588,  589,  590,  591,    0,    0,  590,  591,  592,    0,
        0,    0,  592,  592,  590,  591,  590,  591,    0,    0,
      592,    0,  592,  593,  594,  590,  593,  593,  594,  595,

      594,    0,    0,  595,    0,  593,  594,  593,  594,    0,
      596,  595,    0,  595,  596,  595,  650,  651,    0,    0,
      650,  651,  596,    0,  596,  627,  627,  627,  650,  651,
      650,  651,    0,    0,    0,  627,  627,  627,  627,  627,
      627,  627,    0,    0,    0,    0,  627,    0,  627,  627,
      627,  627,  627,  627,  627,  627,  627,  627,  627,  627,
      627,  627,  627,  627,  627,  627,  627,  627,  627,  627,
      627,  627,  627,  636,  636,  636,    0,    0,  654,    0,
        0,    0,  654,  636,  636,  636,  636,  636,  636,  636,
      654,    0,  654,    0,  636,    0,  636,  636,  636,  636,

      636,  636,  636,  636,  636,  636,  636,  636,  636,  636,
      636,  636,  636,  636,  636,  636,  636,  636,  636,  636,
      636,  652,  655,    0,    0,  652,  655,    0,  655,    0,
        0,    0,    0,  652,  655,  652,  655,  656,  657,  652,
        0,  656,  657,    0,  658,    0,    0,    0,  658,  656,
      657,  656,  657,  659,    0,  656,  658,  659,  658,  660,
        0,    0,    0,  660,  661,  659,    0,  659,  661,  661,
      662,  660,  662,  660,  662,  663,  661,    0,  661,  663,
        0,  665,  662,    0,  662,  665,  664,  663,  664,  663,
        0,    0,  664,  665,  664,  665,  666,  667,  666,  667,

      666,    0,    0,  667,    0,  667,  668,  668,  666,  668,
      666,    0,  669,  668,  669,  668,    0,  669,  669,  670,
      669,    0,  671,  670,    0,  672,  671,    0,    0,  672,
        0,  670,    0,  670,  671,    0,  671,  672,  673,  672,
      671,  674,  673,    0,    0,  674,    0,    0,  676,    0,
      673,    0,  673,  674,  675,  674,  675,  676,    0,  676,
      675,    0,  675,  676,  677,  676,  677,    0,    0,  677,
      677,  678,  677,  678,  679,    0,  679,  678,  678,  678,
      679,  680,  679,    0,  681,  680,  679,  682,  681,    0,
      683,  682,    0,  680,  683,  680,  681,    0,  681,  682,

        0,  682,  683,  684,  683,    0,  685,  684,  685,  686,
      685,    0,  687,  686,    0,  684,  687,  684,  685,    0,
      685,  686,    0,  686,  687,  688,  687,    0,  689,  688,
      687,  690,  689,    0,    0,  690,  689,  688,    0,  688,
      689,    0,  689,  690,  691,  690,    0,  692,  691,    0,
        0,  692,  690,  693,    0,    0,  691,  693,  691,  692,
      694,  692,  691,  701,  694,  693,  695,  693,    0,  696,
      695,  695,  694,  696,  694,  701,  701,  701,  695,    0,
      695,  696,  697,  696,  697,  698,    0,  698,  697,    0,
      697,  698,  699,  698,  699,  702,  701,  700,  699,  700,

      699,  703,  700,  700,  699,  700,  704,  702,  702,  702,
      704,    0,    0,  703,  703,  703,    0,  742,  704,    0,
      704,  742,    0,    0,  743,  742,  743,    0,  702,  742,
      743,  742,  743,  744,  703,  744,  745,    0,    0,  744,
      745,  744,  746,  747,    0,    0,  746,  747,  745,  749,
      745,    0,    0,  749,  746,  747,  746,  747,  748,    0,
        0,  749,  748,  749,  750,    0,  748,  749,  750,  751,
      748,  751,  748,    0,    0,  751,  750,  751,  750,  752,
      750,    0,  752,    0,  752,    0,  753,    0,  752,  753,
      752,  753,  754,    0,    0,  753,  754,  753,  755,  756,

        0,    0,  755,  756,  754,  758,  754,    0,    0,  758,
      755,  756,  755,  756,  757,    0,  757,  758,    0,  758,
      757,  759,  757,    0,  760,  759,    0,  761,  760,    0,
      762,  761,    0,  759,  762,  759,  760,    0,  760,  761,
        0,  761,  762,  763,  762,  764,  764,  763,  764,  765,
      767,    0,    0,  765,  767,  763,  766,  763,    0,  766,
      766,  765,  767,  765,  767,  765,    0,  768,  766,    0,
      766,  768,  769,    0,    0,    0,  769,    0,  770,  768,
        0,  768,  770,    0,  769,    0,  769,  764,    0,    0,
      770,  764,  770,  771,  772,    0,  772,  771,    0,  764,

      772,  764,  772,    0,  773,  771,  773,  771,  776,    0,
      773,  774,  773,  771,  775,  774,  773,    0,  775,    0,
      776,  776,  776,  774,    0,  774,  775,    0,  775,    0,
      777,    0,    0,  777,  777,  778,  779,  778,    0,  778,
      779,  776,  777,    0,  777,    0,    0,  778,  779,  778,
      779,  780,    0,    0,  783,  780,    0,  783,  783,    0,
      813,    0,  813,  780,  813,  780,  783,  814,  783,    0,
        0,  814,  813,  815,  813,    0,  816,  815,    0,  814,
      816,  814,  816,    0,    0,  815,    0,  815,  816,  817,
      816,    0,  818,  817,    0,  819,  818,  817,  820,  819,

        0,  817,  820,  817,  818,    0,  818,  819,    0,  819,
      820,    0,  820,  821,    0,    0,  820,  821,  821,  822,
      823,    0,    0,  822,  823,  821,  824,  821,    0,    0,
      824,  822,  823,  822,  823,  825,    0,    0,  824,  825,
      824,  827,  828,    0,  828,  827,    0,  825,  828,  825,
      828,    0,  829,  827,  829,  827,    0,  830,  829,  830,
      829,    0,  830,  830,  831,  830,    0,  832,  831,  832,
        0,    0,    0,  832,    0,  832,  831,  833,  831,  833,
      834,    0,  834,  833,    0,  833,  834,  835,  834,    0,
      836,  835,    0,  837,  836,    0,  865,  837,    0,  835,

      865,  835,  836,    0,  836,  837,    0,  837,  865,  866,
      865,    0,  867,  866,    0,  868,  867,    0,  869,  868,
        0,  866,  869,  866,  867,    0,  867,  868,    0,  868,
      869,  870,  869,  868,  871,  870,    0,  874,  871,  870,
        0,  874,    0,  870,  876,  870,  871,    0,  871,  874,
      875,  874,  875,  876,    0,  876,  875,  871,  875,  876,
      877,  876,  877,  878,    0,  878,  877,    0,  877,  878,
      879,  878,    0,  880,  879,  880,    0,    0,    0,  880,
        0,  880,  879,  881,  879,  881,  905,    0,  905,  881,
        0,  881,  905,  906,  905,    0,  907,  906,    0,  908,

      907,    0,    0,  908,    0,  906,    0,  906,  907,    0,
      907,  908,    0,  908,  909,  910,  907,    0,  909,  910,
      911,    0,    0,    0,  911,    0,  909,  910,  909,  910,
        0,  912,  911,  912,  911,    0,  913,  912,  913,    0,
        0,    0,  913,    0,  913,  912,  932,  912,  932,  933,
        0,  933,  932,    0,  932,  933,  934,  933,    0,  935,
      934,    0,    0,  935,    0,  938,    0,    0,  934,  938,
      934,  935,  936,  935,  936,    0,    0,  938,  936,  938,
      936,  957,  958,    0,  958,  957,  960,  979,  958,    0,
      958,  979,    0,  957,  960,  957,  960,    0,    0,  979,

      960,  979,  960,  981,    0,    0,  999,  981,    0,  999,
      999,    0, 1019,    0,    0,  981, 1019,  981,  999,    0,
      999,    0,    0,    0, 1019,    0, 1019, 1077, 1077, 1077,
     1077, 1077, 1077, 1077, 1077, 1077, 1078, 1078, 1078, 1078,
     1078, 1078, 1078, 1078, 1078, 1079, 1079, 1079, 1079, 1079,
     1079, 1079, 1079, 1079, 1080, 1080, 1080, 1080, 1080, 1080,
     1080, 1080, 1080, 1081, 1081, 1081, 1081, 1081, 1081, 1081,
     1081, 1081, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082,
     1082, 1083, 1083, 1084, 1084, 1086, 1086, 1086, 1086, 1086,
     1086, 1086, 1086, 1087, 1087, 1087, 1087, 1087, 1087, 1087,

     1087, 1087, 1088,    0, 1088, 1088, 1088, 1088,    0, 1088,
     1088, 1089,    0, 1089, 1090,    0, 1090, 1090, 1090, 1090,
     1090, 1090, 1090, 1091,    0, 1091, 1091, 1091, 1091, 1091,
     1091, 1091, 1092,    0, 1092, 1092, 1092, 1092, 1092, 1092,
     1092, 1093,    0, 1093, 1094, 1094, 1094, 1094, 1094, 1094,
     1094, 1094, 1094, 1095,    0, 1095, 1095, 1095, 1095, 1095,
     1095, 1095, 1096,    0, 1096, 1096, 1096, 1096, 1096, 1096,
     1096, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097,
     1098,    0, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1099,
        0, 1099, 1099, 1099, 1099, 1099,    0, 1099, 1100, 1100,

     1100, 1100, 1100, 1100, 1100, 1100, 1100, 1101,    0, 1101,
     1101, 1101, 1101, 1101, 1101, 1101, 1102, 1102, 1102, 1102,
     1102, 1102, 1102, 1102, 1102, 1103, 1103, 1103, 1103, 1103,
     1103, 1103, 1103, 1103, 1104, 1104, 1104, 1104, 1104, 1104,
     1104, 1104, 1104, 1105, 1105, 1105, 1105, 1105, 1105, 1105,
     1105, 1105, 1106,    0, 1106, 1106, 1106, 1106, 1106, 1106,
     1106, 1107,    0, 1107, 1107, 1107, 1107, 1107, 1107, 1107,
     1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1109,
        0, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1110,    0,
     1110, 1110, 1110, 1110, 1110, 1110, 1110, 1111, 1111, 1111,

     1111, 1111, 1111, 1111, 1111, 1111, 1112, 1112, 1112, 1112,
     1112, 1112, 1112, 1112, 1112, 1113, 1113, 1113, 1113, 1113,
     1113, 1113, 1113, 1113, 1114,    0, 1114, 1114, 1114, 1114,
     1114, 1114, 1114, 1115, 1115, 1115, 1115, 1115, 1115, 1115,
     1115, 1115, 1116, 1116, 1116, 1116, 1116,    0, 1116, 1116,
     1116, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076,
     1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076,
     1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076,
     1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076,
     1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076,

     1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076,
     1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076,
     1076, 1076, 1076, 1076, 1076, 1076
    } ;

extern int verilogscannerYY_flex_debug;
int verilogscannerYY_flex_debug = 1;

static yyconst flex_int16_t yy_rule_linenum[150] =
    {   0,
     1148, 1154, 1181, 1199, 1210, 1252, 1297, 1298, 1299, 1300,
     1301, 1302, 1303, 1304, 1305, 1306, 1307, 1308, 1309, 1310,
     1311, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320,
     1321, 1322, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330,
     1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340,
     1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350,
     1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360,
     1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1376,
     1377, 1378, 1379, 1380, 1381, 1382, 1383, 1384, 1385, 1386,
     1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396,

     1439, 1457, 1502, 1541, 1569, 1585, 1594, 1608, 1609, 1619,
     1638, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1654,
     1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664,
     1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674,
     1675, 1676, 1677, 1678, 1679, 1680, 1688, 1698, 1723
    } ;

static yy_state_type *yy_state_buf=0, *yy_state_ptr=0;
static char *yy_full_match;
static int yy_lp;
static int yy_looking_for_trail_begin = 0;
static int yy_full_lp;
static int *yy_full_state;
#define YY_TRAILING_MASK 0x2000
#define YY_TRAILING_HEAD_MASK 0x4000
#define REJECT \
{ \
*yy_cp = (yy_hold_char); /* undo effects of setting up verilogscannerYYtext */ \
yy_cp = (yy_full_match); /* restore poss. backed-over text */ \
(yy_lp) = (yy_full_lp); /* restore orig. accepting pos. */ \
(yy_state_ptr) = (yy_full_state); /* restore orig. state */ \
yy_current_state = *(yy_state_ptr); /* restore curr. state */ \
++(yy_lp); \
goto find_rule; \
}

static int yy_more_flag = 0;
static int yy_more_len = 0;
#define yymore() ((yy_more_flag) = 1)
#define YY_MORE_ADJ (yy_more_len)
#define YY_RESTORE_YY_MORE_OFFSET
char *verilogscannerYYtext;
#line 1 "verilogscanner.l"
/******************************************************************************
* Copyright (c) M.Kreis,2009 
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
*    (at your option) any later version.
*  cvb
* 
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU Library General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
*
* You may use and distribute this software under the terms of the
* GNU General Public License, version 2 or later
****************************************************************************/
/****************************************************************************
 * Scanner for Verilog 2001   subset
 * Date: 02/2009                 
 * supports the IEEE Std 1364-2001 (Revision of IEEE Std 1364-1995)Verilog subset
 * %option debug
 *****************************************************************************/
#line 30 "verilogscanner.l"
#include "VPreProc.h"
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <string.h>
#include <ctype.h>
#include "commentscan.h"
#include "verilogscanner.h"
#include "doxygen.h"
#include "searchindex.h"
#include "verilogdocgen.h"
#include <ctype.h>
#include "scanner.h"
#include "vhdldocgen.h"
#include "util.h"
#include "verilogparser.hpp"
#include "bufstr.h"
#include "VPreProc.h"
#include "message.h"
#include "tooltip.h"
//--------------------------------------------------------------------------
//  FEATURE1   [`]("accelerate"|"autoexpand_vectornets"|"celldefine"|"default_decay_time"|"default_nettype"|"default_trireg_strength"|"delay_mode_distributed"|"delay_mode_zero"|"disable_portfaults"|"enable_portfaults"|"endcelldefine"|"endprotect"|"expand_vectornets"|"inline"|"line"|"noaccelerate"|"noexpand_vectornets"|"noremove_gatenames"|"noremove_netnames"|"nosuppress_faults"|"nounconnected_drive"|"portcoerce"|"pragma"|"protect"|"protected"|"remove_gatenames"|"remove_netnames"|"resetall"|"suppress_faults"|"timescale")[^\n]*
// ("accelerate"|"autoexpand_vectornets"|"celldefine"|"default_decay_time"|"default_nettype"|"default_trireg_strength"|"delay_mode_distributed"|"delay_mode_zero"|"disable_portfaults"|"enable_portfaults"|"endcelldefine"|"endprotect"|"expand_vectornets"|"inline"|"line"|"noaccelerate"|"noexpand_vectornets"|"noremove_gatenames"|"noremove_netnames"|"nosuppress_faults"|"nounconnected_drive"|"portcoerce"|"pragma"|"protect"|"protected"|"remove_gatenames"|"remove_netnames"|"resetall"|"suppress_faults"|"timescale")[\n]*

static ParserInterface *g_thisParser;
static int ss1,ee1;
static int yyEndModLine=0;
static int yyEndModLine1;
static int yyLineNr =1;
static int yyPrevLine=1;
static int yyEndLine=1;
static char* g_buf;

static int inputPosition;
static Entry* curRoots;
static Entry   gBlock;
static int num_chars;
static int defineLineContinue=0;

static int startComment;
static int iSize=0;
static QCString inputVerilogString;
static QFile inputFile;
static QCString yyFileName;
static QList<QCString> qlist;

// stores global variables like `define xxxx
static QDict<Entry>   globalMemberList(1009);

static MyParserConv *pconv;

static QCString lastLetter;
static int totLines=0;
static bool multLineComment=false;
static bool doxComment=false; // doxygen comment ? 
static QCString strComment;
static int iDocLine=-1;
// ----------------- <verilog-code > ----------------------------------

static QCString   g_CurrClass;
static QCString   g_tempComp;
static CodeOutputInterface * g_code;

static QCString      g_curClassName;
static const char *  g_inputString;       //!< the  code fragment as text
static int           g_inputLines=0;      //!<number of line in the code fragment
static bool          g_needsTermination;

static QCString      g_exampleName;
static QCString      g_exampleFile;

static QCString      g_CurrScope;
static FileDef *     g_sourceFileDef;
static Definition *  g_currentDefinition;
static MemberDef *   g_currentMemberDef;
static bool          g_includeCodeFragment;
static const char *  g_currentFontClass;
static bool          g_lexInit = FALSE;
static bool          g_parseCode=FALSE;
static bool gInit=false;
static int iCodeLen;
static Definition   *g_searchCtx;



// ------------------< functions for verilog code scanner >---------------

static void writeFont(const char *s,const char* text);
static void generateMemLink(CodeOutputInterface &ol,QCString &clName,QCString& memberName);
static bool writeColoredWord(QCString& word );
static void startCodeLine();
static bool generateClassOrGlobalLink(CodeOutputInterface &ol,char *clName, bool typeOnly=FALSE);
static bool generateMemLink(CodeOutputInterface &ol,QCString &clName,QCString& memberName,int type);
static void codifyLines(char *text,char *cl=NULL,bool undoc=false);
static void addToSearchIndex(const char *text);
static void writeMultiLineCodeLink(CodeOutputInterface &ol,
                  const char *ref,const char *file,
                  const char *anchor,const char *text,Definition *d);
static void startFontClass(const char *s);
static void endFontClass();
static void writeWord(char *word,char* curr_class=NULL);

//-------------------------------------------------------------------

static void parseGlobalMember();
static void parseLib(char *);
static QCString checkComment(QCString& q);
static void composeString(QCString& q);
static  void writeInclude(QCString);
//-------------------------------------------------------------------



#define YY_NEVER_INTERACTIVE 1
#define YY_USER_ACTION num_chars +=verilogscannerYYleng ;

//-----------------------------------------------------------
// dictionaries for keywords
static QDict<QCString> verilogKeyDict(17,false);
static QDict<QCString> verilogGlobalDict(17,false);
static QDict<QCString> verilogDefineDict(17,false);
static const QCString g_verilogkeyword("vhdlkeyword");
static const QCString g_verilogDefinition("preprocessor");


static const char* VerilogKewWordMap[] = {"module","endmodule","input","output","inout","reg","parameter","always",  
"case","endcase","if","begin","posedge","negedge","or","wire","tri","tri0","instance","use","design","config","endconfig","include","library","liblist",
	"function","endfunction","assign","end","for","else","initial","integer","real","task",
	"and","buf","bufif0","bufif1","casex","casez","cmos","deassign","default","defparam","disable",
	"edge","endattribute","endprimitive","endspecify","endtable","endtask","event",
    "force","forever","fork","force","forever","ifnone","join","large","macromodule","medium","Input","Output","Inout",
	"nand","nmos","nor","not","notif0","notif1","localparam","cell",
	"pmos","primitive","pull0","pull1","pullup","pulldown","automatic",
	"rcmos","real","time","realtime","release","repeat","rnmos","rpmos","rtran","rtranif0","rtranif1",
	"scalared","signed","small","specify","specparam","strength","strong0","strong1","supply0","supply1",
	"table","tran","tranif0","tranif1","tri1","triand","trior","trireg","pulsestyle_ondetect",    "showcancelled","noshowcancelled","pulsestyle_onevent",
	"generate","endgenerate","genvar","unsigend","xor","xnor","wait","wand","weak0","weak1","while","wire","wor","vectored",""}; 

static const char* VerilogDefineMap[] = 
{
  "`accelerate",	
  "`autoexpand_vectornets"	,
  "`celldefine",	
  "`default_decay_time,"
  "`default_nettype",
  "`default_trireg_strength",
  "`delay_mode_distributed",		
  "`delay_mode_zero"	,	
  "`disable_portfaults",		
  "`enable_portfaults",		
  "`endcelldefine",	
  "`endprotect",			
  "`expand_vectornets",		
  "`inline",
  "`line",
  "`noaccelerate",
  "`noexpand_vectornets",
  "`noremove_gatenames",
  "`noremove_netnames"	,
  "`nosuppress_faults",	
  "`nounconnected_drive",
  "`portcoerce",		
  "`pragma",
  "`protect"	,//SV			
  "`protected",// SV	
  "`remove_gatenames",			
  "`remove_netnames",
  "`resetall",		
  "`suppress_faults",
  "`timescale",
   ""  };

// some but not all system words
static const char* VerilogKewWordMap1[] = {"$async$and$array","$async$and$plane","$async$nand$array", "$async$nand$plane","$async$or$array", "$async$or$plane",
"$async$nor$array", "$async$nor$plane","$sync$and$array", "$sync$and$plane","$sync$nand$array", "$sync$nand$plane",
"$sync$or$array", "$sync$or$plane","$sync$nor$array", "$sync$nor$plane","$display", "$strobe",
"$displayb", "$strobeb","$displayh", "$strobeh","$displayo","$strobeo","$monitor", "$write","$monitorb", "$writeb",
"$monitorh", "$writeh","$monitoro", "$writeo","$monitoroff", "$monitoron","$fclose", "$fopen","$fdisplay", "$fstrobe",
"$fdisplayb", "$fstrobeb","$fdisplayh", "$fstrobeh","$fdisplayo", "$fstrobeo","$fgetc", "$ungetc","$fflush", "$ferror",
"$fgets", "$rewind","$fmonitor", "$fwrite","$fmonitorb", "$fwriteb","$fmonitorh",  "$fwriteh",
"$fmonitoro", "$fwriteo","$readmemb", "$readmemh","$swrite", "$swriteb","$swriteo", "$swriteh",
"$sformat", "$sdf_annotate","$fscanf", "$sscanf","$fread", "$ftell","$fseek", "$printtimescale", 
"$timeformat" ,"$finish", "$stop", "$realtime","$stime", "$time","$bitstoreal", "$realtobits",
"$itor", "$rtoi","$signed", "$unsigned","$test$plusargs", "$value$plusargs","$q_initialize", "$q_add",
"$q_remove", "$q_full","$q_exam","$period","$hold","$setup","$width","$skew","$reovery","$nochange","$timeskew","$setuphold","$fullskew",""};


 void deleteVerilogChars(QCString &s,const char* c)
{
  int index=s.findRev(c,-1,FALSE);

  while (index > -1)
  {
    QCString qcs=s.remove(index,1);
    s=qcs;
    index=s.findRev(c,-1,FALSE);
  }
}

static void startCodeBlock(int index){
    int ll=strComment.length();
     iCodeLen=inputVerilogString.findRev(strComment.data())+ll;
  //fprintf(stderr,"\n startin code..%d %d %d\n",iCodeLen,num_chars,ll);
   //assert(false);
    gBlock.reset();
   int len=strComment.length();
   QCString name=strComment.right(len-index);// 
    name=VhdlDocGen::getIndexWord(name.data(),1);
    if(!name)
      gBlock.name="misc"+ VhdlDocGen::getRecordNumber(); 
    else
      gBlock.name=name;
   strComment=strComment.left(index);
    gBlock.startLine=yyLineNr+1;
    gBlock.bodyLine=yyLineNr+1;
    VhdlDocGen::prepareComment(strComment);
   gBlock.brief+=strComment;
}
static void makeInlineDoc(int endCode)
{
     int len=endCode-iCodeLen;
     QCString par=inputVerilogString.mid(iCodeLen,len);
     gBlock.doc=par;
     gBlock.inbodyDocs=par;
     gBlock.section=Entry::VARIABLE_SEC;
     gBlock.spec=VhdlDocGen::MISCELLANEOUS;
     gBlock.fileName = yyFileName;
     gBlock.endBodyLine=yyLineNr-1;
     gBlock.lang=SrcLangExt_VHDL;
     gBlock.fileName =yyFileName;
     gBlock.lang=SrcLangExt_VHDL;
     Entry *temp=new Entry(gBlock);
     Entry* compound= getCurrVerilog();
//     fprintf(stderr,"\n <<<%s %s \n %s \n %d %d %d\n\n>>>\n",compound->name.data(),gBlock.brief.data(),par.data(),endCode,iCodeLen,yyLineNr);

    if(compound)
    compound->addSubEntry(temp);
  else
  {
     temp->type="misc"; // global code like library ieee...
     curRoots->addSubEntry(temp);
  }

 gBlock.reset();
 strComment.resize(0); 
 resetVerilogBrief();

}// makeInlineDoc

static bool isConstraintFile(QCString fileName,char *type)
{
  int i=fileName.findRev(type);
  int j=fileName.length();
  int k=strlen(type);
  if((i+k)==j)
   return true;
  return false;
}


static bool  checkMultiComment(QCString& qcs){
  QList<Entry> *pTemp=VerilogDocGen::getEntryAtLine1(curRoots,iDocLine);
 if (!pTemp->isEmpty())
  {
    int ii=pTemp->count();
   qcs.stripPrefix("//%");
    while(!pTemp->isEmpty()){
    
    Entry *e=(Entry*)pTemp->getFirst();
    e->briefLine=yyLineNr;
    e->brief+=qcs;
    iDocLine=-1;
    pTemp->removeFirst();
    ii=pTemp->count();
    }
     return true;
    }    
 
  return false;
 }

 void addGlobalVerilogMember(const Entry *e)
{
       Entry *pNew=new Entry(*e);
       globalMemberList.insert(pNew->name,pNew);
}

static bool checkString(QCString &name)
{
  if (name.isEmpty()) return FALSE;
  static QRegExp regg("[ \t\"]");

  int len=name.length();
  if (name.at(0)=='"' && name.at(len-1)=='"' && len > 2)
  {
    QStringList qrl=QStringList::split(regg,name,FALSE);
    if (VhdlDocGen::isNumber(qrl[0].data()))
    {
      g_code->codify("\""); 
      startFontClass("vhdllogic");
      QCString mid=name.mid(1,len-2); //" 1223 "
      g_code->codify(mid.data());
      endFontClass();
      g_code->codify("\""); 
    }
    else
    {
      startFontClass("keyword");
      g_code->codify(name.data());
      endFontClass();
    }
    return TRUE;
  }

  if (VhdlDocGen::isNumber(name))
  {
    startFontClass("vhdllogic");
    g_code->codify(name.data());
    endFontClass();
    return TRUE;
  }
  return FALSE;
}

static bool writeColoredWord(QCString& temp ){
   const QCString *ss=VerilogDocGen::findKeyWord(temp);
    if (ss){
          writeFont(ss->data(),temp.data());
	return true;
	}
 return false;
}


static void writeSpecWord(const char *word,const char* curr_class=0,bool classLink=FALSE)
{
  bool found=FALSE;
  QCString temp; 
  QCString tclass(curr_class);
  QCString ttt(word);
  if (ttt.isEmpty()) return;
  for (unsigned int j=0;j<ttt.length();j++)
  {
    char c=ttt.at(j);
    if ( c==' '|| c==',' || c==';' || c==':' || c=='(' || c==')' || c=='\r' || c=='\t' || c=='.')
    {
      if (found)
      {
        if (!writeColoredWord(temp)) // is it a keyword ?
        {
          //if (VhdlDocGen::findKeyWord(temp))
          // writeFont("vhdlkeyword",temp.data());
	  //printf("writeWord: %s\n",temp.data());
          if (!tclass.isEmpty())
          {
            if (!classLink)
	    {
           writeWord(temp.data());//((   generateMemLink(*g_code,tclass,temp); // 
	    }
            else
            {
              generateClassOrGlobalLink(*g_code,temp.data());
            }
          }
          else                                                                          
	  {
          if (!checkString(temp))
            g_code->codify(temp.data());
	  }
        }
        temp.resize(0);
        found=FALSE;
      }

      char cc[2];
      cc[0]=c;
      cc[1]=0;
      g_code->codify(cc);
    }
    else
    {
      found=TRUE;
      temp+=c;
    }
  } // for

  if (!temp.isEmpty())
  {
    if (!writeColoredWord(temp))
    {
      if (!tclass.isEmpty())
      {
        if (!classLink)
        {
          writeWord(temp.data());
       //   generateMemLink(*g_code,tclass,temp); // generateMemLink(*g_code,g_CurrClass,left); 
        }
        else
        {
          generateClassOrGlobalLink(*g_code,temp.data());
        }
      }
      else                 
      {
         QCString qc(temp.data());
         if (VhdlDocGen::isNumber(qc)){
                         startFontClass("vhdllogic");
                         g_code->codify(temp.data());
                         endFontClass();
                              }
         else     
        g_code->codify(temp.data());
      }
    }
  }
}// writeWord

static void buildKeyMap()
{
	int j=0;
    verilogGlobalDict.setAutoDelete(true);
    verilogKeyDict.setAutoDelete(true);
    verilogDefineDict.setAutoDelete(true);
	qlist.setAutoDelete(true);
	
	
	globalMemberList.setAutoDelete(true);
 
	QCString p=VerilogKewWordMap[0];
    
 	while(!p.isEmpty())
	{
		verilogKeyDict.insert(p,new QCString(p.data()));
    	p=VerilogKewWordMap[++j];	  
	}

	j=0;
    p=VerilogKewWordMap1[0]; 
	while(!p.isEmpty())
	{
		verilogGlobalDict.insert(p,new QCString(p.data()));
    	p=VerilogKewWordMap1[++j];	  
	}

   j=0;
    p=VerilogDefineMap[0]; 
	while(!p.isEmpty())
	{
		verilogDefineDict.insert(p,new QCString(p.data()));
    	p=VerilogDefineMap[++j];	  
	}

}// buildKeypMap



const QCString* VerilogDocGen::findKeyWord(const char *str)
{
    QCString word(str);
	if (word.isEmpty() || word.at(0)=='\0') return 0;
	
	if(verilogKeyDict.find(word))
	  return &g_verilogkeyword;
 
    if(verilogGlobalDict.find(word))
	  return &g_verilogDefinition;
	  
	if(verilogDefineDict.find(word))
	 return &g_verilogDefinition;  
          
   return 0;
}

void writeVerilogFont(const char* col,const char* text)
{
  writeFont(col,text);
}

// writes a coloured word to the  output

static void writeVWord(QCString& qcs){
static bool stripComment=Config_getBool("STRIP_CODE_COMMENTS");
   
  printf("\n 1. write %s...",qcs.data());
  
   if(qcs.isEmpty())return;
    QCString temp=qcs.copy();
	if(qcs.stripPrefix("\n")){
	     codifyLines(temp.data());return;}
	else if(qcs.stripPrefix(" "))
	     {g_code->codify(temp.data()); return;}   
 	if(qcs.stripPrefix("\""))
        {writeFont("keyword",temp.data());return;}
	   if(qcs.stripPrefix("//"))
        {
        if (stripComment && temp.contains(vlogComment))
        {
         yyLineNr+=temp.contains("\n");
	    return;
        }
        else {
		  printf("\n 2. write %s...",temp.data());
          writeFont("keyword",temp.data());
		  }
          return;
       }
    
    if(qcs.stripPrefix("§")){           
        deleteVerilogChars(qcs,"§");
	 deleteVerilogChars(qcs,"²");
			
		   startFontClass("undoc");
			 codifyLines(qcs.data(),0,true);
		  endFontClass();
		 return;					
		}

	if(qcs.stripPrefix("/*!")) 
	 if( stripComment){
		 yyLineNr+=temp.contains("\n");
		 return;					
		}
        else
         qcs.prepend("/*");

	if(qcs.stripPrefix("/*")){
	     startFontClass("keyword");
	     codifyLines(temp.data());
		 endFontClass();
		 return;					
		}
    
     	 if(qcs.stripPrefix("`"))
	     {
	        qcs=temp;
		    if(qcs.stripPrefix("`define"))
		     {
              writeFont("preprocessor","`define");     
              writeInclude(qcs);
              return;
              }
		   
		   if(qcs.stripPrefix("`include"))
		     {
              writeFont("preprocessor","`include");     
              writeInclude(qcs);
              return;
              }
           
               writeFont("preprocessor",qcs.data());     
              return;
		  }//
		  
		   const QCString *ss=VerilogDocGen::findKeyWord(qcs.data());
	      if (ss)
          {writeFont(ss->data(),qcs.data());return;}
   
		   
	   
		   MemberDef* md=findGlobalMember(temp);  
            if(md)
             { 
	         g_code->writeCodeLink(md->getReference(),
	                      md->getOutputFileBase(),
			              md->anchor(),
			              temp.data(),
			              md->briefDescriptionAsTooltip());
              return;
              }
		   
		   
		      QCString  tempClass = getCurrVerilogParsingClass();
		        bool feat=generateVerilogMemLink(tempClass,temp,VerilogDocGen::FEATURE);
		        if(feat) return;
		     /*   
		        if(!feat)
		        {
	             writeWord(qcs.data());	
		         return;
		        }
            */
            
     if(qcs.length()==1)
         {codifyLines(qcs.data());return;}
     if(qcs.stripPrefix("$"))
          writeFont("vhdlkeyword",temp.data());
     else writeWord(temp.data());
	  
}//writeVWord


// writes the rest of the input buffer
void printVerilogBuffer(bool b)
{
  QCString qbuffer;
  uint len=qlist.count();
  for(uint j=0;j<len;j++) {
    QCString *qcs=(QCString*)qlist.at(j);
	writeVWord(*qcs);
        
 }//for
 qlist.clear();
}//printVerilogBuffer


void writePrevVerilogWords(const QCString& qcs){

 uint len=qlist.count();
 uint v=0;
  
  for(uint j=0;j<len;j++) {
    QCString *word=(QCString*)qlist.getFirst();
	printf("\n+++ %s",word->data()); 
//if(qcs.contains("`"))
//	 printVerilogStringList();
	 if(strcmp(qcs.data(),word->data()) != 0)
	  {
      writeVWord(*word);
     qlist.removeFirst();
     }else { 
//	   QCString *wsord=(QCString*)qlist.getFirst();
	  qlist.removeFirst();
	 v=j; 
	 break; 
	 }
   }//for

} // writePrevVerilogWords

// only for debugging 
void printVerilogStringList()
{
  QCString qbuffer;
  int len=qlist.count();
 for(int j=0;j<len;j++) {
    QCString *qcs=(QCString*)qlist.at(j);
	 qbuffer+=qcs->data();
  }
  
  fprintf(stderr,"\n[%s]",qbuffer.data());
}


void codifyVerilogString(char* c,char* color)
{
 if(color==NULL)
  g_code->codify(c);
 else
  writeFont(color,c);
 }

bool  generateVerilogMemLink(QCString &clName,QCString& memberName,int type)
{
 return generateMemLink(*g_code,clName,memberName,type);
}

bool generateVerilogCompMemLink(QCString &cl,QCString& inst,QCString & key, bool b)
{
   MemberDef *md=0;
   md=VerilogDocGen::findInstMember(cl,inst,key,b);
  if(md){ 
    ClassDef *ddd=md->getClassDef();
    QCString nkll=md->getOutputFileBase();
    QCString nklll=ddd->name();
    }
    if (md && md->isLinkable()) // is it a linkable class
    {
   	 if(!cl.isEmpty())
   	 {
   	   writeMultiLineCodeLink(*g_code,md->getReference(),md->getOutputFileBase(),md->anchor(),md->name(),md);
       return true;
     }
  /*  
     if(b && !inst.isEmpty())
     {
       writeMultiLineCodeLink(*g_code,md->getReference(),md->getOutputFileBase(),md->anchor(),inst,md);
       return true;
     }
   */ 
    }
   return false;
}

static bool generateMemLink(CodeOutputInterface &ol,QCString &clName,QCString& memberName,int type)
{
  if(clName.isEmpty() || memberName.isEmpty()) return false; 
  if((memberName.length()==1) && (isalpha(memberName.at(0))==0))
   return false;


  bool isLocal=false;

  MemberDef *md=0;
  if(memberName.contains('`'))
   isLocal=true;


   md=VerilogDocGen::findMember(clName,memberName,type);
  
 //  if(md==0)
 //  md=VerilogDocGen::findMember(clName,memberName,-1);
  
 
  if (md && md->isLinkable()) // is it a linkable class
  {
    addToSearchIndex(memberName);
    if(isLocal) memberName.prepend("`");
	 writeMultiLineCodeLink(ol,md->getReference(),md->getOutputFileBase(),md->anchor(),memberName,md);
   return true;
  }
 
  addToSearchIndex(memberName);

 return false;
}// generateMemLink



static void endCodeLine()
{
  if (g_currentFontClass) { g_code->endFontClass(); }
  g_code->endCodeLine();
}

static void addToSearchIndex(const char *text)
{
   if (Doxygen::searchIndex)
  {
    Doxygen::searchIndex->addWord(text,FALSE);
  }
}


/*! writes a link to a fragment \a text that may span multiple lines, inserting
 * line numbers for each line. If \a text contains newlines, the link will be 
 * split into multiple links with the same destination, one for each line.
 */
static void writeMultiLineCodeLink(CodeOutputInterface &ol,
                  const char *ref,const char *file,
                  const char *anchor,const char *text,Definition *d)
{
   static bool sourceTooltips = Config_getBool("SOURCE_TOOLTIPS");
 
  TooltipManager::instance()->addTooltip(d);

  bool done=FALSE;
  char *p=(char *)text;
   QCString tooltip; 

   if (!sourceTooltips) // fall back to simple "title" tooltips
  {
    tooltip = d->briefDescriptionAsTooltip();
  }
  while (!done)
  {
    char *sp=p;
    char c;
    while ((c=*p++) && c!='\n');
    if (c=='\n')
    {
      yyLineNr++;
      *(p-1)='\0';
     // printf("writeCodeLink(%s,%s,%s,%s)\n",ref,file,anchor,sp);
      ol.writeCodeLink(ref,file,anchor,sp,tooltip);
      endCodeLine();
      if (yyLineNr<g_inputLines) 
      {
	startCodeLine();
      }
    }
    else
    {
    //  printf("writeCodeLink(%s,%s,%s,%s)\n",ref,file,anchor,sp);
      ol.writeCodeLink(ref,file,anchor,sp,0);
      done=TRUE;
    }
  }
}

bool generateVerilogClassOrGlobalLink(char *clName)
{
  return generateClassOrGlobalLink(*g_code,clName,FALSE);
}


static bool generateClassOrGlobalLink(CodeOutputInterface &ol,char *clName, bool typeOnly)
{
  QCString className=QCString(clName);

  if(className.isEmpty()) return false;

  ClassDef *cd=0;
   cd = getClass(className.data()); 
  
  if (cd && cd->isLinkable()) // is it a linkable class
  {
  	  QCString temp=cd->displayName();
	//  ol.linkableSymbol(yyLineNr,temp,cd, g_currentMemberDef ? g_currentMemberDef : g_currentDefinition);
      writeMultiLineCodeLink(ol,cd->getReference(),cd->getOutputFileBase(),0,temp,cd);
      addToSearchIndex(className);
   return true;
  }
 return false;
}// generateClassOrGLink  


static void startFontClass(const char *s)
{
  if(s==NULL) return;
  g_code->startFontClass(s);
  g_currentFontClass=s;
}

static void writeFont(const char *s,const char* text)
{
  if(s==NULL) return;
  g_code->startFontClass(s);
  g_code->codify(text);
  g_code->endFontClass();
}



/*! counts the number of lines in the input */
static int countLines()
{
  const char *p=inputVerilogString.data();
  char c;
  int count=1;
  while ((c=*p)) 
  { 
    p++ ; 
    if (c=='\n') count++;  
  }
  if (p>g_inputString && *(p-1)!='\n') 
  { // last line does not end with a \n, so we add an extra
    // line and explicitly terminate the line after parsing.
    count++, 
    g_needsTermination=TRUE; 
  } 
  return count;
}

/*! writes a word to the output. 
 *  If curr_class is defined, the word belongs to a class
 *  and will be linked.
 */

static void writeWord(char *word,char* curr_class)
{
   if(word==NULL)return;
   const QCString *ss=VerilogDocGen::findKeyWord(word);
   if(ss)
     writeFont(ss->data(),word);
   else{ 
   QCString w(word);
   if(!checkString(w))
   g_code->codify(word);
   } 
  return;
}// writeWord



/*! write a code fragment `text' that may span multiple lines, inserting
 * line numbers for each line.
 */
static void codifyLines(char *text,char *cl,bool undoc)
{
 // printf("codifyLines(%d,\"%d\")\n",yyLineNr,strlen(text));
  if(text==NULL) return;
  char *p=text,*sp=p;
  char c;
  bool done=FALSE;
  while (!done)
  {
    sp=p;
    while ((c=*p++) && c!='\n');
    if (c=='\n')
    {
      yyLineNr++;
      *(p-1)='\0';
     if(!undoc) 
       writeWord(sp,cl);
	 else 
	  g_code->codify(sp);
	  endCodeLine();
      if (yyLineNr<g_inputLines) 
      {
    	startCodeLine();
      }
    }
    else
    {
      writeWord(sp,cl);
	  done=TRUE;
    }
  }
}


static void setCurrentDoc(QCString &anchor)
{
  if (Doxygen::searchIndex)
  {
    if (g_searchCtx)
    {
      Doxygen::searchIndex->setCurrentDoc(g_searchCtx,g_searchCtx->anchor(),FALSE);
    }
    else
    {
      Doxygen::searchIndex->setCurrentDoc(g_sourceFileDef,anchor,TRUE);
    }
  }
 }
 
/*! start a new line of code, inserting a line number if g_sourceFileDef
 * is TRUE. If a definition starts at the current line, then the line
 * number is linked to the documentation of that definition.
 */
static void startCodeLine()
{
  //if (g_currentFontClass) { g_code->endFontClass(); }

bool isLine;
if(ss1>ee1)
  isLine=true;
  else
isLine=false; 
  
  if (g_sourceFileDef)
  {
   //  if((yyLineNr % 500) == 0) 
	// fprintf(stderr,"\r parsing line %d:",yyLineNr);
    Definition *d   = g_sourceFileDef->getSourceDefinition(yyLineNr);
   // printf("startCodeLine %d d=%s\n", yyLineNr,d ? d->name().data() : "<null>");
    if (!g_includeCodeFragment && d)
    {
      g_currentDefinition = d;
      g_currentMemberDef = g_sourceFileDef->getSourceMember(yyLineNr);
      if(!g_tempComp.isEmpty() && g_currentMemberDef )
	  {
      //  ClassDef *cf=VhdlDocGen::getClass(g_tempComp.data());
	    QCString nn=g_currentMemberDef->name();
		MemberDef* mdeff=VhdlDocGen::findMember(g_tempComp,nn);
		if(mdeff)
          g_currentMemberDef=mdeff;
	  
	  }
       
       QCString lineAnchor;
      lineAnchor.sprintf("l%05d",yyLineNr);
      if (g_currentMemberDef)
      {
     	g_code->writeLineNumber(g_currentMemberDef->getReference(),
	                        g_currentMemberDef->getOutputFileBase(),
	                        g_currentMemberDef->anchor(),yyLineNr);
        setCurrentDoc( lineAnchor);
      }
      else if (d->isLinkableInProject())
      {
        g_code->writeLineNumber(d->getReference(),
	                        d->getOutputFileBase(),
	                        0,yyLineNr);
        setCurrentDoc(lineAnchor);
      }
    }
    else
    {
      g_code->writeLineNumber(0,0,0,yyLineNr);
    }
  }
  g_code->startCodeLine(yyLineNr); 
  if (g_currentFontClass)
  {
    g_code->startFontClass(g_currentFontClass);
  }
}


static void endFontClass()
{
  if (g_currentFontClass)
  {
    g_code->endFontClass();
    g_currentFontClass=0;
  }
}

//---------------------------------------------------------------

static void addText(char* c,int len);
static void addToken(char c);
static int startLex();
static void resetScanner(const char* s,MyParserConv* parse);



#undef	YY_INPUT
#define	YY_INPUT(buf,result,max_size) result=verilogscannerYYread(buf,max_size);


static int verilogscannerYYread(char *buf,int max_size)
{
 int c=0;
  while ( c < max_size && inputVerilogString.at(inputPosition) )
  {
    *buf = inputVerilogString.at(inputPosition++) ;
    c++; buf++;
  }
  
  return c;
}

// checks if we have found a correct parsed word or
// part of a word like (reg)ister
static bool check(bool bb=true)
{
  char c=yy_hold_char;
 
  if(iSize==0){
   if(g_parseCode){
      qlist.append(new QCString(verilogscannerYYtext)); 
  }
  return true;
 }
 
/* 
 QCString qt(verilogscannerYYtext);
 qt=qt.lower();

 if(strcmp(qt.data(),verilogscannerYYtext)!=0)
  return false;
 */
  char d = g_buf[iSize-1];
  int l=isdigit(c);
  int k=isdigit(d);

  if(k!=0 || l!=0 || d=='$') return false;

  l=islower(c);
  k=islower(d);

  if(k!=0 || l!=0) 
    return false;

  l=isupper(c);
  k=isupper(d);

  if(k!=0 || l!=0) 
    return false;

  if(c=='_' || d=='_') return false;
  					               
  if(g_parseCode){
   qlist.append(new QCString(verilogscannerYYtext));
  }

 

  return true;
}

static void parseToken(const char* s){
     if(g_parseCode)    
	 qlist.append(new QCString(verilogscannerYYtext));
	 c_lval.ctype=s[0];
	 addToken(s[0]);
	}


/* --CopyLine>"\\"\r?/\n			{ // strip line continuation characters------------ VERLIOG SECTION -----------------------------------*/
/*
language parsing states 
*/








#line 3076 "verilogscanner.cpp"

#define INITIAL 0
#define Start 1
#define Commentt 2
#define FindBegin 3
#define StartComment 4
#define tagComment 5
#define directive 6
#define specc 7
#define EndOfText 8

#ifndef YY_NO_UNISTD_H
/* Special case for "unistd.h", since it is non-ANSI. We include it way
 * down here because we want the user's section 1 to have been scanned first.
 * The user has a chance to override it with an option.
 */
/* %if-c-only */
#include <unistd.h>
/* %endif */
/* %if-c++-only */
/* %endif */
#endif
    
#ifndef YY_EXTRA_TYPE
#define YY_EXTRA_TYPE void *
#endif

/* %if-c-only Reentrant structure and macros (non-C++). */
/* %if-reentrant */
/* %if-c-only */

static int yy_init_globals (void );

/* %endif */
/* %if-reentrant */
/* %endif */
/* %endif End reentrant structures and macros. */

/* Accessor methods to globals.
   These are made visible to non-reentrant scanners for convenience. */

int verilogscannerYYlex_destroy (void );

int verilogscannerYYget_debug (void );

void verilogscannerYYset_debug (int debug_flag  );

YY_EXTRA_TYPE verilogscannerYYget_extra (void );

void verilogscannerYYset_extra (YY_EXTRA_TYPE user_defined  );

FILE *verilogscannerYYget_in (void );

void verilogscannerYYset_in  (FILE * in_str  );

FILE *verilogscannerYYget_out (void );

void verilogscannerYYset_out  (FILE * out_str  );

yy_size_t verilogscannerYYget_leng (void );

char *verilogscannerYYget_text (void );

int verilogscannerYYget_lineno (void );

void verilogscannerYYset_lineno (int line_number  );

/* %if-bison-bridge */
/* %endif */

/* Macros after this point can all be overridden by user definitions in
 * section 1.
 */

#ifndef YY_SKIP_YYWRAP
#ifdef __cplusplus
extern "C" int verilogscannerYYwrap (void );
#else
extern int verilogscannerYYwrap (void );
#endif
#endif

/* %not-for-header */

    static void yyunput (int c,char *buf_ptr  );
    
/* %ok-for-header */

/* %endif */

#ifndef yytext_ptr
static void yy_flex_strncpy (char *,yyconst char *,int );
#endif

#ifdef YY_NEED_STRLEN
static int yy_flex_strlen (yyconst char * );
#endif

#ifndef YY_NO_INPUT
/* %if-c-only Standard (non-C++) definition */
/* %not-for-header */

#ifdef __cplusplus
static int yyinput (void );
#else
static int input (void );
#endif
/* %ok-for-header */

/* %endif */
#endif

/* %if-c-only */

/* %endif */

/* Amount of stuff to slurp up with each read. */
#ifndef YY_READ_BUF_SIZE
#define YY_READ_BUF_SIZE 8192
#endif

/* Copy whatever the last rule matched to the standard output. */
#ifndef ECHO
/* %if-c-only Standard (non-C++) definition */
/* This used to be an fputs(), but since the string might contain NUL's,
 * we now use fwrite().
 */
#define ECHO do { if (fwrite( verilogscannerYYtext, verilogscannerYYleng, 1, verilogscannerYYout )) {} } while (0)
/* %endif */
/* %if-c++-only C++ definition */
/* %endif */
#endif

/* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
 * is returned in "result".
 */
#ifndef YY_INPUT
#define YY_INPUT(buf,result,max_size) \
/* %% [5.0] fread()/read() definition of YY_INPUT goes here unless we're doing C++ \ */\
	if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
		{ \
		int c = '*'; \
		size_t n; \
		for ( n = 0; n < max_size && \
			     (c = getc( verilogscannerYYin )) != EOF && c != '\n'; ++n ) \
			buf[n] = (char) c; \
		if ( c == '\n' ) \
			buf[n++] = (char) c; \
		if ( c == EOF && ferror( verilogscannerYYin ) ) \
			YY_FATAL_ERROR( "input in flex scanner failed" ); \
		result = n; \
		} \
	else \
		{ \
		errno=0; \
		while ( (result = fread(buf, 1, max_size, verilogscannerYYin))==0 && ferror(verilogscannerYYin)) \
			{ \
			if( errno != EINTR) \
				{ \
				YY_FATAL_ERROR( "input in flex scanner failed" ); \
				break; \
				} \
			errno=0; \
			clearerr(verilogscannerYYin); \
			} \
		}\
\
/* %if-c++-only C++ definition \ */\
/* %endif */

#endif

/* No semi-colon after return; correct usage is to write "yyterminate();" -
 * we don't want an extra ';' after the "return" because that will cause
 * some compilers to complain about unreachable statements.
 */
#ifndef yyterminate
#define yyterminate() return YY_NULL
#endif

/* Number of entries by which start-condition stack grows. */
#ifndef YY_START_STACK_INCR
#define YY_START_STACK_INCR 25
#endif

/* Report a fatal error. */
#ifndef YY_FATAL_ERROR
/* %if-c-only */
#define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
/* %endif */
/* %if-c++-only */
/* %endif */
#endif

/* %if-tables-serialization structures and prototypes */
/* %not-for-header */

/* %ok-for-header */

/* %not-for-header */

/* %tables-yydmap generated elements */
/* %endif */
/* end tables serialization structures and prototypes */

/* %ok-for-header */

/* Default declaration of generated scanner - a define so the user can
 * easily add parameters.
 */
#ifndef YY_DECL
#define YY_DECL_IS_OURS 1
/* %if-c-only Standard (non-C++) definition */

extern int verilogscannerYYlex (void);

#define YY_DECL int verilogscannerYYlex (void)
/* %endif */
/* %if-c++-only C++ definition */
/* %endif */
#endif /* !YY_DECL */

/* Code executed at the beginning of each rule, after verilogscannerYYtext and verilogscannerYYleng
 * have been set up.
 */
#ifndef YY_USER_ACTION
#define YY_USER_ACTION
#endif

/* Code executed at the end of each rule. */
#ifndef YY_BREAK
#define YY_BREAK break;
#endif

/* %% [6.0] YY_RULE_SETUP definition goes here */
#define YY_RULE_SETUP \
	YY_USER_ACTION

/* %not-for-header */

/** The main scanner function which does all the work.
 */
YY_DECL
{
	register yy_state_type yy_current_state;
	register char *yy_cp, *yy_bp;
	register int yy_act;
    
/* %% [7.0] user's declarations go here */
#line 1146 "verilogscanner.l"


#line 3329 "verilogscanner.cpp"

	if ( !(yy_init) )
		{
		(yy_init) = 1;

#ifdef YY_USER_INIT
		YY_USER_INIT;
#endif

        /* Create the reject buffer large enough to save one state per allowed character. */
        if ( ! (yy_state_buf) )
            (yy_state_buf) = (yy_state_type *)verilogscannerYYalloc(YY_STATE_BUF_SIZE  );
            if ( ! (yy_state_buf) )
                YY_FATAL_ERROR( "out of dynamic memory in verilogscannerYYlex()" );

		if ( ! (yy_start) )
			(yy_start) = 1;	/* first start state */

		if ( ! verilogscannerYYin )
/* %if-c-only */
			verilogscannerYYin = stdin;
/* %endif */
/* %if-c++-only */
/* %endif */

		if ( ! verilogscannerYYout )
/* %if-c-only */
			verilogscannerYYout = stdout;
/* %endif */
/* %if-c++-only */
/* %endif */

		if ( ! YY_CURRENT_BUFFER ) {
			verilogscannerYYensure_buffer_stack ();
			YY_CURRENT_BUFFER_LVALUE =
				verilogscannerYY_create_buffer(verilogscannerYYin,YY_BUF_SIZE );
		}

		verilogscannerYY_load_buffer_state( );
		}

	while ( 1 )		/* loops until end-of-file is reached */
		{
/* %% [8.0] yymore()-related code goes here */
		(yy_more_len) = 0;
		if ( (yy_more_flag) )
			{
			(yy_more_len) = (yy_c_buf_p) - (yytext_ptr);
			(yy_more_flag) = 0;
			}
		yy_cp = (yy_c_buf_p);

		/* Support of verilogscannerYYtext. */
		*yy_cp = (yy_hold_char);

		/* yy_bp points to the position in yy_ch_buf of the start of
		 * the current run.
		 */
		yy_bp = yy_cp;

/* %% [9.0] code to set up and find next match goes here */
		yy_current_state = (yy_start);

		(yy_state_ptr) = (yy_state_buf);
		*(yy_state_ptr)++ = yy_current_state;

yy_match:
		do
			{
			register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
				{
				yy_current_state = (int) yy_def[yy_current_state];
				if ( yy_current_state >= 1077 )
					yy_c = yy_meta[(unsigned int) yy_c];
				}
			yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
			*(yy_state_ptr)++ = yy_current_state;
			++yy_cp;
			}
		while ( yy_base[yy_current_state] != 3852 );

yy_find_action:
/* %% [10.0] code to find the action number goes here */
		yy_current_state = *--(yy_state_ptr);
		(yy_lp) = yy_accept[yy_current_state];
find_rule: /* we branch to this label when backing up */
		for ( ; ; ) /* until we find what rule we matched */
			{
			if ( (yy_lp) && (yy_lp) < yy_accept[yy_current_state + 1] )
				{
				yy_act = yy_acclist[(yy_lp)];
				if ( yy_act & YY_TRAILING_HEAD_MASK ||
				     (yy_looking_for_trail_begin) )
					{
					if ( yy_act == (yy_looking_for_trail_begin) )
						{
						(yy_looking_for_trail_begin) = 0;
						yy_act &= ~YY_TRAILING_HEAD_MASK;
						break;
						}
					}
				else if ( yy_act & YY_TRAILING_MASK )
					{
					(yy_looking_for_trail_begin) = yy_act & ~YY_TRAILING_MASK;
					(yy_looking_for_trail_begin) |= YY_TRAILING_HEAD_MASK;
					(yy_full_match) = yy_cp;
					(yy_full_state) = (yy_state_ptr);
					(yy_full_lp) = (yy_lp);
					}
				else
					{
					(yy_full_match) = yy_cp;
					(yy_full_state) = (yy_state_ptr);
					(yy_full_lp) = (yy_lp);
					break;
					}
				++(yy_lp);
				goto find_rule;
				}
			--yy_cp;
			yy_current_state = *--(yy_state_ptr);
			(yy_lp) = yy_accept[yy_current_state];
			}

		YY_DO_BEFORE_ACTION;

/* %% [11.0] code for verilogscannerYYlineno update goes here */

do_action:	/* This label is used only to access EOF actions. */

/* %% [12.0] debug code goes here */
		if ( verilogscannerYY_flex_debug )
			{
			if ( yy_act == 0 )
				fprintf( stderr, "--scanner backing up\n" );
			else if ( yy_act < 150 )
				fprintf( stderr, "--accepting rule at line %ld (\"%s\")\n",
				         (long)yy_rule_linenum[yy_act], verilogscannerYYtext );
			else if ( yy_act == 150 )
				fprintf( stderr, "--accepting default rule (\"%s\")\n",
				         verilogscannerYYtext );
			else if ( yy_act == 151 )
				fprintf( stderr, "--(end of buffer or a NUL)\n" );
			else
				fprintf( stderr, "--EOF (start condition %d)\n", YY_START );
			}

		switch ( yy_act )
	{ /* beginning of action switch */
/* %% [13.0] actions go here */
case 1:
YY_RULE_SETUP
#line 1148 "verilogscanner.l"
{
    BEGIN(Start);  
	}
	YY_BREAK
case 2:
YY_RULE_SETUP
#line 1154 "verilogscanner.l"
{
                   if(yy_hold_char=='\\')
                   {
                    if(g_parseCode) 
                      qlist.append(new QCString(verilogscannerYYtext));
                    else
                    {
                        addText(verilogscannerYYtext,verilogscannerYYleng);
                     }
                     BEGIN(EndOfText);
                    }
                     else
                     {
                      if(!g_parseCode)
                      { 
                       QCString s=verilogscannerYYtext;
                       addText(verilogscannerYYtext,verilogscannerYYleng);
                       parseGlobalMember();
                       vbufreset();
                      }
                     else{
                          qlist.append(new QCString(verilogscannerYYtext));
                         }
                      BEGIN(Start);
                    }
                    }
	YY_BREAK
case 3:
YY_RULE_SETUP
#line 1181 "verilogscanner.l"
{ 
                 if(g_parseCode)
                  { 
                      char c=yy_hold_char;
                      qlist.append(new QCString("\\"));
                      if(yy_hold_char==32)
                      qlist.append(new QCString("\n"));
                   }
                      else{
                           addText(verilogscannerYYtext,verilogscannerYYleng);
                          // if(yy_hold_char==10)
                          //      addText("?",1);
                           if(yy_hold_char==32)
                           yyLineNr++;
                          }
                 }
	YY_BREAK
case 4:
/* rule 4 can match eol */
YY_RULE_SETUP
#line 1199 "verilogscanner.l"
{// grey out undefined code
                    QCString uu(verilogscannerYYtext);
                    if(g_parseCode)
                    {
                    //  fprintf(stderr,"\n%s",uu.data());
                      qlist.append(new QCString(verilogscannerYYtext));
                    }
                 }   
	YY_BREAK
case 5:
YY_RULE_SETUP
#line 1210 "verilogscanner.l"
{ 
              //    fprintf(stderr,"<[ %s ]>",verilogscannerYYtext);
				   QCString q(verilogscannerYYtext);
                   defineLineContinue=yyLineNr;
				    vbufreset();  
				   if(!g_parseCode)
				   {
				    addText(verilogscannerYYtext,verilogscannerYYleng);
				    uint le=q.length()-1;
				    if(q.at(le)=='\\')
				    {			  
				    addText("?",1);
				     BEGIN(EndOfText); 
				    } else{
                     parseGlobalMember();
                     vbufreset();
                     }
                   }
 
                 if(g_parseCode) 
                 {
                    //  VhdlDocGen::deleteAllChars(q,'§');                                              
                      uint le=q.length()-1;
                      bool newLine=(q.at(le)=='\\');
                      QCString com=checkComment(q);
                     // qlist.append(new QCString(q.data())); 
                      if(!q.contains("`include"))
                       composeString(q);
                      else
                        qlist.append(new QCString(q.data()));
                      if(!com.isEmpty())
                         qlist.append(new QCString(com.data())); 
                    
                     
				      if(newLine)
				      {
				      BEGIN(EndOfText); 
				      }               
                  }//if
                 }       
	YY_BREAK
case 6:
YY_RULE_SETUP
#line 1252 "verilogscanner.l"
{
				    QCString s(verilogscannerYYtext);
				    s=s.stripWhiteSpace();
				    int j=s.find(" ");
				    if(j>0)
				      s=s.left(j);
				    
				    
				    QCString s1=s;
				    DefineDict* gDict=VerilogPreProc::getFileDefineDict();
				    VhdlDocGen::deleteAllChars(s,'`');
				
				    Define *def=gDict->find(s);
					 
				 	if(g_parseCode)
				 	{
                      QCString *yy=0;
                     if(Config_getBool("MACRO_EXPANSION") && def)
                     {
                        yy=new QCString(def->definition.data());
                      //   VhdlDocGen::deleteAllChars(*yy,'"');   
                     } 
                      else   
                        yy=new QCString(verilogscannerYYtext);
                      c_lval.cstr[0]='\0';                                                   
                     qlist.append(yy);
                    }
                    else{
                 //   s.stripPrefix("`");
					if(!verilogDefineDict.find(s1))
					{            
					if(!g_parseCode)
					 addText(verilogscannerYYtext,verilogscannerYYleng);
				    }
				  	
				  	// if(!def) && !def->definition.isEmpty())
					// if(Config_getBool("WARNINGS"))
					//  warn(yyFileName,yyLineNr,"\n macro %s is not defined",verilogscannerYYtext);		  
							
							if(!verilogDefineDict.find(s1)) 
							  return  LETTER_TOK;	
				
					}
               }
	YY_BREAK
case 7:
YY_RULE_SETUP
#line 1297 "verilogscanner.l"
{if(check())      return  IFNONE_TOK;REJECT;}
	YY_BREAK
case 8:
YY_RULE_SETUP
#line 1298 "verilogscanner.l"
{if(check()) {yyPrevLine=yyLineNr;addText(verilogscannerYYtext,verilogscannerYYleng); return  REALTIME_TOK;}REJECT;}
	YY_BREAK
case 9:
YY_RULE_SETUP
#line 1299 "verilogscanner.l"
{if(check())      return  DESIGN_TOK;REJECT;}
	YY_BREAK
case 10:
/* rule 10 can match eol */
YY_RULE_SETUP
#line 1300 "verilogscanner.l"
{ parseLib(verilogscannerYYtext);return LIBRARY_TOK; }
	YY_BREAK
case 11:
YY_RULE_SETUP
#line 1301 "verilogscanner.l"
{if(check())      return  CONFIG_TOK;REJECT;}
	YY_BREAK
case 12:
YY_RULE_SETUP
#line 1302 "verilogscanner.l"
{ if(check()){return  ENDCONFIG_TOK;} REJECT;}
	YY_BREAK
case 13:
YY_RULE_SETUP
#line 1303 "verilogscanner.l"
{if(check())      return  INCLUDE_TOK;REJECT;}
	YY_BREAK
case 14:
YY_RULE_SETUP
#line 1304 "verilogscanner.l"
{if(check())      return  USE_TOK;REJECT;}
	YY_BREAK
case 15:
YY_RULE_SETUP
#line 1305 "verilogscanner.l"
{ if(check())     return  LIBLIST_TOK;REJECT;}
	YY_BREAK
case 16:
YY_RULE_SETUP
#line 1306 "verilogscanner.l"
{if(check())      return  INSTANCE_TOK;REJECT;}
	YY_BREAK
case 17:
YY_RULE_SETUP
#line 1307 "verilogscanner.l"
{ if(check())     return  CELL_TOK;REJECT;}
	YY_BREAK
case 18:
YY_RULE_SETUP
#line 1308 "verilogscanner.l"
{if(check())      return  SHOWCANCEL_TOK;REJECT;}
	YY_BREAK
case 19:
YY_RULE_SETUP
#line 1309 "verilogscanner.l"
{ if(check())     return  NOSHOWCANCEL_TOK;REJECT;}
	YY_BREAK
case 20:
YY_RULE_SETUP
#line 1310 "verilogscanner.l"
{if(check())      return  PULSEONE_EVENT_TOK;REJECT;}
	YY_BREAK
case 21:
YY_RULE_SETUP
#line 1311 "verilogscanner.l"
{ if(check())     return  PULSEON_DETECT_TOK;REJECT;}
	YY_BREAK
case 22:
YY_RULE_SETUP
#line 1312 "verilogscanner.l"
{if(check())      return  EDGE_TOK;REJECT;}
	YY_BREAK
case 23:
YY_RULE_SETUP
#line 1313 "verilogscanner.l"
{if(check())      return  NEGEDGE_TOK;REJECT;}
	YY_BREAK
case 24:
YY_RULE_SETUP
#line 1314 "verilogscanner.l"
{ if(check()){return  POSEDGE_TOK;} REJECT;}
	YY_BREAK
case 25:
YY_RULE_SETUP
#line 1315 "verilogscanner.l"
{if(check())      return  FULLSKEW_TOK;REJECT;}
	YY_BREAK
case 26:
YY_RULE_SETUP
#line 1316 "verilogscanner.l"
{if(check())      return  RECREM_TOK;REJECT;}
	YY_BREAK
case 27:
YY_RULE_SETUP
#line 1317 "verilogscanner.l"
{if(check())      return  REMOVAL_TOK;REJECT;}
	YY_BREAK
case 28:
YY_RULE_SETUP
#line 1318 "verilogscanner.l"
{if(check())      return  TIMESKEW_TOK;REJECT;}
	YY_BREAK
case 29:
YY_RULE_SETUP
#line 1319 "verilogscanner.l"
{if(check())      return  NOCHANGE_TOK;REJECT;}
	YY_BREAK
case 30:
YY_RULE_SETUP
#line 1320 "verilogscanner.l"
{if(check())      return  DHOLD_TOK;REJECT;}
	YY_BREAK
case 31:
YY_RULE_SETUP
#line 1321 "verilogscanner.l"
{ if(check())     return  DSETUP_TOK;REJECT;}
	YY_BREAK
case 32:
YY_RULE_SETUP
#line 1322 "verilogscanner.l"
{if(check())   return  DSETUPHOLD_TOK;REJECT;}
	YY_BREAK
case 33:
YY_RULE_SETUP
#line 1323 "verilogscanner.l"
{if(check())    return  DRECOVERY_TOK;REJECT;}
	YY_BREAK
case 34:
YY_RULE_SETUP
#line 1324 "verilogscanner.l"
{if(check())    return  DSKEW_TOK;REJECT;}
	YY_BREAK
case 35:
YY_RULE_SETUP
#line 1325 "verilogscanner.l"
{if(check())    return  DWIDTH_TOK;REJECT;}
	YY_BREAK
case 36:
YY_RULE_SETUP
#line 1326 "verilogscanner.l"
{if(check())    return  DPERIOD_TOK;REJECT;}
	YY_BREAK
case 37:
YY_RULE_SETUP
#line 1327 "verilogscanner.l"
{ if(check()){yyPrevLine=yyLineNr; addText(verilogscannerYYtext,verilogscannerYYleng);  return  TIME_TOK;} REJECT; }
	YY_BREAK
case 38:
YY_RULE_SETUP
#line 1328 "verilogscanner.l"
{if(check())    return  SPECPARAM_TOK;REJECT;}
	YY_BREAK
case 39:
YY_RULE_SETUP
#line 1329 "verilogscanner.l"
{if(check())   return  ENDSPECIFY_TOK;REJECT;}
	YY_BREAK
case 40:
YY_RULE_SETUP
#line 1330 "verilogscanner.l"
{  if(check())   return  SPECIFY_TOK;REJECT;}
	YY_BREAK
case 41:
YY_RULE_SETUP
#line 1331 "verilogscanner.l"
{ if(check()) {   yyEndLine=yyLineNr;  strncpy(c_lval.cstr,verilogscannerYYtext,verilogscannerYYleng);c_lval.cstr[verilogscannerYYleng]='\0';return  END_TOK;}REJECT;}
	YY_BREAK
case 42:
YY_RULE_SETUP
#line 1332 "verilogscanner.l"
{if(check(false))  return  BEGIN_TOK; REJECT;}
	YY_BREAK
case 43:
YY_RULE_SETUP
#line 1333 "verilogscanner.l"
{if(check(false))  return  FORK_TOK; REJECT;}
	YY_BREAK
case 44:
YY_RULE_SETUP
#line 1334 "verilogscanner.l"
{ if(check())     return  GENERATE_TOK;REJECT;}
	YY_BREAK
case 45:
YY_RULE_SETUP
#line 1335 "verilogscanner.l"
{ if(check())     return  ENDGENERATE_TOK;REJECT;}
	YY_BREAK
case 46:
YY_RULE_SETUP
#line 1336 "verilogscanner.l"
{ if(check())     return  GENVAR_TOK;REJECT;}
	YY_BREAK
case 47:
YY_RULE_SETUP
#line 1337 "verilogscanner.l"
{ if(check())     return  DEFAULT_TOK;REJECT;}
	YY_BREAK
case 48:
YY_RULE_SETUP
#line 1338 "verilogscanner.l"
{ if(check()){ addText(verilogscannerYYtext,verilogscannerYYleng);     return  AUTO_TOK;}REJECT;}
	YY_BREAK
case 49:
YY_RULE_SETUP
#line 1339 "verilogscanner.l"
{ if(check()){ yyPrevLine=yyLineNr; addText(verilogscannerYYtext,verilogscannerYYleng);    return  SIGNED_TOK;}REJECT;}
	YY_BREAK
case 50:
YY_RULE_SETUP
#line 1340 "verilogscanner.l"
{ if(check())     return  DEFAULT_TOK;REJECT;}
	YY_BREAK
case 51:
YY_RULE_SETUP
#line 1341 "verilogscanner.l"
{ if(check())     return  ENDCASE_TOK;REJECT;}
	YY_BREAK
case 52:
YY_RULE_SETUP
#line 1342 "verilogscanner.l"
{ if(check())    return  ELSE_TOK; REJECT;}
	YY_BREAK
case 53:
YY_RULE_SETUP
#line 1343 "verilogscanner.l"
{ if(check())    return  WHILE_TOK; REJECT;}
	YY_BREAK
case 54:
YY_RULE_SETUP
#line 1344 "verilogscanner.l"
{ if(check())    return  REPEAT_TOK;REJECT;}
	YY_BREAK
case 55:
YY_RULE_SETUP
#line 1345 "verilogscanner.l"
{ if(check())    return  FOREVER_TOK;REJECT;}
	YY_BREAK
case 56:
YY_RULE_SETUP
#line 1346 "verilogscanner.l"
{ if(check())    return  CASEZ_TOK; REJECT;}
	YY_BREAK
case 57:
YY_RULE_SETUP
#line 1347 "verilogscanner.l"
{ if(check())    return  CASEX_TOK;REJECT;}
	YY_BREAK
case 58:
YY_RULE_SETUP
#line 1348 "verilogscanner.l"
{ if(check())    return  CASE_TOK;REJECT;}
	YY_BREAK
case 59:
YY_RULE_SETUP
#line 1349 "verilogscanner.l"
{ if(check())    return  IF_TOK;REJECT;}
	YY_BREAK
case 60:
YY_RULE_SETUP
#line 1350 "verilogscanner.l"
{ if(check())    return  DISABLE_TOK;REJECT;}
	YY_BREAK
case 61:
YY_RULE_SETUP
#line 1351 "verilogscanner.l"
{ if(check())    return  DEASSIGN_TOK;REJECT;}
	YY_BREAK
case 62:
YY_RULE_SETUP
#line 1352 "verilogscanner.l"
{ if(check())    return  RELEASE_TOK; REJECT;}
	YY_BREAK
case 63:
YY_RULE_SETUP
#line 1353 "verilogscanner.l"
{ if(check())    return  FORCE_TOK; REJECT; }
	YY_BREAK
case 64:
YY_RULE_SETUP
#line 1354 "verilogscanner.l"
{ if(check())    return  WAIT_TOK; REJECT;}
	YY_BREAK
case 65:
YY_RULE_SETUP
#line 1355 "verilogscanner.l"
{ if(check())    return  JOIN_TOK; REJECT;}
	YY_BREAK
case 66:
YY_RULE_SETUP
#line 1356 "verilogscanner.l"
{ if(check())    return  FOR_TOK; REJECT;}
	YY_BREAK
case 67:
YY_RULE_SETUP
#line 1357 "verilogscanner.l"
{ if(check()) {  yyPrevLine=yyLineNr;  return  ALWAYS_TOK;}REJECT;}
	YY_BREAK
case 68:
YY_RULE_SETUP
#line 1358 "verilogscanner.l"
{ if(check()){yyPrevLine=yyLineNr;  return  ENDFUNC_TOK;} REJECT;}
	YY_BREAK
case 69:
YY_RULE_SETUP
#line 1359 "verilogscanner.l"
{ if(check()){yyPrevLine=yyLineNr;  return  FUNC_TOK;} REJECT;}
	YY_BREAK
case 70:
YY_RULE_SETUP
#line 1360 "verilogscanner.l"
{ if(check()){yyPrevLine=yyLineNr;  return  ENDTASK_TOK;}REJECT;}
	YY_BREAK
case 71:
YY_RULE_SETUP
#line 1361 "verilogscanner.l"
{ if(check()){yyPrevLine=yyLineNr;  return  TASK_TOK;} REJECT;}
	YY_BREAK
case 72:
YY_RULE_SETUP
#line 1362 "verilogscanner.l"
{ if(check())  return  TABLE_TOK; REJECT;}
	YY_BREAK
case 73:
YY_RULE_SETUP
#line 1363 "verilogscanner.l"
{ if(check())  return  ENDTABLE_TOK; REJECT;}
	YY_BREAK
case 74:
YY_RULE_SETUP
#line 1364 "verilogscanner.l"
{ if(check()) {return  INITIAL_TOK;} REJECT;}
	YY_BREAK
case 75:
YY_RULE_SETUP
#line 1365 "verilogscanner.l"
{ if(check())  return  ENDPRIMITIVE_TOK;REJECT;}
	YY_BREAK
case 76:
YY_RULE_SETUP
#line 1366 "verilogscanner.l"
{ if(check()){yyPrevLine=yyLineNr;  return  PRIMITIVE_TOK;} REJECT;}
	YY_BREAK
case 77:
YY_RULE_SETUP
#line 1367 "verilogscanner.l"
{ if(check())  return  MACRO_MODUL_TOK; REJECT;}
	YY_BREAK
case 78:
YY_RULE_SETUP
#line 1368 "verilogscanner.l"
{    if(check())      {  yyPrevLine=yyLineNr;return  MODUL_TOK; } REJECT;}
	YY_BREAK
case 79:
YY_RULE_SETUP
#line 1369 "verilogscanner.l"
{ 
           if(check())
            {
            //  yyEndModLine=yyLineNr+yyEndModLine1;  
              return  ENDMODUL_TOK;
             }REJECT;
             }
	YY_BREAK
case 80:
YY_RULE_SETUP
#line 1376 "verilogscanner.l"
{ if(check()) {yyPrevLine=yyLineNr; addText(verilogscannerYYtext,verilogscannerYYleng);return  REG_TOK; } REJECT;}
	YY_BREAK
case 81:
YY_RULE_SETUP
#line 1377 "verilogscanner.l"
{ if(check()) {yyPrevLine=yyLineNr; addText(verilogscannerYYtext,verilogscannerYYleng);return  INTEGER_TOK;}REJECT;}
	YY_BREAK
case 82:
YY_RULE_SETUP
#line 1378 "verilogscanner.l"
{ if(check()) return  DEFPARAM_TOK; REJECT;}
	YY_BREAK
case 83:
YY_RULE_SETUP
#line 1379 "verilogscanner.l"
{ if(check()) {yyPrevLine=yyLineNr; addText(verilogscannerYYtext,verilogscannerYYleng);   return  REAL_TOK; } REJECT; }
	YY_BREAK
case 84:
YY_RULE_SETUP
#line 1380 "verilogscanner.l"
{ if(check()){yyPrevLine=yyLineNr;addText(verilogscannerYYtext,verilogscannerYYleng);  return  EVENT_TOK;}REJECT;}
	YY_BREAK
case 85:
YY_RULE_SETUP
#line 1381 "verilogscanner.l"
{ if(check()) return  ASSIGN_TOK; REJECT;}
	YY_BREAK
case 86:
YY_RULE_SETUP
#line 1382 "verilogscanner.l"
{ if(check()) return  SCALAR_TOK;REJECT;}
	YY_BREAK
case 87:
YY_RULE_SETUP
#line 1383 "verilogscanner.l"
{ if(check()) return  VEC_TOK;   REJECT;}
	YY_BREAK
case 88:
YY_RULE_SETUP
#line 1384 "verilogscanner.l"
{ if(check()) return  SMALL_TOK;REJECT;}
	YY_BREAK
case 89:
YY_RULE_SETUP
#line 1385 "verilogscanner.l"
{ if(check()) return  MEDIUM_TOK; REJECT;}
	YY_BREAK
case 90:
YY_RULE_SETUP
#line 1386 "verilogscanner.l"
{ if(check()) return  LARGE_TOK; REJECT;}
	YY_BREAK
case 91:
YY_RULE_SETUP
#line 1387 "verilogscanner.l"
{ if(check())  {yyPrevLine=yyLineNr;  addText(verilogscannerYYtext,verilogscannerYYleng);   return  OUTPUT_TOK; }REJECT;}
	YY_BREAK
case 92:
YY_RULE_SETUP
#line 1388 "verilogscanner.l"
{ if(check()) {yyPrevLine=yyLineNr; addText(verilogscannerYYtext,verilogscannerYYleng); return  INPUT_TOK;} REJECT;}
	YY_BREAK
case 93:
YY_RULE_SETUP
#line 1389 "verilogscanner.l"
{ if(check()) {yyPrevLine=yyLineNr; addText(verilogscannerYYtext,verilogscannerYYleng);    return  INOUT_TOK; }REJECT;}
	YY_BREAK
case 94:
YY_RULE_SETUP
#line 1390 "verilogscanner.l"
{ if(check()) {yyPrevLine=yyLineNr;return  PARAMETER_TOK;}REJECT;}
	YY_BREAK
case 95:
YY_RULE_SETUP
#line 1391 "verilogscanner.l"
{ if(check()) {yyPrevLine=yyLineNr; return  LOCALPARAM_TOK;}REJECT;}
	YY_BREAK
case 96:
YY_RULE_SETUP
#line 1392 "verilogscanner.l"
{ if(check()) { yyPrevLine=yyLineNr; addText(verilogscannerYYtext,verilogscannerYYleng);return  NET_TOK;} REJECT;}
	YY_BREAK
case 97:
YY_RULE_SETUP
#line 1393 "verilogscanner.l"
{ if(check()) {  addText(verilogscannerYYtext,verilogscannerYYleng);   return  STR0_TOK;} REJECT;}
	YY_BREAK
case 98:
YY_RULE_SETUP
#line 1394 "verilogscanner.l"
{ if(check()) {  addText(verilogscannerYYtext,verilogscannerYYleng); return  STR1_TOK;}REJECT;}
	YY_BREAK
case 99:
YY_RULE_SETUP
#line 1395 "verilogscanner.l"
{ if(check()) {  addText(verilogscannerYYtext,verilogscannerYYleng);  return  GATE_TOK;}REJECT;}
	YY_BREAK
case 100:
/* rule 100 can match eol */
YY_RULE_SETUP
#line 1396 "verilogscanner.l"
{ // found multiline comment
                     QCString text(verilogscannerYYtext);
                     if(!g_parseCode){
                     if(iDocLine==-1){
                       iDocLine=yyLineNr; 
                     }
                      
  //                    Entry* pTemp=VerilogDocGen::getEntryAtLine(curRoots,iDocLine);
    
/*                      
  if (pTemp)
  { // found one line comment, add it to the entry on this line
    pTemp->briefLine=yyLineNr;
    pTemp->brief+=verilogscannerYYtext;
    VhdlDocGen::prepareComment(pTemp->brief);
  }
    else 
  */  
   if(!checkMultiComment(text)) 
    { 
      strComment+=verilogscannerYYtext;
	  multLineComment=true;
	}			                     
     
      yyLineNr+=text.contains('\n');
                      
     }
					 if(g_parseCode) {
					 if(Config_getBool("STRIP_CODE_COMMENTS"))
					      qlist.append(new QCString(verilogscannerYYtext)); 
					 else{
					     QStringList ql=QStringList::split('\n',text,false);
					     //QCString trial=(QCString)ql[0];
					     qlist.append(new QCString(ql[0].data()));   
					     qlist.append(new QCString("\n"));   
					     if(ql.count()>1)
					     qlist.append(new QCString(ql[1].data()));   			     
					  }
					  }
					 c_lval.ctype=' ';
  BEGIN(tagComment);
  }
	YY_BREAK
case 101:
YY_RULE_SETUP
#line 1439 "verilogscanner.l"
{
  if (iDocLine==-1) iDocLine=yyLineNr;
  if(!g_parseCode){
   strComment+=verilogscannerYYtext;
   int index =strComment.find("\\code");
    if(index>0)
    {
    startCodeBlock(index);
    }
   }
   //fprintf(stderr," \n %s ",strComment.data());
   if(g_parseCode) 
   { 
     qlist.append(new QCString(verilogscannerYYtext)); 
   } 
  BEGIN(tagComment);
}
	YY_BREAK
case 102:
/* rule 102 can match eol */
YY_RULE_SETUP
#line 1457 "verilogscanner.l"
{
  // found end of comment block
 int index =strComment.find("\\code");
 // fprintf(stderr," %s ",strComment.data());
 // assert(false);
   if(!g_parseCode && index>0)
  {
    startCodeBlock(index);
    /*
    int ll=strComment.length();
     iCodeLen=inputVerilogString.findRev(strComment.data(),num_chars)+ll;
//  fprintf(stderr,"\n startin code..%d %d %d\n",iCodeLen,num_chars,ll);
    gBlock.reset();
   int len=strComment.length();
   QCString name=strComment.right(len-index);// 
    name=VhdlDocGen::getIndexWord(name.data(),1);
    if(!name)
      gBlock.name="misc"+ VhdlDocGen::getRecordNumber(); 
    else
      gBlock.name=name;
   strComment=strComment.left(index);
    gBlock.startLine=yyLineNr+1;
    gBlock.bodyLine=yyLineNr+1;
    VhdlDocGen::prepareComment(strComment);
   gBlock.brief+=strComment;
   */
  }
  else if(!g_parseCode)
  {
   strComment+=verilogscannerYYtext;
   VhdlDocGen::prepareComment(strComment);
   handleVerilogCommentBlock(strComment,FALSE,iDocLine);
   unput(*verilogscannerYYtext);
   }
   
   if(g_parseCode) // && !Config_getBool("STRIP_CODE_COMMENTS"))
   { 
     qlist.append(new QCString(verilogscannerYYtext)); 
   } 

   strComment.resize(0);
   BEGIN(Start);
}
	YY_BREAK
case 103:
YY_RULE_SETUP
#line 1502 "verilogscanner.l"
{ // one line comment
  if (iDocLine==-1) iDocLine=yyLineNr;
  QCString qcs(verilogscannerYYtext);
 
  bool isEndCode=qcs.contains("\\endcode");
  int index = qcs.find("\\code");

   if(isEndCode && !g_parseCode)
   {
 //    fprintf(stderr,"\n ending code..");
   
    int end=inputVerilogString.find(qcs.data(),iCodeLen);
    makeInlineDoc(end);
   }
   else if(index > 0 && !g_parseCode) {
  // assert(false);
   strComment=qcs;
    startCodeBlock(index);
    strComment.resize(0);
    }
  else if(!g_parseCode)
  {
   VhdlDocGen::prepareComment(qcs);
   //printf("--> handleCommentBlock line %d\n",yyLineNr);
 
  if(!checkMultiComment(qcs))
  {
    handleVerilogCommentBlock(qcs,TRUE,iDocLine);
   }
 }//if
  
  if(g_parseCode) // && !Config_getBool("STRIP_CODE_COMMENTS"))
   { 
     qlist.append(new QCString(verilogscannerYYtext)); 
   } 
  
} 
	YY_BREAK
case 104:
YY_RULE_SETUP
#line 1541 "verilogscanner.l"
{
       QCString text(verilogscannerYYtext); 
				//fprintf(stderr,"\n %s",text.data());
					  int b=text.contains(vlogComment);
					  if(b && !g_parseCode){  
                       strComment+=verilogscannerYYtext;
                        if (iDocLine==-1) iDocLine=yyLineNr;
                         VhdlDocGen::prepareComment(strComment);
                   
                         if(multLineComment){
                          handleVerilogCommentBlock(strComment,FALSE,iDocLine);
                          multLineComment=false;
                         }
                         else{
                           if(!checkMultiComment(text))
                            handleVerilogCommentBlock(strComment,true,iDocLine);
                          }//else 
                         }
                           strComment.resize(0);      
                         
					 
					 if(g_parseCode)
					 { 
				               qlist.append(new QCString(verilogscannerYYtext));
					 } 
					 c_lval.ctype=verilogscannerYYtext[0];
                   }
	YY_BREAK
case 105:
/* rule 105 can match eol */
YY_RULE_SETUP
#line 1569 "verilogscanner.l"
{
                  //  fprintf(stderr,"\n [%s : %c %d] string\n",verilogscannerYYtext,verilogscannerYYtext[verilogscannerYYleng-2],verilogscannerYYleng);

                      if((verilogscannerYYleng > 2) && verilogscannerYYtext[verilogscannerYYleng-2] != 92) {
                      addText(verilogscannerYYtext,verilogscannerYYleng);
                      if(g_parseCode) { qlist.append(new QCString(verilogscannerYYtext));c_lval.ctype=verilogscannerYYtext[0];}
                     return  STRING_TOK;
                      }
                      if(verilogscannerYYleng == 2){ 
                         if(g_parseCode) { qlist.append(new QCString(verilogscannerYYtext)); }   
                        return  STRING_TOK;
                        } 
                     unput(verilogscannerYYtext[verilogscannerYYleng-1]);
                     yymore();
                     }
	YY_BREAK
case 106:
YY_RULE_SETUP
#line 1585 "verilogscanner.l"
{
                   if(verilogscannerYYtext[0]=='\t'){
                    if(!g_parseCode)
                    parseToken(" ");
                   else
                    parseToken(verilogscannerYYtext);
                  }
                  c_lval.ctype=' ';} 
	YY_BREAK
case 107:
/* rule 107 can match eol */
YY_RULE_SETUP
#line 1594 "verilogscanner.l"
{
   	   		// fprintf(stderr,"\nparse code line: [line: %d]",yyLineNr);
               addToken('\n');
              if(g_parseCode){
                  yyEndModLine++;
			   //   yyEndModLine1=QCString(verilogscannerYYtext).contains('\n');
			     qlist.append(new QCString(verilogscannerYYtext));
			   } 
                else
	           yyLineNr+=QCString(verilogscannerYYtext).contains('\n');
	         
	           c_lval.ctype=verilogscannerYYtext[0];
               }
	YY_BREAK
case 108:
YY_RULE_SETUP
#line 1608 "verilogscanner.l"
{ parseToken(verilogscannerYYtext);}
	YY_BREAK
case 109:
YY_RULE_SETUP
#line 1609 "verilogscanner.l"
{
                                                      addText(verilogscannerYYtext,verilogscannerYYleng);
                                                      if(verilogscannerYYleng>(VBUF_SIZE-1))
                                                        verilogscannerYYleng=VBUF_SIZE;
                                                      strncpy(c_lval.cstr,verilogscannerYYtext,verilogscannerYYleng);
                                                      c_lval.cstr[verilogscannerYYleng]='\0';
                                                      if(g_parseCode) qlist.append(new QCString(verilogscannerYYtext)); 
					                                  return  DIGIT_TOK;
                                                     }
	YY_BREAK
case 110:
YY_RULE_SETUP
#line 1619 "verilogscanner.l"
{
						                 addText(verilogscannerYYtext,verilogscannerYYleng);
						   	          	
						   	          	 if(g_parseCode){ 
										   qlist.append(new QCString(verilogscannerYYtext));
						                  }
						                  if(verilogscannerYYleng>(VBUF_SIZE-1))
                                                        verilogscannerYYleng=VBUF_SIZE;
                                                    
						                   strncpy(c_lval.cstr,verilogscannerYYtext,verilogscannerYYleng);
                                            c_lloc.last_line= c_lloc.first_line;

                                           c_lval.cstr[verilogscannerYYleng]='\0'; 
						                //  c_lloc.last_line= c_lloc.first_line;
						                  c_lloc.first_line=yyLineNr;
						                  return  LETTER_TOK;
                                   }
	YY_BREAK
case 111:
YY_RULE_SETUP
#line 1638 "verilogscanner.l"
{
   c_lval.ctype=verilogscannerYYtext[0];
  if(c_lval.ctype=='`')
  unput('`');
  
  REJECT;
 }         
	YY_BREAK
case 112:
YY_RULE_SETUP
#line 1646 "verilogscanner.l"
{  parseToken(verilogscannerYYtext);  return   ATL_TOK;}
	YY_BREAK
case 113:
YY_RULE_SETUP
#line 1647 "verilogscanner.l"
{  parseToken(verilogscannerYYtext);  return   ATR_TOK;}
	YY_BREAK
case 114:
YY_RULE_SETUP
#line 1648 "verilogscanner.l"
{  parseToken(verilogscannerYYtext);  return   SNNOT_TOK;}
	YY_BREAK
case 115:
YY_RULE_SETUP
#line 1649 "verilogscanner.l"
{  parseToken(verilogscannerYYtext);  return   NOTSN_TOK;}
	YY_BREAK
case 116:
YY_RULE_SETUP
#line 1650 "verilogscanner.l"
{  parseToken(verilogscannerYYtext);  return   AAAND_TOK;}
	YY_BREAK
case 117:
YY_RULE_SETUP
#line 1651 "verilogscanner.l"
{  parseToken(verilogscannerYYtext);  return   AAND_TOK;}
	YY_BREAK
case 118:
YY_RULE_SETUP
#line 1652 "verilogscanner.l"
{  parseToken(verilogscannerYYtext);  return   OOR_TOK;}
	YY_BREAK
case 119:
YY_RULE_SETUP
#line 1653 "verilogscanner.l"
{  parseToken(verilogscannerYYtext);  return   EXCLAMATION_TOK;}
	YY_BREAK
case 120:
YY_RULE_SETUP
#line 1654 "verilogscanner.l"
{  parseToken(verilogscannerYYtext);   return   UNDERSCORE_TOK;}
	YY_BREAK
case 121:
YY_RULE_SETUP
#line 1655 "verilogscanner.l"
{  parseToken(verilogscannerYYtext); return  SEM_TOK;}
	YY_BREAK
case 122:
YY_RULE_SETUP
#line 1656 "verilogscanner.l"
{  parseToken(verilogscannerYYtext);  return  DOT_TOK;}
	YY_BREAK
case 123:
YY_RULE_SETUP
#line 1657 "verilogscanner.l"
{  parseToken(verilogscannerYYtext); return  COMMA_TOK;}
	YY_BREAK
case 124:
YY_RULE_SETUP
#line 1658 "verilogscanner.l"
{  parseToken(verilogscannerYYtext);return  QUESTION_TOK;}
	YY_BREAK
case 125:
YY_RULE_SETUP
#line 1659 "verilogscanner.l"
{  parseToken(verilogscannerYYtext);return  PLUS_TOK;}
	YY_BREAK
case 126:
YY_RULE_SETUP
#line 1660 "verilogscanner.l"
{  parseToken(verilogscannerYYtext);return  MINUS_TOK;}
	YY_BREAK
case 127:
YY_RULE_SETUP
#line 1661 "verilogscanner.l"
{   parseToken(verilogscannerYYtext); return  COLON_TOK;}
	YY_BREAK
case 128:
YY_RULE_SETUP
#line 1662 "verilogscanner.l"
{ parseToken(verilogscannerYYtext);if(g_parseCode) { c_lval.cstr[0]=' ';} return  LBRACE_TOK;}
	YY_BREAK
case 129:
YY_RULE_SETUP
#line 1663 "verilogscanner.l"
{ parseToken(verilogscannerYYtext);return  RBRACE_TOK;}
	YY_BREAK
case 130:
YY_RULE_SETUP
#line 1664 "verilogscanner.l"
{ parseToken(verilogscannerYYtext);return  RRAM_TOK;}
	YY_BREAK
case 131:
YY_RULE_SETUP
#line 1665 "verilogscanner.l"
{ parseToken(verilogscannerYYtext);return  LRAM_TOK;}
	YY_BREAK
case 132:
YY_RULE_SETUP
#line 1666 "verilogscanner.l"
{  parseToken(verilogscannerYYtext);return  LBRACKET_TOK;}
	YY_BREAK
case 133:
YY_RULE_SETUP
#line 1667 "verilogscanner.l"
{ parseToken(verilogscannerYYtext);return  RBRACKET_TOK;}
	YY_BREAK
case 134:
YY_RULE_SETUP
#line 1668 "verilogscanner.l"
{ parseToken(verilogscannerYYtext);return  AND_TOK;}
	YY_BREAK
case 135:
YY_RULE_SETUP
#line 1669 "verilogscanner.l"
{ parseToken(verilogscannerYYtext); return  OR_TOK;}
	YY_BREAK
case 136:
YY_RULE_SETUP
#line 1670 "verilogscanner.l"
{ parseToken(verilogscannerYYtext);  return  EQU_TOK;}
	YY_BREAK
case 137:
YY_RULE_SETUP
#line 1671 "verilogscanner.l"
{ parseToken(verilogscannerYYtext); return  GT_TOK;}
	YY_BREAK
case 138:
YY_RULE_SETUP
#line 1672 "verilogscanner.l"
{ parseToken(verilogscannerYYtext);return  LT_TOK;}
	YY_BREAK
case 139:
YY_RULE_SETUP
#line 1673 "verilogscanner.l"
{ parseToken(verilogscannerYYtext);return  NOT_TOK;}
	YY_BREAK
case 140:
YY_RULE_SETUP
#line 1674 "verilogscanner.l"
{ parseToken(verilogscannerYYtext); return  SN_TOK;}
	YY_BREAK
case 141:
YY_RULE_SETUP
#line 1675 "verilogscanner.l"
{ parseToken(verilogscannerYYtext);return  MULT_TOK;}
	YY_BREAK
case 142:
YY_RULE_SETUP
#line 1676 "verilogscanner.l"
{ parseToken(verilogscannerYYtext);return  PERCENTAL_TOK;}
	YY_BREAK
case 143:
YY_RULE_SETUP
#line 1677 "verilogscanner.l"
{ parseToken(verilogscannerYYtext);return  AT_TOK;}
	YY_BREAK
case 144:
YY_RULE_SETUP
#line 1678 "verilogscanner.l"
{ parseToken(verilogscannerYYtext);	return  PARA_TOK;}
	YY_BREAK
case 145:
YY_RULE_SETUP
#line 1679 "verilogscanner.l"
{ if(g_parseCode) parseToken(verilogscannerYYtext); return  DOLLAR_TOK;}
	YY_BREAK
case 146:
YY_RULE_SETUP
#line 1680 "verilogscanner.l"
{
                 vbufreset(); 
				 addText(verilogscannerYYtext,verilogscannerYYleng);
				 if(yy_hold_char=='!') // found  comment starting with "/*!"
				  doxComment=true;
				 startComment=yyLineNr;
				 BEGIN(StartComment); 
				 }
	YY_BREAK
case 147:
YY_RULE_SETUP
#line 1688 "verilogscanner.l"
{
 					  char c=yy_hold_char;
                         if(c !='/'){ 
						 parseToken(verilogscannerYYtext);
						 return  ENV_TOK;
                         }
						 unput('/');// found "//"
						 REJECT;}
	YY_BREAK
case 148:
/* rule 148 can match eol */
YY_RULE_SETUP
#line 1698 "verilogscanner.l"
{
                       QCString tt(verilogscannerYYtext);
					   int len=tt.length();
					  
					   if(verilogscannerYYtext[len-1]=='*' && tt.contains('\n'))
					        {
					         QCString ss=tt;
					         VhdlDocGen::deleteAllChars(ss,' ');
					         VhdlDocGen::deleteAllChars(ss,'\t');
					         if(ss.data()  && ss.at(ss.length()-2)=='\n')
					         {
					          tt=tt.left(len-1);
					          len--;
					          }
					         }
					   
					   addText(tt.data(),len);
                       char c=yy_hold_char;
                         if(c =='/'){
						    unput('*');
						   BEGIN(Commentt);
						 }
					     else BEGIN(StartComment);
					 }
	YY_BREAK
case 149:
YY_RULE_SETUP
#line 1723 "verilogscanner.l"
{	 
						 
						  QCString *qq=new QCString(getVerilogString());
						  qq->append("*/");
                       
						  if(g_parseCode){ 
							   	 	qlist.append(qq);		
							}
							else{
				             if(doxComment){  
						      qq->stripPrefix("/*!");
				                *qq=qq->left(qq->length()-2);
						        handleVerilogCommentBlock(*qq,FALSE,startComment);
							    }
							   yyLineNr+=qq->contains('\n');
							 
							
							  doxComment=false;
							delete qq;
							}
                      	 vbufreset();
                         BEGIN(Start);
                }
	YY_BREAK
case 150:
YY_RULE_SETUP
#line 1746 "verilogscanner.l"
ECHO;
	YY_BREAK
#line 4658 "verilogscanner.cpp"
			case YY_STATE_EOF(INITIAL):
			case YY_STATE_EOF(Start):
			case YY_STATE_EOF(Commentt):
			case YY_STATE_EOF(FindBegin):
			case YY_STATE_EOF(StartComment):
			case YY_STATE_EOF(tagComment):
			case YY_STATE_EOF(directive):
			case YY_STATE_EOF(specc):
			case YY_STATE_EOF(EndOfText):
				yyterminate();

	case YY_END_OF_BUFFER:
		{
		/* Amount of text matched not including the EOB char. */
		int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1;

		/* Undo the effects of YY_DO_BEFORE_ACTION. */
		*yy_cp = (yy_hold_char);
		YY_RESTORE_YY_MORE_OFFSET

		if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
			{
			/* We're scanning a new file or input source.  It's
			 * possible that this happened because the user
			 * just pointed verilogscannerYYin at a new source and called
			 * verilogscannerYYlex().  If so, then we have to assure
			 * consistency between YY_CURRENT_BUFFER and our
			 * globals.  Here is the right place to do so, because
			 * this is the first action (other than possibly a
			 * back-up) that will match for the new input source.
			 */
			(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
			YY_CURRENT_BUFFER_LVALUE->yy_input_file = verilogscannerYYin;
			YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
			}

		/* Note that here we test for yy_c_buf_p "<=" to the position
		 * of the first EOB in the buffer, since yy_c_buf_p will
		 * already have been incremented past the NUL character
		 * (since all states make transitions on EOB to the
		 * end-of-buffer state).  Contrast this with the test
		 * in input().
		 */
		if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
			{ /* This was really a NUL. */
			yy_state_type yy_next_state;

			(yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text;

			yy_current_state = yy_get_previous_state(  );

			/* Okay, we're now positioned to make the NUL
			 * transition.  We couldn't have
			 * yy_get_previous_state() go ahead and do it
			 * for us because it doesn't know how to deal
			 * with the possibility of jamming (and we don't
			 * want to build jamming into it because then it
			 * will run more slowly).
			 */

			yy_next_state = yy_try_NUL_trans( yy_current_state );

			yy_bp = (yytext_ptr) + YY_MORE_ADJ;

			if ( yy_next_state )
				{
				/* Consume the NUL. */
				yy_cp = ++(yy_c_buf_p);
				yy_current_state = yy_next_state;
				goto yy_match;
				}

			else
				{
/* %% [14.0] code to do back-up for compressed tables and set up yy_cp goes here */
				yy_cp = (yy_c_buf_p);
				goto yy_find_action;
				}
			}

		else switch ( yy_get_next_buffer(  ) )
			{
			case EOB_ACT_END_OF_FILE:
				{
				(yy_did_buffer_switch_on_eof) = 0;

				if ( verilogscannerYYwrap( ) )
					{
					/* Note: because we've taken care in
					 * yy_get_next_buffer() to have set up
					 * verilogscannerYYtext, we can now set up
					 * yy_c_buf_p so that if some total
					 * hoser (like flex itself) wants to
					 * call the scanner after we return the
					 * YY_NULL, it'll still work - another
					 * YY_NULL will get returned.
					 */
					(yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ;

					yy_act = YY_STATE_EOF(YY_START);
					goto do_action;
					}

				else
					{
					if ( ! (yy_did_buffer_switch_on_eof) )
						YY_NEW_FILE;
					}
				break;
				}

			case EOB_ACT_CONTINUE_SCAN:
				(yy_c_buf_p) =
					(yytext_ptr) + yy_amount_of_matched_text;

				yy_current_state = yy_get_previous_state(  );

				yy_cp = (yy_c_buf_p);
				yy_bp = (yytext_ptr) + YY_MORE_ADJ;
				goto yy_match;

			case EOB_ACT_LAST_MATCH:
				(yy_c_buf_p) =
				&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)];

				yy_current_state = yy_get_previous_state(  );

				yy_cp = (yy_c_buf_p);
				yy_bp = (yytext_ptr) + YY_MORE_ADJ;
				goto yy_find_action;
			}
		break;
		}

	default:
		YY_FATAL_ERROR(
			"fatal flex scanner internal error--no action found" );
	} /* end of action switch */
		} /* end of scanning one token */
} /* end of verilogscannerYYlex */
/* %ok-for-header */

/* %if-c++-only */
/* %not-for-header */

/* %ok-for-header */

/* %endif */

/* yy_get_next_buffer - try to read in a new buffer
 *
 * Returns a code representing an action:
 *	EOB_ACT_LAST_MATCH -
 *	EOB_ACT_CONTINUE_SCAN - continue scanning from current position
 *	EOB_ACT_END_OF_FILE - end of file
 */
/* %if-c-only */
static int yy_get_next_buffer (void)
/* %endif */
/* %if-c++-only */
/* %endif */
{
    	register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
	register char *source = (yytext_ptr);
	register int number_to_move, i;
	int ret_val;

	if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
		YY_FATAL_ERROR(
		"fatal flex scanner internal error--end of buffer missed" );

	if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
		{ /* Don't try to fill the buffer, so this is an EOF. */
		if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 )
			{
			/* We matched a single character, the EOB, so
			 * treat this as a final EOF.
			 */
			return EOB_ACT_END_OF_FILE;
			}

		else
			{
			/* We matched some text prior to the EOB, first
			 * process it.
			 */
			return EOB_ACT_LAST_MATCH;
			}
		}

	/* Try to read more data. */

	/* First move last chars to start of buffer. */
	number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1;

	for ( i = 0; i < number_to_move; ++i )
		*(dest++) = *(source++);

	if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
		/* don't do the read, it's not guaranteed to return an EOF,
		 * just force an EOF
		 */
		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0;

	else
		{
			yy_size_t num_to_read =
			YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;

		while ( num_to_read <= 0 )
			{ /* Not enough room in the buffer - grow it. */

			YY_FATAL_ERROR(
"input buffer overflow, can't enlarge buffer because scanner uses REJECT" );

			}

		if ( num_to_read > YY_READ_BUF_SIZE )
			num_to_read = YY_READ_BUF_SIZE;

		/* Read in more data. */
		YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
			(yy_n_chars), num_to_read );

		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
		}

	if ( (yy_n_chars) == 0 )
		{
		if ( number_to_move == YY_MORE_ADJ )
			{
			ret_val = EOB_ACT_END_OF_FILE;
			verilogscannerYYrestart(verilogscannerYYin  );
			}

		else
			{
			ret_val = EOB_ACT_LAST_MATCH;
			YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
				YY_BUFFER_EOF_PENDING;
			}
		}

	else
		ret_val = EOB_ACT_CONTINUE_SCAN;

	if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
		/* Extend the array by 50%, plus the number we really need. */
		yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
		YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) verilogscannerYYrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size  );
		if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
			YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
	}

	(yy_n_chars) += number_to_move;
	YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
	YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;

	(yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];

	return ret_val;
}

/* yy_get_previous_state - get the state just before the EOB char was reached */

/* %if-c-only */
/* %not-for-header */

    static yy_state_type yy_get_previous_state (void)
/* %endif */
/* %if-c++-only */
/* %endif */
{
	register yy_state_type yy_current_state;
	register char *yy_cp;
    
/* %% [15.0] code to get the start state into yy_current_state goes here */
	yy_current_state = (yy_start);

	(yy_state_ptr) = (yy_state_buf);
	*(yy_state_ptr)++ = yy_current_state;

	for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
		{
/* %% [16.0] code to find the next state goes here */
		register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
			{
			yy_current_state = (int) yy_def[yy_current_state];
			if ( yy_current_state >= 1077 )
				yy_c = yy_meta[(unsigned int) yy_c];
			}
		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
		*(yy_state_ptr)++ = yy_current_state;
		}

	return yy_current_state;
}

/* yy_try_NUL_trans - try to make a transition on the NUL character
 *
 * synopsis
 *	next_state = yy_try_NUL_trans( current_state );
 */
/* %if-c-only */
    static yy_state_type yy_try_NUL_trans  (yy_state_type yy_current_state )
/* %endif */
/* %if-c++-only */
/* %endif */
{
	register int yy_is_jam;
    /* %% [17.0] code to find the next state, and perhaps do backing up, goes here */

	register YY_CHAR yy_c = 1;
	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
		{
		yy_current_state = (int) yy_def[yy_current_state];
		if ( yy_current_state >= 1077 )
			yy_c = yy_meta[(unsigned int) yy_c];
		}
	yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
	yy_is_jam = (yy_current_state == 1076);
	if ( ! yy_is_jam )
		*(yy_state_ptr)++ = yy_current_state;

		return yy_is_jam ? 0 : yy_current_state;
}

/* %if-c-only */

    static void yyunput (int c, register char * yy_bp )
/* %endif */
/* %if-c++-only */
/* %endif */
{
	register char *yy_cp;
    
    yy_cp = (yy_c_buf_p);

	/* undo effects of setting up verilogscannerYYtext */
	*yy_cp = (yy_hold_char);

	if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
		{ /* need to shift things up to make room */
		/* +2 for EOB chars. */
		register yy_size_t number_to_move = (yy_n_chars) + 2;
		register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
					YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
		register char *source =
				&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];

		while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
			*--dest = *--source;

		yy_cp += (int) (dest - source);
		yy_bp += (int) (dest - source);
		YY_CURRENT_BUFFER_LVALUE->yy_n_chars =
			(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size;

		if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
			YY_FATAL_ERROR( "flex scanner push-back overflow" );
		}

	*--yy_cp = (char) c;

/* %% [18.0] update verilogscannerYYlineno here */

	(yytext_ptr) = yy_bp;
	(yy_hold_char) = *yy_cp;
	(yy_c_buf_p) = yy_cp;
}
/* %if-c-only */

/* %endif */

/* %if-c-only */
#ifndef YY_NO_INPUT
#ifdef __cplusplus
    static int yyinput (void)
#else
    static int input  (void)
#endif

/* %endif */
/* %if-c++-only */
/* %endif */
{
	int c;
    
	*(yy_c_buf_p) = (yy_hold_char);

	if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR )
		{
		/* yy_c_buf_p now points to the character we want to return.
		 * If this occurs *before* the EOB characters, then it's a
		 * valid NUL; if not, then we've hit the end of the buffer.
		 */
		if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
			/* This was really a NUL. */
			*(yy_c_buf_p) = '\0';

		else
			{ /* need more input */
			yy_size_t offset = (yy_c_buf_p) - (yytext_ptr);
			++(yy_c_buf_p);

			switch ( yy_get_next_buffer(  ) )
				{
				case EOB_ACT_LAST_MATCH:
					/* This happens because yy_g_n_b()
					 * sees that we've accumulated a
					 * token and flags that we need to
					 * try matching the token before
					 * proceeding.  But for input(),
					 * there's no matching to consider.
					 * So convert the EOB_ACT_LAST_MATCH
					 * to EOB_ACT_END_OF_FILE.
					 */

					/* Reset buffer status. */
					verilogscannerYYrestart(verilogscannerYYin );

					/*FALLTHROUGH*/

				case EOB_ACT_END_OF_FILE:
					{
					if ( verilogscannerYYwrap( ) )
						return EOF;

					if ( ! (yy_did_buffer_switch_on_eof) )
						YY_NEW_FILE;
#ifdef __cplusplus
					return yyinput();
#else
					return input();
#endif
					}

				case EOB_ACT_CONTINUE_SCAN:
					(yy_c_buf_p) = (yytext_ptr) + offset;
					break;
				}
			}
		}

	c = *(unsigned char *) (yy_c_buf_p);	/* cast for 8-bit char's */
	*(yy_c_buf_p) = '\0';	/* preserve verilogscannerYYtext */
	(yy_hold_char) = *++(yy_c_buf_p);

/* %% [19.0] update BOL and verilogscannerYYlineno */

	return c;
}
/* %if-c-only */
#endif	/* ifndef YY_NO_INPUT */
/* %endif */

/** Immediately switch to a different input stream.
 * @param input_file A readable stream.
 * 
 * @note This function does not reset the start condition to @c INITIAL .
 */
/* %if-c-only */
    void verilogscannerYYrestart  (FILE * input_file )
/* %endif */
/* %if-c++-only */
/* %endif */
{
    
	if ( ! YY_CURRENT_BUFFER ){
        verilogscannerYYensure_buffer_stack ();
		YY_CURRENT_BUFFER_LVALUE =
            verilogscannerYY_create_buffer(verilogscannerYYin,YY_BUF_SIZE );
	}

	verilogscannerYY_init_buffer(YY_CURRENT_BUFFER,input_file );
	verilogscannerYY_load_buffer_state( );
}

/** Switch to a different input buffer.
 * @param new_buffer The new input buffer.
 * 
 */
/* %if-c-only */
    void verilogscannerYY_switch_to_buffer  (YY_BUFFER_STATE  new_buffer )
/* %endif */
/* %if-c++-only */
/* %endif */
{
    
	/* TODO. We should be able to replace this entire function body
	 * with
	 *		verilogscannerYYpop_buffer_state();
	 *		verilogscannerYYpush_buffer_state(new_buffer);
     */
	verilogscannerYYensure_buffer_stack ();
	if ( YY_CURRENT_BUFFER == new_buffer )
		return;

	if ( YY_CURRENT_BUFFER )
		{
		/* Flush out information for old buffer. */
		*(yy_c_buf_p) = (yy_hold_char);
		YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
		}

	YY_CURRENT_BUFFER_LVALUE = new_buffer;
	verilogscannerYY_load_buffer_state( );

	/* We don't actually know whether we did this switch during
	 * EOF (verilogscannerYYwrap()) processing, but the only time this flag
	 * is looked at is after verilogscannerYYwrap() is called, so it's safe
	 * to go ahead and always set it.
	 */
	(yy_did_buffer_switch_on_eof) = 1;
}

/* %if-c-only */
static void verilogscannerYY_load_buffer_state  (void)
/* %endif */
/* %if-c++-only */
/* %endif */
{
    	(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
	(yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
	verilogscannerYYin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
	(yy_hold_char) = *(yy_c_buf_p);
}

/** Allocate and initialize an input buffer state.
 * @param file A readable stream.
 * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
 * 
 * @return the allocated buffer state.
 */
/* %if-c-only */
    YY_BUFFER_STATE verilogscannerYY_create_buffer  (FILE * file, int  size )
/* %endif */
/* %if-c++-only */
/* %endif */
{
	YY_BUFFER_STATE b;
    
	b = (YY_BUFFER_STATE) verilogscannerYYalloc(sizeof( struct yy_buffer_state )  );
	if ( ! b )
		YY_FATAL_ERROR( "out of dynamic memory in verilogscannerYY_create_buffer()" );

	b->yy_buf_size = size;

	/* yy_ch_buf has to be 2 characters longer than the size given because
	 * we need to put in 2 end-of-buffer characters.
	 */
	b->yy_ch_buf = (char *) verilogscannerYYalloc(b->yy_buf_size + 2  );
	if ( ! b->yy_ch_buf )
		YY_FATAL_ERROR( "out of dynamic memory in verilogscannerYY_create_buffer()" );

	b->yy_is_our_buffer = 1;

	verilogscannerYY_init_buffer(b,file );

	return b;
}

/** Destroy the buffer.
 * @param b a buffer created with verilogscannerYY_create_buffer()
 * 
 */
/* %if-c-only */
    void verilogscannerYY_delete_buffer (YY_BUFFER_STATE  b )
/* %endif */
/* %if-c++-only */
/* %endif */
{
    
	if ( ! b )
		return;

	if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
		YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;

	if ( b->yy_is_our_buffer )
		verilogscannerYYfree((void *) b->yy_ch_buf  );

	verilogscannerYYfree((void *) b  );
}

/* Initializes or reinitializes a buffer.
 * This function is sometimes called more than once on the same buffer,
 * such as during a verilogscannerYYrestart() or at EOF.
 */
/* %if-c-only */
    static void verilogscannerYY_init_buffer  (YY_BUFFER_STATE  b, FILE * file )
/* %endif */
/* %if-c++-only */
/* %endif */

{
	int oerrno = errno;
    
	verilogscannerYY_flush_buffer(b );

	b->yy_input_file = file;
	b->yy_fill_buffer = 1;

    /* If b is the current buffer, then verilogscannerYY_init_buffer was _probably_
     * called from verilogscannerYYrestart() or through yy_get_next_buffer.
     * In that case, we don't want to reset the lineno or column.
     */
    if (b != YY_CURRENT_BUFFER){
        b->yy_bs_lineno = 1;
        b->yy_bs_column = 0;
    }

/* %if-c-only */

        b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
    
/* %endif */
/* %if-c++-only */
/* %endif */
	errno = oerrno;
}

/** Discard all buffered characters. On the next scan, YY_INPUT will be called.
 * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
 * 
 */
/* %if-c-only */
    void verilogscannerYY_flush_buffer (YY_BUFFER_STATE  b )
/* %endif */
/* %if-c++-only */
/* %endif */
{
    	if ( ! b )
		return;

	b->yy_n_chars = 0;

	/* We always need two end-of-buffer characters.  The first causes
	 * a transition to the end-of-buffer state.  The second causes
	 * a jam in that state.
	 */
	b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
	b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;

	b->yy_buf_pos = &b->yy_ch_buf[0];

	b->yy_at_bol = 1;
	b->yy_buffer_status = YY_BUFFER_NEW;

	if ( b == YY_CURRENT_BUFFER )
		verilogscannerYY_load_buffer_state( );
}

/* %if-c-or-c++ */
/** Pushes the new state onto the stack. The new state becomes
 *  the current state. This function will allocate the stack
 *  if necessary.
 *  @param new_buffer The new state.
 *  
 */
/* %if-c-only */
void verilogscannerYYpush_buffer_state (YY_BUFFER_STATE new_buffer )
/* %endif */
/* %if-c++-only */
/* %endif */
{
    	if (new_buffer == NULL)
		return;

	verilogscannerYYensure_buffer_stack();

	/* This block is copied from verilogscannerYY_switch_to_buffer. */
	if ( YY_CURRENT_BUFFER )
		{
		/* Flush out information for old buffer. */
		*(yy_c_buf_p) = (yy_hold_char);
		YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
		}

	/* Only push if top exists. Otherwise, replace top. */
	if (YY_CURRENT_BUFFER)
		(yy_buffer_stack_top)++;
	YY_CURRENT_BUFFER_LVALUE = new_buffer;

	/* copied from verilogscannerYY_switch_to_buffer. */
	verilogscannerYY_load_buffer_state( );
	(yy_did_buffer_switch_on_eof) = 1;
}
/* %endif */

/* %if-c-or-c++ */
/** Removes and deletes the top of the stack, if present.
 *  The next element becomes the new top.
 *  
 */
/* %if-c-only */
void verilogscannerYYpop_buffer_state (void)
/* %endif */
/* %if-c++-only */
/* %endif */
{
    	if (!YY_CURRENT_BUFFER)
		return;

	verilogscannerYY_delete_buffer(YY_CURRENT_BUFFER );
	YY_CURRENT_BUFFER_LVALUE = NULL;
	if ((yy_buffer_stack_top) > 0)
		--(yy_buffer_stack_top);

	if (YY_CURRENT_BUFFER) {
		verilogscannerYY_load_buffer_state( );
		(yy_did_buffer_switch_on_eof) = 1;
	}
}
/* %endif */

/* %if-c-or-c++ */
/* Allocates the stack if it does not exist.
 *  Guarantees space for at least one push.
 */
/* %if-c-only */
static void verilogscannerYYensure_buffer_stack (void)
/* %endif */
/* %if-c++-only */
/* %endif */
{
	yy_size_t num_to_alloc;
    
	if (!(yy_buffer_stack)) {

		/* First allocation is just for 2 elements, since we don't know if this
		 * scanner will even need a stack. We use 2 instead of 1 to avoid an
		 * immediate realloc on the next call.
         */
		num_to_alloc = 1;
		(yy_buffer_stack) = (struct yy_buffer_state**)verilogscannerYYalloc
								(num_to_alloc * sizeof(struct yy_buffer_state*)
								);
		if ( ! (yy_buffer_stack) )
			YY_FATAL_ERROR( "out of dynamic memory in verilogscannerYYensure_buffer_stack()" );
								  
		memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
				
		(yy_buffer_stack_max) = num_to_alloc;
		(yy_buffer_stack_top) = 0;
		return;
	}

	if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){

		/* Increase the buffer to prepare for a possible push. */
		int grow_size = 8 /* arbitrary grow size */;

		num_to_alloc = (yy_buffer_stack_max) + grow_size;
		(yy_buffer_stack) = (struct yy_buffer_state**)verilogscannerYYrealloc
								((yy_buffer_stack),
								num_to_alloc * sizeof(struct yy_buffer_state*)
								);
		if ( ! (yy_buffer_stack) )
			YY_FATAL_ERROR( "out of dynamic memory in verilogscannerYYensure_buffer_stack()" );

		/* zero only the new slots.*/
		memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
		(yy_buffer_stack_max) = num_to_alloc;
	}
}
/* %endif */

/* %if-c-only */
/** Setup the input buffer state to scan directly from a user-specified character buffer.
 * @param base the character buffer
 * @param size the size in bytes of the character buffer
 * 
 * @return the newly allocated buffer state object. 
 */
YY_BUFFER_STATE verilogscannerYY_scan_buffer  (char * base, yy_size_t  size )
{
	YY_BUFFER_STATE b;
    
	if ( size < 2 ||
	     base[size-2] != YY_END_OF_BUFFER_CHAR ||
	     base[size-1] != YY_END_OF_BUFFER_CHAR )
		/* They forgot to leave room for the EOB's. */
		return 0;

	b = (YY_BUFFER_STATE) verilogscannerYYalloc(sizeof( struct yy_buffer_state )  );
	if ( ! b )
		YY_FATAL_ERROR( "out of dynamic memory in verilogscannerYY_scan_buffer()" );

	b->yy_buf_size = size - 2;	/* "- 2" to take care of EOB's */
	b->yy_buf_pos = b->yy_ch_buf = base;
	b->yy_is_our_buffer = 0;
	b->yy_input_file = 0;
	b->yy_n_chars = b->yy_buf_size;
	b->yy_is_interactive = 0;
	b->yy_at_bol = 1;
	b->yy_fill_buffer = 0;
	b->yy_buffer_status = YY_BUFFER_NEW;

	verilogscannerYY_switch_to_buffer(b  );

	return b;
}
/* %endif */

/* %if-c-only */
/** Setup the input buffer state to scan a string. The next call to verilogscannerYYlex() will
 * scan from a @e copy of @a str.
 * @param yystr a NUL-terminated string to scan
 * 
 * @return the newly allocated buffer state object.
 * @note If you want to scan bytes that may contain NUL values, then use
 *       verilogscannerYY_scan_bytes() instead.
 */
YY_BUFFER_STATE verilogscannerYY_scan_string (yyconst char * yystr )
{
    
	return verilogscannerYY_scan_bytes(yystr,strlen(yystr) );
}
/* %endif */

/* %if-c-only */
/** Setup the input buffer state to scan the given bytes. The next call to verilogscannerYYlex() will
 * scan from a @e copy of @a bytes.
 * @param yybytes the byte buffer to scan
 * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes.
 * 
 * @return the newly allocated buffer state object.
 */
YY_BUFFER_STATE verilogscannerYY_scan_bytes  (yyconst char * yybytes, yy_size_t  _yybytes_len )
{
	YY_BUFFER_STATE b;
	char *buf;
	yy_size_t n;
	yy_size_t i;
    
	/* Get memory for full buffer, including space for trailing EOB's. */
	n = _yybytes_len + 2;
	buf = (char *) verilogscannerYYalloc(n  );
	if ( ! buf )
		YY_FATAL_ERROR( "out of dynamic memory in verilogscannerYY_scan_bytes()" );

	for ( i = 0; i < _yybytes_len; ++i )
		buf[i] = yybytes[i];

	buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;

	b = verilogscannerYY_scan_buffer(buf,n );
	if ( ! b )
		YY_FATAL_ERROR( "bad buffer in verilogscannerYY_scan_bytes()" );

	/* It's okay to grow etc. this buffer, and we should throw it
	 * away when we're done.
	 */
	b->yy_is_our_buffer = 1;

	return b;
}
/* %endif */

#ifndef YY_EXIT_FAILURE
#define YY_EXIT_FAILURE 2
#endif

/* %if-c-only */
static void yy_fatal_error (yyconst char* msg )
{
    	(void) fprintf( stderr, "%s\n", msg );
	exit( YY_EXIT_FAILURE );
}
/* %endif */
/* %if-c++-only */
/* %endif */

/* Redefine yyless() so it works in section 3 code. */

#undef yyless
#define yyless(n) \
	do \
		{ \
		/* Undo effects of setting up verilogscannerYYtext. */ \
        int yyless_macro_arg = (n); \
        YY_LESS_LINENO(yyless_macro_arg);\
		verilogscannerYYtext[verilogscannerYYleng] = (yy_hold_char); \
		(yy_c_buf_p) = verilogscannerYYtext + yyless_macro_arg; \
		(yy_hold_char) = *(yy_c_buf_p); \
		*(yy_c_buf_p) = '\0'; \
		verilogscannerYYleng = yyless_macro_arg; \
		} \
	while ( 0 )

/* Accessor  methods (get/set functions) to struct members. */

/* %if-c-only */
/* %if-reentrant */
/* %endif */

/** Get the current line number.
 * 
 */
int verilogscannerYYget_lineno  (void)
{
        
    return verilogscannerYYlineno;
}

/** Get the input stream.
 * 
 */
FILE *verilogscannerYYget_in  (void)
{
        return verilogscannerYYin;
}

/** Get the output stream.
 * 
 */
FILE *verilogscannerYYget_out  (void)
{
        return verilogscannerYYout;
}

/** Get the length of the current token.
 * 
 */
yy_size_t verilogscannerYYget_leng  (void)
{
        return verilogscannerYYleng;
}

/** Get the current token.
 * 
 */

char *verilogscannerYYget_text  (void)
{
        return verilogscannerYYtext;
}

/* %if-reentrant */
/* %endif */

/** Set the current line number.
 * @param line_number
 * 
 */
void verilogscannerYYset_lineno (int  line_number )
{
    
    verilogscannerYYlineno = line_number;
}

/** Set the input stream. This does not discard the current
 * input buffer.
 * @param in_str A readable stream.
 * 
 * @see verilogscannerYY_switch_to_buffer
 */
void verilogscannerYYset_in (FILE *  in_str )
{
        verilogscannerYYin = in_str ;
}

void verilogscannerYYset_out (FILE *  out_str )
{
        verilogscannerYYout = out_str ;
}

int verilogscannerYYget_debug  (void)
{
        return verilogscannerYY_flex_debug;
}

void verilogscannerYYset_debug (int  bdebug )
{
        verilogscannerYY_flex_debug = bdebug ;
}

/* %endif */

/* %if-reentrant */
/* %if-bison-bridge */
/* %endif */
/* %endif if-c-only */

/* %if-c-only */
static int yy_init_globals (void)
{
        /* Initialization is the same as for the non-reentrant scanner.
     * This function is called from verilogscannerYYlex_destroy(), so don't allocate here.
     */

    (yy_buffer_stack) = 0;
    (yy_buffer_stack_top) = 0;
    (yy_buffer_stack_max) = 0;
    (yy_c_buf_p) = (char *) 0;
    (yy_init) = 0;
    (yy_start) = 0;

    (yy_state_buf) = 0;
    (yy_state_ptr) = 0;
    (yy_full_match) = 0;
    (yy_lp) = 0;

/* Defined in main.c */
#ifdef YY_STDINIT
    verilogscannerYYin = stdin;
    verilogscannerYYout = stdout;
#else
    verilogscannerYYin = (FILE *) 0;
    verilogscannerYYout = (FILE *) 0;
#endif

    /* For future reference: Set errno on error, since we are called by
     * verilogscannerYYlex_init()
     */
    return 0;
}
/* %endif */

/* %if-c-only SNIP! this currently causes conflicts with the c++ scanner */
/* verilogscannerYYlex_destroy is for both reentrant and non-reentrant scanners. */
int verilogscannerYYlex_destroy  (void)
{
    
    /* Pop the buffer stack, destroying each element. */
	while(YY_CURRENT_BUFFER){
		verilogscannerYY_delete_buffer(YY_CURRENT_BUFFER  );
		YY_CURRENT_BUFFER_LVALUE = NULL;
		verilogscannerYYpop_buffer_state();
	}

	/* Destroy the stack itself. */
	verilogscannerYYfree((yy_buffer_stack) );
	(yy_buffer_stack) = NULL;

    verilogscannerYYfree ( (yy_state_buf) );
    (yy_state_buf)  = NULL;

    /* Reset the globals. This is important in a non-reentrant scanner so the next time
     * verilogscannerYYlex() is called, initialization will occur. */
    yy_init_globals( );

/* %if-reentrant */
/* %endif */
    return 0;
}
/* %endif */

/*
 * Internal utility routines.
 */

#ifndef yytext_ptr
static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
{
	register int i;
	for ( i = 0; i < n; ++i )
		s1[i] = s2[i];
}
#endif

#ifdef YY_NEED_STRLEN
static int yy_flex_strlen (yyconst char * s )
{
	register int n;
	for ( n = 0; s[n]; ++n )
		;

	return n;
}
#endif

void *verilogscannerYYalloc (yy_size_t  size )
{
	return (void *) malloc( size );
}

void *verilogscannerYYrealloc  (void * ptr, yy_size_t  size )
{
	/* The cast to (char *) in the following accommodates both
	 * implementations that use char* generic pointers, and those
	 * that use void* generic pointers.  It works with the latter
	 * because both ANSI C and C++ allow castless assignment from
	 * any pointer type to void*, and deal with argument conversions
	 * as though doing an assignment.
	 */
	return (void *) realloc( (char *) ptr, size );
}

void verilogscannerYYfree (void * ptr )
{
	free( (char *) ptr );	/* see verilogscannerYYrealloc() for (char *) cast */
}

/* %if-tables-serialization definitions */
/* %define-yytables   The name for this specific scanner's tables. */
#define YYTABLES_NAME "yytables"
/* %endif */

/* %ok-for-header */

#line 1746 "verilogscanner.l"



//------ -------------------------------------------------------------------------------------------------

// do parsing
 int MyParserConv::doLex(){
   int token;
    token=verilogscannerYYlex();
 //  fprintf(stderr,"\ntoken: %d",token);
    return token;
  } 
 
 void resetScanner(const char* s,MyParserConv* parse) { }


 void vbufreset() 
 {
  int i;
  i=getVerilogToken();
  memset(&g_buf[0],'\0',iSize);
  iSize=0;
  if(i==LETTER_TOK){
   lastLetter=verilogscannerYYtext;
   }
  }

 void addToken (char c)
 {
    if(iSize>inputPosition)
	  {
	  vbufreset();
	 // assert(0);
	 }
      g_buf[iSize]=c;
      iSize++;
      g_buf[iSize]='\0'; 

 } 

 QCString getLastLetter(){ return lastLetter; }

 void  addText (char *word, int len)
 {
  	  while(len-->0)
        g_buf[iSize++]=*word++;
  
      g_buf[iSize]='\0'; 
  } 

const char* getVerilogString() {if(iSize) return &g_buf[0];return NULL;}
const char* getVerilogParsingFile(){return yyFileName.data();}


int getVerilogLine() { return yyLineNr; }
int getVerilogPrevLine() { return yyPrevLine; }
int getVerilogEndLine(){ return yyEndLine; };
int getVerilogEndModuleLine()
{ 
 return yyEndModLine; 
 };

void VerilogScanner::resetCodeParserState(){}
bool VerilogScanner::needsPreprocessing(const QCString &extension){ return true; }
void VerilogScanner::parsePrototype(const char *text){ }

void VerilogScanner::parseInput(const char *fileName,const char *fileBuf,Entry *root,
                                     bool /*sameTranslationUnit*/,
                                     QStrList & /*filesInSameTranslationUnit*/)
{
        yyFileName= QCString(fileName);
	  fprintf(stderr," \n parse Verilog File: %s  \n",yyFileName.data());
				 
//verilogscannerYY_flex_debug=1;
      bool xilinx_ucf=isConstraintFile(yyFileName,".ucf");
      bool altera_qsf=isConstraintFile(yyFileName,".qsf");
   
   // support XILINX(ucf) and ALTERA (qsf) file
   //   printf("%s",fileBuf);
     if(xilinx_ucf)  {  VhdlDocGen::parseUCF(fileBuf,root,yyFileName,false);  return; }
     if(altera_qsf) { VhdlDocGen::parseUCF(fileBuf,root,yyFileName,true); return; }
    
     num_chars=0;
     QCString pPuffer(" ");
	 pPuffer+=fileBuf;
	 if(!g_lexInit)
	 buildKeyMap();
	 inputFile.setName(fileName);
	   if(g_lexInit)
		 verilogscannerYYrestart( verilogscannerYYin );
	   g_lexInit=TRUE;
	   curRoots=root;	
 	   initVerilogParser(curRoots,false);
       g_thisParser=this;
	   iSize=0;
       int len =inputFile.size();
       inputPosition=0;
	   g_buf=new char[len+1024];
       assert(g_buf);
       inputVerilogString=pPuffer.data();
       g_inputLines  = countLines();
	   totLines=g_inputLines;
	   yyLineNr=1;
       pconv=new MyParserConv();
       resetScanner(NULL,pconv);
          groupEnterFile(fileName,yyLineNr);
       int ok=pconv->parse(pconv);
	 //  globalMemberList.clear();
	   qlist.clear();
	   delete [] g_buf;g_buf=0;
	   delete pconv;	  
	   	  
}


static void  parseConstraint(const QCString & input)
{
QStringList qsl=QStringList::split("\n",input);
codifyLines(input.data());
/*
for(uint j=0;j<qsl.count();j++)
{
  QCString q=(QCString)qsl[j];
  writeVWord(QCString& qcs)
}
*/
}// parseConstraint

   void VerilogScanner::parseCode(CodeOutputInterface &codeOutIntf,
    const char *scopeName,
    const QCString &input,
    SrcLangExt /*lang*/,
    bool isExampleBlock,
    const char *exampleName,
    FileDef *fileDef,
    int startLine,
    int endLine,
    bool inlineFragment,
    MemberDef *memberDef,
    bool showLineNumbers,
    Definition *searchCtx,
	bool
    )
				  { 
				  num_chars=0;
         
  			 TooltipManager::instance()->clearTooltips();

				 //  Definition *di=(Definition*)fileDef;
				   QCString pPuffer(" ",1);
				   if(!fileDef)
				   {
				    fprintf(stderr," spe code << %s >> \n",input.data());
				    return;
                   }
				   assert(fileDef);
				     yyFileName=fileDef->fileName();
                    g_code = &codeOutIntf;
                 fprintf(stderr," \n %s  \n",yyFileName.data());
				 
                   QCString ff(yyFileName);
                   if (Config_getBool("ENABLE_PREPROCESSING") && startLine==-1)
                     {
                       VerilogPreProc defProc;
                       defProc.lineDirectives(false);
                       QFileInfo fi(fileDef->absFilePath());
                       pPuffer=defProc.performPreprocessing(fi).data();
                     //  cerr<<pPuffer.data();
                   //     if(ff.data())
                       // fprintf(stderr,"\nPreprocessing code of file %s...\n",ff.data());
                        }
                   else
                    pPuffer+=input.data();
                  // printf("%s",pPuffer.data());
                      initVerilogParser(0,true);
                     VerilogDocGen::buildGlobalVerilogVariableDict(fileDef,true);
                  
		
                   if(memberDef)// write code for function body
                   {
                    ClassDef *dd=memberDef->getClassDef();
	                if(dd)
	                g_CurrClass=dd->className();
                    VerilogDocGen::setCurrVerilogClass(g_CurrClass);
						startLine--;
            
                   }
                      inputVerilogString   = pPuffer.data();
                      inputPosition = 0;
					  iSize=0;
                      g_buf=new char[input.length()+1024];
                      assert(g_buf);
				  
					  g_currentFontClass = 0;
                      g_needsTermination = FALSE;
 
                      if (endLine!=-1)
                      g_inputLines  = endLine+1;
					    else
                      g_inputLines  = countLines();
                      totLines=g_inputLines;
				      if (startLine!=-1)
                        yyLineNr    = startLine;
                      else
                        yyLineNr    = 1;
                         g_exampleName   = exampleName;
                        g_sourceFileDef = fileDef;
                         if (isExampleBlock && fileDef==0)
                        {
                          // create a dummy filedef for the example
                         g_sourceFileDef = new FileDef("",exampleName);
                        }
                       g_searchCtx = searchCtx;
                       if (g_sourceFileDef) 
                       {
                        QCString qcs("100001");
                        setCurrentDoc(qcs);
                       }
 
                       g_currentDefinition = 0;
                       g_currentMemberDef = 0;
                
                      if (!g_exampleName.isEmpty())
                      {
                       g_exampleFile = convertNameToFile(g_exampleName+"-example");
                       }
  
                      g_includeCodeFragment = inlineFragment;
                        if(!memberDef) startCodeLine();
             
               bool xilinx_ucf=isConstraintFile(yyFileName,".ucf");
                    bool altera_qsf=isConstraintFile(yyFileName,".qsf");

                   if(xilinx_ucf || altera_qsf) 
                     {
                     parseConstraint(input);
                     return;
                     } 
				   
                     
  		             verilogscannerYYrestart( verilogscannerYYin );
				    g_parseCode=true;
                    MyParserConv conv;
 	                resetScanner(input.data(),&conv);
                     int ok=conv.parse(&conv);
					
					if (isExampleBlock && g_sourceFileDef)
                    {
                     // delete the temporary file definition used for this example
                       delete g_sourceFileDef;
                       g_sourceFileDef=0;
                    }
                   
				    printVerilogBuffer(true);
				    	 if (fileDef)
                     {
                        TooltipManager::instance()->writeTooltips(*g_code);
                     }
				
				  //  globalMemberList.clear();
				    g_parseCode=false;
				    delete [] g_buf;g_buf=0;
				   return;
                    }

//-------------------------------------------------------------------------------------------------------

//	parse 'include /'define
static void parseGlobalMember(){
       
        QCString tmp,args,name,comment;
		QCString qcs(getVerilogString());
         bool bInc=qcs.contains("`include"); 
       
        if(qcs.stripPrefix("`define") || qcs.stripPrefix("`include"))
	    {
         comment=checkComment(qcs);
           if(!comment.stripPrefix("//%"))
              comment.resize(0);
         QRegExp reg("[^a-zA-Z_0-9$]+");
		 qcs=qcs.stripWhiteSpace();
	     int ll=qcs.find(reg,0);
		 if(ll>0){
			 args=qcs.mid(ll,qcs.length());
		     name=qcs.left(ll);
			 }
		 
		 if(ll==-1)
		 {
            int len;
			QRegExp reg("[[a-zA-Z_][a-zA-Z_0-9$]+");
			int ll=reg.match(qcs,0,&len);
			int strlen=qcs.length();
			if(strlen==len)
				 name=qcs;
		 }
		  
		if(!comment.isEmpty())
        handleVerilogCommentBlock(comment,true,yyLineNr);
    
        if(bInc)
         {
          VhdlDocGen::deleteAllChars(qcs,'"');
          qcs.simplifyWhiteSpace();
          if(qcs.isEmpty())return;
          qcs=VerilogDocGen::getFileNameFromString(qcs.data());
          Entry* pTemp=VerilogDocGen::makeNewEntry(qcs.data(),Entry::VARIABLE_SEC,VerilogDocGen::INCLUDE,yyLineNr,true);
          pTemp->type="include";
          return;
        }
    
       //  VhdlDocGen::deleteAllChars(args,'\\');
         Entry* op=getCurrVerilog();
         bool bGlobal=op;
         Entry* pTemp=VerilogDocGen::makeNewEntry(name.data(),Entry::VARIABLE_SEC,VerilogDocGen::FEATURE,defineLineContinue,bGlobal);
         pTemp->args=args;
         pTemp->type="feature";
     
        //    if(getCurrVerilog()!=0) return; // found definition outside a module(not global)
       if(!bGlobal){ 
         Entry *pNew=new Entry(*pTemp);
         globalMemberList.insert(pNew->name,pNew);
         }
        }

}// parseGlobalMember


bool handleVerilogCommentBlock(const QCString &doc,bool brief,int iDoc)
{
  int position=0;
  bool needsEntry=FALSE;
   if(g_parseCode) return 0;
  Entry* curr=getCurrVerilogEntry();
  if(curr==NULL){
  assert(0);
  curr=new Entry();
   curRoots->addSubEntry(curr);
  }
  Protection protection=Public;
  if (brief) 
    curr->briefLine = iDoc; 
  else 
    curr->docLine = iDoc;

 // printf("parseCommentBlock %p [%s]\n",curr,doc.data());
  while(parseCommentBlock(
	g_thisParser,
	curr,
	doc,        // text
	yyFileName, // file
	iDocLine,   // line of block start
	brief, 
	false,
	FALSE,
	protection,
     position,
     needsEntry
     )){
         if (needsEntry)
         {
         // fprintf(stderr,"\n<<need new entry in while%s>>",doc.data());
           VerilogDocGen::makeNewEntry(curr->name.data(),curr->section,curr->spec,0,true);
           }
        }
  
  if (needsEntry)
  {
    //fprintf(stderr,"\n<<need new entry %s>>",doc.data());
    VerilogDocGen::makeNewEntry(curr->name.data(),curr->section,curr->spec,0,true);
  }

  iDocLine=-1;
  return false;
}

// returns the stored member in the global list
// file : member file

MemberDef* findGlobalMember(const QCString & file, const QCString& memName){
 MemberDef *md;
 bool ambig;
  FileDef *fd=findFileDef(Doxygen::inputNameDict,file,ambig);
  if(!fd) return NULL;
     MemberList * ml=fd->getMemberList(MemberListType_allMembersList);
         
  if(ml==NULL) return NULL;
 
    MemberListIterator fmni(*ml);
     
	    for (fmni.toFirst();(md=fmni.current());++fmni)
        {
            if(md->getMemberSpecifiers()==0 || md->getMemberSpecifiers()==VerilogDocGen::FEATURE ){
             if(strcmp(md->name().data(),memName.data())==0) return md;  
		  }
		}//for
 return NULL;
}//findDefinition


MemberDef* findGlobalMember(const QCString& memName){
 QCString temp=memName;
 temp.stripPrefix("`");
  Entry* ee=globalMemberList.find(temp.data());  
		   if(ee){
	       QCString file=VerilogDocGen::getFileNameFromString(ee->fileName.data());
	        return findGlobalMember(file,temp);
	        }
	  
	  return NULL;      
  }       

 void parseLib(char *str)
{
 QRegExp ep("[\t ]");
 QCString temp=str;

 temp.stripPrefix("library");
 QCString lib=temp.simplifyWhiteSpace();
 
 if(!g_parseCode)
 {
   yyLineNr+=temp.contains('\n');
   int i=lib.find(ep);
   assert(i>0);
   Entry* pTemp=VerilogDocGen::makeNewEntry(lib.left(i).data(),Entry::VARIABLE_SEC,VerilogDocGen::LIBRARY,yyLineNr);
   pTemp->type="library";
   Entry *pNew=new Entry(*pTemp);
   globalMemberList.insert(pNew->name,pNew);
   
}
else
  {
      // qlist.append(new QCString(verilogscannerYYtext)); 
      printVerilogBuffer(true);
      writeFont("vhdlkeyword","library");
      codifyLines(temp.data());
  }

}//parseLib

QCString checkComment(QCString& q)
{
  QCString comment;
  int j=q.find("//");
  if(j>0){
   comment=q.right(q.length()-j);
   q=q.left(j);
   return comment;
  }
  
  int k=q.find("/*");
  int l=q.find("*/");
  
  if((k>0) &&(l>k) )
  {
   comment=q.right(q.length()-k);
   q=q.left(k);
  }
  return comment;
}

 void composeString(QCString& q)
{
  QRegExp ep("[`a-zA-Z0-9_'?]+");
  QRegExp ep2("[\\s]+");
 //  j = reg.match(temp.data(),0,&len);
 int index=q.find("§");
 if(index>-1)
  q=q.remove(index,1);
 
 int len;
 int j=ep.match(q.data(),0,&len );
 while(j>=0){
 QCString left=q.left(len);
  qlist.append(new QCString(left.data())); 
  q=q.right(q.length()-len);
  
  j=ep2.match(q.data(),0,&len);
  
  if(j>=0)
  {
   left=q.left(len);
   qlist.append(new QCString(left.data())); 
   q=q.right(q.length()-len);
  }
  
 j=ep.match(q.data(),0,&len);
 if(j>0)
  len=1;
 }
if(!q.isEmpty()) 
 qlist.append(new QCString(q.data())); 
}

static void writeInclude(QCString inc)
{
   if(inc.isEmpty())  return;
   int i=inc.find("\"");
   int j=inc.findRev("\"");
   
   if(i>=0 && j>i)
   {
    QCString first=inc.left(i+1);
    QCString third=inc.right(inc.length()-j);
    QCString mid=inc.mid(i+1,j-i-1);
    QCString ff=VerilogDocGen::getFileNameFromString(mid.data());
    bool ambig;
     FileDef *fd=findFileDef(Doxygen::inputNameDict,ff,ambig);
     if(fd)
     {
       g_code->codify(first.data());
       g_code->writeCodeLink(fd->getReference(),
	                      fd->getOutputFileBase(),
			              fd->fileName(),
			              mid.data(),0
			              );
       g_code->codify(third.data());  
     }
     else
      writeWord(inc.data());
 
   }
}

