ematch_grammar.c

00001 #line 2 "route/cls/ematch_grammar.c"
00002 
00003 #line 4 "route/cls/ematch_grammar.c"
00004 
00005 #define  YY_INT_ALIGNED short int
00006 
00007 /* A lexical scanner generated by flex */
00008 
00009 #define FLEX_SCANNER
00010 #define YY_FLEX_MAJOR_VERSION 2
00011 #define YY_FLEX_MINOR_VERSION 5
00012 #define YY_FLEX_SUBMINOR_VERSION 35
00013 #if YY_FLEX_SUBMINOR_VERSION > 0
00014 #define FLEX_BETA
00015 #endif
00016 
00017 /* First, we deal with  platform-specific or compiler-specific issues. */
00018 
00019 /* begin standard C headers. */
00020 #include <stdio.h>
00021 #include <string.h>
00022 #include <errno.h>
00023 #include <stdlib.h>
00024 
00025 /* end standard C headers. */
00026 
00027 /* flex integer type definitions */
00028 
00029 #ifndef FLEXINT_H
00030 #define FLEXINT_H
00031 
00032 /* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
00033 
00034 #if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
00035 
00036 /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
00037  * if you want the limit (max/min) macros for int types. 
00038  */
00039 #ifndef __STDC_LIMIT_MACROS
00040 #define __STDC_LIMIT_MACROS 1
00041 #endif
00042 
00043 #include <inttypes.h>
00044 typedef int8_t flex_int8_t;
00045 typedef uint8_t flex_uint8_t;
00046 typedef int16_t flex_int16_t;
00047 typedef uint16_t flex_uint16_t;
00048 typedef int32_t flex_int32_t;
00049 typedef uint32_t flex_uint32_t;
00050 #else
00051 typedef signed char flex_int8_t;
00052 typedef short int flex_int16_t;
00053 typedef int flex_int32_t;
00054 typedef unsigned char flex_uint8_t; 
00055 typedef unsigned short int flex_uint16_t;
00056 typedef unsigned int flex_uint32_t;
00057 
00058 /* Limits of integral types. */
00059 #ifndef INT8_MIN
00060 #define INT8_MIN               (-128)
00061 #endif
00062 #ifndef INT16_MIN
00063 #define INT16_MIN              (-32767-1)
00064 #endif
00065 #ifndef INT32_MIN
00066 #define INT32_MIN              (-2147483647-1)
00067 #endif
00068 #ifndef INT8_MAX
00069 #define INT8_MAX               (127)
00070 #endif
00071 #ifndef INT16_MAX
00072 #define INT16_MAX              (32767)
00073 #endif
00074 #ifndef INT32_MAX
00075 #define INT32_MAX              (2147483647)
00076 #endif
00077 #ifndef UINT8_MAX
00078 #define UINT8_MAX              (255U)
00079 #endif
00080 #ifndef UINT16_MAX
00081 #define UINT16_MAX             (65535U)
00082 #endif
00083 #ifndef UINT32_MAX
00084 #define UINT32_MAX             (4294967295U)
00085 #endif
00086 
00087 #endif /* ! C99 */
00088 
00089 #endif /* ! FLEXINT_H */
00090 
00091 #ifdef __cplusplus
00092 
00093 /* The "const" storage-class-modifier is valid. */
00094 #define YY_USE_CONST
00095 
00096 #else   /* ! __cplusplus */
00097 
00098 /* C99 requires __STDC__ to be defined as 1. */
00099 #if defined (__STDC__)
00100 
00101 #define YY_USE_CONST
00102 
00103 #endif  /* defined (__STDC__) */
00104 #endif  /* ! __cplusplus */
00105 
00106 #ifdef YY_USE_CONST
00107 #define yyconst const
00108 #else
00109 #define yyconst
00110 #endif
00111 
00112 /* Returned upon end-of-file. */
00113 #define YY_NULL 0
00114 
00115 /* Promotes a possibly negative, possibly signed char to an unsigned
00116  * integer for use as an array index.  If the signed char is negative,
00117  * we want to instead treat it as an 8-bit unsigned char, hence the
00118  * double cast.
00119  */
00120 #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
00121 
00122 /* An opaque pointer. */
00123 #ifndef YY_TYPEDEF_YY_SCANNER_T
00124 #define YY_TYPEDEF_YY_SCANNER_T
00125 typedef void* yyscan_t;
00126 #endif
00127 
00128 /* For convenience, these vars (plus the bison vars far below)
00129    are macros in the reentrant scanner. */
00130 #define yyin yyg->yyin_r
00131 #define yyout yyg->yyout_r
00132 #define yyextra yyg->yyextra_r
00133 #define yyleng yyg->yyleng_r
00134 #define yytext yyg->yytext_r
00135 #define yylineno (YY_CURRENT_BUFFER_LVALUE->yy_bs_lineno)
00136 #define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column)
00137 #define yy_flex_debug yyg->yy_flex_debug_r
00138 
00139 /* Enter a start condition.  This macro really ought to take a parameter,
00140  * but we do it the disgusting crufty way forced on us by the ()-less
00141  * definition of BEGIN.
00142  */
00143 #define BEGIN yyg->yy_start = 1 + 2 *
00144 
00145 /* Translate the current start state into a value that can be later handed
00146  * to BEGIN to return to the state.  The YYSTATE alias is for lex
00147  * compatibility.
00148  */
00149 #define YY_START ((yyg->yy_start - 1) / 2)
00150 #define YYSTATE YY_START
00151 
00152 /* Action number for EOF rule of a given start state. */
00153 #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
00154 
00155 /* Special action meaning "start processing a new file". */
00156 #define YY_NEW_FILE ematch_restart(yyin ,yyscanner )
00157 
00158 #define YY_END_OF_BUFFER_CHAR 0
00159 
00160 /* Size of default input buffer. */
00161 #ifndef YY_BUF_SIZE
00162 #ifdef __ia64__
00163 /* On IA-64, the buffer size is 16k, not 8k.
00164  * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case.
00165  * Ditto for the __ia64__ case accordingly.
00166  */
00167 #define YY_BUF_SIZE 32768
00168 #else
00169 #define YY_BUF_SIZE 16384
00170 #endif /* __ia64__ */
00171 #endif
00172 
00173 /* The state buf must be large enough to hold one state per character in the main buffer.
00174  */
00175 #define YY_STATE_BUF_SIZE   ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
00176 
00177 #ifndef YY_TYPEDEF_YY_BUFFER_STATE
00178 #define YY_TYPEDEF_YY_BUFFER_STATE
00179 typedef struct yy_buffer_state *YY_BUFFER_STATE;
00180 #endif
00181 
00182 #define EOB_ACT_CONTINUE_SCAN 0
00183 #define EOB_ACT_END_OF_FILE 1
00184 #define EOB_ACT_LAST_MATCH 2
00185 
00186     #define YY_LESS_LINENO(n)
00187     
00188 /* Return all but the first "n" matched characters back to the input stream. */
00189 #define yyless(n) \
00190         do \
00191                 { \
00192                 /* Undo effects of setting up yytext. */ \
00193         int yyless_macro_arg = (n); \
00194         YY_LESS_LINENO(yyless_macro_arg);\
00195                 *yy_cp = yyg->yy_hold_char; \
00196                 YY_RESTORE_YY_MORE_OFFSET \
00197                 yyg->yy_c_buf_p = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
00198                 YY_DO_BEFORE_ACTION; /* set up yytext again */ \
00199                 } \
00200         while ( 0 )
00201 
00202 #define unput(c) yyunput( c, yyg->yytext_ptr , yyscanner )
00203 
00204 #ifndef YY_TYPEDEF_YY_SIZE_T
00205 #define YY_TYPEDEF_YY_SIZE_T
00206 typedef size_t yy_size_t;
00207 #endif
00208 
00209 #ifndef YY_STRUCT_YY_BUFFER_STATE
00210 #define YY_STRUCT_YY_BUFFER_STATE
00211 struct yy_buffer_state
00212         {
00213         FILE *yy_input_file;
00214 
00215         char *yy_ch_buf;                /* input buffer */
00216         char *yy_buf_pos;               /* current position in input buffer */
00217 
00218         /* Size of input buffer in bytes, not including room for EOB
00219          * characters.
00220          */
00221         yy_size_t yy_buf_size;
00222 
00223         /* Number of characters read into yy_ch_buf, not including EOB
00224          * characters.
00225          */
00226         int yy_n_chars;
00227 
00228         /* Whether we "own" the buffer - i.e., we know we created it,
00229          * and can realloc() it to grow it, and should free() it to
00230          * delete it.
00231          */
00232         int yy_is_our_buffer;
00233 
00234         /* Whether this is an "interactive" input source; if so, and
00235          * if we're using stdio for input, then we want to use getc()
00236          * instead of fread(), to make sure we stop fetching input after
00237          * each newline.
00238          */
00239         int yy_is_interactive;
00240 
00241         /* Whether we're considered to be at the beginning of a line.
00242          * If so, '^' rules will be active on the next match, otherwise
00243          * not.
00244          */
00245         int yy_at_bol;
00246 
00247     int yy_bs_lineno; /**< The line count. */
00248     int yy_bs_column; /**< The column count. */
00249     
00250         /* Whether to try to fill the input buffer when we reach the
00251          * end of it.
00252          */
00253         int yy_fill_buffer;
00254 
00255         int yy_buffer_status;
00256 
00257 #define YY_BUFFER_NEW 0
00258 #define YY_BUFFER_NORMAL 1
00259         /* When an EOF's been seen but there's still some text to process
00260          * then we mark the buffer as YY_EOF_PENDING, to indicate that we
00261          * shouldn't try reading from the input source any more.  We might
00262          * still have a bunch of tokens to match, though, because of
00263          * possible backing-up.
00264          *
00265          * When we actually see the EOF, we change the status to "new"
00266          * (via ematch_restart()), so that the user can continue scanning by
00267          * just pointing yyin at a new input file.
00268          */
00269 #define YY_BUFFER_EOF_PENDING 2
00270 
00271         };
00272 #endif /* !YY_STRUCT_YY_BUFFER_STATE */
00273 
00274 /* We provide macros for accessing buffer states in case in the
00275  * future we want to put the buffer states in a more general
00276  * "scanner state".
00277  *
00278  * Returns the top of the stack, or NULL.
00279  */
00280 #define YY_CURRENT_BUFFER ( yyg->yy_buffer_stack \
00281                           ? yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] \
00282                           : NULL)
00283 
00284 /* Same as previous macro, but useful when we know that the buffer stack is not
00285  * NULL or when we need an lvalue. For internal use only.
00286  */
00287 #define YY_CURRENT_BUFFER_LVALUE yyg->yy_buffer_stack[yyg->yy_buffer_stack_top]
00288 
00289 void ematch_restart (FILE *input_file ,yyscan_t yyscanner );
00290 void ematch__switch_to_buffer (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner );
00291 YY_BUFFER_STATE ematch__create_buffer (FILE *file,int size ,yyscan_t yyscanner );
00292 void ematch__delete_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner );
00293 void ematch__flush_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner );
00294 void ematch_push_buffer_state (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner );
00295 void ematch_pop_buffer_state (yyscan_t yyscanner );
00296 
00297 static void ematch_ensure_buffer_stack (yyscan_t yyscanner );
00298 static void ematch__load_buffer_state (yyscan_t yyscanner );
00299 static void ematch__init_buffer (YY_BUFFER_STATE b,FILE *file ,yyscan_t yyscanner );
00300 
00301 #define YY_FLUSH_BUFFER ematch__flush_buffer(YY_CURRENT_BUFFER ,yyscanner)
00302 
00303 YY_BUFFER_STATE ematch__scan_buffer (char *base,yy_size_t size ,yyscan_t yyscanner );
00304 YY_BUFFER_STATE ematch__scan_string (yyconst char *yy_str ,yyscan_t yyscanner );
00305 YY_BUFFER_STATE ematch__scan_bytes (yyconst char *bytes,int len ,yyscan_t yyscanner );
00306 
00307 void *ematch_alloc (yy_size_t ,yyscan_t yyscanner );
00308 void *ematch_realloc (void *,yy_size_t ,yyscan_t yyscanner );
00309 void ematch_free (void * ,yyscan_t yyscanner );
00310 
00311 #define yy_new_buffer ematch__create_buffer
00312 
00313 #define yy_set_interactive(is_interactive) \
00314         { \
00315         if ( ! YY_CURRENT_BUFFER ){ \
00316         ematch_ensure_buffer_stack (yyscanner); \
00317                 YY_CURRENT_BUFFER_LVALUE =    \
00318             ematch__create_buffer(yyin,YY_BUF_SIZE ,yyscanner); \
00319         } \
00320         YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
00321         }
00322 
00323 #define yy_set_bol(at_bol) \
00324         { \
00325         if ( ! YY_CURRENT_BUFFER ){\
00326         ematch_ensure_buffer_stack (yyscanner); \
00327                 YY_CURRENT_BUFFER_LVALUE =    \
00328             ematch__create_buffer(yyin,YY_BUF_SIZE ,yyscanner); \
00329         } \
00330         YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
00331         }
00332 
00333 #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
00334 
00335 #define ematch_wrap(n) 1
00336 #define YY_SKIP_YYWRAP
00337 
00338 typedef unsigned char YY_CHAR;
00339 
00340 typedef int yy_state_type;
00341 
00342 #define yytext_ptr yytext_r
00343 
00344 static yy_state_type yy_get_previous_state (yyscan_t yyscanner );
00345 static yy_state_type yy_try_NUL_trans (yy_state_type current_state  ,yyscan_t yyscanner);
00346 static int yy_get_next_buffer (yyscan_t yyscanner );
00347 static void yy_fatal_error (yyconst char msg[] ,yyscan_t yyscanner );
00348 
00349 /* Done after the current pattern has been matched and before the
00350  * corresponding action - sets up yytext.
00351  */
00352 #define YY_DO_BEFORE_ACTION \
00353         yyg->yytext_ptr = yy_bp; \
00354         yyleng = (size_t) (yy_cp - yy_bp); \
00355         yyg->yy_hold_char = *yy_cp; \
00356         *yy_cp = '\0'; \
00357         yyg->yy_c_buf_p = yy_cp;
00358 
00359 #define YY_NUM_RULES 91
00360 #define YY_END_OF_BUFFER 92
00361 /* This struct is not used in this scanner,
00362    but its presence is necessary. */
00363 struct yy_trans_info
00364         {
00365         flex_int32_t yy_verify;
00366         flex_int32_t yy_nxt;
00367         };
00368 static yyconst flex_int16_t yy_accept[393] =
00369     {   0,
00370         0,    0,    0,    0,   92,   90,    1,   18,    2,   26,
00371        23,   24,   30,    5,    5,   12,    8,   10,   90,   90,
00372        90,   90,   90,   90,   90,   90,   90,   90,   90,   90,
00373        90,   90,   90,   90,   90,   90,   90,   90,   90,   90,
00374        90,   91,    3,   91,    4,   90,    1,   14,    5,   90,
00375        28,   90,   29,   90,   90,   90,   40,   90,   90,   90,
00376        90,   90,   15,   90,   90,   90,   90,   32,   90,   90,
00377        90,   33,   90,   90,    7,    9,   90,   11,   90,   90,
00378        90,   90,   90,   90,   90,   90,   90,   16,    3,    6,
00379        13,   19,   37,   90,   39,   90,   90,   90,   38,   17,
00380 
00381        90,   90,   42,   90,   90,   34,   35,   90,   47,   90,
00382        90,   90,   90,   90,   90,   90,   90,   90,   90,   90,
00383        90,   90,   31,   36,   25,   22,   90,   90,   21,   90,
00384        90,   90,   90,   90,   54,   90,   90,   48,   90,   90,
00385        90,   90,   90,   90,   90,   90,   90,   90,   90,   90,
00386        90,   90,   90,   90,   90,   90,   86,   90,   27,   90,
00387        90,   90,   90,   90,   90,   90,   49,   90,   90,   57,
00388        90,   90,   90,   90,   90,   90,   90,   90,   90,   90,
00389        90,   90,   90,   90,   90,   90,   90,   90,   90,   90,
00390        90,   90,   90,   90,   90,   90,   90,   90,   53,   51,
00391 
00392        90,   43,   90,   87,   90,   90,   90,   90,   90,   90,
00393        90,   90,   90,   90,   90,   90,   90,   90,   90,   90,
00394        90,   90,   90,   90,   90,   90,   90,   90,   20,   90,
00395        52,   88,   90,   50,   90,   90,   90,   90,   90,   90,
00396        90,   76,   90,   90,   80,   90,   90,   90,   90,   90,
00397        90,   90,   90,   90,   90,   90,   90,   90,   90,   90,
00398        66,   90,   90,   55,   90,   90,   90,   90,   90,   90,
00399        90,   90,   90,   90,   90,   65,   90,   90,   90,   90,
00400        90,   60,   90,   90,   90,   90,   90,   90,   90,   59,
00401        90,   90,   41,   44,   45,   46,   56,   90,   74,   90,
00402 
00403        90,   58,   90,   90,   90,   90,   62,   90,   90,   61,
00404        90,   90,   90,   90,   90,   63,   90,   90,   90,   90,
00405        90,   90,   90,   90,   90,   90,   90,   90,   90,   90,
00406        90,   90,   90,   90,   90,   90,   90,   90,   90,   89,
00407        72,   90,   90,   90,   70,   81,   82,   90,   90,   90,
00408        64,   71,   83,   90,   90,   90,   90,   90,   90,   90,
00409        90,   90,   90,   90,   90,   90,   90,   90,   77,   90,
00410        67,   75,   90,   68,   90,   90,   78,   90,   90,   84,
00411        69,   90,   90,   90,   90,   90,   90,   85,   73,   90,
00412        79,    0
00413 
00414     } ;
00415 
00416 static yyconst flex_int32_t yy_ec[256] =
00417     {   0,
00418         1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
00419         1,    1,    2,    1,    1,    1,    1,    1,    1,    1,
00420         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00421         1,    2,    4,    5,    1,    1,    1,    6,    1,    7,
00422         8,    1,    9,    1,    1,    1,    1,   10,   11,   12,
00423        13,   14,   14,   15,   14,   16,   14,    1,    1,   17,
00424        18,   19,    1,    1,   20,   21,   22,   23,   24,   25,
00425         1,   26,   27,    1,   28,   29,   30,   31,   32,   33,
00426         1,   34,   35,   36,   37,    1,    1,   38,    1,    1,
00427         1,   39,    1,    1,   40,    1,   41,   42,   43,   44,
00428 
00429        45,   46,   47,   48,   49,    1,   50,   51,   52,   53,
00430        54,   55,   56,   57,   58,   59,   60,   61,   62,   63,
00431        64,    1,    1,   65,    1,    1,    1,    1,    1,    1,
00432         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00433         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00434         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00435         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00436         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00437         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00438         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00439 
00440         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00441         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00442         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00443         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00444         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00445         1,    1,    1,    1,    1
00446     } ;
00447 
00448 static yyconst flex_int32_t yy_meta[66] =
00449     {   0,
00450         1,    2,    3,    1,    3,    2,    2,    2,    2,    1,
00451         1,    1,    1,    1,    1,    1,    2,    2,    2,    1,
00452         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00453         1,    1,    1,    1,    1,    1,    1,    1,    4,    1,
00454         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00455         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00456         1,    1,    1,    1,    2
00457     } ;
00458 
00459 static yyconst flex_int16_t yy_base[396] =
00460     {   0,
00461         0,    0,   63,   64,  537,    0,   68,    0,  538,  530,
00462       538,  538,  538,   62,   69,  538,  538,  516,   55,   57,
00463        52,   55,   60,   67,   72,   73,   64,   79,   75,  100,
00464       115,   65,   83,  475,  102,  117,  118,   89,  121,  131,
00465       482,  467,    0,  538,  538,    0,  133,  538,  167,  179,
00466       538,  123,    0,  111,  124,  132,  516,  153,  138,  151,
00467       169,  171,    0,  172,  170,  178,  171,    0,  129,  515,
00468       517,    0,  469,  466,    0,    0,  485,    0,  183,  466,
00469        41,  471,  186,  475,  482,  183,  480,  538,    0,    0,
00470         0,    0,    0,  184,    0,  187,  189,  207,    0,    0,
00471 
00472       206,  218,    0,  208,  215,    0,    0,  479,  466,  474,
00473       466,  466,  194,  461,  455,  469,  461,  462,  469,  228,
00474       456,  455,    0,    0,    0,    0,  226,  213,    0,  217,
00475       456,  465,  464,  459,    0,  458,  438,    0,  447,  446,
00476       458,  452,  439,  204,  442,  438,  237,  453,  444,  451,
00477       434,  249,  236,  426,  199,  445,    0,  220,    0,  227,
00478       443,  435,  425,  432,  431,  428,    0,  430,  423,    0,
00479       432,  429,  427,  417,  419,  423,  417,  415,  419,  408,
00480       208,  409,  152,  424,  408,  414,  406,  421,  423,  408,
00481       417,  412,  415,  235,  261,  406,  413,  410,    0,    0,
00482 
00483       411,    0,  397,    0,  414,  399,  399,  411,  401,  387,
00484       400,  400,  406,  391,  385,  257,  400,  384,  389,  381,
00485       395,  379,  258,  378,  391,  383,  375,  370,    0,  262,
00486         0,    0,  392,    0,  382,  388,  386,  384,  371,  375,
00487       384,    0,  379,  382,    0,  368,  365,  360,  365,  369,
00488       364,  371,  375,  369,  361,  368,  355,  350,  360,  363,
00489         0,  367,  361,    0,  266,  294,  361,  363,  345,  362,
00490       350,  336,  342,  341,  354,    0,  345,  349,  332,  341,
00491       333,    0,  350,  350,  331,  334,  336,  340,  333,    0,
00492       266,  344,    0,    0,    0,    0,    0,  340,    0,  333,
00493 
00494       336,    0,  336,  320,  328,  332,    0,  335,  330,    0,
00495       323,  330,  325,  309,  325,    0,  324,  317,  307,  311,
00496       315,  318,  310,  322,  312,  320,  306,  299,  303,  305,
00497       314,  314,  300,  299,  297,  299,  304,  303,  296,    0,
00498         0,  305,  293,  302,    0,    0,    0,  289,  287,  287,
00499         0,    0,    0,  286,  279,  285,  283,  285,  287,  290,
00500       281,  265,  275,  277,  273,  270,  266,  261,    0,  268,
00501         0,    0,  264,    0,  265,  214,    0,  207,  209,    0,
00502         0,  205,  170,  109,   93,   75,   53,    0,    0,   57,
00503         0,  538,  325,  329,  333
00504 
00505     } ;
00506 
00507 static yyconst flex_int16_t yy_def[396] =
00508     {   0,
00509       392,    1,  393,  393,  392,  394,  392,  394,  392,  392,
00510       392,  392,  392,  394,  394,  392,  392,  392,  394,  394,
00511       394,  394,  394,  394,  394,  394,  394,  394,  394,  394,
00512       394,  394,  394,  394,  394,  394,  394,  394,  394,  394,
00513       394,  392,  395,  392,  392,  394,  392,  392,  394,  394,
00514       392,  394,  394,  394,  394,  394,  394,  394,  394,  394,
00515       394,  394,  394,  394,  394,  394,  394,  394,  394,  394,
00516       394,  394,  394,  394,  394,  394,  394,  394,  394,  394,
00517       394,  394,  394,  394,  394,  394,  394,  392,  395,   50,
00518       394,  394,  394,  394,  394,  394,  394,  394,  394,  394,
00519 
00520       394,  394,  394,  394,  394,  394,  394,  394,  394,  394,
00521       394,  394,  394,  394,  394,  394,  394,  394,  394,  394,
00522       394,  394,  394,  394,  394,  394,  394,  394,  394,  394,
00523       394,  394,  394,  394,  394,  394,  394,  394,  394,  394,
00524       394,  394,  394,  394,  394,  394,  394,  394,  394,  394,
00525       394,  394,  394,  394,  394,  394,  394,  394,  394,  394,
00526       394,  394,  394,  394,  394,  394,  394,  394,  394,  394,
00527       394,  394,  394,  394,  394,  394,  394,  394,  394,  394,
00528       394,  394,  394,  394,  394,  394,  394,  394,  394,  394,
00529       394,  394,  394,  394,  394,  394,  394,  394,  394,  394,
00530 
00531       394,  394,  394,  394,  394,  394,  394,  394,  394,  394,
00532       394,  394,  394,  394,  394,  394,  394,  394,  394,  394,
00533       394,  394,  394,  394,  394,  394,  394,  394,  394,  394,
00534       394,  394,  394,  394,  394,  394,  394,  394,  394,  394,
00535       394,  394,  394,  394,  394,  394,  394,  394,  394,  394,
00536       394,  394,  394,  394,  394,  394,  394,  394,  394,  394,
00537       394,  394,  394,  394,  394,  394,  394,  394,  394,  394,
00538       394,  394,  394,  394,  394,  394,  394,  394,  394,  394,
00539       394,  394,  394,  394,  394,  394,  394,  394,  394,  394,
00540       394,  394,  394,  394,  394,  394,  394,  394,  394,  394,
00541 
00542       394,  394,  394,  394,  394,  394,  394,  394,  394,  394,
00543       394,  394,  394,  394,  394,  394,  394,  394,  394,  394,
00544       394,  394,  394,  394,  394,  394,  394,  394,  394,  394,
00545       394,  394,  394,  394,  394,  394,  394,  394,  394,  394,
00546       394,  394,  394,  394,  394,  394,  394,  394,  394,  394,
00547       394,  394,  394,  394,  394,  394,  394,  394,  394,  394,
00548       394,  394,  394,  394,  394,  394,  394,  394,  394,  394,
00549       394,  394,  394,  394,  394,  394,  394,  394,  394,  394,
00550       394,  394,  394,  394,  394,  394,  394,  394,  394,  394,
00551       394,    0,  392,  392,  392
00552 
00553     } ;
00554 
00555 static yyconst flex_int16_t yy_nxt[604] =
00556     {   0,
00557         6,    7,    7,    8,    9,   10,   11,   12,   13,   14,
00558        15,   15,   15,   15,   15,   15,   16,   17,   18,   19,
00559         6,   20,    6,   21,   22,    6,   23,    6,   24,   25,
00560        26,   27,   28,    6,   29,   30,   31,    6,    6,    6,
00561        19,    6,   20,   32,   33,   22,   34,    6,   23,    6,
00562        35,   36,   26,   27,   37,    6,   38,   39,   40,   31,
00563        41,    6,    6,    6,   42,   44,   44,   45,   45,   47,
00564        47,   49,   49,   49,   49,   49,   49,   49,   49,   49,
00565        49,   49,   49,   49,   49,   52,   54,   55,   56,  114,
00566        53,   59,   57,   58,  115,   60,   61,   63,   64,   50,
00567 
00568        65,   44,   44,  391,   62,   73,  390,   52,   54,   74,
00569        55,   56,   59,   53,   57,   58,   60,   61,   55,   64,
00570        63,   66,   65,   67,   50,   70,   62,   71,   58,   82,
00571        72,   68,  389,   69,   47,   47,   59,   64,   75,  388,
00572        60,   55,   66,   92,   67,   91,   65,   83,  105,   93,
00573        58,   84,   66,   68,   67,   77,   69,   79,   64,  387,
00574        78,   60,   68,   94,   69,   92,   91,   80,   65,  105,
00575        85,   93,   97,   86,   81,   67,   49,   49,   49,   49,
00576        49,   49,   49,   96,   68,   94,   98,   69,   90,   90,
00577        90,   90,   90,   90,   90,   97,  102,  217,   90,   90,
00578 
00579        90,   90,   90,   90,   99,   96,  100,  101,  104,   98,
00580       103,  218,  386,  123,  124,  103,  125,   97,  102,   90,
00581        90,   90,   90,   90,   90,  111,  126,   99,  117,  100,
00582       101,  121,  103,  104,  118,  123,  124,  103,  125,  112,
00583        97,  127,  128,  129,  136,  130,  172,  126,  159,  158,
00584       191,  160,  137,  194,  173,  192,  214,  385,  384,  195,
00585       383,  215,  382,  128,  127,  229,  129,  130,  144,  145,
00586       158,  159,  146,  147,  160,  148,  194,  176,  149,  150,
00587       186,  195,  151,  187,  152,  153,  154,  229,  188,  155,
00588       177,  182,  230,  183,  189,  265,  247,  257,  248,  258,
00589 
00590       184,  293,  185,  294,  295,  296,  318,  249,  381,  380,
00591       379,  378,  377,  376,  230,  250,  259,  375,  265,  374,
00592       373,  319,  372,  371,  293,   43,   43,   43,   43,   46,
00593       370,  369,   46,   89,   89,  368,  367,  366,  365,  364,
00594       363,  362,  361,  360,  359,  358,  357,  356,  355,  354,
00595       353,  352,  351,  350,  349,  348,  347,  346,  345,  344,
00596       343,  342,  341,  340,  339,  338,  337,  336,  335,  334,
00597       333,  332,  331,  330,  329,  328,  327,  326,  325,  324,
00598       323,  322,  321,  320,  317,  316,  315,  314,  313,  312,
00599       311,  310,  309,  308,  307,  306,  305,  304,  303,  302,
00600 
00601       301,  300,  299,  298,  297,  292,  291,  290,  289,  288,
00602       287,  286,  285,  284,  283,  282,  281,  280,  279,  278,
00603       277,  276,  275,  274,  273,  272,  271,  270,  269,  268,
00604       267,  266,  264,  263,  262,  261,  260,  256,  255,  254,
00605       253,  252,  251,  246,  245,  244,  243,  242,  241,  240,
00606       239,  238,  237,  236,  235,  234,  233,  232,  231,  228,
00607       227,  226,  225,  224,  223,  222,  221,  220,  219,  216,
00608       213,  212,  211,  210,  209,  208,  207,  206,  205,  204,
00609       203,  202,  201,  200,  199,  198,  197,  196,  193,  190,
00610       181,  180,  179,  178,  175,  174,  171,  170,  169,  168,
00611 
00612       167,  166,  165,  164,  163,  162,  161,  157,  156,  143,
00613       142,  141,  140,  139,  138,  135,  134,  133,  132,  131,
00614       122,  120,  119,  116,  113,  110,  109,  108,  107,  106,
00615        95,   88,   87,   76,   51,   48,  392,    5,  392,  392,
00616       392,  392,  392,  392,  392,  392,  392,  392,  392,  392,
00617       392,  392,  392,  392,  392,  392,  392,  392,  392,  392,
00618       392,  392,  392,  392,  392,  392,  392,  392,  392,  392,
00619       392,  392,  392,  392,  392,  392,  392,  392,  392,  392,
00620       392,  392,  392,  392,  392,  392,  392,  392,  392,  392,
00621       392,  392,  392,  392,  392,  392,  392,  392,  392,  392,
00622 
00623       392,  392,  392
00624     } ;
00625 
00626 static yyconst flex_int16_t yy_chk[604] =
00627     {   0,
00628         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00629         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00630         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00631         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00632         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00633         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
00634         1,    1,    1,    1,    1,    3,    4,    3,    4,    7,
00635         7,   14,   14,   14,   14,   14,   14,   14,   15,   15,
00636        15,   15,   15,   15,   15,   19,   20,   21,   22,   81,
00637        19,   25,   23,   24,   81,   25,   26,   27,   28,   14,
00638 
00639        29,    3,    4,  390,   26,   32,  387,   19,   20,   32,
00640        21,   22,   25,   19,   23,   24,   25,   26,   33,   28,
00641        27,   30,   29,   30,   14,   31,   26,   31,   35,   38,
00642        31,   30,  386,   30,   47,   47,   36,   37,   33,  385,
00643        36,   33,   30,   54,   30,   52,   39,   38,   69,   55,
00644        35,   38,   40,   30,   40,   35,   30,   36,   37,  384,
00645        35,   36,   40,   56,   40,   54,   52,   37,   39,   69,
00646        39,   55,   59,   40,   37,   40,   49,   49,   49,   49,
00647        49,   49,   49,   58,   40,   56,   60,   40,   50,   50,
00648        50,   50,   50,   50,   50,   59,   65,  183,   50,   50,
00649 
00650        50,   50,   50,   50,   61,   58,   62,   64,   67,   60,
00651        66,  183,  383,   94,   96,   86,   97,   79,   65,   50,
00652        50,   50,   50,   50,   50,   79,   98,   61,   83,   62,
00653        64,   86,   66,   67,   83,   94,   96,   86,   97,   79,
00654        79,  101,  102,  104,  113,  105,  144,   98,  128,  127,
00655       155,  130,  113,  158,  144,  155,  181,  382,  379,  160,
00656       378,  181,  376,  102,  101,  194,  104,  105,  120,  120,
00657       127,  128,  120,  120,  130,  120,  158,  147,  120,  120,
00658       153,  160,  120,  153,  120,  120,  120,  194,  153,  120,
00659       147,  152,  195,  152,  153,  230,  216,  223,  216,  223,
00660 
00661       152,  265,  152,  266,  266,  266,  291,  216,  375,  373,
00662       370,  368,  367,  366,  195,  216,  223,  365,  230,  364,
00663       363,  291,  362,  361,  265,  393,  393,  393,  393,  394,
00664       360,  359,  394,  395,  395,  358,  357,  356,  355,  354,
00665       350,  349,  348,  344,  343,  342,  339,  338,  337,  336,
00666       335,  334,  333,  332,  331,  330,  329,  328,  327,  326,
00667       325,  324,  323,  322,  321,  320,  319,  318,  317,  315,
00668       314,  313,  312,  311,  309,  308,  306,  305,  304,  303,
00669       301,  300,  298,  292,  289,  288,  287,  286,  285,  284,
00670       283,  281,  280,  279,  278,  277,  275,  274,  273,  272,
00671 
00672       271,  270,  269,  268,  267,  263,  262,  260,  259,  258,
00673       257,  256,  255,  254,  253,  252,  251,  250,  249,  248,
00674       247,  246,  244,  243,  241,  240,  239,  238,  237,  236,
00675       235,  233,  228,  227,  226,  225,  224,  222,  221,  220,
00676       219,  218,  217,  215,  214,  213,  212,  211,  210,  209,
00677       208,  207,  206,  205,  203,  201,  198,  197,  196,  193,
00678       192,  191,  190,  189,  188,  187,  186,  185,  184,  182,
00679       180,  179,  178,  177,  176,  175,  174,  173,  172,  171,
00680       169,  168,  166,  165,  164,  163,  162,  161,  156,  154,
00681       151,  150,  149,  148,  146,  145,  143,  142,  141,  140,
00682 
00683       139,  137,  136,  134,  133,  132,  131,  122,  121,  119,
00684       118,  117,  116,  115,  114,  112,  111,  110,  109,  108,
00685        87,   85,   84,   82,   80,   77,   74,   73,   71,   70,
00686        57,   42,   41,   34,   18,   10,    5,  392,  392,  392,
00687       392,  392,  392,  392,  392,  392,  392,  392,  392,  392,
00688       392,  392,  392,  392,  392,  392,  392,  392,  392,  392,
00689       392,  392,  392,  392,  392,  392,  392,  392,  392,  392,
00690       392,  392,  392,  392,  392,  392,  392,  392,  392,  392,
00691       392,  392,  392,  392,  392,  392,  392,  392,  392,  392,
00692       392,  392,  392,  392,  392,  392,  392,  392,  392,  392,
00693 
00694       392,  392,  392
00695     } ;
00696 
00697 /* The intent behind this definition is that it'll catch
00698  * any uses of REJECT which flex missed.
00699  */
00700 #define REJECT reject_used_but_not_detected
00701 #define yymore() yymore_used_but_not_detected
00702 #define YY_MORE_ADJ 0
00703 #define YY_RESTORE_YY_MORE_OFFSET
00704 #line 1 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
00705 /*
00706  * lib/route/cls/ematch_grammar.l       ematch expression grammar
00707  *
00708  *      This library is free software; you can redistribute it and/or
00709  *      modify it under the terms of the GNU Lesser General Public
00710  *      License as published by the Free Software Foundation version 2.1
00711  *      of the License.
00712  *
00713  * Copyright (c) 2010 Thomas Graf <tgraf@suug.ch>
00714  */
00715 #line 13 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
00716  #include <netlink-local.h>
00717  #include <netlink-tc.h>
00718  #include <netlink/netlink.h>
00719  #include <netlink/route/cls/ematch.h>
00720  #include <netlink/route/cls/ematch/cmp.h>
00721  #include "ematch_syntax.h"
00722 #define YY_NO_INPUT 1
00723 
00724 #line 725 "route/cls/ematch_grammar.c"
00725 
00726 #define INITIAL 0
00727 #define QUOTE 1
00728 
00729 #ifndef YY_NO_UNISTD_H
00730 /* Special case for "unistd.h", since it is non-ANSI. We include it way
00731  * down here because we want the user's section 1 to have been scanned first.
00732  * The user has a chance to override it with an option.
00733  */
00734 #include <unistd.h>
00735 #endif
00736 
00737 #ifndef YY_EXTRA_TYPE
00738 #define YY_EXTRA_TYPE void *
00739 #endif
00740 
00741 /* Holds the entire state of the reentrant scanner. */
00742 struct yyguts_t
00743     {
00744 
00745     /* User-defined. Not touched by flex. */
00746     YY_EXTRA_TYPE yyextra_r;
00747 
00748     /* The rest are the same as the globals declared in the non-reentrant scanner. */
00749     FILE *yyin_r, *yyout_r;
00750     size_t yy_buffer_stack_top; /**< index of top of stack. */
00751     size_t yy_buffer_stack_max; /**< capacity of stack. */
00752     YY_BUFFER_STATE * yy_buffer_stack; /**< Stack as an array. */
00753     char yy_hold_char;
00754     int yy_n_chars;
00755     int yyleng_r;
00756     char *yy_c_buf_p;
00757     int yy_init;
00758     int yy_start;
00759     int yy_did_buffer_switch_on_eof;
00760     int yy_start_stack_ptr;
00761     int yy_start_stack_depth;
00762     int *yy_start_stack;
00763     yy_state_type yy_last_accepting_state;
00764     char* yy_last_accepting_cpos;
00765 
00766     int yylineno_r;
00767     int yy_flex_debug_r;
00768 
00769     char *yytext_r;
00770     int yy_more_flag;
00771     int yy_more_len;
00772 
00773     YYSTYPE * yylval_r;
00774 
00775     }; /* end struct yyguts_t */
00776 
00777 static int yy_init_globals (yyscan_t yyscanner );
00778 
00779     /* This must go here because YYSTYPE and YYLTYPE are included
00780      * from bison output in section 1.*/
00781     #    define yylval yyg->yylval_r
00782     
00783 int ematch_lex_init (yyscan_t* scanner);
00784 
00785 int ematch_lex_init_extra (YY_EXTRA_TYPE user_defined,yyscan_t* scanner);
00786 
00787 /* Accessor methods to globals.
00788    These are made visible to non-reentrant scanners for convenience. */
00789 
00790 int ematch_lex_destroy (yyscan_t yyscanner );
00791 
00792 int ematch_get_debug (yyscan_t yyscanner );
00793 
00794 void ematch_set_debug (int debug_flag ,yyscan_t yyscanner );
00795 
00796 YY_EXTRA_TYPE ematch_get_extra (yyscan_t yyscanner );
00797 
00798 void ematch_set_extra (YY_EXTRA_TYPE user_defined ,yyscan_t yyscanner );
00799 
00800 FILE *ematch_get_in (yyscan_t yyscanner );
00801 
00802 void ematch_set_in  (FILE * in_str ,yyscan_t yyscanner );
00803 
00804 FILE *ematch_get_out (yyscan_t yyscanner );
00805 
00806 void ematch_set_out  (FILE * out_str ,yyscan_t yyscanner );
00807 
00808 int ematch_get_leng (yyscan_t yyscanner );
00809 
00810 char *ematch_get_text (yyscan_t yyscanner );
00811 
00812 int ematch_get_lineno (yyscan_t yyscanner );
00813 
00814 void ematch_set_lineno (int line_number ,yyscan_t yyscanner );
00815 
00816 YYSTYPE * ematch_get_lval (yyscan_t yyscanner );
00817 
00818 void ematch_set_lval (YYSTYPE * yylval_param ,yyscan_t yyscanner );
00819 
00820 /* Macros after this point can all be overridden by user definitions in
00821  * section 1.
00822  */
00823 
00824 #ifndef YY_SKIP_YYWRAP
00825 #ifdef __cplusplus
00826 extern "C" int ematch_wrap (yyscan_t yyscanner );
00827 #else
00828 extern int ematch_wrap (yyscan_t yyscanner );
00829 #endif
00830 #endif
00831 
00832 #ifndef yytext_ptr
00833 static void yy_flex_strncpy (char *,yyconst char *,int ,yyscan_t yyscanner);
00834 #endif
00835 
00836 #ifdef YY_NEED_STRLEN
00837 static int yy_flex_strlen (yyconst char * ,yyscan_t yyscanner);
00838 #endif
00839 
00840 #ifndef YY_NO_INPUT
00841 
00842 #ifdef __cplusplus
00843 static int yyinput (yyscan_t yyscanner );
00844 #else
00845 static int input (yyscan_t yyscanner );
00846 #endif
00847 
00848 #endif
00849 
00850 /* Amount of stuff to slurp up with each read. */
00851 #ifndef YY_READ_BUF_SIZE
00852 #ifdef __ia64__
00853 /* On IA-64, the buffer size is 16k, not 8k */
00854 #define YY_READ_BUF_SIZE 16384
00855 #else
00856 #define YY_READ_BUF_SIZE 8192
00857 #endif /* __ia64__ */
00858 #endif
00859 
00860 /* Copy whatever the last rule matched to the standard output. */
00861 #ifndef ECHO
00862 /* This used to be an fputs(), but since the string might contain NUL's,
00863  * we now use fwrite().
00864  */
00865 #define ECHO do { if (fwrite( yytext, yyleng, 1, yyout )) {} } while (0)
00866 #endif
00867 
00868 /* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
00869  * is returned in "result".
00870  */
00871 #ifndef YY_INPUT
00872 #define YY_INPUT(buf,result,max_size) \
00873         if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
00874                 { \
00875                 int c = '*'; \
00876                 size_t n; \
00877                 for ( n = 0; n < max_size && \
00878                              (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
00879                         buf[n] = (char) c; \
00880                 if ( c == '\n' ) \
00881                         buf[n++] = (char) c; \
00882                 if ( c == EOF && ferror( yyin ) ) \
00883                         YY_FATAL_ERROR( "input in flex scanner failed" ); \
00884                 result = n; \
00885                 } \
00886         else \
00887                 { \
00888                 errno=0; \
00889                 while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \
00890                         { \
00891                         if( errno != EINTR) \
00892                                 { \
00893                                 YY_FATAL_ERROR( "input in flex scanner failed" ); \
00894                                 break; \
00895                                 } \
00896                         errno=0; \
00897                         clearerr(yyin); \
00898                         } \
00899                 }\
00900 \
00901 
00902 #endif
00903 
00904 /* No semi-colon after return; correct usage is to write "yyterminate();" -
00905  * we don't want an extra ';' after the "return" because that will cause
00906  * some compilers to complain about unreachable statements.
00907  */
00908 #ifndef yyterminate
00909 #define yyterminate() return YY_NULL
00910 #endif
00911 
00912 /* Number of entries by which start-condition stack grows. */
00913 #ifndef YY_START_STACK_INCR
00914 #define YY_START_STACK_INCR 25
00915 #endif
00916 
00917 /* Report a fatal error. */
00918 #ifndef YY_FATAL_ERROR
00919 #define YY_FATAL_ERROR(msg) yy_fatal_error( msg , yyscanner)
00920 #endif
00921 
00922 /* end tables serialization structures and prototypes */
00923 
00924 /* Default declaration of generated scanner - a define so the user can
00925  * easily add parameters.
00926  */
00927 #ifndef YY_DECL
00928 #define YY_DECL_IS_OURS 1
00929 
00930 extern int ematch_lex \
00931                (YYSTYPE * yylval_param ,yyscan_t yyscanner);
00932 
00933 #define YY_DECL int ematch_lex \
00934                (YYSTYPE * yylval_param , yyscan_t yyscanner)
00935 #endif /* !YY_DECL */
00936 
00937 /* Code executed at the beginning of each rule, after yytext and yyleng
00938  * have been set up.
00939  */
00940 #ifndef YY_USER_ACTION
00941 #define YY_USER_ACTION
00942 #endif
00943 
00944 /* Code executed at the end of each rule. */
00945 #ifndef YY_BREAK
00946 #define YY_BREAK break;
00947 #endif
00948 
00949 #define YY_RULE_SETUP \
00950         YY_USER_ACTION
00951 
00952 /** The main scanner function which does all the work.
00953  */
00954 YY_DECL
00955 {
00956         register yy_state_type yy_current_state;
00957         register char *yy_cp, *yy_bp;
00958         register int yy_act;
00959     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
00960 
00961 #line 32 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
00962 
00963 
00964 #line 965 "route/cls/ematch_grammar.c"
00965 
00966     yylval = yylval_param;
00967 
00968         if ( !yyg->yy_init )
00969                 {
00970                 yyg->yy_init = 1;
00971 
00972 #ifdef YY_USER_INIT
00973                 YY_USER_INIT;
00974 #endif
00975 
00976                 if ( ! yyg->yy_start )
00977                         yyg->yy_start = 1;      /* first start state */
00978 
00979                 if ( ! yyin )
00980                         yyin = stdin;
00981 
00982                 if ( ! yyout )
00983                         yyout = stdout;
00984 
00985                 if ( ! YY_CURRENT_BUFFER ) {
00986                         ematch_ensure_buffer_stack (yyscanner);
00987                         YY_CURRENT_BUFFER_LVALUE =
00988                                 ematch__create_buffer(yyin,YY_BUF_SIZE ,yyscanner);
00989                 }
00990 
00991                 ematch__load_buffer_state(yyscanner );
00992                 }
00993 
00994         while ( 1 )             /* loops until end-of-file is reached */
00995                 {
00996                 yy_cp = yyg->yy_c_buf_p;
00997 
00998                 /* Support of yytext. */
00999                 *yy_cp = yyg->yy_hold_char;
01000 
01001                 /* yy_bp points to the position in yy_ch_buf of the start of
01002                  * the current run.
01003                  */
01004                 yy_bp = yy_cp;
01005 
01006                 yy_current_state = yyg->yy_start;
01007 yy_match:
01008                 do
01009                         {
01010                         register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
01011                         if ( yy_accept[yy_current_state] )
01012                                 {
01013                                 yyg->yy_last_accepting_state = yy_current_state;
01014                                 yyg->yy_last_accepting_cpos = yy_cp;
01015                                 }
01016                         while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
01017                                 {
01018                                 yy_current_state = (int) yy_def[yy_current_state];
01019                                 if ( yy_current_state >= 393 )
01020                                         yy_c = yy_meta[(unsigned int) yy_c];
01021                                 }
01022                         yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
01023                         ++yy_cp;
01024                         }
01025                 while ( yy_base[yy_current_state] != 538 );
01026 
01027 yy_find_action:
01028                 yy_act = yy_accept[yy_current_state];
01029                 if ( yy_act == 0 )
01030                         { /* have to back up */
01031                         yy_cp = yyg->yy_last_accepting_cpos;
01032                         yy_current_state = yyg->yy_last_accepting_state;
01033                         yy_act = yy_accept[yy_current_state];
01034                         }
01035 
01036                 YY_DO_BEFORE_ACTION;
01037 
01038 do_action:      /* This label is used only to access EOF actions. */
01039 
01040                 switch ( yy_act )
01041         { /* beginning of action switch */
01042                         case 0: /* must back up */
01043                         /* undo the effects of YY_DO_BEFORE_ACTION */
01044                         *yy_cp = yyg->yy_hold_char;
01045                         yy_cp = yyg->yy_last_accepting_cpos;
01046                         yy_current_state = yyg->yy_last_accepting_state;
01047                         goto yy_find_action;
01048 
01049 case 1:
01050 /* rule 1 can match eol */
01051 YY_RULE_SETUP
01052 #line 34 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01053 
01054         YY_BREAK
01055 case 2:
01056 YY_RULE_SETUP
01057 #line 36 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01058 {
01059                                 NL_DBG(4, "Beginning of quote\n");
01060                                 yylval->q.len = 32;
01061                                 if (!(yylval->q.data = calloc(1, yylval->q.len)))
01062                                         return ERROR;
01063 
01064                                 yylval->q.index = 0;
01065                                 BEGIN(QUOTE);
01066                         }
01067         YY_BREAK
01068 case 3:
01069 YY_RULE_SETUP
01070 #line 46 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01071 {
01072                                 memcpy(yylval->q.data + yylval->q.index, yytext,
01073                                        strlen(yytext));
01074                                 yylval->q.index += strlen(yytext);
01075                         }
01076         YY_BREAK
01077 case 4:
01078 YY_RULE_SETUP
01079 #line 52 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01080 {
01081                                 BEGIN(0);
01082                                 return QUOTED;
01083                         }
01084         YY_BREAK
01085 case 5:
01086 #line 59 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01087 case 6:
01088 YY_RULE_SETUP
01089 #line 59 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01090 {
01091                                 yylval->i = strtoul(yytext, NULL, 0);
01092                                 return NUMBER;
01093                         }
01094         YY_BREAK
01095 case 7:
01096 #line 65 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01097 case 8:
01098 YY_RULE_SETUP
01099 #line 65 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01100 return KW_EQ;
01101         YY_BREAK
01102 case 9:
01103 #line 67 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01104 case 10:
01105 YY_RULE_SETUP
01106 #line 67 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01107 return KW_GT;
01108         YY_BREAK
01109 case 11:
01110 #line 69 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01111 case 12:
01112 YY_RULE_SETUP
01113 #line 69 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01114 return KW_LT;
01115         YY_BREAK
01116 case 13:
01117 #line 72 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01118 case 14:
01119 YY_RULE_SETUP
01120 #line 72 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01121 { yylval->i = TCF_EM_REL_AND; return LOGIC; }
01122         YY_BREAK
01123 case 15:
01124 #line 74 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01125 case 16:
01126 YY_RULE_SETUP
01127 #line 74 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01128 { yylval->i = TCF_EM_REL_OR; return LOGIC; }
01129         YY_BREAK
01130 case 17:
01131 #line 76 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01132 case 18:
01133 YY_RULE_SETUP
01134 #line 76 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01135 return NOT;
01136         YY_BREAK
01137 case 19:
01138 YY_RULE_SETUP
01139 #line 78 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01140 { yylval->i = TCF_EM_CMP; return EMATCH_CMP; }
01141         YY_BREAK
01142 case 20:
01143 YY_RULE_SETUP
01144 #line 79 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01145 { yylval->i = TCF_EM_NBYTE; return EMATCH_NBYTE; }
01146         YY_BREAK
01147 case 21:
01148 YY_RULE_SETUP
01149 #line 80 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01150 { yylval->i = TCF_EM_TEXT; return EMATCH_TEXT; }
01151         YY_BREAK
01152 case 22:
01153 YY_RULE_SETUP
01154 #line 81 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01155 { yylval->i = TCF_EM_META; return EMATCH_META; }
01156         YY_BREAK
01157 case 23:
01158 YY_RULE_SETUP
01159 #line 83 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01160 return KW_OPEN;
01161         YY_BREAK
01162 case 24:
01163 YY_RULE_SETUP
01164 #line 84 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01165 return KW_CLOSE;
01166         YY_BREAK
01167 case 25:
01168 #line 86 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01169 case 26:
01170 YY_RULE_SETUP
01171 #line 86 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01172 return KW_MASK;
01173         YY_BREAK
01174 case 27:
01175 #line 88 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01176 case 28:
01177 YY_RULE_SETUP
01178 #line 88 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01179 return KW_SHIFT;
01180         YY_BREAK
01181 case 29:
01182 YY_RULE_SETUP
01183 #line 89 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01184 return KW_AT;
01185         YY_BREAK
01186 case 30:
01187 YY_RULE_SETUP
01188 #line 90 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01189 return KW_PLUS;
01190         YY_BREAK
01191 case 31:
01192 YY_RULE_SETUP
01193 #line 91 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01194 return KW_FROM;
01195         YY_BREAK
01196 case 32:
01197 YY_RULE_SETUP
01198 #line 92 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01199 return KW_TO;
01200         YY_BREAK
01201 case 33:
01202 YY_RULE_SETUP
01203 #line 94 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01204 { yylval->i = TCF_EM_ALIGN_U8; return ALIGN; }
01205         YY_BREAK
01206 case 34:
01207 YY_RULE_SETUP
01208 #line 95 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01209 { yylval->i = TCF_EM_ALIGN_U16; return ALIGN; }
01210         YY_BREAK
01211 case 35:
01212 YY_RULE_SETUP
01213 #line 96 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01214 { yylval->i = TCF_EM_ALIGN_U32; return ALIGN; }
01215         YY_BREAK
01216 case 36:
01217 #line 99 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01218 case 37:
01219 YY_RULE_SETUP
01220 #line 99 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01221 { yylval->i = TCF_LAYER_LINK; return LAYER; }
01222         YY_BREAK
01223 case 38:
01224 #line 101 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01225 case 39:
01226 #line 102 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01227 case 40:
01228 YY_RULE_SETUP
01229 #line 102 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01230 { yylval->i = TCF_LAYER_NETWORK; return LAYER; }
01231         YY_BREAK
01232 case 41:
01233 #line 104 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01234 case 42:
01235 YY_RULE_SETUP
01236 #line 104 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01237 { yylval->i = TCF_LAYER_TRANSPORT; return LAYER; }
01238         YY_BREAK
01239 case 43:
01240 YY_RULE_SETUP
01241 #line 106 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01242 return META_RANDOM;
01243         YY_BREAK
01244 case 44:
01245 YY_RULE_SETUP
01246 #line 107 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01247 return META_LOADAVG_0;
01248         YY_BREAK
01249 case 45:
01250 YY_RULE_SETUP
01251 #line 108 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01252 return META_LOADAVG_1;
01253         YY_BREAK
01254 case 46:
01255 YY_RULE_SETUP
01256 #line 109 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01257 return META_LOADAVG_2;
01258         YY_BREAK
01259 case 47:
01260 YY_RULE_SETUP
01261 #line 110 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01262 return META_DEV;
01263         YY_BREAK
01264 case 48:
01265 YY_RULE_SETUP
01266 #line 111 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01267 return META_PRIO;
01268         YY_BREAK
01269 case 49:
01270 YY_RULE_SETUP
01271 #line 112 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01272 return META_PROTO;
01273         YY_BREAK
01274 case 50:
01275 YY_RULE_SETUP
01276 #line 113 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01277 return META_PKTTYPE;
01278         YY_BREAK
01279 case 51:
01280 YY_RULE_SETUP
01281 #line 114 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01282 return META_PKTLEN;
01283         YY_BREAK
01284 case 52:
01285 YY_RULE_SETUP
01286 #line 115 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01287 return META_DATALEN;
01288         YY_BREAK
01289 case 53:
01290 YY_RULE_SETUP
01291 #line 116 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01292 return META_MACLEN;
01293         YY_BREAK
01294 case 54:
01295 YY_RULE_SETUP
01296 #line 117 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01297 return META_MARK;
01298         YY_BREAK
01299 case 55:
01300 YY_RULE_SETUP
01301 #line 118 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01302 return META_TCINDEX;
01303         YY_BREAK
01304 case 56:
01305 YY_RULE_SETUP
01306 #line 119 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01307 return META_RTCLASSID;
01308         YY_BREAK
01309 case 57:
01310 YY_RULE_SETUP
01311 #line 120 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01312 return META_RTIIF;
01313         YY_BREAK
01314 case 58:
01315 YY_RULE_SETUP
01316 #line 121 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01317 return META_SK_FAMILY;
01318         YY_BREAK
01319 case 59:
01320 YY_RULE_SETUP
01321 #line 122 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01322 return META_SK_STATE;
01323         YY_BREAK
01324 case 60:
01325 YY_RULE_SETUP
01326 #line 123 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01327 return META_SK_REUSE;
01328         YY_BREAK
01329 case 61:
01330 YY_RULE_SETUP
01331 #line 124 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01332 return META_SK_REFCNT;
01333         YY_BREAK
01334 case 62:
01335 YY_RULE_SETUP
01336 #line 125 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01337 return META_SK_RCVBUF;
01338         YY_BREAK
01339 case 63:
01340 YY_RULE_SETUP
01341 #line 126 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01342 return META_SK_SNDBUF;
01343         YY_BREAK
01344 case 64:
01345 YY_RULE_SETUP
01346 #line 127 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01347 return META_SK_SHUTDOWN;
01348         YY_BREAK
01349 case 65:
01350 YY_RULE_SETUP
01351 #line 128 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01352 return META_SK_PROTO;
01353         YY_BREAK
01354 case 66:
01355 YY_RULE_SETUP
01356 #line 129 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01357 return META_SK_TYPE;
01358         YY_BREAK
01359 case 67:
01360 YY_RULE_SETUP
01361 #line 130 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01362 return META_SK_RMEM_ALLOC;
01363         YY_BREAK
01364 case 68:
01365 YY_RULE_SETUP
01366 #line 131 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01367 return META_SK_WMEM_ALLOC;
01368         YY_BREAK
01369 case 69:
01370 YY_RULE_SETUP
01371 #line 132 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01372 return META_SK_WMEM_QUEUED;
01373         YY_BREAK
01374 case 70:
01375 YY_RULE_SETUP
01376 #line 133 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01377 return META_SK_RCV_QLEN;
01378         YY_BREAK
01379 case 71:
01380 YY_RULE_SETUP
01381 #line 134 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01382 return META_SK_SND_QLEN;
01383         YY_BREAK
01384 case 72:
01385 YY_RULE_SETUP
01386 #line 135 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01387 return META_SK_ERR_QLEN;
01388         YY_BREAK
01389 case 73:
01390 YY_RULE_SETUP
01391 #line 136 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01392 return META_SK_FORWARD_ALLOCS;
01393         YY_BREAK
01394 case 74:
01395 YY_RULE_SETUP
01396 #line 137 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01397 return META_SK_ALLOCS;
01398         YY_BREAK
01399 case 75:
01400 YY_RULE_SETUP
01401 #line 138 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01402 return META_SK_ROUTE_CAPS;
01403         YY_BREAK
01404 case 76:
01405 YY_RULE_SETUP
01406 #line 139 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01407 return META_SK_HASH;
01408         YY_BREAK
01409 case 77:
01410 YY_RULE_SETUP
01411 #line 140 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01412 return META_SK_LINGERTIME;
01413         YY_BREAK
01414 case 78:
01415 YY_RULE_SETUP
01416 #line 141 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01417 return META_SK_ACK_BACKLOG;
01418         YY_BREAK
01419 case 79:
01420 YY_RULE_SETUP
01421 #line 142 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01422 return META_SK_MAX_ACK_BACKLOG;
01423         YY_BREAK
01424 case 80:
01425 YY_RULE_SETUP
01426 #line 143 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01427 return META_SK_PRIO;
01428         YY_BREAK
01429 case 81:
01430 YY_RULE_SETUP
01431 #line 144 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01432 return META_SK_RCVLOWAT;
01433         YY_BREAK
01434 case 82:
01435 YY_RULE_SETUP
01436 #line 145 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01437 return META_SK_RCVTIMEO;
01438         YY_BREAK
01439 case 83:
01440 YY_RULE_SETUP
01441 #line 146 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01442 return META_SK_SNDTIMEO;
01443         YY_BREAK
01444 case 84:
01445 YY_RULE_SETUP
01446 #line 147 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01447 return META_SK_SENDMSG_OFF;
01448         YY_BREAK
01449 case 85:
01450 YY_RULE_SETUP
01451 #line 148 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01452 return META_SK_WRITE_PENDING;
01453         YY_BREAK
01454 case 86:
01455 YY_RULE_SETUP
01456 #line 149 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01457 return META_VLAN;
01458         YY_BREAK
01459 case 87:
01460 YY_RULE_SETUP
01461 #line 150 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01462 return META_RXHASH;
01463         YY_BREAK
01464 case 88:
01465 YY_RULE_SETUP
01466 #line 152 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01467 return META_DEVNAME;
01468         YY_BREAK
01469 case 89:
01470 YY_RULE_SETUP
01471 #line 153 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01472 return META_SK_BOUND_IF;
01473         YY_BREAK
01474 case 90:
01475 YY_RULE_SETUP
01476 #line 156 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01477 {
01478                                 yylval->s = strdup(yytext);
01479                                 if (yylval->s == NULL)
01480                                         return ERROR;
01481                                 NL_DBG(4, "lex STR=%s\n", yylval->s);
01482                                 return STR;
01483                         }
01484         YY_BREAK
01485 case 91:
01486 YY_RULE_SETUP
01487 #line 163 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"
01488 ECHO;
01489         YY_BREAK
01490 #line 1491 "route/cls/ematch_grammar.c"
01491 case YY_STATE_EOF(INITIAL):
01492 case YY_STATE_EOF(QUOTE):
01493         yyterminate();
01494 
01495         case YY_END_OF_BUFFER:
01496                 {
01497                 /* Amount of text matched not including the EOB char. */
01498                 int yy_amount_of_matched_text = (int) (yy_cp - yyg->yytext_ptr) - 1;
01499 
01500                 /* Undo the effects of YY_DO_BEFORE_ACTION. */
01501                 *yy_cp = yyg->yy_hold_char;
01502                 YY_RESTORE_YY_MORE_OFFSET
01503 
01504                 if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
01505                         {
01506                         /* We're scanning a new file or input source.  It's
01507                          * possible that this happened because the user
01508                          * just pointed yyin at a new source and called
01509                          * ematch_lex().  If so, then we have to assure
01510                          * consistency between YY_CURRENT_BUFFER and our
01511                          * globals.  Here is the right place to do so, because
01512                          * this is the first action (other than possibly a
01513                          * back-up) that will match for the new input source.
01514                          */
01515                         yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
01516                         YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin;
01517                         YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
01518                         }
01519 
01520                 /* Note that here we test for yy_c_buf_p "<=" to the position
01521                  * of the first EOB in the buffer, since yy_c_buf_p will
01522                  * already have been incremented past the NUL character
01523                  * (since all states make transitions on EOB to the
01524                  * end-of-buffer state).  Contrast this with the test
01525                  * in input().
01526                  */
01527                 if ( yyg->yy_c_buf_p <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] )
01528                         { /* This was really a NUL. */
01529                         yy_state_type yy_next_state;
01530 
01531                         yyg->yy_c_buf_p = yyg->yytext_ptr + yy_amount_of_matched_text;
01532 
01533                         yy_current_state = yy_get_previous_state( yyscanner );
01534 
01535                         /* Okay, we're now positioned to make the NUL
01536                          * transition.  We couldn't have
01537                          * yy_get_previous_state() go ahead and do it
01538                          * for us because it doesn't know how to deal
01539                          * with the possibility of jamming (and we don't
01540                          * want to build jamming into it because then it
01541                          * will run more slowly).
01542                          */
01543 
01544                         yy_next_state = yy_try_NUL_trans( yy_current_state , yyscanner);
01545 
01546                         yy_bp = yyg->yytext_ptr + YY_MORE_ADJ;
01547 
01548                         if ( yy_next_state )
01549                                 {
01550                                 /* Consume the NUL. */
01551                                 yy_cp = ++yyg->yy_c_buf_p;
01552                                 yy_current_state = yy_next_state;
01553                                 goto yy_match;
01554                                 }
01555 
01556                         else
01557                                 {
01558                                 yy_cp = yyg->yy_c_buf_p;
01559                                 goto yy_find_action;
01560                                 }
01561                         }
01562 
01563                 else switch ( yy_get_next_buffer( yyscanner ) )
01564                         {
01565                         case EOB_ACT_END_OF_FILE:
01566                                 {
01567                                 yyg->yy_did_buffer_switch_on_eof = 0;
01568 
01569                                 if ( ematch_wrap(yyscanner ) )
01570                                         {
01571                                         /* Note: because we've taken care in
01572                                          * yy_get_next_buffer() to have set up
01573                                          * yytext, we can now set up
01574                                          * yy_c_buf_p so that if some total
01575                                          * hoser (like flex itself) wants to
01576                                          * call the scanner after we return the
01577                                          * YY_NULL, it'll still work - another
01578                                          * YY_NULL will get returned.
01579                                          */
01580                                         yyg->yy_c_buf_p = yyg->yytext_ptr + YY_MORE_ADJ;
01581 
01582                                         yy_act = YY_STATE_EOF(YY_START);
01583                                         goto do_action;
01584                                         }
01585 
01586                                 else
01587                                         {
01588                                         if ( ! yyg->yy_did_buffer_switch_on_eof )
01589                                                 YY_NEW_FILE;
01590                                         }
01591                                 break;
01592                                 }
01593 
01594                         case EOB_ACT_CONTINUE_SCAN:
01595                                 yyg->yy_c_buf_p =
01596                                         yyg->yytext_ptr + yy_amount_of_matched_text;
01597 
01598                                 yy_current_state = yy_get_previous_state( yyscanner );
01599 
01600                                 yy_cp = yyg->yy_c_buf_p;
01601                                 yy_bp = yyg->yytext_ptr + YY_MORE_ADJ;
01602                                 goto yy_match;
01603 
01604                         case EOB_ACT_LAST_MATCH:
01605                                 yyg->yy_c_buf_p =
01606                                 &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars];
01607 
01608                                 yy_current_state = yy_get_previous_state( yyscanner );
01609 
01610                                 yy_cp = yyg->yy_c_buf_p;
01611                                 yy_bp = yyg->yytext_ptr + YY_MORE_ADJ;
01612                                 goto yy_find_action;
01613                         }
01614                 break;
01615                 }
01616 
01617         default:
01618                 YY_FATAL_ERROR(
01619                         "fatal flex scanner internal error--no action found" );
01620         } /* end of action switch */
01621                 } /* end of scanning one token */
01622 } /* end of ematch_lex */
01623 
01624 /* yy_get_next_buffer - try to read in a new buffer
01625  *
01626  * Returns a code representing an action:
01627  *      EOB_ACT_LAST_MATCH -
01628  *      EOB_ACT_CONTINUE_SCAN - continue scanning from current position
01629  *      EOB_ACT_END_OF_FILE - end of file
01630  */
01631 static int yy_get_next_buffer (yyscan_t yyscanner)
01632 {
01633     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
01634         register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
01635         register char *source = yyg->yytext_ptr;
01636         register int number_to_move, i;
01637         int ret_val;
01638 
01639         if ( yyg->yy_c_buf_p > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] )
01640                 YY_FATAL_ERROR(
01641                 "fatal flex scanner internal error--end of buffer missed" );
01642 
01643         if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
01644                 { /* Don't try to fill the buffer, so this is an EOF. */
01645                 if ( yyg->yy_c_buf_p - yyg->yytext_ptr - YY_MORE_ADJ == 1 )
01646                         {
01647                         /* We matched a single character, the EOB, so
01648                          * treat this as a final EOF.
01649                          */
01650                         return EOB_ACT_END_OF_FILE;
01651                         }
01652 
01653                 else
01654                         {
01655                         /* We matched some text prior to the EOB, first
01656                          * process it.
01657                          */
01658                         return EOB_ACT_LAST_MATCH;
01659                         }
01660                 }
01661 
01662         /* Try to read more data. */
01663 
01664         /* First move last chars to start of buffer. */
01665         number_to_move = (int) (yyg->yy_c_buf_p - yyg->yytext_ptr) - 1;
01666 
01667         for ( i = 0; i < number_to_move; ++i )
01668                 *(dest++) = *(source++);
01669 
01670         if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
01671                 /* don't do the read, it's not guaranteed to return an EOF,
01672                  * just force an EOF
01673                  */
01674                 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars = 0;
01675 
01676         else
01677                 {
01678                         int num_to_read =
01679                         YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
01680 
01681                 while ( num_to_read <= 0 )
01682                         { /* Not enough room in the buffer - grow it. */
01683 
01684                         /* just a shorter name for the current buffer */
01685                         YY_BUFFER_STATE b = YY_CURRENT_BUFFER;
01686 
01687                         int yy_c_buf_p_offset =
01688                                 (int) (yyg->yy_c_buf_p - b->yy_ch_buf);
01689 
01690                         if ( b->yy_is_our_buffer )
01691                                 {
01692                                 int new_size = b->yy_buf_size * 2;
01693 
01694                                 if ( new_size <= 0 )
01695                                         b->yy_buf_size += b->yy_buf_size / 8;
01696                                 else
01697                                         b->yy_buf_size *= 2;
01698 
01699                                 b->yy_ch_buf = (char *)
01700                                         /* Include room in for 2 EOB chars. */
01701                                         ematch_realloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ,yyscanner );
01702                                 }
01703                         else
01704                                 /* Can't grow it, we don't own it. */
01705                                 b->yy_ch_buf = 0;
01706 
01707                         if ( ! b->yy_ch_buf )
01708                                 YY_FATAL_ERROR(
01709                                 "fatal error - scanner input buffer overflow" );
01710 
01711                         yyg->yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset];
01712 
01713                         num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
01714                                                 number_to_move - 1;
01715 
01716                         }
01717 
01718                 if ( num_to_read > YY_READ_BUF_SIZE )
01719                         num_to_read = YY_READ_BUF_SIZE;
01720 
01721                 /* Read in more data. */
01722                 YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
01723                         yyg->yy_n_chars, (size_t) num_to_read );
01724 
01725                 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars;
01726                 }
01727 
01728         if ( yyg->yy_n_chars == 0 )
01729                 {
01730                 if ( number_to_move == YY_MORE_ADJ )
01731                         {
01732                         ret_val = EOB_ACT_END_OF_FILE;
01733                         ematch_restart(yyin  ,yyscanner);
01734                         }
01735 
01736                 else
01737                         {
01738                         ret_val = EOB_ACT_LAST_MATCH;
01739                         YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
01740                                 YY_BUFFER_EOF_PENDING;
01741                         }
01742                 }
01743 
01744         else
01745                 ret_val = EOB_ACT_CONTINUE_SCAN;
01746 
01747         if ((yy_size_t) (yyg->yy_n_chars + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
01748                 /* Extend the array by 50%, plus the number we really need. */
01749                 yy_size_t new_size = yyg->yy_n_chars + number_to_move + (yyg->yy_n_chars >> 1);
01750                 YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) ematch_realloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ,yyscanner );
01751                 if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
01752                         YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
01753         }
01754 
01755         yyg->yy_n_chars += number_to_move;
01756         YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] = YY_END_OF_BUFFER_CHAR;
01757         YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR;
01758 
01759         yyg->yytext_ptr = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
01760 
01761         return ret_val;
01762 }
01763 
01764 /* yy_get_previous_state - get the state just before the EOB char was reached */
01765 
01766     static yy_state_type yy_get_previous_state (yyscan_t yyscanner)
01767 {
01768         register yy_state_type yy_current_state;
01769         register char *yy_cp;
01770     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
01771 
01772         yy_current_state = yyg->yy_start;
01773 
01774         for ( yy_cp = yyg->yytext_ptr + YY_MORE_ADJ; yy_cp < yyg->yy_c_buf_p; ++yy_cp )
01775                 {
01776                 register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
01777                 if ( yy_accept[yy_current_state] )
01778                         {
01779                         yyg->yy_last_accepting_state = yy_current_state;
01780                         yyg->yy_last_accepting_cpos = yy_cp;
01781                         }
01782                 while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
01783                         {
01784                         yy_current_state = (int) yy_def[yy_current_state];
01785                         if ( yy_current_state >= 393 )
01786                                 yy_c = yy_meta[(unsigned int) yy_c];
01787                         }
01788                 yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
01789                 }
01790 
01791         return yy_current_state;
01792 }
01793 
01794 /* yy_try_NUL_trans - try to make a transition on the NUL character
01795  *
01796  * synopsis
01797  *      next_state = yy_try_NUL_trans( current_state );
01798  */
01799     static yy_state_type yy_try_NUL_trans  (yy_state_type yy_current_state , yyscan_t yyscanner)
01800 {
01801         register int yy_is_jam;
01802     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; /* This var may be unused depending upon options. */
01803         register char *yy_cp = yyg->yy_c_buf_p;
01804 
01805         register YY_CHAR yy_c = 1;
01806         if ( yy_accept[yy_current_state] )
01807                 {
01808                 yyg->yy_last_accepting_state = yy_current_state;
01809                 yyg->yy_last_accepting_cpos = yy_cp;
01810                 }
01811         while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
01812                 {
01813                 yy_current_state = (int) yy_def[yy_current_state];
01814                 if ( yy_current_state >= 393 )
01815                         yy_c = yy_meta[(unsigned int) yy_c];
01816                 }
01817         yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
01818         yy_is_jam = (yy_current_state == 392);
01819 
01820         return yy_is_jam ? 0 : yy_current_state;
01821 }
01822 
01823 #ifndef YY_NO_INPUT
01824 #ifdef __cplusplus
01825     static int yyinput (yyscan_t yyscanner)
01826 #else
01827     static int input  (yyscan_t yyscanner)
01828 #endif
01829 
01830 {
01831         int c;
01832     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
01833 
01834         *yyg->yy_c_buf_p = yyg->yy_hold_char;
01835 
01836         if ( *yyg->yy_c_buf_p == YY_END_OF_BUFFER_CHAR )
01837                 {
01838                 /* yy_c_buf_p now points to the character we want to return.
01839                  * If this occurs *before* the EOB characters, then it's a
01840                  * valid NUL; if not, then we've hit the end of the buffer.
01841                  */
01842                 if ( yyg->yy_c_buf_p < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] )
01843                         /* This was really a NUL. */
01844                         *yyg->yy_c_buf_p = '\0';
01845 
01846                 else
01847                         { /* need more input */
01848                         int offset = yyg->yy_c_buf_p - yyg->yytext_ptr;
01849                         ++yyg->yy_c_buf_p;
01850 
01851                         switch ( yy_get_next_buffer( yyscanner ) )
01852                                 {
01853                                 case EOB_ACT_LAST_MATCH:
01854                                         /* This happens because yy_g_n_b()
01855                                          * sees that we've accumulated a
01856                                          * token and flags that we need to
01857                                          * try matching the token before
01858                                          * proceeding.  But for input(),
01859                                          * there's no matching to consider.
01860                                          * So convert the EOB_ACT_LAST_MATCH
01861                                          * to EOB_ACT_END_OF_FILE.
01862                                          */
01863 
01864                                         /* Reset buffer status. */
01865                                         ematch_restart(yyin ,yyscanner);
01866 
01867                                         /*FALLTHROUGH*/
01868 
01869                                 case EOB_ACT_END_OF_FILE:
01870                                         {
01871                                         if ( ematch_wrap(yyscanner ) )
01872                                                 return EOF;
01873 
01874                                         if ( ! yyg->yy_did_buffer_switch_on_eof )
01875                                                 YY_NEW_FILE;
01876 #ifdef __cplusplus
01877                                         return yyinput(yyscanner);
01878 #else
01879                                         return input(yyscanner);
01880 #endif
01881                                         }
01882 
01883                                 case EOB_ACT_CONTINUE_SCAN:
01884                                         yyg->yy_c_buf_p = yyg->yytext_ptr + offset;
01885                                         break;
01886                                 }
01887                         }
01888                 }
01889 
01890         c = *(unsigned char *) yyg->yy_c_buf_p; /* cast for 8-bit char's */
01891         *yyg->yy_c_buf_p = '\0';        /* preserve yytext */
01892         yyg->yy_hold_char = *++yyg->yy_c_buf_p;
01893 
01894         return c;
01895 }
01896 #endif  /* ifndef YY_NO_INPUT */
01897 
01898 /** Immediately switch to a different input stream.
01899  * @param input_file A readable stream.
01900  * @param yyscanner The scanner object.
01901  * @note This function does not reset the start condition to @c INITIAL .
01902  */
01903     void ematch_restart  (FILE * input_file , yyscan_t yyscanner)
01904 {
01905     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
01906 
01907         if ( ! YY_CURRENT_BUFFER ){
01908         ematch_ensure_buffer_stack (yyscanner);
01909                 YY_CURRENT_BUFFER_LVALUE =
01910             ematch__create_buffer(yyin,YY_BUF_SIZE ,yyscanner);
01911         }
01912 
01913         ematch__init_buffer(YY_CURRENT_BUFFER,input_file ,yyscanner);
01914         ematch__load_buffer_state(yyscanner );
01915 }
01916 
01917 /** Switch to a different input buffer.
01918  * @param new_buffer The new input buffer.
01919  * @param yyscanner The scanner object.
01920  */
01921     void ematch__switch_to_buffer  (YY_BUFFER_STATE  new_buffer , yyscan_t yyscanner)
01922 {
01923     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
01924 
01925         /* TODO. We should be able to replace this entire function body
01926          * with
01927          *              ematch_pop_buffer_state();
01928          *              ematch_push_buffer_state(new_buffer);
01929      */
01930         ematch_ensure_buffer_stack (yyscanner);
01931         if ( YY_CURRENT_BUFFER == new_buffer )
01932                 return;
01933 
01934         if ( YY_CURRENT_BUFFER )
01935                 {
01936                 /* Flush out information for old buffer. */
01937                 *yyg->yy_c_buf_p = yyg->yy_hold_char;
01938                 YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p;
01939                 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars;
01940                 }
01941 
01942         YY_CURRENT_BUFFER_LVALUE = new_buffer;
01943         ematch__load_buffer_state(yyscanner );
01944 
01945         /* We don't actually know whether we did this switch during
01946          * EOF (ematch_wrap()) processing, but the only time this flag
01947          * is looked at is after ematch_wrap() is called, so it's safe
01948          * to go ahead and always set it.
01949          */
01950         yyg->yy_did_buffer_switch_on_eof = 1;
01951 }
01952 
01953 static void ematch__load_buffer_state  (yyscan_t yyscanner)
01954 {
01955     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
01956         yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
01957         yyg->yytext_ptr = yyg->yy_c_buf_p = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
01958         yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
01959         yyg->yy_hold_char = *yyg->yy_c_buf_p;
01960 }
01961 
01962 /** Allocate and initialize an input buffer state.
01963  * @param file A readable stream.
01964  * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
01965  * @param yyscanner The scanner object.
01966  * @return the allocated buffer state.
01967  */
01968     YY_BUFFER_STATE ematch__create_buffer  (FILE * file, int  size , yyscan_t yyscanner)
01969 {
01970         YY_BUFFER_STATE b;
01971     
01972         b = (YY_BUFFER_STATE) ematch_alloc(sizeof( struct yy_buffer_state ) ,yyscanner );
01973         if ( ! b )
01974                 YY_FATAL_ERROR( "out of dynamic memory in ematch__create_buffer()" );
01975 
01976         b->yy_buf_size = size;
01977 
01978         /* yy_ch_buf has to be 2 characters longer than the size given because
01979          * we need to put in 2 end-of-buffer characters.
01980          */
01981         b->yy_ch_buf = (char *) ematch_alloc(b->yy_buf_size + 2 ,yyscanner );
01982         if ( ! b->yy_ch_buf )
01983                 YY_FATAL_ERROR( "out of dynamic memory in ematch__create_buffer()" );
01984 
01985         b->yy_is_our_buffer = 1;
01986 
01987         ematch__init_buffer(b,file ,yyscanner);
01988 
01989         return b;
01990 }
01991 
01992 /** Destroy the buffer.
01993  * @param b a buffer created with ematch__create_buffer()
01994  * @param yyscanner The scanner object.
01995  */
01996     void ematch__delete_buffer (YY_BUFFER_STATE  b , yyscan_t yyscanner)
01997 {
01998     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
01999 
02000         if ( ! b )
02001                 return;
02002 
02003         if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
02004                 YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
02005 
02006         if ( b->yy_is_our_buffer )
02007                 ematch_free((void *) b->yy_ch_buf ,yyscanner );
02008 
02009         ematch_free((void *) b ,yyscanner );
02010 }
02011 
02012 #ifndef __cplusplus
02013 extern int isatty (int );
02014 #endif /* __cplusplus */
02015     
02016 /* Initializes or reinitializes a buffer.
02017  * This function is sometimes called more than once on the same buffer,
02018  * such as during a ematch_restart() or at EOF.
02019  */
02020     static void ematch__init_buffer  (YY_BUFFER_STATE  b, FILE * file , yyscan_t yyscanner)
02021 
02022 {
02023         int oerrno = errno;
02024     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
02025 
02026         ematch__flush_buffer(b ,yyscanner);
02027 
02028         b->yy_input_file = file;
02029         b->yy_fill_buffer = 1;
02030 
02031     /* If b is the current buffer, then ematch__init_buffer was _probably_
02032      * called from ematch_restart() or through yy_get_next_buffer.
02033      * In that case, we don't want to reset the lineno or column.
02034      */
02035     if (b != YY_CURRENT_BUFFER){
02036         b->yy_bs_lineno = 1;
02037         b->yy_bs_column = 0;
02038     }
02039 
02040         b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
02041     
02042         errno = oerrno;
02043 }
02044 
02045 /** Discard all buffered characters. On the next scan, YY_INPUT will be called.
02046  * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
02047  * @param yyscanner The scanner object.
02048  */
02049     void ematch__flush_buffer (YY_BUFFER_STATE  b , yyscan_t yyscanner)
02050 {
02051     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
02052         if ( ! b )
02053                 return;
02054 
02055         b->yy_n_chars = 0;
02056 
02057         /* We always need two end-of-buffer characters.  The first causes
02058          * a transition to the end-of-buffer state.  The second causes
02059          * a jam in that state.
02060          */
02061         b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
02062         b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
02063 
02064         b->yy_buf_pos = &b->yy_ch_buf[0];
02065 
02066         b->yy_at_bol = 1;
02067         b->yy_buffer_status = YY_BUFFER_NEW;
02068 
02069         if ( b == YY_CURRENT_BUFFER )
02070                 ematch__load_buffer_state(yyscanner );
02071 }
02072 
02073 /** Pushes the new state onto the stack. The new state becomes
02074  *  the current state. This function will allocate the stack
02075  *  if necessary.
02076  *  @param new_buffer The new state.
02077  *  @param yyscanner The scanner object.
02078  */
02079 void ematch_push_buffer_state (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner)
02080 {
02081     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
02082         if (new_buffer == NULL)
02083                 return;
02084 
02085         ematch_ensure_buffer_stack(yyscanner);
02086 
02087         /* This block is copied from ematch__switch_to_buffer. */
02088         if ( YY_CURRENT_BUFFER )
02089                 {
02090                 /* Flush out information for old buffer. */
02091                 *yyg->yy_c_buf_p = yyg->yy_hold_char;
02092                 YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p;
02093                 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars;
02094                 }
02095 
02096         /* Only push if top exists. Otherwise, replace top. */
02097         if (YY_CURRENT_BUFFER)
02098                 yyg->yy_buffer_stack_top++;
02099         YY_CURRENT_BUFFER_LVALUE = new_buffer;
02100 
02101         /* copied from ematch__switch_to_buffer. */
02102         ematch__load_buffer_state(yyscanner );
02103         yyg->yy_did_buffer_switch_on_eof = 1;
02104 }
02105 
02106 /** Removes and deletes the top of the stack, if present.
02107  *  The next element becomes the new top.
02108  *  @param yyscanner The scanner object.
02109  */
02110 void ematch_pop_buffer_state (yyscan_t yyscanner)
02111 {
02112     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
02113         if (!YY_CURRENT_BUFFER)
02114                 return;
02115 
02116         ematch__delete_buffer(YY_CURRENT_BUFFER ,yyscanner);
02117         YY_CURRENT_BUFFER_LVALUE = NULL;
02118         if (yyg->yy_buffer_stack_top > 0)
02119                 --yyg->yy_buffer_stack_top;
02120 
02121         if (YY_CURRENT_BUFFER) {
02122                 ematch__load_buffer_state(yyscanner );
02123                 yyg->yy_did_buffer_switch_on_eof = 1;
02124         }
02125 }
02126 
02127 /* Allocates the stack if it does not exist.
02128  *  Guarantees space for at least one push.
02129  */
02130 static void ematch_ensure_buffer_stack (yyscan_t yyscanner)
02131 {
02132         int num_to_alloc;
02133     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
02134 
02135         if (!yyg->yy_buffer_stack) {
02136 
02137                 /* First allocation is just for 2 elements, since we don't know if this
02138                  * scanner will even need a stack. We use 2 instead of 1 to avoid an
02139                  * immediate realloc on the next call.
02140          */
02141                 num_to_alloc = 1;
02142                 yyg->yy_buffer_stack = (struct yy_buffer_state**)ematch_alloc
02143                                                                 (num_to_alloc * sizeof(struct yy_buffer_state*)
02144                                                                 , yyscanner);
02145                 if ( ! yyg->yy_buffer_stack )
02146                         YY_FATAL_ERROR( "out of dynamic memory in ematch_ensure_buffer_stack()" );
02147                                                                   
02148                 memset(yyg->yy_buffer_stack, 0, num_to_alloc * sizeof(struct yy_buffer_state*));
02149                                 
02150                 yyg->yy_buffer_stack_max = num_to_alloc;
02151                 yyg->yy_buffer_stack_top = 0;
02152                 return;
02153         }
02154 
02155         if (yyg->yy_buffer_stack_top >= (yyg->yy_buffer_stack_max) - 1){
02156 
02157                 /* Increase the buffer to prepare for a possible push. */
02158                 int grow_size = 8 /* arbitrary grow size */;
02159 
02160                 num_to_alloc = yyg->yy_buffer_stack_max + grow_size;
02161                 yyg->yy_buffer_stack = (struct yy_buffer_state**)ematch_realloc
02162                                                                 (yyg->yy_buffer_stack,
02163                                                                 num_to_alloc * sizeof(struct yy_buffer_state*)
02164                                                                 , yyscanner);
02165                 if ( ! yyg->yy_buffer_stack )
02166                         YY_FATAL_ERROR( "out of dynamic memory in ematch_ensure_buffer_stack()" );
02167 
02168                 /* zero only the new slots.*/
02169                 memset(yyg->yy_buffer_stack + yyg->yy_buffer_stack_max, 0, grow_size * sizeof(struct yy_buffer_state*));
02170                 yyg->yy_buffer_stack_max = num_to_alloc;
02171         }
02172 }
02173 
02174 /** Setup the input buffer state to scan directly from a user-specified character buffer.
02175  * @param base the character buffer
02176  * @param size the size in bytes of the character buffer
02177  * @param yyscanner The scanner object.
02178  * @return the newly allocated buffer state object. 
02179  */
02180 YY_BUFFER_STATE ematch__scan_buffer  (char * base, yy_size_t  size , yyscan_t yyscanner)
02181 {
02182         YY_BUFFER_STATE b;
02183     
02184         if ( size < 2 ||
02185              base[size-2] != YY_END_OF_BUFFER_CHAR ||
02186              base[size-1] != YY_END_OF_BUFFER_CHAR )
02187                 /* They forgot to leave room for the EOB's. */
02188                 return 0;
02189 
02190         b = (YY_BUFFER_STATE) ematch_alloc(sizeof( struct yy_buffer_state ) ,yyscanner );
02191         if ( ! b )
02192                 YY_FATAL_ERROR( "out of dynamic memory in ematch__scan_buffer()" );
02193 
02194         b->yy_buf_size = size - 2;      /* "- 2" to take care of EOB's */
02195         b->yy_buf_pos = b->yy_ch_buf = base;
02196         b->yy_is_our_buffer = 0;
02197         b->yy_input_file = 0;
02198         b->yy_n_chars = b->yy_buf_size;
02199         b->yy_is_interactive = 0;
02200         b->yy_at_bol = 1;
02201         b->yy_fill_buffer = 0;
02202         b->yy_buffer_status = YY_BUFFER_NEW;
02203 
02204         ematch__switch_to_buffer(b ,yyscanner );
02205 
02206         return b;
02207 }
02208 
02209 /** Setup the input buffer state to scan a string. The next call to ematch_lex() will
02210  * scan from a @e copy of @a str.
02211  * @param yystr a NUL-terminated string to scan
02212  * @param yyscanner The scanner object.
02213  * @return the newly allocated buffer state object.
02214  * @note If you want to scan bytes that may contain NUL values, then use
02215  *       ematch__scan_bytes() instead.
02216  */
02217 YY_BUFFER_STATE ematch__scan_string (yyconst char * yystr , yyscan_t yyscanner)
02218 {
02219     
02220         return ematch__scan_bytes(yystr,strlen(yystr) ,yyscanner);
02221 }
02222 
02223 /** Setup the input buffer state to scan the given bytes. The next call to ematch_lex() will
02224  * scan from a @e copy of @a bytes.
02225  * @param yybytes the byte buffer to scan
02226  * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes.
02227  * @param yyscanner The scanner object.
02228  * @return the newly allocated buffer state object.
02229  */
02230 YY_BUFFER_STATE ematch__scan_bytes  (yyconst char * yybytes, int  _yybytes_len , yyscan_t yyscanner)
02231 {
02232         YY_BUFFER_STATE b;
02233         char *buf;
02234         yy_size_t n;
02235         int i;
02236     
02237         /* Get memory for full buffer, including space for trailing EOB's. */
02238         n = _yybytes_len + 2;
02239         buf = (char *) ematch_alloc(n ,yyscanner );
02240         if ( ! buf )
02241                 YY_FATAL_ERROR( "out of dynamic memory in ematch__scan_bytes()" );
02242 
02243         for ( i = 0; i < _yybytes_len; ++i )
02244                 buf[i] = yybytes[i];
02245 
02246         buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
02247 
02248         b = ematch__scan_buffer(buf,n ,yyscanner);
02249         if ( ! b )
02250                 YY_FATAL_ERROR( "bad buffer in ematch__scan_bytes()" );
02251 
02252         /* It's okay to grow etc. this buffer, and we should throw it
02253          * away when we're done.
02254          */
02255         b->yy_is_our_buffer = 1;
02256 
02257         return b;
02258 }
02259 
02260 #ifndef YY_EXIT_FAILURE
02261 #define YY_EXIT_FAILURE 2
02262 #endif
02263 
02264 static void yy_fatal_error (yyconst char* msg , yyscan_t yyscanner)
02265 {
02266         (void) fprintf( stderr, "%s\n", msg );
02267         exit( YY_EXIT_FAILURE );
02268 }
02269 
02270 /* Redefine yyless() so it works in section 3 code. */
02271 
02272 #undef yyless
02273 #define yyless(n) \
02274         do \
02275                 { \
02276                 /* Undo effects of setting up yytext. */ \
02277         int yyless_macro_arg = (n); \
02278         YY_LESS_LINENO(yyless_macro_arg);\
02279                 yytext[yyleng] = yyg->yy_hold_char; \
02280                 yyg->yy_c_buf_p = yytext + yyless_macro_arg; \
02281                 yyg->yy_hold_char = *yyg->yy_c_buf_p; \
02282                 *yyg->yy_c_buf_p = '\0'; \
02283                 yyleng = yyless_macro_arg; \
02284                 } \
02285         while ( 0 )
02286 
02287 /* Accessor  methods (get/set functions) to struct members. */
02288 
02289 /** Get the user-defined data for this scanner.
02290  * @param yyscanner The scanner object.
02291  */
02292 YY_EXTRA_TYPE ematch_get_extra  (yyscan_t yyscanner)
02293 {
02294     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
02295     return yyextra;
02296 }
02297 
02298 /** Get the current line number.
02299  * @param yyscanner The scanner object.
02300  */
02301 int ematch_get_lineno  (yyscan_t yyscanner)
02302 {
02303     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
02304     
02305         if (! YY_CURRENT_BUFFER)
02306             return 0;
02307     
02308     return yylineno;
02309 }
02310 
02311 /** Get the current column number.
02312  * @param yyscanner The scanner object.
02313  */
02314 int ematch_get_column  (yyscan_t yyscanner)
02315 {
02316     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
02317     
02318         if (! YY_CURRENT_BUFFER)
02319             return 0;
02320     
02321     return yycolumn;
02322 }
02323 
02324 /** Get the input stream.
02325  * @param yyscanner The scanner object.
02326  */
02327 FILE *ematch_get_in  (yyscan_t yyscanner)
02328 {
02329     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
02330     return yyin;
02331 }
02332 
02333 /** Get the output stream.
02334  * @param yyscanner The scanner object.
02335  */
02336 FILE *ematch_get_out  (yyscan_t yyscanner)
02337 {
02338     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
02339     return yyout;
02340 }
02341 
02342 /** Get the length of the current token.
02343  * @param yyscanner The scanner object.
02344  */
02345 int ematch_get_leng  (yyscan_t yyscanner)
02346 {
02347     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
02348     return yyleng;
02349 }
02350 
02351 /** Get the current token.
02352  * @param yyscanner The scanner object.
02353  */
02354 
02355 char *ematch_get_text  (yyscan_t yyscanner)
02356 {
02357     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
02358     return yytext;
02359 }
02360 
02361 /** Set the user-defined data. This data is never touched by the scanner.
02362  * @param user_defined The data to be associated with this scanner.
02363  * @param yyscanner The scanner object.
02364  */
02365 void ematch_set_extra (YY_EXTRA_TYPE  user_defined , yyscan_t yyscanner)
02366 {
02367     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
02368     yyextra = user_defined ;
02369 }
02370 
02371 /** Set the current line number.
02372  * @param line_number
02373  * @param yyscanner The scanner object.
02374  */
02375 void ematch_set_lineno (int  line_number , yyscan_t yyscanner)
02376 {
02377     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
02378 
02379         /* lineno is only valid if an input buffer exists. */
02380         if (! YY_CURRENT_BUFFER )
02381            yy_fatal_error( "ematch_set_lineno called with no buffer" , yyscanner); 
02382     
02383     yylineno = line_number;
02384 }
02385 
02386 /** Set the current column.
02387  * @param line_number
02388  * @param yyscanner The scanner object.
02389  */
02390 void ematch_set_column (int  column_no , yyscan_t yyscanner)
02391 {
02392     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
02393 
02394         /* column is only valid if an input buffer exists. */
02395         if (! YY_CURRENT_BUFFER )
02396            yy_fatal_error( "ematch_set_column called with no buffer" , yyscanner); 
02397     
02398     yycolumn = column_no;
02399 }
02400 
02401 /** Set the input stream. This does not discard the current
02402  * input buffer.
02403  * @param in_str A readable stream.
02404  * @param yyscanner The scanner object.
02405  * @see ematch__switch_to_buffer
02406  */
02407 void ematch_set_in (FILE *  in_str , yyscan_t yyscanner)
02408 {
02409     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
02410     yyin = in_str ;
02411 }
02412 
02413 void ematch_set_out (FILE *  out_str , yyscan_t yyscanner)
02414 {
02415     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
02416     yyout = out_str ;
02417 }
02418 
02419 int ematch_get_debug  (yyscan_t yyscanner)
02420 {
02421     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
02422     return yy_flex_debug;
02423 }
02424 
02425 void ematch_set_debug (int  bdebug , yyscan_t yyscanner)
02426 {
02427     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
02428     yy_flex_debug = bdebug ;
02429 }
02430 
02431 /* Accessor methods for yylval and yylloc */
02432 
02433 YYSTYPE * ematch_get_lval  (yyscan_t yyscanner)
02434 {
02435     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
02436     return yylval;
02437 }
02438 
02439 void ematch_set_lval (YYSTYPE *  yylval_param , yyscan_t yyscanner)
02440 {
02441     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
02442     yylval = yylval_param;
02443 }
02444 
02445 /* User-visible API */
02446 
02447 /* ematch_lex_init is special because it creates the scanner itself, so it is
02448  * the ONLY reentrant function that doesn't take the scanner as the last argument.
02449  * That's why we explicitly handle the declaration, instead of using our macros.
02450  */
02451 
02452 int ematch_lex_init(yyscan_t* ptr_yy_globals)
02453 
02454 {
02455     if (ptr_yy_globals == NULL){
02456         errno = EINVAL;
02457         return 1;
02458     }
02459 
02460     *ptr_yy_globals = (yyscan_t) ematch_alloc ( sizeof( struct yyguts_t ), NULL );
02461 
02462     if (*ptr_yy_globals == NULL){
02463         errno = ENOMEM;
02464         return 1;
02465     }
02466 
02467     /* By setting to 0xAA, we expose bugs in yy_init_globals. Leave at 0x00 for releases. */
02468     memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t));
02469 
02470     return yy_init_globals ( *ptr_yy_globals );
02471 }
02472 
02473 /* ematch_lex_init_extra has the same functionality as ematch_lex_init, but follows the
02474  * convention of taking the scanner as the last argument. Note however, that
02475  * this is a *pointer* to a scanner, as it will be allocated by this call (and
02476  * is the reason, too, why this function also must handle its own declaration).
02477  * The user defined value in the first argument will be available to ematch_alloc in
02478  * the yyextra field.
02479  */
02480 
02481 int ematch_lex_init_extra(YY_EXTRA_TYPE yy_user_defined,yyscan_t* ptr_yy_globals )
02482 
02483 {
02484     struct yyguts_t dummy_yyguts;
02485 
02486     ematch_set_extra (yy_user_defined, &dummy_yyguts);
02487 
02488     if (ptr_yy_globals == NULL){
02489         errno = EINVAL;
02490         return 1;
02491     }
02492         
02493     *ptr_yy_globals = (yyscan_t) ematch_alloc ( sizeof( struct yyguts_t ), &dummy_yyguts );
02494         
02495     if (*ptr_yy_globals == NULL){
02496         errno = ENOMEM;
02497         return 1;
02498     }
02499     
02500     /* By setting to 0xAA, we expose bugs in
02501     yy_init_globals. Leave at 0x00 for releases. */
02502     memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t));
02503     
02504     ematch_set_extra (yy_user_defined, *ptr_yy_globals);
02505     
02506     return yy_init_globals ( *ptr_yy_globals );
02507 }
02508 
02509 static int yy_init_globals (yyscan_t yyscanner)
02510 {
02511     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
02512     /* Initialization is the same as for the non-reentrant scanner.
02513      * This function is called from ematch_lex_destroy(), so don't allocate here.
02514      */
02515 
02516     yyg->yy_buffer_stack = 0;
02517     yyg->yy_buffer_stack_top = 0;
02518     yyg->yy_buffer_stack_max = 0;
02519     yyg->yy_c_buf_p = (char *) 0;
02520     yyg->yy_init = 0;
02521     yyg->yy_start = 0;
02522 
02523     yyg->yy_start_stack_ptr = 0;
02524     yyg->yy_start_stack_depth = 0;
02525     yyg->yy_start_stack =  NULL;
02526 
02527 /* Defined in main.c */
02528 #ifdef YY_STDINIT
02529     yyin = stdin;
02530     yyout = stdout;
02531 #else
02532     yyin = (FILE *) 0;
02533     yyout = (FILE *) 0;
02534 #endif
02535 
02536     /* For future reference: Set errno on error, since we are called by
02537      * ematch_lex_init()
02538      */
02539     return 0;
02540 }
02541 
02542 /* ematch_lex_destroy is for both reentrant and non-reentrant scanners. */
02543 int ematch_lex_destroy  (yyscan_t yyscanner)
02544 {
02545     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
02546 
02547     /* Pop the buffer stack, destroying each element. */
02548         while(YY_CURRENT_BUFFER){
02549                 ematch__delete_buffer(YY_CURRENT_BUFFER ,yyscanner );
02550                 YY_CURRENT_BUFFER_LVALUE = NULL;
02551                 ematch_pop_buffer_state(yyscanner);
02552         }
02553 
02554         /* Destroy the stack itself. */
02555         ematch_free(yyg->yy_buffer_stack ,yyscanner);
02556         yyg->yy_buffer_stack = NULL;
02557 
02558     /* Destroy the start condition stack. */
02559         ematch_free(yyg->yy_start_stack ,yyscanner );
02560         yyg->yy_start_stack = NULL;
02561 
02562     /* Reset the globals. This is important in a non-reentrant scanner so the next time
02563      * ematch_lex() is called, initialization will occur. */
02564     yy_init_globals( yyscanner);
02565 
02566     /* Destroy the main struct (reentrant only). */
02567     ematch_free ( yyscanner , yyscanner );
02568     yyscanner = NULL;
02569     return 0;
02570 }
02571 
02572 /*
02573  * Internal utility routines.
02574  */
02575 
02576 #ifndef yytext_ptr
02577 static void yy_flex_strncpy (char* s1, yyconst char * s2, int n , yyscan_t yyscanner)
02578 {
02579         register int i;
02580         for ( i = 0; i < n; ++i )
02581                 s1[i] = s2[i];
02582 }
02583 #endif
02584 
02585 #ifdef YY_NEED_STRLEN
02586 static int yy_flex_strlen (yyconst char * s , yyscan_t yyscanner)
02587 {
02588         register int n;
02589         for ( n = 0; s[n]; ++n )
02590                 ;
02591 
02592         return n;
02593 }
02594 #endif
02595 
02596 void *ematch_alloc (yy_size_t  size , yyscan_t yyscanner)
02597 {
02598         return (void *) malloc( size );
02599 }
02600 
02601 void *ematch_realloc  (void * ptr, yy_size_t  size , yyscan_t yyscanner)
02602 {
02603         /* The cast to (char *) in the following accommodates both
02604          * implementations that use char* generic pointers, and those
02605          * that use void* generic pointers.  It works with the latter
02606          * because both ANSI C and C++ allow castless assignment from
02607          * any pointer type to void*, and deal with argument conversions
02608          * as though doing an assignment.
02609          */
02610         return (void *) realloc( (char *) ptr, size );
02611 }
02612 
02613 void ematch_free (void * ptr , yyscan_t yyscanner)
02614 {
02615         free( (char *) ptr );   /* see ematch_realloc() for (char *) cast */
02616 }
02617 
02618 #define YYTABLES_NAME "yytables"
02619 
02620 #line 163 "/root/build/iw/libnl3/libnl3-3.0/./lib/route/cls/ematch_grammar.l"