libnl  3.5.0
ematch_grammar.c
1 #line 1 "lib/route/cls/ematch_grammar.c"
2 
3 #line 3 "lib/route/cls/ematch_grammar.c"
4 
5 #define YY_INT_ALIGNED short int
6 
7 /* A lexical scanner generated by flex */
8 
9 #define FLEX_SCANNER
10 #define YY_FLEX_MAJOR_VERSION 2
11 #define YY_FLEX_MINOR_VERSION 6
12 #define YY_FLEX_SUBMINOR_VERSION 4
13 #if YY_FLEX_SUBMINOR_VERSION > 0
14 #define FLEX_BETA
15 #endif
16 
17 #ifdef yy_create_buffer
18 #define ematch__create_buffer_ALREADY_DEFINED
19 #else
20 #define yy_create_buffer ematch__create_buffer
21 #endif
22 
23 #ifdef yy_delete_buffer
24 #define ematch__delete_buffer_ALREADY_DEFINED
25 #else
26 #define yy_delete_buffer ematch__delete_buffer
27 #endif
28 
29 #ifdef yy_scan_buffer
30 #define ematch__scan_buffer_ALREADY_DEFINED
31 #else
32 #define yy_scan_buffer ematch__scan_buffer
33 #endif
34 
35 #ifdef yy_scan_string
36 #define ematch__scan_string_ALREADY_DEFINED
37 #else
38 #define yy_scan_string ematch__scan_string
39 #endif
40 
41 #ifdef yy_scan_bytes
42 #define ematch__scan_bytes_ALREADY_DEFINED
43 #else
44 #define yy_scan_bytes ematch__scan_bytes
45 #endif
46 
47 #ifdef yy_init_buffer
48 #define ematch__init_buffer_ALREADY_DEFINED
49 #else
50 #define yy_init_buffer ematch__init_buffer
51 #endif
52 
53 #ifdef yy_flush_buffer
54 #define ematch__flush_buffer_ALREADY_DEFINED
55 #else
56 #define yy_flush_buffer ematch__flush_buffer
57 #endif
58 
59 #ifdef yy_load_buffer_state
60 #define ematch__load_buffer_state_ALREADY_DEFINED
61 #else
62 #define yy_load_buffer_state ematch__load_buffer_state
63 #endif
64 
65 #ifdef yy_switch_to_buffer
66 #define ematch__switch_to_buffer_ALREADY_DEFINED
67 #else
68 #define yy_switch_to_buffer ematch__switch_to_buffer
69 #endif
70 
71 #ifdef yypush_buffer_state
72 #define ematch_push_buffer_state_ALREADY_DEFINED
73 #else
74 #define yypush_buffer_state ematch_push_buffer_state
75 #endif
76 
77 #ifdef yypop_buffer_state
78 #define ematch_pop_buffer_state_ALREADY_DEFINED
79 #else
80 #define yypop_buffer_state ematch_pop_buffer_state
81 #endif
82 
83 #ifdef yyensure_buffer_stack
84 #define ematch_ensure_buffer_stack_ALREADY_DEFINED
85 #else
86 #define yyensure_buffer_stack ematch_ensure_buffer_stack
87 #endif
88 
89 #ifdef yylex
90 #define ematch_lex_ALREADY_DEFINED
91 #else
92 #define yylex ematch_lex
93 #endif
94 
95 #ifdef yyrestart
96 #define ematch_restart_ALREADY_DEFINED
97 #else
98 #define yyrestart ematch_restart
99 #endif
100 
101 #ifdef yylex_init
102 #define ematch_lex_init_ALREADY_DEFINED
103 #else
104 #define yylex_init ematch_lex_init
105 #endif
106 
107 #ifdef yylex_init_extra
108 #define ematch_lex_init_extra_ALREADY_DEFINED
109 #else
110 #define yylex_init_extra ematch_lex_init_extra
111 #endif
112 
113 #ifdef yylex_destroy
114 #define ematch_lex_destroy_ALREADY_DEFINED
115 #else
116 #define yylex_destroy ematch_lex_destroy
117 #endif
118 
119 #ifdef yyget_debug
120 #define ematch_get_debug_ALREADY_DEFINED
121 #else
122 #define yyget_debug ematch_get_debug
123 #endif
124 
125 #ifdef yyset_debug
126 #define ematch_set_debug_ALREADY_DEFINED
127 #else
128 #define yyset_debug ematch_set_debug
129 #endif
130 
131 #ifdef yyget_extra
132 #define ematch_get_extra_ALREADY_DEFINED
133 #else
134 #define yyget_extra ematch_get_extra
135 #endif
136 
137 #ifdef yyset_extra
138 #define ematch_set_extra_ALREADY_DEFINED
139 #else
140 #define yyset_extra ematch_set_extra
141 #endif
142 
143 #ifdef yyget_in
144 #define ematch_get_in_ALREADY_DEFINED
145 #else
146 #define yyget_in ematch_get_in
147 #endif
148 
149 #ifdef yyset_in
150 #define ematch_set_in_ALREADY_DEFINED
151 #else
152 #define yyset_in ematch_set_in
153 #endif
154 
155 #ifdef yyget_out
156 #define ematch_get_out_ALREADY_DEFINED
157 #else
158 #define yyget_out ematch_get_out
159 #endif
160 
161 #ifdef yyset_out
162 #define ematch_set_out_ALREADY_DEFINED
163 #else
164 #define yyset_out ematch_set_out
165 #endif
166 
167 #ifdef yyget_leng
168 #define ematch_get_leng_ALREADY_DEFINED
169 #else
170 #define yyget_leng ematch_get_leng
171 #endif
172 
173 #ifdef yyget_text
174 #define ematch_get_text_ALREADY_DEFINED
175 #else
176 #define yyget_text ematch_get_text
177 #endif
178 
179 #ifdef yyget_lineno
180 #define ematch_get_lineno_ALREADY_DEFINED
181 #else
182 #define yyget_lineno ematch_get_lineno
183 #endif
184 
185 #ifdef yyset_lineno
186 #define ematch_set_lineno_ALREADY_DEFINED
187 #else
188 #define yyset_lineno ematch_set_lineno
189 #endif
190 
191 #ifdef yyget_column
192 #define ematch_get_column_ALREADY_DEFINED
193 #else
194 #define yyget_column ematch_get_column
195 #endif
196 
197 #ifdef yyset_column
198 #define ematch_set_column_ALREADY_DEFINED
199 #else
200 #define yyset_column ematch_set_column
201 #endif
202 
203 #ifdef yywrap
204 #define ematch_wrap_ALREADY_DEFINED
205 #else
206 #define yywrap ematch_wrap
207 #endif
208 
209 #ifdef yyget_lval
210 #define ematch_get_lval_ALREADY_DEFINED
211 #else
212 #define yyget_lval ematch_get_lval
213 #endif
214 
215 #ifdef yyset_lval
216 #define ematch_set_lval_ALREADY_DEFINED
217 #else
218 #define yyset_lval ematch_set_lval
219 #endif
220 
221 #ifdef yyalloc
222 #define ematch_alloc_ALREADY_DEFINED
223 #else
224 #define yyalloc ematch_alloc
225 #endif
226 
227 #ifdef yyrealloc
228 #define ematch_realloc_ALREADY_DEFINED
229 #else
230 #define yyrealloc ematch_realloc
231 #endif
232 
233 #ifdef yyfree
234 #define ematch_free_ALREADY_DEFINED
235 #else
236 #define yyfree ematch_free
237 #endif
238 
239 /* First, we deal with platform-specific or compiler-specific issues. */
240 
241 /* begin standard C headers. */
242 #include <stdio.h>
243 #include <string.h>
244 #include <errno.h>
245 #include <stdlib.h>
246 
247 /* end standard C headers. */
248 
249 /* flex integer type definitions */
250 
251 #ifndef FLEXINT_H
252 #define FLEXINT_H
253 
254 /* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
255 
256 #if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
257 
258 /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
259  * if you want the limit (max/min) macros for int types.
260  */
261 #ifndef __STDC_LIMIT_MACROS
262 #define __STDC_LIMIT_MACROS 1
263 #endif
264 
265 #include <inttypes.h>
266 typedef int8_t flex_int8_t;
267 typedef uint8_t flex_uint8_t;
268 typedef int16_t flex_int16_t;
269 typedef uint16_t flex_uint16_t;
270 typedef int32_t flex_int32_t;
271 typedef uint32_t flex_uint32_t;
272 #else
273 typedef signed char flex_int8_t;
274 typedef short int flex_int16_t;
275 typedef int flex_int32_t;
276 typedef unsigned char flex_uint8_t;
277 typedef unsigned short int flex_uint16_t;
278 typedef unsigned int flex_uint32_t;
279 
280 /* Limits of integral types. */
281 #ifndef INT8_MIN
282 #define INT8_MIN (-128)
283 #endif
284 #ifndef INT16_MIN
285 #define INT16_MIN (-32767-1)
286 #endif
287 #ifndef INT32_MIN
288 #define INT32_MIN (-2147483647-1)
289 #endif
290 #ifndef INT8_MAX
291 #define INT8_MAX (127)
292 #endif
293 #ifndef INT16_MAX
294 #define INT16_MAX (32767)
295 #endif
296 #ifndef INT32_MAX
297 #define INT32_MAX (2147483647)
298 #endif
299 #ifndef UINT8_MAX
300 #define UINT8_MAX (255U)
301 #endif
302 #ifndef UINT16_MAX
303 #define UINT16_MAX (65535U)
304 #endif
305 #ifndef UINT32_MAX
306 #define UINT32_MAX (4294967295U)
307 #endif
308 
309 #ifndef SIZE_MAX
310 #define SIZE_MAX (~(size_t)0)
311 #endif
312 
313 #endif /* ! C99 */
314 
315 #endif /* ! FLEXINT_H */
316 
317 /* begin standard C++ headers. */
318 
319 /* TODO: this is always defined, so inline it */
320 #define yyconst const
321 
322 #if defined(__GNUC__) && __GNUC__ >= 3
323 #define yynoreturn __attribute__((__noreturn__))
324 #else
325 #define yynoreturn
326 #endif
327 
328 /* Returned upon end-of-file. */
329 #define YY_NULL 0
330 
331 /* Promotes a possibly negative, possibly signed char to an
332  * integer in range [0..255] for use as an array index.
333  */
334 #define YY_SC_TO_UI(c) ((YY_CHAR) (c))
335 
336 /* An opaque pointer. */
337 #ifndef YY_TYPEDEF_YY_SCANNER_T
338 #define YY_TYPEDEF_YY_SCANNER_T
339 typedef void* yyscan_t;
340 #endif
341 
342 /* For convenience, these vars (plus the bison vars far below)
343  are macros in the reentrant scanner. */
344 #define yyin yyg->yyin_r
345 #define yyout yyg->yyout_r
346 #define yyextra yyg->yyextra_r
347 #define yyleng yyg->yyleng_r
348 #define yytext yyg->yytext_r
349 #define yylineno (YY_CURRENT_BUFFER_LVALUE->yy_bs_lineno)
350 #define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column)
351 #define yy_flex_debug yyg->yy_flex_debug_r
352 
353 /* Enter a start condition. This macro really ought to take a parameter,
354  * but we do it the disgusting crufty way forced on us by the ()-less
355  * definition of BEGIN.
356  */
357 #define BEGIN yyg->yy_start = 1 + 2 *
358 /* Translate the current start state into a value that can be later handed
359  * to BEGIN to return to the state. The YYSTATE alias is for lex
360  * compatibility.
361  */
362 #define YY_START ((yyg->yy_start - 1) / 2)
363 #define YYSTATE YY_START
364 /* Action number for EOF rule of a given start state. */
365 #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
366 /* Special action meaning "start processing a new file". */
367 #define YY_NEW_FILE yyrestart( yyin , yyscanner )
368 #define YY_END_OF_BUFFER_CHAR 0
369 
370 /* Size of default input buffer. */
371 #ifndef YY_BUF_SIZE
372 #ifdef __ia64__
373 /* On IA-64, the buffer size is 16k, not 8k.
374  * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case.
375  * Ditto for the __ia64__ case accordingly.
376  */
377 #define YY_BUF_SIZE 32768
378 #else
379 #define YY_BUF_SIZE 16384
380 #endif /* __ia64__ */
381 #endif
382 
383 /* The state buf must be large enough to hold one state per character in the main buffer.
384  */
385 #define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
386 
387 #ifndef YY_TYPEDEF_YY_BUFFER_STATE
388 #define YY_TYPEDEF_YY_BUFFER_STATE
389 typedef struct yy_buffer_state *YY_BUFFER_STATE;
390 #endif
391 
392 #ifndef YY_TYPEDEF_YY_SIZE_T
393 #define YY_TYPEDEF_YY_SIZE_T
394 typedef size_t yy_size_t;
395 #endif
396 
397 #define EOB_ACT_CONTINUE_SCAN 0
398 #define EOB_ACT_END_OF_FILE 1
399 #define EOB_ACT_LAST_MATCH 2
400 
401  #define YY_LESS_LINENO(n)
402  #define YY_LINENO_REWIND_TO(ptr)
403 
404 /* Return all but the first "n" matched characters back to the input stream. */
405 #define yyless(n) \
406  do \
407  { \
408  /* Undo effects of setting up yytext. */ \
409  int yyless_macro_arg = (n); \
410  YY_LESS_LINENO(yyless_macro_arg);\
411  *yy_cp = yyg->yy_hold_char; \
412  YY_RESTORE_YY_MORE_OFFSET \
413  yyg->yy_c_buf_p = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
414  YY_DO_BEFORE_ACTION; /* set up yytext again */ \
415  } \
416  while ( 0 )
417 #define unput(c) yyunput( c, yyg->yytext_ptr , yyscanner )
418 
419 #ifndef YY_STRUCT_YY_BUFFER_STATE
420 #define YY_STRUCT_YY_BUFFER_STATE
422  {
423  FILE *yy_input_file;
424 
425  char *yy_ch_buf; /* input buffer */
426  char *yy_buf_pos; /* current position in input buffer */
427 
428  /* Size of input buffer in bytes, not including room for EOB
429  * characters.
430  */
431  int yy_buf_size;
432 
433  /* Number of characters read into yy_ch_buf, not including EOB
434  * characters.
435  */
436  int yy_n_chars;
437 
438  /* Whether we "own" the buffer - i.e., we know we created it,
439  * and can realloc() it to grow it, and should free() it to
440  * delete it.
441  */
442  int yy_is_our_buffer;
443 
444  /* Whether this is an "interactive" input source; if so, and
445  * if we're using stdio for input, then we want to use getc()
446  * instead of fread(), to make sure we stop fetching input after
447  * each newline.
448  */
449  int yy_is_interactive;
450 
451  /* Whether we're considered to be at the beginning of a line.
452  * If so, '^' rules will be active on the next match, otherwise
453  * not.
454  */
455  int yy_at_bol;
456 
457  int yy_bs_lineno; /**< The line count. */
458  int yy_bs_column; /**< The column count. */
459 
460  /* Whether to try to fill the input buffer when we reach the
461  * end of it.
462  */
463  int yy_fill_buffer;
464 
465  int yy_buffer_status;
466 
467 #define YY_BUFFER_NEW 0
468 #define YY_BUFFER_NORMAL 1
469  /* When an EOF's been seen but there's still some text to process
470  * then we mark the buffer as YY_EOF_PENDING, to indicate that we
471  * shouldn't try reading from the input source any more. We might
472  * still have a bunch of tokens to match, though, because of
473  * possible backing-up.
474  *
475  * When we actually see the EOF, we change the status to "new"
476  * (via yyrestart()), so that the user can continue scanning by
477  * just pointing yyin at a new input file.
478  */
479 #define YY_BUFFER_EOF_PENDING 2
480 
481  };
482 #endif /* !YY_STRUCT_YY_BUFFER_STATE */
483 
484 /* We provide macros for accessing buffer states in case in the
485  * future we want to put the buffer states in a more general
486  * "scanner state".
487  *
488  * Returns the top of the stack, or NULL.
489  */
490 #define YY_CURRENT_BUFFER ( yyg->yy_buffer_stack \
491  ? yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] \
492  : NULL)
493 /* Same as previous macro, but useful when we know that the buffer stack is not
494  * NULL or when we need an lvalue. For internal use only.
495  */
496 #define YY_CURRENT_BUFFER_LVALUE yyg->yy_buffer_stack[yyg->yy_buffer_stack_top]
497 
498 void yyrestart ( FILE *input_file , yyscan_t yyscanner );
499 void yy_switch_to_buffer ( YY_BUFFER_STATE new_buffer , yyscan_t yyscanner );
500 YY_BUFFER_STATE yy_create_buffer ( FILE *file, int size , yyscan_t yyscanner );
501 void yy_delete_buffer ( YY_BUFFER_STATE b , yyscan_t yyscanner );
502 void yy_flush_buffer ( YY_BUFFER_STATE b , yyscan_t yyscanner );
503 void yypush_buffer_state ( YY_BUFFER_STATE new_buffer , yyscan_t yyscanner );
504 void yypop_buffer_state ( yyscan_t yyscanner );
505 
506 static void yyensure_buffer_stack ( yyscan_t yyscanner );
507 static void yy_load_buffer_state ( yyscan_t yyscanner );
508 static void yy_init_buffer ( YY_BUFFER_STATE b, FILE *file , yyscan_t yyscanner );
509 #define YY_FLUSH_BUFFER yy_flush_buffer( YY_CURRENT_BUFFER , yyscanner)
510 
511 YY_BUFFER_STATE yy_scan_buffer ( char *base, yy_size_t size , yyscan_t yyscanner );
512 YY_BUFFER_STATE yy_scan_string ( const char *yy_str , yyscan_t yyscanner );
513 YY_BUFFER_STATE yy_scan_bytes ( const char *bytes, int len , yyscan_t yyscanner );
514 
515 void *yyalloc ( yy_size_t , yyscan_t yyscanner );
516 void *yyrealloc ( void *, yy_size_t , yyscan_t yyscanner );
517 void yyfree ( void * , yyscan_t yyscanner );
518 
519 #define yy_new_buffer yy_create_buffer
520 #define yy_set_interactive(is_interactive) \
521  { \
522  if ( ! YY_CURRENT_BUFFER ){ \
523  yyensure_buffer_stack (yyscanner); \
524  YY_CURRENT_BUFFER_LVALUE = \
525  yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner); \
526  } \
527  YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
528  }
529 #define yy_set_bol(at_bol) \
530  { \
531  if ( ! YY_CURRENT_BUFFER ){\
532  yyensure_buffer_stack (yyscanner); \
533  YY_CURRENT_BUFFER_LVALUE = \
534  yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner); \
535  } \
536  YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
537  }
538 #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
539 
540 #define ematch_wrap(yyscanner) (/*CONSTCOND*/1)
541 #define YY_SKIP_YYWRAP
542 typedef flex_uint8_t YY_CHAR;
543 
544 typedef int yy_state_type;
545 
546 #define yytext_ptr yytext_r
547 
548 static yy_state_type yy_get_previous_state ( yyscan_t yyscanner );
549 static yy_state_type yy_try_NUL_trans ( yy_state_type current_state , yyscan_t yyscanner);
550 static int yy_get_next_buffer ( yyscan_t yyscanner );
551 static void yynoreturn yy_fatal_error ( const char* msg , yyscan_t yyscanner );
552 
553 /* Done after the current pattern has been matched and before the
554  * corresponding action - sets up yytext.
555  */
556 #define YY_DO_BEFORE_ACTION \
557  yyg->yytext_ptr = yy_bp; \
558  yyleng = (int) (yy_cp - yy_bp); \
559  yyg->yy_hold_char = *yy_cp; \
560  *yy_cp = '\0'; \
561  yyg->yy_c_buf_p = yy_cp;
562 #define YY_NUM_RULES 91
563 #define YY_END_OF_BUFFER 92
564 /* This struct is not used in this scanner,
565  but its presence is necessary. */
567  {
568  flex_int32_t yy_verify;
569  flex_int32_t yy_nxt;
570  };
571 static const flex_int16_t yy_accept[393] =
572  { 0,
573  0, 0, 0, 0, 92, 90, 1, 18, 2, 26,
574  23, 24, 30, 5, 5, 12, 8, 10, 90, 90,
575  90, 90, 90, 90, 90, 90, 90, 90, 90, 90,
576  90, 90, 90, 90, 90, 90, 90, 90, 90, 90,
577  90, 91, 3, 91, 4, 90, 1, 14, 5, 90,
578  28, 90, 29, 90, 90, 90, 40, 90, 90, 90,
579  90, 90, 15, 90, 90, 90, 90, 32, 90, 90,
580  90, 33, 90, 90, 7, 9, 90, 11, 90, 90,
581  90, 90, 90, 90, 90, 90, 90, 16, 3, 6,
582  13, 19, 37, 90, 39, 90, 90, 90, 38, 17,
583 
584  90, 90, 42, 90, 90, 34, 35, 90, 47, 90,
585  90, 90, 90, 90, 90, 90, 90, 90, 90, 90,
586  90, 90, 31, 36, 25, 22, 90, 90, 21, 90,
587  90, 90, 90, 90, 54, 90, 90, 48, 90, 90,
588  90, 90, 90, 90, 90, 90, 90, 90, 90, 90,
589  90, 90, 90, 90, 90, 90, 86, 90, 27, 90,
590  90, 90, 90, 90, 90, 90, 49, 90, 90, 57,
591  90, 90, 90, 90, 90, 90, 90, 90, 90, 90,
592  90, 90, 90, 90, 90, 90, 90, 90, 90, 90,
593  90, 90, 90, 90, 90, 90, 90, 90, 53, 51,
594 
595  90, 43, 90, 87, 90, 90, 90, 90, 90, 90,
596  90, 90, 90, 90, 90, 90, 90, 90, 90, 90,
597  90, 90, 90, 90, 90, 90, 90, 90, 20, 90,
598  52, 88, 90, 50, 90, 90, 90, 90, 90, 90,
599  90, 76, 90, 90, 80, 90, 90, 90, 90, 90,
600  90, 90, 90, 90, 90, 90, 90, 90, 90, 90,
601  66, 90, 90, 55, 90, 90, 90, 90, 90, 90,
602  90, 90, 90, 90, 90, 65, 90, 90, 90, 90,
603  90, 60, 90, 90, 90, 90, 90, 90, 90, 59,
604  90, 90, 41, 44, 45, 46, 56, 90, 74, 90,
605 
606  90, 58, 90, 90, 90, 90, 62, 90, 90, 61,
607  90, 90, 90, 90, 90, 63, 90, 90, 90, 90,
608  90, 90, 90, 90, 90, 90, 90, 90, 90, 90,
609  90, 90, 90, 90, 90, 90, 90, 90, 90, 89,
610  72, 90, 90, 90, 70, 81, 82, 90, 90, 90,
611  64, 71, 83, 90, 90, 90, 90, 90, 90, 90,
612  90, 90, 90, 90, 90, 90, 90, 90, 77, 90,
613  67, 75, 90, 68, 90, 90, 78, 90, 90, 84,
614  69, 90, 90, 90, 90, 90, 90, 85, 73, 90,
615  79, 0
616 
617  } ;
618 
619 static const YY_CHAR yy_ec[256] =
620  { 0,
621  1, 1, 1, 1, 1, 1, 1, 1, 2, 3,
622  1, 1, 2, 1, 1, 1, 1, 1, 1, 1,
623  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
624  1, 2, 4, 5, 1, 1, 1, 6, 1, 7,
625  8, 1, 9, 1, 1, 1, 1, 10, 11, 12,
626  13, 14, 14, 15, 14, 16, 14, 1, 1, 17,
627  18, 19, 1, 1, 20, 21, 22, 23, 24, 25,
628  1, 26, 27, 1, 28, 29, 30, 31, 32, 33,
629  1, 34, 35, 36, 37, 1, 1, 38, 1, 1,
630  1, 39, 1, 1, 40, 1, 41, 42, 43, 44,
631 
632  45, 46, 47, 48, 49, 1, 50, 51, 52, 53,
633  54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
634  64, 1, 1, 65, 1, 1, 1, 1, 1, 1,
635  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
636  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
637  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
638  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
639  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
640  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
641  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
642 
643  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
644  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
645  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
646  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
647  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
648  1, 1, 1, 1, 1
649  } ;
650 
651 static const YY_CHAR yy_meta[66] =
652  { 0,
653  1, 2, 3, 1, 3, 2, 2, 2, 2, 1,
654  1, 1, 1, 1, 1, 1, 2, 2, 2, 1,
655  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
656  1, 1, 1, 1, 1, 1, 1, 1, 4, 1,
657  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
658  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
659  1, 1, 1, 1, 2
660  } ;
661 
662 static const flex_int16_t yy_base[396] =
663  { 0,
664  0, 0, 63, 64, 537, 0, 68, 0, 538, 530,
665  538, 538, 538, 62, 69, 538, 538, 516, 55, 57,
666  52, 55, 60, 67, 72, 73, 64, 79, 75, 100,
667  115, 65, 83, 475, 102, 117, 118, 89, 121, 131,
668  482, 467, 0, 538, 538, 0, 133, 538, 167, 179,
669  538, 123, 0, 111, 124, 132, 516, 153, 138, 151,
670  169, 171, 0, 172, 170, 178, 171, 0, 129, 515,
671  517, 0, 469, 466, 0, 0, 485, 0, 183, 466,
672  41, 471, 186, 475, 482, 183, 480, 538, 0, 0,
673  0, 0, 0, 184, 0, 187, 189, 207, 0, 0,
674 
675  206, 218, 0, 208, 215, 0, 0, 479, 466, 474,
676  466, 466, 194, 461, 455, 469, 461, 462, 469, 228,
677  456, 455, 0, 0, 0, 0, 226, 213, 0, 217,
678  456, 465, 464, 459, 0, 458, 438, 0, 447, 446,
679  458, 452, 439, 204, 442, 438, 237, 453, 444, 451,
680  434, 249, 236, 426, 199, 445, 0, 220, 0, 227,
681  443, 435, 425, 432, 431, 428, 0, 430, 423, 0,
682  432, 429, 427, 417, 419, 423, 417, 415, 419, 408,
683  208, 409, 152, 424, 408, 414, 406, 421, 423, 408,
684  417, 412, 415, 235, 261, 406, 413, 410, 0, 0,
685 
686  411, 0, 397, 0, 414, 399, 399, 411, 401, 387,
687  400, 400, 406, 391, 385, 257, 400, 384, 389, 381,
688  395, 379, 258, 378, 391, 383, 375, 370, 0, 262,
689  0, 0, 392, 0, 382, 388, 386, 384, 371, 375,
690  384, 0, 379, 382, 0, 368, 365, 360, 365, 369,
691  364, 371, 375, 369, 361, 368, 355, 350, 360, 363,
692  0, 367, 361, 0, 266, 294, 361, 363, 345, 362,
693  350, 336, 342, 341, 354, 0, 345, 349, 332, 341,
694  333, 0, 350, 350, 331, 334, 336, 340, 333, 0,
695  266, 344, 0, 0, 0, 0, 0, 340, 0, 333,
696 
697  336, 0, 336, 320, 328, 332, 0, 335, 330, 0,
698  323, 330, 325, 309, 325, 0, 324, 317, 307, 311,
699  315, 318, 310, 322, 312, 320, 306, 299, 303, 305,
700  314, 314, 300, 299, 297, 299, 304, 303, 296, 0,
701  0, 305, 293, 302, 0, 0, 0, 289, 287, 287,
702  0, 0, 0, 286, 279, 285, 283, 285, 287, 290,
703  281, 265, 275, 277, 273, 270, 266, 261, 0, 268,
704  0, 0, 264, 0, 265, 214, 0, 207, 209, 0,
705  0, 205, 170, 109, 93, 75, 53, 0, 0, 57,
706  0, 538, 325, 329, 333
707 
708  } ;
709 
710 static const flex_int16_t yy_def[396] =
711  { 0,
712  392, 1, 393, 393, 392, 394, 392, 394, 392, 392,
713  392, 392, 392, 394, 394, 392, 392, 392, 394, 394,
714  394, 394, 394, 394, 394, 394, 394, 394, 394, 394,
715  394, 394, 394, 394, 394, 394, 394, 394, 394, 394,
716  394, 392, 395, 392, 392, 394, 392, 392, 394, 394,
717  392, 394, 394, 394, 394, 394, 394, 394, 394, 394,
718  394, 394, 394, 394, 394, 394, 394, 394, 394, 394,
719  394, 394, 394, 394, 394, 394, 394, 394, 394, 394,
720  394, 394, 394, 394, 394, 394, 394, 392, 395, 50,
721  394, 394, 394, 394, 394, 394, 394, 394, 394, 394,
722 
723  394, 394, 394, 394, 394, 394, 394, 394, 394, 394,
724  394, 394, 394, 394, 394, 394, 394, 394, 394, 394,
725  394, 394, 394, 394, 394, 394, 394, 394, 394, 394,
726  394, 394, 394, 394, 394, 394, 394, 394, 394, 394,
727  394, 394, 394, 394, 394, 394, 394, 394, 394, 394,
728  394, 394, 394, 394, 394, 394, 394, 394, 394, 394,
729  394, 394, 394, 394, 394, 394, 394, 394, 394, 394,
730  394, 394, 394, 394, 394, 394, 394, 394, 394, 394,
731  394, 394, 394, 394, 394, 394, 394, 394, 394, 394,
732  394, 394, 394, 394, 394, 394, 394, 394, 394, 394,
733 
734  394, 394, 394, 394, 394, 394, 394, 394, 394, 394,
735  394, 394, 394, 394, 394, 394, 394, 394, 394, 394,
736  394, 394, 394, 394, 394, 394, 394, 394, 394, 394,
737  394, 394, 394, 394, 394, 394, 394, 394, 394, 394,
738  394, 394, 394, 394, 394, 394, 394, 394, 394, 394,
739  394, 394, 394, 394, 394, 394, 394, 394, 394, 394,
740  394, 394, 394, 394, 394, 394, 394, 394, 394, 394,
741  394, 394, 394, 394, 394, 394, 394, 394, 394, 394,
742  394, 394, 394, 394, 394, 394, 394, 394, 394, 394,
743  394, 394, 394, 394, 394, 394, 394, 394, 394, 394,
744 
745  394, 394, 394, 394, 394, 394, 394, 394, 394, 394,
746  394, 394, 394, 394, 394, 394, 394, 394, 394, 394,
747  394, 394, 394, 394, 394, 394, 394, 394, 394, 394,
748  394, 394, 394, 394, 394, 394, 394, 394, 394, 394,
749  394, 394, 394, 394, 394, 394, 394, 394, 394, 394,
750  394, 394, 394, 394, 394, 394, 394, 394, 394, 394,
751  394, 394, 394, 394, 394, 394, 394, 394, 394, 394,
752  394, 394, 394, 394, 394, 394, 394, 394, 394, 394,
753  394, 394, 394, 394, 394, 394, 394, 394, 394, 394,
754  394, 0, 392, 392, 392
755 
756  } ;
757 
758 static const flex_int16_t yy_nxt[604] =
759  { 0,
760  6, 7, 7, 8, 9, 10, 11, 12, 13, 14,
761  15, 15, 15, 15, 15, 15, 16, 17, 18, 19,
762  6, 20, 6, 21, 22, 6, 23, 6, 24, 25,
763  26, 27, 28, 6, 29, 30, 31, 6, 6, 6,
764  19, 6, 20, 32, 33, 22, 34, 6, 23, 6,
765  35, 36, 26, 27, 37, 6, 38, 39, 40, 31,
766  41, 6, 6, 6, 42, 44, 44, 45, 45, 47,
767  47, 49, 49, 49, 49, 49, 49, 49, 49, 49,
768  49, 49, 49, 49, 49, 52, 54, 55, 56, 114,
769  53, 59, 57, 58, 115, 60, 61, 63, 64, 50,
770 
771  65, 44, 44, 391, 62, 73, 390, 52, 54, 74,
772  55, 56, 59, 53, 57, 58, 60, 61, 55, 64,
773  63, 66, 65, 67, 50, 70, 62, 71, 58, 82,
774  72, 68, 389, 69, 47, 47, 59, 64, 75, 388,
775  60, 55, 66, 92, 67, 91, 65, 83, 105, 93,
776  58, 84, 66, 68, 67, 77, 69, 79, 64, 387,
777  78, 60, 68, 94, 69, 92, 91, 80, 65, 105,
778  85, 93, 97, 86, 81, 67, 49, 49, 49, 49,
779  49, 49, 49, 96, 68, 94, 98, 69, 90, 90,
780  90, 90, 90, 90, 90, 97, 102, 217, 90, 90,
781 
782  90, 90, 90, 90, 99, 96, 100, 101, 104, 98,
783  103, 218, 386, 123, 124, 103, 125, 97, 102, 90,
784  90, 90, 90, 90, 90, 111, 126, 99, 117, 100,
785  101, 121, 103, 104, 118, 123, 124, 103, 125, 112,
786  97, 127, 128, 129, 136, 130, 172, 126, 159, 158,
787  191, 160, 137, 194, 173, 192, 214, 385, 384, 195,
788  383, 215, 382, 128, 127, 229, 129, 130, 144, 145,
789  158, 159, 146, 147, 160, 148, 194, 176, 149, 150,
790  186, 195, 151, 187, 152, 153, 154, 229, 188, 155,
791  177, 182, 230, 183, 189, 265, 247, 257, 248, 258,
792 
793  184, 293, 185, 294, 295, 296, 318, 249, 381, 380,
794  379, 378, 377, 376, 230, 250, 259, 375, 265, 374,
795  373, 319, 372, 371, 293, 43, 43, 43, 43, 46,
796  370, 369, 46, 89, 89, 368, 367, 366, 365, 364,
797  363, 362, 361, 360, 359, 358, 357, 356, 355, 354,
798  353, 352, 351, 350, 349, 348, 347, 346, 345, 344,
799  343, 342, 341, 340, 339, 338, 337, 336, 335, 334,
800  333, 332, 331, 330, 329, 328, 327, 326, 325, 324,
801  323, 322, 321, 320, 317, 316, 315, 314, 313, 312,
802  311, 310, 309, 308, 307, 306, 305, 304, 303, 302,
803 
804  301, 300, 299, 298, 297, 292, 291, 290, 289, 288,
805  287, 286, 285, 284, 283, 282, 281, 280, 279, 278,
806  277, 276, 275, 274, 273, 272, 271, 270, 269, 268,
807  267, 266, 264, 263, 262, 261, 260, 256, 255, 254,
808  253, 252, 251, 246, 245, 244, 243, 242, 241, 240,
809  239, 238, 237, 236, 235, 234, 233, 232, 231, 228,
810  227, 226, 225, 224, 223, 222, 221, 220, 219, 216,
811  213, 212, 211, 210, 209, 208, 207, 206, 205, 204,
812  203, 202, 201, 200, 199, 198, 197, 196, 193, 190,
813  181, 180, 179, 178, 175, 174, 171, 170, 169, 168,
814 
815  167, 166, 165, 164, 163, 162, 161, 157, 156, 143,
816  142, 141, 140, 139, 138, 135, 134, 133, 132, 131,
817  122, 120, 119, 116, 113, 110, 109, 108, 107, 106,
818  95, 88, 87, 76, 51, 48, 392, 5, 392, 392,
819  392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
820  392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
821  392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
822  392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
823  392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
824  392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
825 
826  392, 392, 392
827  } ;
828 
829 static const flex_int16_t yy_chk[604] =
830  { 0,
831  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
832  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
833  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
834  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
835  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
836  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
837  1, 1, 1, 1, 1, 3, 4, 3, 4, 7,
838  7, 14, 14, 14, 14, 14, 14, 14, 15, 15,
839  15, 15, 15, 15, 15, 19, 20, 21, 22, 81,
840  19, 25, 23, 24, 81, 25, 26, 27, 28, 14,
841 
842  29, 3, 4, 390, 26, 32, 387, 19, 20, 32,
843  21, 22, 25, 19, 23, 24, 25, 26, 33, 28,
844  27, 30, 29, 30, 14, 31, 26, 31, 35, 38,
845  31, 30, 386, 30, 47, 47, 36, 37, 33, 385,
846  36, 33, 30, 54, 30, 52, 39, 38, 69, 55,
847  35, 38, 40, 30, 40, 35, 30, 36, 37, 384,
848  35, 36, 40, 56, 40, 54, 52, 37, 39, 69,
849  39, 55, 59, 40, 37, 40, 49, 49, 49, 49,
850  49, 49, 49, 58, 40, 56, 60, 40, 50, 50,
851  50, 50, 50, 50, 50, 59, 65, 183, 50, 50,
852 
853  50, 50, 50, 50, 61, 58, 62, 64, 67, 60,
854  66, 183, 383, 94, 96, 86, 97, 79, 65, 50,
855  50, 50, 50, 50, 50, 79, 98, 61, 83, 62,
856  64, 86, 66, 67, 83, 94, 96, 86, 97, 79,
857  79, 101, 102, 104, 113, 105, 144, 98, 128, 127,
858  155, 130, 113, 158, 144, 155, 181, 382, 379, 160,
859  378, 181, 376, 102, 101, 194, 104, 105, 120, 120,
860  127, 128, 120, 120, 130, 120, 158, 147, 120, 120,
861  153, 160, 120, 153, 120, 120, 120, 194, 153, 120,
862  147, 152, 195, 152, 153, 230, 216, 223, 216, 223,
863 
864  152, 265, 152, 266, 266, 266, 291, 216, 375, 373,
865  370, 368, 367, 366, 195, 216, 223, 365, 230, 364,
866  363, 291, 362, 361, 265, 393, 393, 393, 393, 394,
867  360, 359, 394, 395, 395, 358, 357, 356, 355, 354,
868  350, 349, 348, 344, 343, 342, 339, 338, 337, 336,
869  335, 334, 333, 332, 331, 330, 329, 328, 327, 326,
870  325, 324, 323, 322, 321, 320, 319, 318, 317, 315,
871  314, 313, 312, 311, 309, 308, 306, 305, 304, 303,
872  301, 300, 298, 292, 289, 288, 287, 286, 285, 284,
873  283, 281, 280, 279, 278, 277, 275, 274, 273, 272,
874 
875  271, 270, 269, 268, 267, 263, 262, 260, 259, 258,
876  257, 256, 255, 254, 253, 252, 251, 250, 249, 248,
877  247, 246, 244, 243, 241, 240, 239, 238, 237, 236,
878  235, 233, 228, 227, 226, 225, 224, 222, 221, 220,
879  219, 218, 217, 215, 214, 213, 212, 211, 210, 209,
880  208, 207, 206, 205, 203, 201, 198, 197, 196, 193,
881  192, 191, 190, 189, 188, 187, 186, 185, 184, 182,
882  180, 179, 178, 177, 176, 175, 174, 173, 172, 171,
883  169, 168, 166, 165, 164, 163, 162, 161, 156, 154,
884  151, 150, 149, 148, 146, 145, 143, 142, 141, 140,
885 
886  139, 137, 136, 134, 133, 132, 131, 122, 121, 119,
887  118, 117, 116, 115, 114, 112, 111, 110, 109, 108,
888  87, 85, 84, 82, 80, 77, 74, 73, 71, 70,
889  57, 42, 41, 34, 18, 10, 5, 392, 392, 392,
890  392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
891  392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
892  392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
893  392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
894  392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
895  392, 392, 392, 392, 392, 392, 392, 392, 392, 392,
896 
897  392, 392, 392
898  } ;
899 
900 /* The intent behind this definition is that it'll catch
901  * any uses of REJECT which flex missed.
902  */
903 #define REJECT reject_used_but_not_detected
904 #define yymore() yymore_used_but_not_detected
905 #define YY_MORE_ADJ 0
906 #define YY_RESTORE_YY_MORE_OFFSET
907 #line 1 "lib/route/cls/ematch_grammar.l"
908 /*
909  * lib/route/cls/ematch_grammar.l ematch expression grammar
910  *
911  * This library is free software; you can redistribute it and/or
912  * modify it under the terms of the GNU Lesser General Public
913  * License as published by the Free Software Foundation version 2.1
914  * of the License.
915  *
916  * Copyright (c) 2010-2013 Thomas Graf <tgraf@suug.ch>
917  */
918 #line 13 "lib/route/cls/ematch_grammar.l"
919  #include <netlink-private/netlink.h>
920  #include <netlink-private/tc.h>
921  #include <netlink/netlink.h>
922  #include <netlink/route/cls/ematch.h>
923  #include <netlink/route/cls/ematch/cmp.h>
924  #include <linux/tc_ematch/tc_em_cmp.h>
925  #include "ematch_syntax.h"
926 
927  int ematch_get_column(yyscan_t);
928  void ematch_set_column(int, yyscan_t);
929 #line 929 "lib/route/cls/ematch_grammar.c"
930 #define YY_NO_INPUT 1
931 
932 #line 932 "lib/route/cls/ematch_grammar.c"
933 
934 #define INITIAL 0
935 #define QUOTE 1
936 
937 #ifndef YY_NO_UNISTD_H
938 /* Special case for "unistd.h", since it is non-ANSI. We include it way
939  * down here because we want the user's section 1 to have been scanned first.
940  * The user has a chance to override it with an option.
941  */
942 #include <unistd.h>
943 #endif
944 
945 #ifndef YY_EXTRA_TYPE
946 #define YY_EXTRA_TYPE void *
947 #endif
948 
949 /* Holds the entire state of the reentrant scanner. */
950 struct yyguts_t
951  {
952 
953  /* User-defined. Not touched by flex. */
954  YY_EXTRA_TYPE yyextra_r;
955 
956  /* The rest are the same as the globals declared in the non-reentrant scanner. */
957  FILE *yyin_r, *yyout_r;
958  size_t yy_buffer_stack_top; /**< index of top of stack. */
959  size_t yy_buffer_stack_max; /**< capacity of stack. */
960  YY_BUFFER_STATE * yy_buffer_stack; /**< Stack as an array. */
961  char yy_hold_char;
962  int yy_n_chars;
963  int yyleng_r;
964  char *yy_c_buf_p;
965  int yy_init;
966  int yy_start;
967  int yy_did_buffer_switch_on_eof;
968  int yy_start_stack_ptr;
969  int yy_start_stack_depth;
970  int *yy_start_stack;
971  yy_state_type yy_last_accepting_state;
972  char* yy_last_accepting_cpos;
973 
974  int yylineno_r;
975  int yy_flex_debug_r;
976 
977  char *yytext_r;
978  int yy_more_flag;
979  int yy_more_len;
980 
981  YYSTYPE * yylval_r;
982 
983  }; /* end struct yyguts_t */
984 
985 static int yy_init_globals ( yyscan_t yyscanner );
986 
987  /* This must go here because YYSTYPE and YYLTYPE are included
988  * from bison output in section 1.*/
989  # define yylval yyg->yylval_r
990 
991 int yylex_init (yyscan_t* scanner);
992 
993 int yylex_init_extra ( YY_EXTRA_TYPE user_defined, yyscan_t* scanner);
994 
995 /* Accessor methods to globals.
996  These are made visible to non-reentrant scanners for convenience. */
997 
998 int yylex_destroy ( yyscan_t yyscanner );
999 
1000 int yyget_debug ( yyscan_t yyscanner );
1001 
1002 void yyset_debug ( int debug_flag , yyscan_t yyscanner );
1003 
1004 YY_EXTRA_TYPE yyget_extra ( yyscan_t yyscanner );
1005 
1006 void yyset_extra ( YY_EXTRA_TYPE user_defined , yyscan_t yyscanner );
1007 
1008 FILE *yyget_in ( yyscan_t yyscanner );
1009 
1010 void yyset_in ( FILE * _in_str , yyscan_t yyscanner );
1011 
1012 FILE *yyget_out ( yyscan_t yyscanner );
1013 
1014 void yyset_out ( FILE * _out_str , yyscan_t yyscanner );
1015 
1016  int yyget_leng ( yyscan_t yyscanner );
1017 
1018 char *yyget_text ( yyscan_t yyscanner );
1019 
1020 int yyget_lineno ( yyscan_t yyscanner );
1021 
1022 void yyset_lineno ( int _line_number , yyscan_t yyscanner );
1023 
1024 int yyget_column ( yyscan_t yyscanner );
1025 
1026 void yyset_column ( int _column_no , yyscan_t yyscanner );
1027 
1028 YYSTYPE * yyget_lval ( yyscan_t yyscanner );
1029 
1030 void yyset_lval ( YYSTYPE * yylval_param , yyscan_t yyscanner );
1031 
1032 /* Macros after this point can all be overridden by user definitions in
1033  * section 1.
1034  */
1035 
1036 #ifndef YY_SKIP_YYWRAP
1037 #ifdef __cplusplus
1038 extern "C" int yywrap ( yyscan_t yyscanner );
1039 #else
1040 extern int yywrap ( yyscan_t yyscanner );
1041 #endif
1042 #endif
1043 
1044 #ifndef YY_NO_UNPUT
1045 
1046 #endif
1047 
1048 #ifndef yytext_ptr
1049 static void yy_flex_strncpy ( char *, const char *, int , yyscan_t yyscanner);
1050 #endif
1051 
1052 #ifdef YY_NEED_STRLEN
1053 static int yy_flex_strlen ( const char * , yyscan_t yyscanner);
1054 #endif
1055 
1056 #ifndef YY_NO_INPUT
1057 #ifdef __cplusplus
1058 static int yyinput ( yyscan_t yyscanner );
1059 #else
1060 static int input ( yyscan_t yyscanner );
1061 #endif
1062 
1063 #endif
1064 
1065 /* Amount of stuff to slurp up with each read. */
1066 #ifndef YY_READ_BUF_SIZE
1067 #ifdef __ia64__
1068 /* On IA-64, the buffer size is 16k, not 8k */
1069 #define YY_READ_BUF_SIZE 16384
1070 #else
1071 #define YY_READ_BUF_SIZE 8192
1072 #endif /* __ia64__ */
1073 #endif
1074 
1075 /* Copy whatever the last rule matched to the standard output. */
1076 #ifndef ECHO
1077 /* This used to be an fputs(), but since the string might contain NUL's,
1078  * we now use fwrite().
1079  */
1080 #define ECHO do { if (fwrite( yytext, (size_t) yyleng, 1, yyout )) {} } while (0)
1081 #endif
1082 
1083 /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL,
1084  * is returned in "result".
1085  */
1086 #ifndef YY_INPUT
1087 #define YY_INPUT(buf,result,max_size) \
1088  if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
1089  { \
1090  int c = '*'; \
1091  int n; \
1092  for ( n = 0; n < max_size && \
1093  (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
1094  buf[n] = (char) c; \
1095  if ( c == '\n' ) \
1096  buf[n++] = (char) c; \
1097  if ( c == EOF && ferror( yyin ) ) \
1098  YY_FATAL_ERROR( "input in flex scanner failed" ); \
1099  result = n; \
1100  } \
1101  else \
1102  { \
1103  errno=0; \
1104  while ( (result = (int) fread(buf, 1, (yy_size_t) max_size, yyin)) == 0 && ferror(yyin)) \
1105  { \
1106  if( errno != EINTR) \
1107  { \
1108  YY_FATAL_ERROR( "input in flex scanner failed" ); \
1109  break; \
1110  } \
1111  errno=0; \
1112  clearerr(yyin); \
1113  } \
1114  }\
1115 \
1116 
1117 #endif
1118 
1119 /* No semi-colon after return; correct usage is to write "yyterminate();" -
1120  * we don't want an extra ';' after the "return" because that will cause
1121  * some compilers to complain about unreachable statements.
1122  */
1123 #ifndef yyterminate
1124 #define yyterminate() return YY_NULL
1125 #endif
1126 
1127 /* Number of entries by which start-condition stack grows. */
1128 #ifndef YY_START_STACK_INCR
1129 #define YY_START_STACK_INCR 25
1130 #endif
1131 
1132 /* Report a fatal error. */
1133 #ifndef YY_FATAL_ERROR
1134 #define YY_FATAL_ERROR(msg) yy_fatal_error( msg , yyscanner)
1135 #endif
1136 
1137 /* end tables serialization structures and prototypes */
1138 
1139 /* Default declaration of generated scanner - a define so the user can
1140  * easily add parameters.
1141  */
1142 #ifndef YY_DECL
1143 #define YY_DECL_IS_OURS 1
1144 
1145 extern int yylex \
1146  (YYSTYPE * yylval_param , yyscan_t yyscanner);
1147 
1148 #define YY_DECL int yylex \
1149  (YYSTYPE * yylval_param , yyscan_t yyscanner)
1150 #endif /* !YY_DECL */
1151 
1152 /* Code executed at the beginning of each rule, after yytext and yyleng
1153  * have been set up.
1154  */
1155 #ifndef YY_USER_ACTION
1156 #define YY_USER_ACTION
1157 #endif
1158 
1159 /* Code executed at the end of each rule. */
1160 #ifndef YY_BREAK
1161 #define YY_BREAK /*LINTED*/break;
1162 #endif
1163 
1164 #define YY_RULE_SETUP \
1165  YY_USER_ACTION
1166 
1167 /** The main scanner function which does all the work.
1168  */
1169 YY_DECL
1170 {
1171  yy_state_type yy_current_state;
1172  char *yy_cp, *yy_bp;
1173  int yy_act;
1174  struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
1175 
1176  yylval = yylval_param;
1177 
1178  if ( !yyg->yy_init )
1179  {
1180  yyg->yy_init = 1;
1181 
1182 #ifdef YY_USER_INIT
1183  YY_USER_INIT;
1184 #endif
1185 
1186  if ( ! yyg->yy_start )
1187  yyg->yy_start = 1; /* first start state */
1188 
1189  if ( ! yyin )
1190  yyin = stdin;
1191 
1192  if ( ! yyout )
1193  yyout = stdout;
1194 
1195  if ( ! YY_CURRENT_BUFFER ) {
1196  yyensure_buffer_stack (yyscanner);
1197  YY_CURRENT_BUFFER_LVALUE =
1198  yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner);
1199  }
1200 
1201  yy_load_buffer_state( yyscanner );
1202  }
1203 
1204  {
1205 #line 36 "lib/route/cls/ematch_grammar.l"
1206 
1207 
1208 #line 1208 "lib/route/cls/ematch_grammar.c"
1209 
1210  while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */
1211  {
1212  yy_cp = yyg->yy_c_buf_p;
1213 
1214  /* Support of yytext. */
1215  *yy_cp = yyg->yy_hold_char;
1216 
1217  /* yy_bp points to the position in yy_ch_buf of the start of
1218  * the current run.
1219  */
1220  yy_bp = yy_cp;
1221 
1222  yy_current_state = yyg->yy_start;
1223 yy_match:
1224  do
1225  {
1226  YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)] ;
1227  if ( yy_accept[yy_current_state] )
1228  {
1229  yyg->yy_last_accepting_state = yy_current_state;
1230  yyg->yy_last_accepting_cpos = yy_cp;
1231  }
1232  while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
1233  {
1234  yy_current_state = (int) yy_def[yy_current_state];
1235  if ( yy_current_state >= 393 )
1236  yy_c = yy_meta[yy_c];
1237  }
1238  yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
1239  ++yy_cp;
1240  }
1241  while ( yy_base[yy_current_state] != 538 );
1242 
1243 yy_find_action:
1244  yy_act = yy_accept[yy_current_state];
1245  if ( yy_act == 0 )
1246  { /* have to back up */
1247  yy_cp = yyg->yy_last_accepting_cpos;
1248  yy_current_state = yyg->yy_last_accepting_state;
1249  yy_act = yy_accept[yy_current_state];
1250  }
1251 
1252  YY_DO_BEFORE_ACTION;
1253 
1254 do_action: /* This label is used only to access EOF actions. */
1255 
1256  switch ( yy_act )
1257  { /* beginning of action switch */
1258  case 0: /* must back up */
1259  /* undo the effects of YY_DO_BEFORE_ACTION */
1260  *yy_cp = yyg->yy_hold_char;
1261  yy_cp = yyg->yy_last_accepting_cpos;
1262  yy_current_state = yyg->yy_last_accepting_state;
1263  goto yy_find_action;
1264 
1265 case 1:
1266 /* rule 1 can match eol */
1267 YY_RULE_SETUP
1268 #line 38 "lib/route/cls/ematch_grammar.l"
1269 
1270  YY_BREAK
1271 case 2:
1272 YY_RULE_SETUP
1273 #line 40 "lib/route/cls/ematch_grammar.l"
1274 {
1275  NL_DBG(4, "Beginning of quote\n");
1276  yylval->q.len = 32;
1277  if (!(yylval->q.data = calloc(1, yylval->q.len)))
1278  return ERROR;
1279 
1280  yylval->q.index = 0;
1281  BEGIN(QUOTE);
1282  }
1283  YY_BREAK
1284 case 3:
1285 YY_RULE_SETUP
1286 #line 50 "lib/route/cls/ematch_grammar.l"
1287 {
1288  memcpy(yylval->q.data + yylval->q.index, yytext,
1289  strlen(yytext));
1290  yylval->q.index += strlen(yytext);
1291  }
1292  YY_BREAK
1293 case 4:
1294 YY_RULE_SETUP
1295 #line 56 "lib/route/cls/ematch_grammar.l"
1296 {
1297  BEGIN(0);
1298  return QUOTED;
1299  }
1300  YY_BREAK
1301 case 5:
1302 #line 63 "lib/route/cls/ematch_grammar.l"
1303 case 6:
1304 YY_RULE_SETUP
1305 #line 63 "lib/route/cls/ematch_grammar.l"
1306 {
1307  yylval->i = strtoul(yytext, NULL, 0);
1308  return NUMBER;
1309  }
1310  YY_BREAK
1311 case 7:
1312 #line 69 "lib/route/cls/ematch_grammar.l"
1313 case 8:
1314 YY_RULE_SETUP
1315 #line 69 "lib/route/cls/ematch_grammar.l"
1316 return KW_EQ;
1317  YY_BREAK
1318 case 9:
1319 #line 71 "lib/route/cls/ematch_grammar.l"
1320 case 10:
1321 YY_RULE_SETUP
1322 #line 71 "lib/route/cls/ematch_grammar.l"
1323 return KW_GT;
1324  YY_BREAK
1325 case 11:
1326 #line 73 "lib/route/cls/ematch_grammar.l"
1327 case 12:
1328 YY_RULE_SETUP
1329 #line 73 "lib/route/cls/ematch_grammar.l"
1330 return KW_LT;
1331  YY_BREAK
1332 case 13:
1333 #line 76 "lib/route/cls/ematch_grammar.l"
1334 case 14:
1335 YY_RULE_SETUP
1336 #line 76 "lib/route/cls/ematch_grammar.l"
1337 { yylval->i = TCF_EM_REL_AND; return LOGIC; }
1338  YY_BREAK
1339 case 15:
1340 #line 78 "lib/route/cls/ematch_grammar.l"
1341 case 16:
1342 YY_RULE_SETUP
1343 #line 78 "lib/route/cls/ematch_grammar.l"
1344 { yylval->i = TCF_EM_REL_OR; return LOGIC; }
1345  YY_BREAK
1346 case 17:
1347 #line 80 "lib/route/cls/ematch_grammar.l"
1348 case 18:
1349 YY_RULE_SETUP
1350 #line 80 "lib/route/cls/ematch_grammar.l"
1351 return NOT;
1352  YY_BREAK
1353 case 19:
1354 YY_RULE_SETUP
1355 #line 82 "lib/route/cls/ematch_grammar.l"
1356 { yylval->i = TCF_EM_CMP; return EMATCH_CMP; }
1357  YY_BREAK
1358 case 20:
1359 YY_RULE_SETUP
1360 #line 83 "lib/route/cls/ematch_grammar.l"
1361 { yylval->i = TCF_EM_NBYTE; return EMATCH_NBYTE; }
1362  YY_BREAK
1363 case 21:
1364 YY_RULE_SETUP
1365 #line 84 "lib/route/cls/ematch_grammar.l"
1366 { yylval->i = TCF_EM_TEXT; return EMATCH_TEXT; }
1367  YY_BREAK
1368 case 22:
1369 YY_RULE_SETUP
1370 #line 85 "lib/route/cls/ematch_grammar.l"
1371 { yylval->i = TCF_EM_META; return EMATCH_META; }
1372  YY_BREAK
1373 case 23:
1374 YY_RULE_SETUP
1375 #line 87 "lib/route/cls/ematch_grammar.l"
1376 return KW_OPEN;
1377  YY_BREAK
1378 case 24:
1379 YY_RULE_SETUP
1380 #line 88 "lib/route/cls/ematch_grammar.l"
1381 return KW_CLOSE;
1382  YY_BREAK
1383 case 25:
1384 #line 90 "lib/route/cls/ematch_grammar.l"
1385 case 26:
1386 YY_RULE_SETUP
1387 #line 90 "lib/route/cls/ematch_grammar.l"
1388 return KW_MASK;
1389  YY_BREAK
1390 case 27:
1391 #line 92 "lib/route/cls/ematch_grammar.l"
1392 case 28:
1393 YY_RULE_SETUP
1394 #line 92 "lib/route/cls/ematch_grammar.l"
1395 return KW_SHIFT;
1396  YY_BREAK
1397 case 29:
1398 YY_RULE_SETUP
1399 #line 93 "lib/route/cls/ematch_grammar.l"
1400 return KW_AT;
1401  YY_BREAK
1402 case 30:
1403 YY_RULE_SETUP
1404 #line 94 "lib/route/cls/ematch_grammar.l"
1405 return KW_PLUS;
1406  YY_BREAK
1407 case 31:
1408 YY_RULE_SETUP
1409 #line 95 "lib/route/cls/ematch_grammar.l"
1410 return KW_FROM;
1411  YY_BREAK
1412 case 32:
1413 YY_RULE_SETUP
1414 #line 96 "lib/route/cls/ematch_grammar.l"
1415 return KW_TO;
1416  YY_BREAK
1417 case 33:
1418 YY_RULE_SETUP
1419 #line 98 "lib/route/cls/ematch_grammar.l"
1420 { yylval->i = TCF_EM_ALIGN_U8; return ALIGN; }
1421  YY_BREAK
1422 case 34:
1423 YY_RULE_SETUP
1424 #line 99 "lib/route/cls/ematch_grammar.l"
1425 { yylval->i = TCF_EM_ALIGN_U16; return ALIGN; }
1426  YY_BREAK
1427 case 35:
1428 YY_RULE_SETUP
1429 #line 100 "lib/route/cls/ematch_grammar.l"
1430 { yylval->i = TCF_EM_ALIGN_U32; return ALIGN; }
1431  YY_BREAK
1432 case 36:
1433 #line 103 "lib/route/cls/ematch_grammar.l"
1434 case 37:
1435 YY_RULE_SETUP
1436 #line 103 "lib/route/cls/ematch_grammar.l"
1437 { yylval->i = TCF_LAYER_LINK; return LAYER; }
1438  YY_BREAK
1439 case 38:
1440 #line 105 "lib/route/cls/ematch_grammar.l"
1441 case 39:
1442 #line 106 "lib/route/cls/ematch_grammar.l"
1443 case 40:
1444 YY_RULE_SETUP
1445 #line 106 "lib/route/cls/ematch_grammar.l"
1446 { yylval->i = TCF_LAYER_NETWORK; return LAYER; }
1447  YY_BREAK
1448 case 41:
1449 #line 108 "lib/route/cls/ematch_grammar.l"
1450 case 42:
1451 YY_RULE_SETUP
1452 #line 108 "lib/route/cls/ematch_grammar.l"
1453 { yylval->i = TCF_LAYER_TRANSPORT; return LAYER; }
1454  YY_BREAK
1455 case 43:
1456 YY_RULE_SETUP
1457 #line 110 "lib/route/cls/ematch_grammar.l"
1458 return META_RANDOM;
1459  YY_BREAK
1460 case 44:
1461 YY_RULE_SETUP
1462 #line 111 "lib/route/cls/ematch_grammar.l"
1463 return META_LOADAVG_0;
1464  YY_BREAK
1465 case 45:
1466 YY_RULE_SETUP
1467 #line 112 "lib/route/cls/ematch_grammar.l"
1468 return META_LOADAVG_1;
1469  YY_BREAK
1470 case 46:
1471 YY_RULE_SETUP
1472 #line 113 "lib/route/cls/ematch_grammar.l"
1473 return META_LOADAVG_2;
1474  YY_BREAK
1475 case 47:
1476 YY_RULE_SETUP
1477 #line 114 "lib/route/cls/ematch_grammar.l"
1478 return META_DEV;
1479  YY_BREAK
1480 case 48:
1481 YY_RULE_SETUP
1482 #line 115 "lib/route/cls/ematch_grammar.l"
1483 return META_PRIO;
1484  YY_BREAK
1485 case 49:
1486 YY_RULE_SETUP
1487 #line 116 "lib/route/cls/ematch_grammar.l"
1488 return META_PROTO;
1489  YY_BREAK
1490 case 50:
1491 YY_RULE_SETUP
1492 #line 117 "lib/route/cls/ematch_grammar.l"
1493 return META_PKTTYPE;
1494  YY_BREAK
1495 case 51:
1496 YY_RULE_SETUP
1497 #line 118 "lib/route/cls/ematch_grammar.l"
1498 return META_PKTLEN;
1499  YY_BREAK
1500 case 52:
1501 YY_RULE_SETUP
1502 #line 119 "lib/route/cls/ematch_grammar.l"
1503 return META_DATALEN;
1504  YY_BREAK
1505 case 53:
1506 YY_RULE_SETUP
1507 #line 120 "lib/route/cls/ematch_grammar.l"
1508 return META_MACLEN;
1509  YY_BREAK
1510 case 54:
1511 YY_RULE_SETUP
1512 #line 121 "lib/route/cls/ematch_grammar.l"
1513 return META_MARK;
1514  YY_BREAK
1515 case 55:
1516 YY_RULE_SETUP
1517 #line 122 "lib/route/cls/ematch_grammar.l"
1518 return META_TCINDEX;
1519  YY_BREAK
1520 case 56:
1521 YY_RULE_SETUP
1522 #line 123 "lib/route/cls/ematch_grammar.l"
1523 return META_RTCLASSID;
1524  YY_BREAK
1525 case 57:
1526 YY_RULE_SETUP
1527 #line 124 "lib/route/cls/ematch_grammar.l"
1528 return META_RTIIF;
1529  YY_BREAK
1530 case 58:
1531 YY_RULE_SETUP
1532 #line 125 "lib/route/cls/ematch_grammar.l"
1533 return META_SK_FAMILY;
1534  YY_BREAK
1535 case 59:
1536 YY_RULE_SETUP
1537 #line 126 "lib/route/cls/ematch_grammar.l"
1538 return META_SK_STATE;
1539  YY_BREAK
1540 case 60:
1541 YY_RULE_SETUP
1542 #line 127 "lib/route/cls/ematch_grammar.l"
1543 return META_SK_REUSE;
1544  YY_BREAK
1545 case 61:
1546 YY_RULE_SETUP
1547 #line 128 "lib/route/cls/ematch_grammar.l"
1548 return META_SK_REFCNT;
1549  YY_BREAK
1550 case 62:
1551 YY_RULE_SETUP
1552 #line 129 "lib/route/cls/ematch_grammar.l"
1553 return META_SK_RCVBUF;
1554  YY_BREAK
1555 case 63:
1556 YY_RULE_SETUP
1557 #line 130 "lib/route/cls/ematch_grammar.l"
1558 return META_SK_SNDBUF;
1559  YY_BREAK
1560 case 64:
1561 YY_RULE_SETUP
1562 #line 131 "lib/route/cls/ematch_grammar.l"
1563 return META_SK_SHUTDOWN;
1564  YY_BREAK
1565 case 65:
1566 YY_RULE_SETUP
1567 #line 132 "lib/route/cls/ematch_grammar.l"
1568 return META_SK_PROTO;
1569  YY_BREAK
1570 case 66:
1571 YY_RULE_SETUP
1572 #line 133 "lib/route/cls/ematch_grammar.l"
1573 return META_SK_TYPE;
1574  YY_BREAK
1575 case 67:
1576 YY_RULE_SETUP
1577 #line 134 "lib/route/cls/ematch_grammar.l"
1578 return META_SK_RMEM_ALLOC;
1579  YY_BREAK
1580 case 68:
1581 YY_RULE_SETUP
1582 #line 135 "lib/route/cls/ematch_grammar.l"
1583 return META_SK_WMEM_ALLOC;
1584  YY_BREAK
1585 case 69:
1586 YY_RULE_SETUP
1587 #line 136 "lib/route/cls/ematch_grammar.l"
1588 return META_SK_WMEM_QUEUED;
1589  YY_BREAK
1590 case 70:
1591 YY_RULE_SETUP
1592 #line 137 "lib/route/cls/ematch_grammar.l"
1593 return META_SK_RCV_QLEN;
1594  YY_BREAK
1595 case 71:
1596 YY_RULE_SETUP
1597 #line 138 "lib/route/cls/ematch_grammar.l"
1598 return META_SK_SND_QLEN;
1599  YY_BREAK
1600 case 72:
1601 YY_RULE_SETUP
1602 #line 139 "lib/route/cls/ematch_grammar.l"
1603 return META_SK_ERR_QLEN;
1604  YY_BREAK
1605 case 73:
1606 YY_RULE_SETUP
1607 #line 140 "lib/route/cls/ematch_grammar.l"
1608 return META_SK_FORWARD_ALLOCS;
1609  YY_BREAK
1610 case 74:
1611 YY_RULE_SETUP
1612 #line 141 "lib/route/cls/ematch_grammar.l"
1613 return META_SK_ALLOCS;
1614  YY_BREAK
1615 case 75:
1616 YY_RULE_SETUP
1617 #line 142 "lib/route/cls/ematch_grammar.l"
1618 return META_SK_ROUTE_CAPS;
1619  YY_BREAK
1620 case 76:
1621 YY_RULE_SETUP
1622 #line 143 "lib/route/cls/ematch_grammar.l"
1623 return META_SK_HASH;
1624  YY_BREAK
1625 case 77:
1626 YY_RULE_SETUP
1627 #line 144 "lib/route/cls/ematch_grammar.l"
1628 return META_SK_LINGERTIME;
1629  YY_BREAK
1630 case 78:
1631 YY_RULE_SETUP
1632 #line 145 "lib/route/cls/ematch_grammar.l"
1633 return META_SK_ACK_BACKLOG;
1634  YY_BREAK
1635 case 79:
1636 YY_RULE_SETUP
1637 #line 146 "lib/route/cls/ematch_grammar.l"
1638 return META_SK_MAX_ACK_BACKLOG;
1639  YY_BREAK
1640 case 80:
1641 YY_RULE_SETUP
1642 #line 147 "lib/route/cls/ematch_grammar.l"
1643 return META_SK_PRIO;
1644  YY_BREAK
1645 case 81:
1646 YY_RULE_SETUP
1647 #line 148 "lib/route/cls/ematch_grammar.l"
1648 return META_SK_RCVLOWAT;
1649  YY_BREAK
1650 case 82:
1651 YY_RULE_SETUP
1652 #line 149 "lib/route/cls/ematch_grammar.l"
1653 return META_SK_RCVTIMEO;
1654  YY_BREAK
1655 case 83:
1656 YY_RULE_SETUP
1657 #line 150 "lib/route/cls/ematch_grammar.l"
1658 return META_SK_SNDTIMEO;
1659  YY_BREAK
1660 case 84:
1661 YY_RULE_SETUP
1662 #line 151 "lib/route/cls/ematch_grammar.l"
1663 return META_SK_SENDMSG_OFF;
1664  YY_BREAK
1665 case 85:
1666 YY_RULE_SETUP
1667 #line 152 "lib/route/cls/ematch_grammar.l"
1668 return META_SK_WRITE_PENDING;
1669  YY_BREAK
1670 case 86:
1671 YY_RULE_SETUP
1672 #line 153 "lib/route/cls/ematch_grammar.l"
1673 return META_VLAN;
1674  YY_BREAK
1675 case 87:
1676 YY_RULE_SETUP
1677 #line 154 "lib/route/cls/ematch_grammar.l"
1678 return META_RXHASH;
1679  YY_BREAK
1680 case 88:
1681 YY_RULE_SETUP
1682 #line 156 "lib/route/cls/ematch_grammar.l"
1683 return META_DEVNAME;
1684  YY_BREAK
1685 case 89:
1686 YY_RULE_SETUP
1687 #line 157 "lib/route/cls/ematch_grammar.l"
1688 return META_SK_BOUND_IF;
1689  YY_BREAK
1690 case 90:
1691 YY_RULE_SETUP
1692 #line 160 "lib/route/cls/ematch_grammar.l"
1693 {
1694  yylval->s = strdup(yytext);
1695  if (yylval->s == NULL)
1696  return ERROR;
1697  NL_DBG(4, "lex STR=%s\n", yylval->s);
1698  return STR;
1699  }
1700  YY_BREAK
1701 case 91:
1702 YY_RULE_SETUP
1703 #line 167 "lib/route/cls/ematch_grammar.l"
1704 ECHO;
1705  YY_BREAK
1706 #line 1706 "lib/route/cls/ematch_grammar.c"
1707 case YY_STATE_EOF(INITIAL):
1708 case YY_STATE_EOF(QUOTE):
1709  yyterminate();
1710 
1711  case YY_END_OF_BUFFER:
1712  {
1713  /* Amount of text matched not including the EOB char. */
1714  int yy_amount_of_matched_text = (int) (yy_cp - yyg->yytext_ptr) - 1;
1715 
1716  /* Undo the effects of YY_DO_BEFORE_ACTION. */
1717  *yy_cp = yyg->yy_hold_char;
1718  YY_RESTORE_YY_MORE_OFFSET
1719 
1720  if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
1721  {
1722  /* We're scanning a new file or input source. It's
1723  * possible that this happened because the user
1724  * just pointed yyin at a new source and called
1725  * yylex(). If so, then we have to assure
1726  * consistency between YY_CURRENT_BUFFER and our
1727  * globals. Here is the right place to do so, because
1728  * this is the first action (other than possibly a
1729  * back-up) that will match for the new input source.
1730  */
1731  yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
1732  YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin;
1733  YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
1734  }
1735 
1736  /* Note that here we test for yy_c_buf_p "<=" to the position
1737  * of the first EOB in the buffer, since yy_c_buf_p will
1738  * already have been incremented past the NUL character
1739  * (since all states make transitions on EOB to the
1740  * end-of-buffer state). Contrast this with the test
1741  * in input().
1742  */
1743  if ( yyg->yy_c_buf_p <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] )
1744  { /* This was really a NUL. */
1745  yy_state_type yy_next_state;
1746 
1747  yyg->yy_c_buf_p = yyg->yytext_ptr + yy_amount_of_matched_text;
1748 
1749  yy_current_state = yy_get_previous_state( yyscanner );
1750 
1751  /* Okay, we're now positioned to make the NUL
1752  * transition. We couldn't have
1753  * yy_get_previous_state() go ahead and do it
1754  * for us because it doesn't know how to deal
1755  * with the possibility of jamming (and we don't
1756  * want to build jamming into it because then it
1757  * will run more slowly).
1758  */
1759 
1760  yy_next_state = yy_try_NUL_trans( yy_current_state , yyscanner);
1761 
1762  yy_bp = yyg->yytext_ptr + YY_MORE_ADJ;
1763 
1764  if ( yy_next_state )
1765  {
1766  /* Consume the NUL. */
1767  yy_cp = ++yyg->yy_c_buf_p;
1768  yy_current_state = yy_next_state;
1769  goto yy_match;
1770  }
1771 
1772  else
1773  {
1774  yy_cp = yyg->yy_c_buf_p;
1775  goto yy_find_action;
1776  }
1777  }
1778 
1779  else switch ( yy_get_next_buffer( yyscanner ) )
1780  {
1781  case EOB_ACT_END_OF_FILE:
1782  {
1783  yyg->yy_did_buffer_switch_on_eof = 0;
1784 
1785  if ( yywrap( yyscanner ) )
1786  {
1787  /* Note: because we've taken care in
1788  * yy_get_next_buffer() to have set up
1789  * yytext, we can now set up
1790  * yy_c_buf_p so that if some total
1791  * hoser (like flex itself) wants to
1792  * call the scanner after we return the
1793  * YY_NULL, it'll still work - another
1794  * YY_NULL will get returned.
1795  */
1796  yyg->yy_c_buf_p = yyg->yytext_ptr + YY_MORE_ADJ;
1797 
1798  yy_act = YY_STATE_EOF(YY_START);
1799  goto do_action;
1800  }
1801 
1802  else
1803  {
1804  if ( ! yyg->yy_did_buffer_switch_on_eof )
1805  YY_NEW_FILE;
1806  }
1807  break;
1808  }
1809 
1810  case EOB_ACT_CONTINUE_SCAN:
1811  yyg->yy_c_buf_p =
1812  yyg->yytext_ptr + yy_amount_of_matched_text;
1813 
1814  yy_current_state = yy_get_previous_state( yyscanner );
1815 
1816  yy_cp = yyg->yy_c_buf_p;
1817  yy_bp = yyg->yytext_ptr + YY_MORE_ADJ;
1818  goto yy_match;
1819 
1820  case EOB_ACT_LAST_MATCH:
1821  yyg->yy_c_buf_p =
1822  &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars];
1823 
1824  yy_current_state = yy_get_previous_state( yyscanner );
1825 
1826  yy_cp = yyg->yy_c_buf_p;
1827  yy_bp = yyg->yytext_ptr + YY_MORE_ADJ;
1828  goto yy_find_action;
1829  }
1830  break;
1831  }
1832 
1833  default:
1834  YY_FATAL_ERROR(
1835  "fatal flex scanner internal error--no action found" );
1836  } /* end of action switch */
1837  } /* end of scanning one token */
1838  } /* end of user's declarations */
1839 } /* end of yylex */
1840 
1841 /* yy_get_next_buffer - try to read in a new buffer
1842  *
1843  * Returns a code representing an action:
1844  * EOB_ACT_LAST_MATCH -
1845  * EOB_ACT_CONTINUE_SCAN - continue scanning from current position
1846  * EOB_ACT_END_OF_FILE - end of file
1847  */
1848 static int yy_get_next_buffer (yyscan_t yyscanner)
1849 {
1850  struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
1851  char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
1852  char *source = yyg->yytext_ptr;
1853  int number_to_move, i;
1854  int ret_val;
1855 
1856  if ( yyg->yy_c_buf_p > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] )
1857  YY_FATAL_ERROR(
1858  "fatal flex scanner internal error--end of buffer missed" );
1859 
1860  if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
1861  { /* Don't try to fill the buffer, so this is an EOF. */
1862  if ( yyg->yy_c_buf_p - yyg->yytext_ptr - YY_MORE_ADJ == 1 )
1863  {
1864  /* We matched a single character, the EOB, so
1865  * treat this as a final EOF.
1866  */
1867  return EOB_ACT_END_OF_FILE;
1868  }
1869 
1870  else
1871  {
1872  /* We matched some text prior to the EOB, first
1873  * process it.
1874  */
1875  return EOB_ACT_LAST_MATCH;
1876  }
1877  }
1878 
1879  /* Try to read more data. */
1880 
1881  /* First move last chars to start of buffer. */
1882  number_to_move = (int) (yyg->yy_c_buf_p - yyg->yytext_ptr - 1);
1883 
1884  for ( i = 0; i < number_to_move; ++i )
1885  *(dest++) = *(source++);
1886 
1887  if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
1888  /* don't do the read, it's not guaranteed to return an EOF,
1889  * just force an EOF
1890  */
1891  YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars = 0;
1892 
1893  else
1894  {
1895  int num_to_read =
1896  YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
1897 
1898  while ( num_to_read <= 0 )
1899  { /* Not enough room in the buffer - grow it. */
1900 
1901  /* just a shorter name for the current buffer */
1902  YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE;
1903 
1904  int yy_c_buf_p_offset =
1905  (int) (yyg->yy_c_buf_p - b->yy_ch_buf);
1906 
1907  if ( b->yy_is_our_buffer )
1908  {
1909  int new_size = b->yy_buf_size * 2;
1910 
1911  if ( new_size <= 0 )
1912  b->yy_buf_size += b->yy_buf_size / 8;
1913  else
1914  b->yy_buf_size *= 2;
1915 
1916  b->yy_ch_buf = (char *)
1917  /* Include room in for 2 EOB chars. */
1918  yyrealloc( (void *) b->yy_ch_buf,
1919  (yy_size_t) (b->yy_buf_size + 2) , yyscanner );
1920  }
1921  else
1922  /* Can't grow it, we don't own it. */
1923  b->yy_ch_buf = NULL;
1924 
1925  if ( ! b->yy_ch_buf )
1926  YY_FATAL_ERROR(
1927  "fatal error - scanner input buffer overflow" );
1928 
1929  yyg->yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset];
1930 
1931  num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
1932  number_to_move - 1;
1933 
1934  }
1935 
1936  if ( num_to_read > YY_READ_BUF_SIZE )
1937  num_to_read = YY_READ_BUF_SIZE;
1938 
1939  /* Read in more data. */
1940  YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
1941  yyg->yy_n_chars, num_to_read );
1942 
1943  YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars;
1944  }
1945 
1946  if ( yyg->yy_n_chars == 0 )
1947  {
1948  if ( number_to_move == YY_MORE_ADJ )
1949  {
1950  ret_val = EOB_ACT_END_OF_FILE;
1951  yyrestart( yyin , yyscanner);
1952  }
1953 
1954  else
1955  {
1956  ret_val = EOB_ACT_LAST_MATCH;
1957  YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
1958  YY_BUFFER_EOF_PENDING;
1959  }
1960  }
1961 
1962  else
1963  ret_val = EOB_ACT_CONTINUE_SCAN;
1964 
1965  if ((yyg->yy_n_chars + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
1966  /* Extend the array by 50%, plus the number we really need. */
1967  int new_size = yyg->yy_n_chars + number_to_move + (yyg->yy_n_chars >> 1);
1968  YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc(
1969  (void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf, (yy_size_t) new_size , yyscanner );
1970  if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
1971  YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
1972  /* "- 2" to take care of EOB's */
1973  YY_CURRENT_BUFFER_LVALUE->yy_buf_size = (int) (new_size - 2);
1974  }
1975 
1976  yyg->yy_n_chars += number_to_move;
1977  YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] = YY_END_OF_BUFFER_CHAR;
1978  YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR;
1979 
1980  yyg->yytext_ptr = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
1981 
1982  return ret_val;
1983 }
1984 
1985 /* yy_get_previous_state - get the state just before the EOB char was reached */
1986 
1987  static yy_state_type yy_get_previous_state (yyscan_t yyscanner)
1988 {
1989  yy_state_type yy_current_state;
1990  char *yy_cp;
1991  struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
1992 
1993  yy_current_state = yyg->yy_start;
1994 
1995  for ( yy_cp = yyg->yytext_ptr + YY_MORE_ADJ; yy_cp < yyg->yy_c_buf_p; ++yy_cp )
1996  {
1997  YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
1998  if ( yy_accept[yy_current_state] )
1999  {
2000  yyg->yy_last_accepting_state = yy_current_state;
2001  yyg->yy_last_accepting_cpos = yy_cp;
2002  }
2003  while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
2004  {
2005  yy_current_state = (int) yy_def[yy_current_state];
2006  if ( yy_current_state >= 393 )
2007  yy_c = yy_meta[yy_c];
2008  }
2009  yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
2010  }
2011 
2012  return yy_current_state;
2013 }
2014 
2015 /* yy_try_NUL_trans - try to make a transition on the NUL character
2016  *
2017  * synopsis
2018  * next_state = yy_try_NUL_trans( current_state );
2019  */
2020  static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state , yyscan_t yyscanner)
2021 {
2022  int yy_is_jam;
2023  struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; /* This var may be unused depending upon options. */
2024  char *yy_cp = yyg->yy_c_buf_p;
2025 
2026  YY_CHAR yy_c = 1;
2027  if ( yy_accept[yy_current_state] )
2028  {
2029  yyg->yy_last_accepting_state = yy_current_state;
2030  yyg->yy_last_accepting_cpos = yy_cp;
2031  }
2032  while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
2033  {
2034  yy_current_state = (int) yy_def[yy_current_state];
2035  if ( yy_current_state >= 393 )
2036  yy_c = yy_meta[yy_c];
2037  }
2038  yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
2039  yy_is_jam = (yy_current_state == 392);
2040 
2041  (void)yyg;
2042  return yy_is_jam ? 0 : yy_current_state;
2043 }
2044 
2045 #ifndef YY_NO_UNPUT
2046 
2047 #endif
2048 
2049 #ifndef YY_NO_INPUT
2050 #ifdef __cplusplus
2051  static int yyinput (yyscan_t yyscanner)
2052 #else
2053  static int input (yyscan_t yyscanner)
2054 #endif
2055 
2056 {
2057  int c;
2058  struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2059 
2060  *yyg->yy_c_buf_p = yyg->yy_hold_char;
2061 
2062  if ( *yyg->yy_c_buf_p == YY_END_OF_BUFFER_CHAR )
2063  {
2064  /* yy_c_buf_p now points to the character we want to return.
2065  * If this occurs *before* the EOB characters, then it's a
2066  * valid NUL; if not, then we've hit the end of the buffer.
2067  */
2068  if ( yyg->yy_c_buf_p < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] )
2069  /* This was really a NUL. */
2070  *yyg->yy_c_buf_p = '\0';
2071 
2072  else
2073  { /* need more input */
2074  int offset = (int) (yyg->yy_c_buf_p - yyg->yytext_ptr);
2075  ++yyg->yy_c_buf_p;
2076 
2077  switch ( yy_get_next_buffer( yyscanner ) )
2078  {
2079  case EOB_ACT_LAST_MATCH:
2080  /* This happens because yy_g_n_b()
2081  * sees that we've accumulated a
2082  * token and flags that we need to
2083  * try matching the token before
2084  * proceeding. But for input(),
2085  * there's no matching to consider.
2086  * So convert the EOB_ACT_LAST_MATCH
2087  * to EOB_ACT_END_OF_FILE.
2088  */
2089 
2090  /* Reset buffer status. */
2091  yyrestart( yyin , yyscanner);
2092 
2093  /*FALLTHROUGH*/
2094 
2095  case EOB_ACT_END_OF_FILE:
2096  {
2097  if ( yywrap( yyscanner ) )
2098  return 0;
2099 
2100  if ( ! yyg->yy_did_buffer_switch_on_eof )
2101  YY_NEW_FILE;
2102 #ifdef __cplusplus
2103  return yyinput(yyscanner);
2104 #else
2105  return input(yyscanner);
2106 #endif
2107  }
2108 
2109  case EOB_ACT_CONTINUE_SCAN:
2110  yyg->yy_c_buf_p = yyg->yytext_ptr + offset;
2111  break;
2112  }
2113  }
2114  }
2115 
2116  c = *(unsigned char *) yyg->yy_c_buf_p; /* cast for 8-bit char's */
2117  *yyg->yy_c_buf_p = '\0'; /* preserve yytext */
2118  yyg->yy_hold_char = *++yyg->yy_c_buf_p;
2119 
2120  return c;
2121 }
2122 #endif /* ifndef YY_NO_INPUT */
2123 
2124 /** Immediately switch to a different input stream.
2125  * @param input_file A readable stream.
2126  * @param yyscanner The scanner object.
2127  * @note This function does not reset the start condition to @c INITIAL .
2128  */
2129  void yyrestart (FILE * input_file , yyscan_t yyscanner)
2130 {
2131  struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2132 
2133  if ( ! YY_CURRENT_BUFFER ){
2134  yyensure_buffer_stack (yyscanner);
2135  YY_CURRENT_BUFFER_LVALUE =
2136  yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner);
2137  }
2138 
2139  yy_init_buffer( YY_CURRENT_BUFFER, input_file , yyscanner);
2140  yy_load_buffer_state( yyscanner );
2141 }
2142 
2143 /** Switch to a different input buffer.
2144  * @param new_buffer The new input buffer.
2145  * @param yyscanner The scanner object.
2146  */
2147  void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner)
2148 {
2149  struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2150 
2151  /* TODO. We should be able to replace this entire function body
2152  * with
2153  * yypop_buffer_state();
2154  * yypush_buffer_state(new_buffer);
2155  */
2156  yyensure_buffer_stack (yyscanner);
2157  if ( YY_CURRENT_BUFFER == new_buffer )
2158  return;
2159 
2160  if ( YY_CURRENT_BUFFER )
2161  {
2162  /* Flush out information for old buffer. */
2163  *yyg->yy_c_buf_p = yyg->yy_hold_char;
2164  YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p;
2165  YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars;
2166  }
2167 
2168  YY_CURRENT_BUFFER_LVALUE = new_buffer;
2169  yy_load_buffer_state( yyscanner );
2170 
2171  /* We don't actually know whether we did this switch during
2172  * EOF (yywrap()) processing, but the only time this flag
2173  * is looked at is after yywrap() is called, so it's safe
2174  * to go ahead and always set it.
2175  */
2176  yyg->yy_did_buffer_switch_on_eof = 1;
2177 }
2178 
2179 static void yy_load_buffer_state (yyscan_t yyscanner)
2180 {
2181  struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2182  yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
2183  yyg->yytext_ptr = yyg->yy_c_buf_p = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
2184  yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
2185  yyg->yy_hold_char = *yyg->yy_c_buf_p;
2186 }
2187 
2188 /** Allocate and initialize an input buffer state.
2189  * @param file A readable stream.
2190  * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
2191  * @param yyscanner The scanner object.
2192  * @return the allocated buffer state.
2193  */
2194  YY_BUFFER_STATE yy_create_buffer (FILE * file, int size , yyscan_t yyscanner)
2195 {
2196  YY_BUFFER_STATE b;
2197 
2198  b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) , yyscanner );
2199  if ( ! b )
2200  YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
2201 
2202  b->yy_buf_size = size;
2203 
2204  /* yy_ch_buf has to be 2 characters longer than the size given because
2205  * we need to put in 2 end-of-buffer characters.
2206  */
2207  b->yy_ch_buf = (char *) yyalloc( (yy_size_t) (b->yy_buf_size + 2) , yyscanner );
2208  if ( ! b->yy_ch_buf )
2209  YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
2210 
2211  b->yy_is_our_buffer = 1;
2212 
2213  yy_init_buffer( b, file , yyscanner);
2214 
2215  return b;
2216 }
2217 
2218 /** Destroy the buffer.
2219  * @param b a buffer created with yy_create_buffer()
2220  * @param yyscanner The scanner object.
2221  */
2222  void yy_delete_buffer (YY_BUFFER_STATE b , yyscan_t yyscanner)
2223 {
2224  struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2225 
2226  if ( ! b )
2227  return;
2228 
2229  if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
2230  YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
2231 
2232  if ( b->yy_is_our_buffer )
2233  yyfree( (void *) b->yy_ch_buf , yyscanner );
2234 
2235  yyfree( (void *) b , yyscanner );
2236 }
2237 
2238 /* Initializes or reinitializes a buffer.
2239  * This function is sometimes called more than once on the same buffer,
2240  * such as during a yyrestart() or at EOF.
2241  */
2242  static void yy_init_buffer (YY_BUFFER_STATE b, FILE * file , yyscan_t yyscanner)
2243 
2244 {
2245  int oerrno = errno;
2246  struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2247 
2248  yy_flush_buffer( b , yyscanner);
2249 
2250  b->yy_input_file = file;
2251  b->yy_fill_buffer = 1;
2252 
2253  /* If b is the current buffer, then yy_init_buffer was _probably_
2254  * called from yyrestart() or through yy_get_next_buffer.
2255  * In that case, we don't want to reset the lineno or column.
2256  */
2257  if (b != YY_CURRENT_BUFFER){
2258  b->yy_bs_lineno = 1;
2259  b->yy_bs_column = 0;
2260  }
2261 
2262  b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
2263 
2264  errno = oerrno;
2265 }
2266 
2267 /** Discard all buffered characters. On the next scan, YY_INPUT will be called.
2268  * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
2269  * @param yyscanner The scanner object.
2270  */
2271  void yy_flush_buffer (YY_BUFFER_STATE b , yyscan_t yyscanner)
2272 {
2273  struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2274  if ( ! b )
2275  return;
2276 
2277  b->yy_n_chars = 0;
2278 
2279  /* We always need two end-of-buffer characters. The first causes
2280  * a transition to the end-of-buffer state. The second causes
2281  * a jam in that state.
2282  */
2283  b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
2284  b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
2285 
2286  b->yy_buf_pos = &b->yy_ch_buf[0];
2287 
2288  b->yy_at_bol = 1;
2289  b->yy_buffer_status = YY_BUFFER_NEW;
2290 
2291  if ( b == YY_CURRENT_BUFFER )
2292  yy_load_buffer_state( yyscanner );
2293 }
2294 
2295 /** Pushes the new state onto the stack. The new state becomes
2296  * the current state. This function will allocate the stack
2297  * if necessary.
2298  * @param new_buffer The new state.
2299  * @param yyscanner The scanner object.
2300  */
2301 void yypush_buffer_state (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner)
2302 {
2303  struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2304  if (new_buffer == NULL)
2305  return;
2306 
2307  yyensure_buffer_stack(yyscanner);
2308 
2309  /* This block is copied from yy_switch_to_buffer. */
2310  if ( YY_CURRENT_BUFFER )
2311  {
2312  /* Flush out information for old buffer. */
2313  *yyg->yy_c_buf_p = yyg->yy_hold_char;
2314  YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p;
2315  YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars;
2316  }
2317 
2318  /* Only push if top exists. Otherwise, replace top. */
2319  if (YY_CURRENT_BUFFER)
2320  yyg->yy_buffer_stack_top++;
2321  YY_CURRENT_BUFFER_LVALUE = new_buffer;
2322 
2323  /* copied from yy_switch_to_buffer. */
2324  yy_load_buffer_state( yyscanner );
2325  yyg->yy_did_buffer_switch_on_eof = 1;
2326 }
2327 
2328 /** Removes and deletes the top of the stack, if present.
2329  * The next element becomes the new top.
2330  * @param yyscanner The scanner object.
2331  */
2332 void yypop_buffer_state (yyscan_t yyscanner)
2333 {
2334  struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2335  if (!YY_CURRENT_BUFFER)
2336  return;
2337 
2338  yy_delete_buffer(YY_CURRENT_BUFFER , yyscanner);
2339  YY_CURRENT_BUFFER_LVALUE = NULL;
2340  if (yyg->yy_buffer_stack_top > 0)
2341  --yyg->yy_buffer_stack_top;
2342 
2343  if (YY_CURRENT_BUFFER) {
2344  yy_load_buffer_state( yyscanner );
2345  yyg->yy_did_buffer_switch_on_eof = 1;
2346  }
2347 }
2348 
2349 /* Allocates the stack if it does not exist.
2350  * Guarantees space for at least one push.
2351  */
2352 static void yyensure_buffer_stack (yyscan_t yyscanner)
2353 {
2354  yy_size_t num_to_alloc;
2355  struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2356 
2357  if (!yyg->yy_buffer_stack) {
2358 
2359  /* First allocation is just for 2 elements, since we don't know if this
2360  * scanner will even need a stack. We use 2 instead of 1 to avoid an
2361  * immediate realloc on the next call.
2362  */
2363  num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */
2364  yyg->yy_buffer_stack = (struct yy_buffer_state**)yyalloc
2365  (num_to_alloc * sizeof(struct yy_buffer_state*)
2366  , yyscanner);
2367  if ( ! yyg->yy_buffer_stack )
2368  YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
2369 
2370  memset(yyg->yy_buffer_stack, 0, num_to_alloc * sizeof(struct yy_buffer_state*));
2371 
2372  yyg->yy_buffer_stack_max = num_to_alloc;
2373  yyg->yy_buffer_stack_top = 0;
2374  return;
2375  }
2376 
2377  if (yyg->yy_buffer_stack_top >= (yyg->yy_buffer_stack_max) - 1){
2378 
2379  /* Increase the buffer to prepare for a possible push. */
2380  yy_size_t grow_size = 8 /* arbitrary grow size */;
2381 
2382  num_to_alloc = yyg->yy_buffer_stack_max + grow_size;
2383  yyg->yy_buffer_stack = (struct yy_buffer_state**)yyrealloc
2384  (yyg->yy_buffer_stack,
2385  num_to_alloc * sizeof(struct yy_buffer_state*)
2386  , yyscanner);
2387  if ( ! yyg->yy_buffer_stack )
2388  YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
2389 
2390  /* zero only the new slots.*/
2391  memset(yyg->yy_buffer_stack + yyg->yy_buffer_stack_max, 0, grow_size * sizeof(struct yy_buffer_state*));
2392  yyg->yy_buffer_stack_max = num_to_alloc;
2393  }
2394 }
2395 
2396 /** Setup the input buffer state to scan directly from a user-specified character buffer.
2397  * @param base the character buffer
2398  * @param size the size in bytes of the character buffer
2399  * @param yyscanner The scanner object.
2400  * @return the newly allocated buffer state object.
2401  */
2402 YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size , yyscan_t yyscanner)
2403 {
2404  YY_BUFFER_STATE b;
2405 
2406  if ( size < 2 ||
2407  base[size-2] != YY_END_OF_BUFFER_CHAR ||
2408  base[size-1] != YY_END_OF_BUFFER_CHAR )
2409  /* They forgot to leave room for the EOB's. */
2410  return NULL;
2411 
2412  b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) , yyscanner );
2413  if ( ! b )
2414  YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
2415 
2416  b->yy_buf_size = (int) (size - 2); /* "- 2" to take care of EOB's */
2417  b->yy_buf_pos = b->yy_ch_buf = base;
2418  b->yy_is_our_buffer = 0;
2419  b->yy_input_file = NULL;
2420  b->yy_n_chars = b->yy_buf_size;
2421  b->yy_is_interactive = 0;
2422  b->yy_at_bol = 1;
2423  b->yy_fill_buffer = 0;
2424  b->yy_buffer_status = YY_BUFFER_NEW;
2425 
2426  yy_switch_to_buffer( b , yyscanner );
2427 
2428  return b;
2429 }
2430 
2431 /** Setup the input buffer state to scan a string. The next call to yylex() will
2432  * scan from a @e copy of @a str.
2433  * @param yystr a NUL-terminated string to scan
2434  * @param yyscanner The scanner object.
2435  * @return the newly allocated buffer state object.
2436  * @note If you want to scan bytes that may contain NUL values, then use
2437  * yy_scan_bytes() instead.
2438  */
2439 YY_BUFFER_STATE yy_scan_string (const char * yystr , yyscan_t yyscanner)
2440 {
2441 
2442  return yy_scan_bytes( yystr, (int) strlen(yystr) , yyscanner);
2443 }
2444 
2445 /** Setup the input buffer state to scan the given bytes. The next call to yylex() will
2446  * scan from a @e copy of @a bytes.
2447  * @param yybytes the byte buffer to scan
2448  * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes.
2449  * @param yyscanner The scanner object.
2450  * @return the newly allocated buffer state object.
2451  */
2452 YY_BUFFER_STATE yy_scan_bytes (const char * yybytes, int _yybytes_len , yyscan_t yyscanner)
2453 {
2454  YY_BUFFER_STATE b;
2455  char *buf;
2456  yy_size_t n;
2457  int i;
2458 
2459  /* Get memory for full buffer, including space for trailing EOB's. */
2460  n = (yy_size_t) (_yybytes_len + 2);
2461  buf = (char *) yyalloc( n , yyscanner );
2462  if ( ! buf )
2463  YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
2464 
2465  for ( i = 0; i < _yybytes_len; ++i )
2466  buf[i] = yybytes[i];
2467 
2468  buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
2469 
2470  b = yy_scan_buffer( buf, n , yyscanner);
2471  if ( ! b )
2472  YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
2473 
2474  /* It's okay to grow etc. this buffer, and we should throw it
2475  * away when we're done.
2476  */
2477  b->yy_is_our_buffer = 1;
2478 
2479  return b;
2480 }
2481 
2482 #ifndef YY_EXIT_FAILURE
2483 #define YY_EXIT_FAILURE 2
2484 #endif
2485 
2486 static void yynoreturn yy_fatal_error (const char* msg , yyscan_t yyscanner)
2487 {
2488  struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2489  (void)yyg;
2490  fprintf( stderr, "%s\n", msg );
2491  exit( YY_EXIT_FAILURE );
2492 }
2493 
2494 /* Redefine yyless() so it works in section 3 code. */
2495 
2496 #undef yyless
2497 #define yyless(n) \
2498  do \
2499  { \
2500  /* Undo effects of setting up yytext. */ \
2501  int yyless_macro_arg = (n); \
2502  YY_LESS_LINENO(yyless_macro_arg);\
2503  yytext[yyleng] = yyg->yy_hold_char; \
2504  yyg->yy_c_buf_p = yytext + yyless_macro_arg; \
2505  yyg->yy_hold_char = *yyg->yy_c_buf_p; \
2506  *yyg->yy_c_buf_p = '\0'; \
2507  yyleng = yyless_macro_arg; \
2508  } \
2509  while ( 0 )
2510 
2511 /* Accessor methods (get/set functions) to struct members. */
2512 
2513 /** Get the user-defined data for this scanner.
2514  * @param yyscanner The scanner object.
2515  */
2516 YY_EXTRA_TYPE yyget_extra (yyscan_t yyscanner)
2517 {
2518  struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2519  return yyextra;
2520 }
2521 
2522 /** Get the current line number.
2523  * @param yyscanner The scanner object.
2524  */
2525 int yyget_lineno (yyscan_t yyscanner)
2526 {
2527  struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2528 
2529  if (! YY_CURRENT_BUFFER)
2530  return 0;
2531 
2532  return yylineno;
2533 }
2534 
2535 /** Get the current column number.
2536  * @param yyscanner The scanner object.
2537  */
2538 int yyget_column (yyscan_t yyscanner)
2539 {
2540  struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2541 
2542  if (! YY_CURRENT_BUFFER)
2543  return 0;
2544 
2545  return yycolumn;
2546 }
2547 
2548 /** Get the input stream.
2549  * @param yyscanner The scanner object.
2550  */
2551 FILE *yyget_in (yyscan_t yyscanner)
2552 {
2553  struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2554  return yyin;
2555 }
2556 
2557 /** Get the output stream.
2558  * @param yyscanner The scanner object.
2559  */
2560 FILE *yyget_out (yyscan_t yyscanner)
2561 {
2562  struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2563  return yyout;
2564 }
2565 
2566 /** Get the length of the current token.
2567  * @param yyscanner The scanner object.
2568  */
2569 int yyget_leng (yyscan_t yyscanner)
2570 {
2571  struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2572  return yyleng;
2573 }
2574 
2575 /** Get the current token.
2576  * @param yyscanner The scanner object.
2577  */
2578 
2579 char *yyget_text (yyscan_t yyscanner)
2580 {
2581  struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2582  return yytext;
2583 }
2584 
2585 /** Set the user-defined data. This data is never touched by the scanner.
2586  * @param user_defined The data to be associated with this scanner.
2587  * @param yyscanner The scanner object.
2588  */
2589 void yyset_extra (YY_EXTRA_TYPE user_defined , yyscan_t yyscanner)
2590 {
2591  struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2592  yyextra = user_defined ;
2593 }
2594 
2595 /** Set the current line number.
2596  * @param _line_number line number
2597  * @param yyscanner The scanner object.
2598  */
2599 void yyset_lineno (int _line_number , yyscan_t yyscanner)
2600 {
2601  struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2602 
2603  /* lineno is only valid if an input buffer exists. */
2604  if (! YY_CURRENT_BUFFER )
2605  YY_FATAL_ERROR( "yyset_lineno called with no buffer" );
2606 
2607  yylineno = _line_number;
2608 }
2609 
2610 /** Set the current column.
2611  * @param _column_no column number
2612  * @param yyscanner The scanner object.
2613  */
2614 void yyset_column (int _column_no , yyscan_t yyscanner)
2615 {
2616  struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2617 
2618  /* column is only valid if an input buffer exists. */
2619  if (! YY_CURRENT_BUFFER )
2620  YY_FATAL_ERROR( "yyset_column called with no buffer" );
2621 
2622  yycolumn = _column_no;
2623 }
2624 
2625 /** Set the input stream. This does not discard the current
2626  * input buffer.
2627  * @param _in_str A readable stream.
2628  * @param yyscanner The scanner object.
2629  * @see yy_switch_to_buffer
2630  */
2631 void yyset_in (FILE * _in_str , yyscan_t yyscanner)
2632 {
2633  struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2634  yyin = _in_str ;
2635 }
2636 
2637 void yyset_out (FILE * _out_str , yyscan_t yyscanner)
2638 {
2639  struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2640  yyout = _out_str ;
2641 }
2642 
2643 int yyget_debug (yyscan_t yyscanner)
2644 {
2645  struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2646  return yy_flex_debug;
2647 }
2648 
2649 void yyset_debug (int _bdebug , yyscan_t yyscanner)
2650 {
2651  struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2652  yy_flex_debug = _bdebug ;
2653 }
2654 
2655 /* Accessor methods for yylval and yylloc */
2656 
2657 YYSTYPE * yyget_lval (yyscan_t yyscanner)
2658 {
2659  struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2660  return yylval;
2661 }
2662 
2663 void yyset_lval (YYSTYPE * yylval_param , yyscan_t yyscanner)
2664 {
2665  struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2666  yylval = yylval_param;
2667 }
2668 
2669 /* User-visible API */
2670 
2671 /* yylex_init is special because it creates the scanner itself, so it is
2672  * the ONLY reentrant function that doesn't take the scanner as the last argument.
2673  * That's why we explicitly handle the declaration, instead of using our macros.
2674  */
2675 int yylex_init(yyscan_t* ptr_yy_globals)
2676 {
2677  if (ptr_yy_globals == NULL){
2678  errno = EINVAL;
2679  return 1;
2680  }
2681 
2682  *ptr_yy_globals = (yyscan_t) yyalloc ( sizeof( struct yyguts_t ), NULL );
2683 
2684  if (*ptr_yy_globals == NULL){
2685  errno = ENOMEM;
2686  return 1;
2687  }
2688 
2689  /* By setting to 0xAA, we expose bugs in yy_init_globals. Leave at 0x00 for releases. */
2690  memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t));
2691 
2692  return yy_init_globals ( *ptr_yy_globals );
2693 }
2694 
2695 /* yylex_init_extra has the same functionality as yylex_init, but follows the
2696  * convention of taking the scanner as the last argument. Note however, that
2697  * this is a *pointer* to a scanner, as it will be allocated by this call (and
2698  * is the reason, too, why this function also must handle its own declaration).
2699  * The user defined value in the first argument will be available to yyalloc in
2700  * the yyextra field.
2701  */
2702 int yylex_init_extra( YY_EXTRA_TYPE yy_user_defined, yyscan_t* ptr_yy_globals )
2703 {
2704  struct yyguts_t dummy_yyguts;
2705 
2706  yyset_extra (yy_user_defined, &dummy_yyguts);
2707 
2708  if (ptr_yy_globals == NULL){
2709  errno = EINVAL;
2710  return 1;
2711  }
2712 
2713  *ptr_yy_globals = (yyscan_t) yyalloc ( sizeof( struct yyguts_t ), &dummy_yyguts );
2714 
2715  if (*ptr_yy_globals == NULL){
2716  errno = ENOMEM;
2717  return 1;
2718  }
2719 
2720  /* By setting to 0xAA, we expose bugs in
2721  yy_init_globals. Leave at 0x00 for releases. */
2722  memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t));
2723 
2724  yyset_extra (yy_user_defined, *ptr_yy_globals);
2725 
2726  return yy_init_globals ( *ptr_yy_globals );
2727 }
2728 
2729 static int yy_init_globals (yyscan_t yyscanner)
2730 {
2731  struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2732  /* Initialization is the same as for the non-reentrant scanner.
2733  * This function is called from yylex_destroy(), so don't allocate here.
2734  */
2735 
2736  yyg->yy_buffer_stack = NULL;
2737  yyg->yy_buffer_stack_top = 0;
2738  yyg->yy_buffer_stack_max = 0;
2739  yyg->yy_c_buf_p = NULL;
2740  yyg->yy_init = 0;
2741  yyg->yy_start = 0;
2742 
2743  yyg->yy_start_stack_ptr = 0;
2744  yyg->yy_start_stack_depth = 0;
2745  yyg->yy_start_stack = NULL;
2746 
2747 /* Defined in main.c */
2748 #ifdef YY_STDINIT
2749  yyin = stdin;
2750  yyout = stdout;
2751 #else
2752  yyin = NULL;
2753  yyout = NULL;
2754 #endif
2755 
2756  /* For future reference: Set errno on error, since we are called by
2757  * yylex_init()
2758  */
2759  return 0;
2760 }
2761 
2762 /* yylex_destroy is for both reentrant and non-reentrant scanners. */
2763 int yylex_destroy (yyscan_t yyscanner)
2764 {
2765  struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2766 
2767  /* Pop the buffer stack, destroying each element. */
2768  while(YY_CURRENT_BUFFER){
2769  yy_delete_buffer( YY_CURRENT_BUFFER , yyscanner );
2770  YY_CURRENT_BUFFER_LVALUE = NULL;
2771  yypop_buffer_state(yyscanner);
2772  }
2773 
2774  /* Destroy the stack itself. */
2775  yyfree(yyg->yy_buffer_stack , yyscanner);
2776  yyg->yy_buffer_stack = NULL;
2777 
2778  /* Destroy the start condition stack. */
2779  yyfree( yyg->yy_start_stack , yyscanner );
2780  yyg->yy_start_stack = NULL;
2781 
2782  /* Reset the globals. This is important in a non-reentrant scanner so the next time
2783  * yylex() is called, initialization will occur. */
2784  yy_init_globals( yyscanner);
2785 
2786  /* Destroy the main struct (reentrant only). */
2787  yyfree ( yyscanner , yyscanner );
2788  yyscanner = NULL;
2789  return 0;
2790 }
2791 
2792 /*
2793  * Internal utility routines.
2794  */
2795 
2796 #ifndef yytext_ptr
2797 static void yy_flex_strncpy (char* s1, const char * s2, int n , yyscan_t yyscanner)
2798 {
2799  struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2800  (void)yyg;
2801 
2802  int i;
2803  for ( i = 0; i < n; ++i )
2804  s1[i] = s2[i];
2805 }
2806 #endif
2807 
2808 #ifdef YY_NEED_STRLEN
2809 static int yy_flex_strlen (const char * s , yyscan_t yyscanner)
2810 {
2811  int n;
2812  for ( n = 0; s[n]; ++n )
2813  ;
2814 
2815  return n;
2816 }
2817 #endif
2818 
2819 void *yyalloc (yy_size_t size , yyscan_t yyscanner)
2820 {
2821  struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2822  (void)yyg;
2823  return malloc(size);
2824 }
2825 
2826 void *yyrealloc (void * ptr, yy_size_t size , yyscan_t yyscanner)
2827 {
2828  struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2829  (void)yyg;
2830 
2831  /* The cast to (char *) in the following accommodates both
2832  * implementations that use char* generic pointers, and those
2833  * that use void* generic pointers. It works with the latter
2834  * because both ANSI C and C++ allow castless assignment from
2835  * any pointer type to void*, and deal with argument conversions
2836  * as though doing an assignment.
2837  */
2838  return realloc(ptr, size);
2839 }
2840 
2841 void yyfree (void * ptr , yyscan_t yyscanner)
2842 {
2843  struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2844  (void)yyg;
2845  free( (char *) ptr ); /* see yyrealloc() for (char *) cast */
2846 }
2847 
2848 #define YYTABLES_NAME "yytables"
2849 
2850 #line 167 "lib/route/cls/ematch_grammar.l"
size_t yy_buffer_stack_top
index of top of stack.
int yy_bs_lineno
The line count.
size_t yy_buffer_stack_max
capacity of stack.
int yy_bs_column
The column count.
YY_BUFFER_STATE * yy_buffer_stack
Stack as an array.