libnl 3.0
|
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 "/build/buildd/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 "/build/buildd/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 "/build/buildd/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 "/build/buildd/libnl3-3.0/./lib/route/cls/ematch_grammar.l" 01053 01054 YY_BREAK 01055 case 2: 01056 YY_RULE_SETUP 01057 #line 36 "/build/buildd/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 "/build/buildd/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 "/build/buildd/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 "/build/buildd/libnl3-3.0/./lib/route/cls/ematch_grammar.l" 01087 case 6: 01088 YY_RULE_SETUP 01089 #line 59 "/build/buildd/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 "/build/buildd/libnl3-3.0/./lib/route/cls/ematch_grammar.l" 01097 case 8: 01098 YY_RULE_SETUP 01099 #line 65 "/build/buildd/libnl3-3.0/./lib/route/cls/ematch_grammar.l" 01100 return KW_EQ; 01101 YY_BREAK 01102 case 9: 01103 #line 67 "/build/buildd/libnl3-3.0/./lib/route/cls/ematch_grammar.l" 01104 case 10: 01105 YY_RULE_SETUP 01106 #line 67 "/build/buildd/libnl3-3.0/./lib/route/cls/ematch_grammar.l" 01107 return KW_GT; 01108 YY_BREAK 01109 case 11: 01110 #line 69 "/build/buildd/libnl3-3.0/./lib/route/cls/ematch_grammar.l" 01111 case 12: 01112 YY_RULE_SETUP 01113 #line 69 "/build/buildd/libnl3-3.0/./lib/route/cls/ematch_grammar.l" 01114 return KW_LT; 01115 YY_BREAK 01116 case 13: 01117 #line 72 "/build/buildd/libnl3-3.0/./lib/route/cls/ematch_grammar.l" 01118 case 14: 01119 YY_RULE_SETUP 01120 #line 72 "/build/buildd/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 "/build/buildd/libnl3-3.0/./lib/route/cls/ematch_grammar.l" 01125 case 16: 01126 YY_RULE_SETUP 01127 #line 74 "/build/buildd/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 "/build/buildd/libnl3-3.0/./lib/route/cls/ematch_grammar.l" 01132 case 18: 01133 YY_RULE_SETUP 01134 #line 76 "/build/buildd/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 "/build/buildd/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 "/build/buildd/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 "/build/buildd/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 "/build/buildd/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 "/build/buildd/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 "/build/buildd/libnl3-3.0/./lib/route/cls/ematch_grammar.l" 01165 return KW_CLOSE; 01166 YY_BREAK 01167 case 25: 01168 #line 86 "/build/buildd/libnl3-3.0/./lib/route/cls/ematch_grammar.l" 01169 case 26: 01170 YY_RULE_SETUP 01171 #line 86 "/build/buildd/libnl3-3.0/./lib/route/cls/ematch_grammar.l" 01172 return KW_MASK; 01173 YY_BREAK 01174 case 27: 01175 #line 88 "/build/buildd/libnl3-3.0/./lib/route/cls/ematch_grammar.l" 01176 case 28: 01177 YY_RULE_SETUP 01178 #line 88 "/build/buildd/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 "/build/buildd/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 "/build/buildd/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 "/build/buildd/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 "/build/buildd/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 "/build/buildd/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 "/build/buildd/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 "/build/buildd/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 "/build/buildd/libnl3-3.0/./lib/route/cls/ematch_grammar.l" 01218 case 37: 01219 YY_RULE_SETUP 01220 #line 99 "/build/buildd/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 "/build/buildd/libnl3-3.0/./lib/route/cls/ematch_grammar.l" 01225 case 39: 01226 #line 102 "/build/buildd/libnl3-3.0/./lib/route/cls/ematch_grammar.l" 01227 case 40: 01228 YY_RULE_SETUP 01229 #line 102 "/build/buildd/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 "/build/buildd/libnl3-3.0/./lib/route/cls/ematch_grammar.l" 01234 case 42: 01235 YY_RULE_SETUP 01236 #line 104 "/build/buildd/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 "/build/buildd/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 "/build/buildd/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 "/build/buildd/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 "/build/buildd/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 "/build/buildd/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 "/build/buildd/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 "/build/buildd/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 "/build/buildd/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 "/build/buildd/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 "/build/buildd/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 "/build/buildd/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 "/build/buildd/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 "/build/buildd/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 "/build/buildd/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 "/build/buildd/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 "/build/buildd/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 "/build/buildd/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 "/build/buildd/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 "/build/buildd/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 "/build/buildd/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 "/build/buildd/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 "/build/buildd/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 "/build/buildd/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 "/build/buildd/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 "/build/buildd/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 "/build/buildd/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 "/build/buildd/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 "/build/buildd/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 "/build/buildd/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 "/build/buildd/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 "/build/buildd/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 "/build/buildd/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 "/build/buildd/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 "/build/buildd/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 "/build/buildd/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 "/build/buildd/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 "/build/buildd/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 "/build/buildd/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 "/build/buildd/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 "/build/buildd/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 "/build/buildd/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 "/build/buildd/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 "/build/buildd/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 "/build/buildd/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 "/build/buildd/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 "/build/buildd/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 "/build/buildd/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 "/build/buildd/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 "/build/buildd/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 "/build/buildd/libnl3-3.0/./lib/route/cls/ematch_grammar.l"