Kea 2.0.3
agent_lexer.cc
Go to the documentation of this file.
1#line 1 "agent_lexer.cc"
2
3#line 3 "agent_lexer.cc"
4
5#define YY_INT_ALIGNED short int
6
7/* A lexical scanner generated by flex */
8
9/* %not-for-header */
10/* %if-c-only */
11/* %if-not-reentrant */
12#define yy_create_buffer agent__create_buffer
13#define yy_delete_buffer agent__delete_buffer
14#define yy_scan_buffer agent__scan_buffer
15#define yy_scan_string agent__scan_string
16#define yy_scan_bytes agent__scan_bytes
17#define yy_init_buffer agent__init_buffer
18#define yy_flush_buffer agent__flush_buffer
19#define yy_load_buffer_state agent__load_buffer_state
20#define yy_switch_to_buffer agent__switch_to_buffer
21#define yypush_buffer_state agent_push_buffer_state
22#define yypop_buffer_state agent_pop_buffer_state
23#define yyensure_buffer_stack agent_ensure_buffer_stack
24#define yy_flex_debug agent__flex_debug
25#define yyin agent_in
26#define yyleng agent_leng
27#define yylex agent_lex
28#define yylineno agent_lineno
29#define yyout agent_out
30#define yyrestart agent_restart
31#define yytext agent_text
32#define yywrap agent_wrap
33#define yyalloc agent_alloc
34#define yyrealloc agent_realloc
35#define yyfree agent_free
36
37/* %endif */
38/* %endif */
39/* %ok-for-header */
40
41#define FLEX_SCANNER
42#define YY_FLEX_MAJOR_VERSION 2
43#define YY_FLEX_MINOR_VERSION 6
44#define YY_FLEX_SUBMINOR_VERSION 4
45#if YY_FLEX_SUBMINOR_VERSION > 0
46#define FLEX_BETA
47#endif
48
49/* %if-c++-only */
50/* %endif */
51
52/* %if-c-only */
53#ifdef yy_create_buffer
54#define agent__create_buffer_ALREADY_DEFINED
55#else
56#define yy_create_buffer agent__create_buffer
57#endif
58
59#ifdef yy_delete_buffer
60#define agent__delete_buffer_ALREADY_DEFINED
61#else
62#define yy_delete_buffer agent__delete_buffer
63#endif
64
65#ifdef yy_scan_buffer
66#define agent__scan_buffer_ALREADY_DEFINED
67#else
68#define yy_scan_buffer agent__scan_buffer
69#endif
70
71#ifdef yy_scan_string
72#define agent__scan_string_ALREADY_DEFINED
73#else
74#define yy_scan_string agent__scan_string
75#endif
76
77#ifdef yy_scan_bytes
78#define agent__scan_bytes_ALREADY_DEFINED
79#else
80#define yy_scan_bytes agent__scan_bytes
81#endif
82
83#ifdef yy_init_buffer
84#define agent__init_buffer_ALREADY_DEFINED
85#else
86#define yy_init_buffer agent__init_buffer
87#endif
88
89#ifdef yy_flush_buffer
90#define agent__flush_buffer_ALREADY_DEFINED
91#else
92#define yy_flush_buffer agent__flush_buffer
93#endif
94
95#ifdef yy_load_buffer_state
96#define agent__load_buffer_state_ALREADY_DEFINED
97#else
98#define yy_load_buffer_state agent__load_buffer_state
99#endif
100
101#ifdef yy_switch_to_buffer
102#define agent__switch_to_buffer_ALREADY_DEFINED
103#else
104#define yy_switch_to_buffer agent__switch_to_buffer
105#endif
106
107#ifdef yypush_buffer_state
108#define agent_push_buffer_state_ALREADY_DEFINED
109#else
110#define yypush_buffer_state agent_push_buffer_state
111#endif
112
113#ifdef yypop_buffer_state
114#define agent_pop_buffer_state_ALREADY_DEFINED
115#else
116#define yypop_buffer_state agent_pop_buffer_state
117#endif
118
119#ifdef yyensure_buffer_stack
120#define agent_ensure_buffer_stack_ALREADY_DEFINED
121#else
122#define yyensure_buffer_stack agent_ensure_buffer_stack
123#endif
124
125#ifdef yylex
126#define agent_lex_ALREADY_DEFINED
127#else
128#define yylex agent_lex
129#endif
130
131#ifdef yyrestart
132#define agent_restart_ALREADY_DEFINED
133#else
134#define yyrestart agent_restart
135#endif
136
137#ifdef yylex_init
138#define agent_lex_init_ALREADY_DEFINED
139#else
140#define yylex_init agent_lex_init
141#endif
142
143#ifdef yylex_init_extra
144#define agent_lex_init_extra_ALREADY_DEFINED
145#else
146#define yylex_init_extra agent_lex_init_extra
147#endif
148
149#ifdef yylex_destroy
150#define agent_lex_destroy_ALREADY_DEFINED
151#else
152#define yylex_destroy agent_lex_destroy
153#endif
154
155#ifdef yyget_debug
156#define agent_get_debug_ALREADY_DEFINED
157#else
158#define yyget_debug agent_get_debug
159#endif
160
161#ifdef yyset_debug
162#define agent_set_debug_ALREADY_DEFINED
163#else
164#define yyset_debug agent_set_debug
165#endif
166
167#ifdef yyget_extra
168#define agent_get_extra_ALREADY_DEFINED
169#else
170#define yyget_extra agent_get_extra
171#endif
172
173#ifdef yyset_extra
174#define agent_set_extra_ALREADY_DEFINED
175#else
176#define yyset_extra agent_set_extra
177#endif
178
179#ifdef yyget_in
180#define agent_get_in_ALREADY_DEFINED
181#else
182#define yyget_in agent_get_in
183#endif
184
185#ifdef yyset_in
186#define agent_set_in_ALREADY_DEFINED
187#else
188#define yyset_in agent_set_in
189#endif
190
191#ifdef yyget_out
192#define agent_get_out_ALREADY_DEFINED
193#else
194#define yyget_out agent_get_out
195#endif
196
197#ifdef yyset_out
198#define agent_set_out_ALREADY_DEFINED
199#else
200#define yyset_out agent_set_out
201#endif
202
203#ifdef yyget_leng
204#define agent_get_leng_ALREADY_DEFINED
205#else
206#define yyget_leng agent_get_leng
207#endif
208
209#ifdef yyget_text
210#define agent_get_text_ALREADY_DEFINED
211#else
212#define yyget_text agent_get_text
213#endif
214
215#ifdef yyget_lineno
216#define agent_get_lineno_ALREADY_DEFINED
217#else
218#define yyget_lineno agent_get_lineno
219#endif
220
221#ifdef yyset_lineno
222#define agent_set_lineno_ALREADY_DEFINED
223#else
224#define yyset_lineno agent_set_lineno
225#endif
226
227#ifdef yywrap
228#define agent_wrap_ALREADY_DEFINED
229#else
230#define yywrap agent_wrap
231#endif
232
233/* %endif */
234
235#ifdef yyalloc
236#define agent_alloc_ALREADY_DEFINED
237#else
238#define yyalloc agent_alloc
239#endif
240
241#ifdef yyrealloc
242#define agent_realloc_ALREADY_DEFINED
243#else
244#define yyrealloc agent_realloc
245#endif
246
247#ifdef yyfree
248#define agent_free_ALREADY_DEFINED
249#else
250#define yyfree agent_free
251#endif
252
253/* %if-c-only */
254
255#ifdef yytext
256#define agent_text_ALREADY_DEFINED
257#else
258#define yytext agent_text
259#endif
260
261#ifdef yyleng
262#define agent_leng_ALREADY_DEFINED
263#else
264#define yyleng agent_leng
265#endif
266
267#ifdef yyin
268#define agent_in_ALREADY_DEFINED
269#else
270#define yyin agent_in
271#endif
272
273#ifdef yyout
274#define agent_out_ALREADY_DEFINED
275#else
276#define yyout agent_out
277#endif
278
279#ifdef yy_flex_debug
280#define agent__flex_debug_ALREADY_DEFINED
281#else
282#define yy_flex_debug agent__flex_debug
283#endif
284
285#ifdef yylineno
286#define agent_lineno_ALREADY_DEFINED
287#else
288#define yylineno agent_lineno
289#endif
290
291/* %endif */
292
293/* First, we deal with platform-specific or compiler-specific issues. */
294
295/* begin standard C headers. */
296/* %if-c-only */
297#include <stdio.h>
298#include <string.h>
299#include <errno.h>
300#include <stdlib.h>
301/* %endif */
302
303/* %if-tables-serialization */
304/* %endif */
305/* end standard C headers. */
306
307/* %if-c-or-c++ */
308/* flex integer type definitions */
309
310#ifndef FLEXINT_H
311#define FLEXINT_H
312
313/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
314
315#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
316
317/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
318 * if you want the limit (max/min) macros for int types.
319 */
320#ifndef __STDC_LIMIT_MACROS
321#define __STDC_LIMIT_MACROS 1
322#endif
323
324#include <inttypes.h>
325typedef int8_t flex_int8_t;
326typedef uint8_t flex_uint8_t;
327typedef int16_t flex_int16_t;
328typedef uint16_t flex_uint16_t;
329typedef int32_t flex_int32_t;
330typedef uint32_t flex_uint32_t;
331#else
332typedef signed char flex_int8_t;
333typedef short int flex_int16_t;
334typedef int flex_int32_t;
335typedef unsigned char flex_uint8_t;
336typedef unsigned short int flex_uint16_t;
337typedef unsigned int flex_uint32_t;
338
339/* Limits of integral types. */
340#ifndef INT8_MIN
341#define INT8_MIN (-128)
342#endif
343#ifndef INT16_MIN
344#define INT16_MIN (-32767-1)
345#endif
346#ifndef INT32_MIN
347#define INT32_MIN (-2147483647-1)
348#endif
349#ifndef INT8_MAX
350#define INT8_MAX (127)
351#endif
352#ifndef INT16_MAX
353#define INT16_MAX (32767)
354#endif
355#ifndef INT32_MAX
356#define INT32_MAX (2147483647)
357#endif
358#ifndef UINT8_MAX
359#define UINT8_MAX (255U)
360#endif
361#ifndef UINT16_MAX
362#define UINT16_MAX (65535U)
363#endif
364#ifndef UINT32_MAX
365#define UINT32_MAX (4294967295U)
366#endif
367
368#ifndef SIZE_MAX
369#define SIZE_MAX (~(size_t)0)
370#endif
371
372#endif /* ! C99 */
373
374#endif /* ! FLEXINT_H */
375
376/* %endif */
377
378/* begin standard C++ headers. */
379/* %if-c++-only */
380/* %endif */
381
382/* TODO: this is always defined, so inline it */
383#define yyconst const
384
385#if defined(__GNUC__) && __GNUC__ >= 3
386#define yynoreturn __attribute__((__noreturn__))
387#else
388#define yynoreturn
389#endif
390
391/* %not-for-header */
392/* Returned upon end-of-file. */
393#define YY_NULL 0
394/* %ok-for-header */
395
396/* %not-for-header */
397/* Promotes a possibly negative, possibly signed char to an
398 * integer in range [0..255] for use as an array index.
399 */
400#define YY_SC_TO_UI(c) ((YY_CHAR) (c))
401/* %ok-for-header */
402
403/* %if-reentrant */
404/* %endif */
405
406/* %if-not-reentrant */
407
408/* %endif */
409
410/* Enter a start condition. This macro really ought to take a parameter,
411 * but we do it the disgusting crufty way forced on us by the ()-less
412 * definition of BEGIN.
413 */
414#define BEGIN (yy_start) = 1 + 2 *
415/* Translate the current start state into a value that can be later handed
416 * to BEGIN to return to the state. The YYSTATE alias is for lex
417 * compatibility.
418 */
419#define YY_START (((yy_start) - 1) / 2)
420#define YYSTATE YY_START
421/* Action number for EOF rule of a given start state. */
422#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
423/* Special action meaning "start processing a new file". */
424#define YY_NEW_FILE yyrestart( yyin )
425#define YY_END_OF_BUFFER_CHAR 0
426
427/* Size of default input buffer. */
428#ifndef YY_BUF_SIZE
429#ifdef __ia64__
430/* On IA-64, the buffer size is 16k, not 8k.
431 * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case.
432 * Ditto for the __ia64__ case accordingly.
433 */
434#define YY_BUF_SIZE 32768
435#else
436#define YY_BUF_SIZE 16384
437#endif /* __ia64__ */
438#endif
439
440/* The state buf must be large enough to hold one state per character in the main buffer.
441 */
442#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
443
444#ifndef YY_TYPEDEF_YY_BUFFER_STATE
445#define YY_TYPEDEF_YY_BUFFER_STATE
447#endif
448
449#ifndef YY_TYPEDEF_YY_SIZE_T
450#define YY_TYPEDEF_YY_SIZE_T
451typedef size_t yy_size_t;
452#endif
453
454/* %if-not-reentrant */
455extern int yyleng;
456/* %endif */
457
458/* %if-c-only */
459/* %if-not-reentrant */
460extern FILE *yyin, *yyout;
461/* %endif */
462/* %endif */
463
464#define EOB_ACT_CONTINUE_SCAN 0
465#define EOB_ACT_END_OF_FILE 1
466#define EOB_ACT_LAST_MATCH 2
467
468 #define YY_LESS_LINENO(n)
469 #define YY_LINENO_REWIND_TO(ptr)
470
471/* Return all but the first "n" matched characters back to the input stream. */
472#define yyless(n) \
473 do \
474 { \
475 /* Undo effects of setting up yytext. */ \
476 int yyless_macro_arg = (n); \
477 YY_LESS_LINENO(yyless_macro_arg);\
478 *yy_cp = (yy_hold_char); \
479 YY_RESTORE_YY_MORE_OFFSET \
480 (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
481 YY_DO_BEFORE_ACTION; /* set up yytext again */ \
482 } \
483 while ( 0 )
484#define unput(c) yyunput( c, (yytext_ptr) )
485
486#ifndef YY_STRUCT_YY_BUFFER_STATE
487#define YY_STRUCT_YY_BUFFER_STATE
489 {
490/* %if-c-only */
492/* %endif */
493
494/* %if-c++-only */
495/* %endif */
496
497 char *yy_ch_buf; /* input buffer */
498 char *yy_buf_pos; /* current position in input buffer */
499
500 /* Size of input buffer in bytes, not including room for EOB
501 * characters.
502 */
504
505 /* Number of characters read into yy_ch_buf, not including EOB
506 * characters.
507 */
509
510 /* Whether we "own" the buffer - i.e., we know we created it,
511 * and can realloc() it to grow it, and should free() it to
512 * delete it.
513 */
515
516 /* Whether this is an "interactive" input source; if so, and
517 * if we're using stdio for input, then we want to use getc()
518 * instead of fread(), to make sure we stop fetching input after
519 * each newline.
520 */
522
523 /* Whether we're considered to be at the beginning of a line.
524 * If so, '^' rules will be active on the next match, otherwise
525 * not.
526 */
528
532 /* Whether to try to fill the input buffer when we reach the
533 * end of it.
534 */
536
538
539#define YY_BUFFER_NEW 0
540#define YY_BUFFER_NORMAL 1
541 /* When an EOF's been seen but there's still some text to process
542 * then we mark the buffer as YY_EOF_PENDING, to indicate that we
543 * shouldn't try reading from the input source any more. We might
544 * still have a bunch of tokens to match, though, because of
545 * possible backing-up.
546 *
547 * When we actually see the EOF, we change the status to "new"
548 * (via yyrestart()), so that the user can continue scanning by
549 * just pointing yyin at a new input file.
550 */
551#define YY_BUFFER_EOF_PENDING 2
552
553 };
554#endif /* !YY_STRUCT_YY_BUFFER_STATE */
555
556/* %if-c-only Standard (non-C++) definition */
557/* %not-for-header */
558/* %if-not-reentrant */
559
560/* Stack of input buffers. */
561static size_t yy_buffer_stack_top = 0;
562static size_t yy_buffer_stack_max = 0;
563static YY_BUFFER_STATE * yy_buffer_stack = NULL;
564/* %endif */
565/* %ok-for-header */
566
567/* %endif */
568
569/* We provide macros for accessing buffer states in case in the
570 * future we want to put the buffer states in a more general
571 * "scanner state".
572 *
573 * Returns the top of the stack, or NULL.
574 */
575#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
576 ? (yy_buffer_stack)[(yy_buffer_stack_top)] \
577 : NULL)
578/* Same as previous macro, but useful when we know that the buffer stack is not
579 * NULL or when we need an lvalue. For internal use only.
580 */
581#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)]
582
583/* %if-c-only Standard (non-C++) definition */
584
585/* %if-not-reentrant */
586/* %not-for-header */
587/* yy_hold_char holds the character lost when yytext is formed. */
588static char yy_hold_char;
589static int yy_n_chars; /* number of characters read into yy_ch_buf */
591
592/* Points to current character in buffer. */
593static char *yy_c_buf_p = NULL;
594static int yy_init = 0; /* whether we need to initialize */
595static int yy_start = 0; /* start state number */
596
597/* Flag which is used to allow yywrap()'s to do buffer switches
598 * instead of setting up a fresh yyin. A bit of a hack ...
599 */
600static int yy_did_buffer_switch_on_eof;
601/* %ok-for-header */
602
603/* %endif */
604
605void yyrestart ( FILE *input_file );
606void yy_switch_to_buffer ( YY_BUFFER_STATE new_buffer );
607YY_BUFFER_STATE yy_create_buffer ( FILE *file, int size );
610void yypush_buffer_state ( YY_BUFFER_STATE new_buffer );
611void yypop_buffer_state ( void );
612
613static void yyensure_buffer_stack ( void );
614static void yy_load_buffer_state ( void );
615static void yy_init_buffer ( YY_BUFFER_STATE b, FILE *file );
616#define YY_FLUSH_BUFFER yy_flush_buffer( YY_CURRENT_BUFFER )
617
618YY_BUFFER_STATE yy_scan_buffer ( char *base, yy_size_t size );
619YY_BUFFER_STATE yy_scan_string ( const char *yy_str );
620YY_BUFFER_STATE yy_scan_bytes ( const char *bytes, int len );
621
622/* %endif */
623
624void *yyalloc ( yy_size_t );
625void *yyrealloc ( void *, yy_size_t );
626void yyfree ( void * );
627
628#define yy_new_buffer yy_create_buffer
629#define yy_set_interactive(is_interactive) \
630 { \
631 if ( ! YY_CURRENT_BUFFER ){ \
632 yyensure_buffer_stack (); \
633 YY_CURRENT_BUFFER_LVALUE = \
634 yy_create_buffer( yyin, YY_BUF_SIZE ); \
635 } \
636 YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
637 }
638#define yy_set_bol(at_bol) \
639 { \
640 if ( ! YY_CURRENT_BUFFER ){\
641 yyensure_buffer_stack (); \
642 YY_CURRENT_BUFFER_LVALUE = \
643 yy_create_buffer( yyin, YY_BUF_SIZE ); \
644 } \
645 YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
646 }
647#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
648
649/* %% [1.0] yytext/yyin/yyout/yy_state_type/yylineno etc. def's & init go here */
650/* Begin user sect3 */
651
652#define agent_wrap() (/*CONSTCOND*/1)
653#define YY_SKIP_YYWRAP
654
655#define FLEX_DEBUG
657
658FILE *yyin = NULL, *yyout = NULL;
659
660typedef int yy_state_type;
661
662extern int yylineno;
663int yylineno = 1;
664
665extern char *yytext;
666#ifdef yytext_ptr
667#undef yytext_ptr
668#endif
669#define yytext_ptr yytext
670
671/* %% [1.5] DFA */
672
673/* %if-c-only Standard (non-C++) definition */
674
675static yy_state_type yy_get_previous_state ( void );
676static yy_state_type yy_try_NUL_trans ( yy_state_type current_state );
677static int yy_get_next_buffer ( void );
678static void yynoreturn yy_fatal_error ( const char* msg );
679
680/* %endif */
681
682/* Done after the current pattern has been matched and before the
683 * corresponding action - sets up yytext.
684 */
685#define YY_DO_BEFORE_ACTION \
686 (yytext_ptr) = yy_bp; \
687/* %% [2.0] code to fiddle yytext and yyleng for yymore() goes here \ */\
688 yyleng = (int) (yy_cp - yy_bp); \
689 (yy_hold_char) = *yy_cp; \
690 *yy_cp = '\0'; \
691/* %% [3.0] code to copy yytext_ptr to yytext[] goes here, if %array \ */\
692 (yy_c_buf_p) = yy_cp;
693/* %% [4.0] data tables for the DFA and the user's section 1 definitions go here */
694#define YY_NUM_RULES 67
695#define YY_END_OF_BUFFER 68
696/* This struct is not used in this scanner,
697 but its presence is necessary. */
699 {
702 };
703static const flex_int16_t yy_accept[388] =
704 { 0,
705 60, 60, 0, 0, 0, 0, 0, 0, 0, 0,
706 68, 66, 10, 11, 66, 1, 60, 57, 60, 60,
707 66, 59, 58, 66, 66, 66, 66, 66, 53, 54,
708 66, 66, 66, 55, 56, 5, 5, 5, 66, 66,
709 66, 10, 11, 0, 0, 48, 0, 0, 0, 0,
710 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
711 0, 0, 0, 0, 1, 60, 60, 0, 59, 60,
712 3, 2, 6, 0, 60, 0, 0, 0, 0, 0,
713 0, 4, 0, 0, 9, 0, 49, 0, 0, 0,
714 51, 0, 0, 0, 0, 0, 0, 0, 0, 0,
715
716 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
717 0, 0, 0, 0, 0, 0, 0, 2, 0, 0,
718 0, 0, 0, 0, 0, 8, 0, 0, 50, 52,
719 0, 0, 0, 0, 0, 0, 0, 31, 0, 0,
720 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
721 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
722 65, 63, 0, 62, 61, 0, 0, 0, 0, 0,
723 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
724 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
725 0, 0, 0, 0, 0, 0, 64, 61, 0, 0,
726
727 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
728 0, 0, 0, 0, 0, 0, 0, 0, 39, 0,
729 0, 0, 0, 0, 0, 0, 0, 18, 34, 22,
730 0, 0, 0, 0, 19, 0, 0, 0, 0, 0,
731 0, 29, 30, 42, 0, 0, 0, 0, 0, 0,
732 0, 0, 0, 0, 0, 0, 20, 0, 0, 0,
733 0, 7, 0, 0, 0, 0, 0, 0, 0, 0,
734 0, 0, 0, 0, 0, 0, 0, 44, 41, 0,
735 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
736 0, 21, 16, 0, 0, 0, 0, 0, 0, 36,
737
738 38, 43, 0, 0, 0, 45, 0, 0, 0, 0,
739 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
740 26, 0, 0, 23, 47, 0, 0, 0, 0, 0,
741 0, 25, 0, 0, 0, 0, 13, 14, 0, 0,
742 0, 0, 0, 0, 0, 0, 0, 0, 46, 0,
743 0, 37, 0, 0, 0, 0, 0, 0, 0, 0,
744 0, 0, 32, 33, 0, 0, 0, 0, 0, 0,
745 0, 0, 24, 15, 12, 0, 27, 0, 0, 0,
746 17, 0, 0, 40, 28, 35, 0
747 } ;
748
749static const YY_CHAR yy_ec[256] =
750 { 0,
751 1, 1, 1, 1, 1, 1, 1, 1, 2, 3,
752 1, 1, 2, 1, 1, 1, 1, 1, 1, 1,
753 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
754 1, 4, 5, 6, 7, 5, 5, 5, 5, 5,
755 5, 8, 9, 10, 11, 12, 13, 14, 14, 15,
756 14, 16, 14, 17, 14, 14, 14, 18, 5, 19,
757 5, 20, 21, 5, 22, 23, 24, 23, 25, 26,
758 5, 5, 5, 5, 5, 27, 5, 28, 5, 5,
759 5, 29, 30, 31, 32, 5, 5, 5, 5, 5,
760 33, 34, 35, 5, 36, 5, 37, 38, 39, 40,
761
762 41, 42, 43, 44, 45, 5, 46, 47, 48, 49,
763 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
764 60, 61, 62, 5, 63, 5, 5, 5, 5, 5,
765 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
766 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
767 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
768 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
769 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
770 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
771 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
772
773 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
774 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
775 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
776 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
777 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
778 5, 5, 5, 5, 5
779 } ;
780
781static const YY_CHAR yy_meta[64] =
782 { 0,
783 1, 1, 2, 1, 1, 3, 1, 1, 1, 1,
784 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
785 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
786 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
787 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
788 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
789 1, 1, 1
790 } ;
791
792static const flex_int16_t yy_base[396] =
793 { 0,
794 0, 0, 62, 65, 68, 0, 66, 70, 50, 67,
795 320, 2603, 87, 314, 131, 0, 104, 2603, 110, 125,
796 84, 142, 2603, 275, 91, 106, 58, 107, 2603, 2603,
797 116, 116, 123, 2603, 2603, 2603, 142, 282, 237, 0,
798 262, 145, 234, 155, 189, 2603, 195, 193, 202, 210,
799 216, 237, 253, 259, 267, 273, 282, 288, 296, 309,
800 325, 331, 339, 348, 0, 346, 363, 392, 398, 402,
801 2603, 0, 2603, 289, 341, 147, 173, 132, 183, 187,
802 170, 2603, 193, 222, 2603, 187, 2603, 392, 388, 218,
803 430, 459, 452, 460, 486, 502, 509, 515, 521, 527,
804
805 539, 550, 562, 568, 574, 580, 586, 603, 623, 629,
806 637, 646, 652, 658, 664, 687, 693, 0, 179, 245,
807 200, 223, 297, 226, 168, 2603, 699, 201, 2603, 2603,
808 741, 705, 716, 734, 768, 742, 785, 2603, 791, 797,
809 804, 810, 820, 826, 833, 840, 860, 867, 875, 886,
810 894, 901, 910, 928, 936, 944, 952, 958, 965, 239,
811 2603, 2603, 288, 2603, 2603, 107, 971, 1011, 978, 1005,
812 1053, 1039, 988, 1059, 1065, 1073, 1079, 1094, 1100, 1113,
813 1119, 1129, 1135, 1143, 1156, 1165, 1172, 1180, 1190, 1199,
814 1206, 1216, 1224, 1233, 1240, 1250, 2603, 2603, 122, 1262,
815
816 1299, 1269, 1275, 1292, 1298, 1286, 1327, 1341, 1348, 1356,
817 1362, 1368, 1383, 1391, 1397, 1403, 1409, 1418, 2603, 1427,
818 1438, 1452, 1461, 1472, 1482, 1488, 1497, 2603, 2603, 2603,
819 1517, 63, 1523, 1531, 2603, 1538, 1544, 1557, 1565, 1574,
820 1591, 2603, 2603, 2603, 1599, 1611, 1621, 1628, 1634, 1646,
821 1657, 1663, 1671, 1680, 1686, 1700, 2603, 1707, 1716, 1722,
822 1730, 2603, 1741, 1752, 1764, 1770, 1776, 1782, 1789, 1800,
823 1806, 1812, 1818, 1824, 1830, 1836, 1842, 2603, 2603, 1853,
824 1866, 1872, 1879, 1887, 1893, 1916, 1922, 1929, 1935, 1943,
825 1951, 2603, 2603, 1958, 1977, 1985, 1992, 1998, 2007, 2603,
826
827 2603, 2603, 2014, 2027, 2033, 2603, 2043, 2049, 2056, 2067,
828 2073, 2086, 2093, 2102, 2108, 2116, 2131, 2137, 2143, 2153,
829 2603, 2161, 2167, 2603, 2603, 2178, 2190, 2196, 2202, 2208,
830 2216, 2603, 2226, 2250, 2232, 2256, 2603, 2603, 2262, 2271,
831 2279, 2285, 2296, 2308, 2315, 2321, 2331, 2337, 2603, 2350,
832 2356, 2603, 2367, 2373, 2379, 2385, 2391, 2408, 2414, 2421,
833 2427, 2433, 2603, 2603, 2450, 2462, 2468, 2474, 2484, 2491,
834 2497, 2503, 2603, 2603, 2603, 2509, 2603, 2518, 2526, 2533,
835 2603, 2539, 2547, 2603, 2603, 2603, 2603, 2581, 2584, 2587,
836 97, 2590, 2593, 2596, 2599
837
838 } ;
839
840static const flex_int16_t yy_def[396] =
841 { 0,
842 387, 1, 388, 388, 1, 5, 5, 5, 5, 5,
843 387, 387, 387, 387, 389, 390, 387, 387, 387, 387,
844 387, 387, 387, 387, 387, 387, 387, 387, 387, 387,
845 387, 387, 387, 387, 387, 387, 387, 387, 387, 391,
846 387, 387, 387, 392, 389, 387, 389, 393, 389, 389,
847 389, 389, 389, 389, 389, 389, 389, 389, 389, 389,
848 389, 389, 389, 389, 390, 387, 387, 387, 387, 387,
849 387, 394, 387, 387, 387, 387, 387, 387, 387, 387,
850 387, 387, 387, 391, 387, 392, 387, 387, 389, 395,
851 389, 393, 389, 389, 389, 389, 389, 389, 389, 389,
852
853 389, 389, 389, 389, 389, 389, 389, 389, 389, 389,
854 389, 389, 389, 389, 389, 389, 389, 394, 387, 387,
855 387, 387, 387, 387, 387, 387, 389, 395, 387, 387,
856 92, 389, 389, 389, 389, 389, 389, 387, 389, 389,
857 389, 389, 389, 389, 389, 389, 389, 389, 389, 389,
858 389, 389, 389, 389, 389, 389, 389, 389, 389, 387,
859 387, 387, 387, 387, 387, 387, 389, 92, 389, 389,
860 389, 389, 389, 389, 389, 389, 389, 389, 389, 389,
861 389, 389, 389, 389, 389, 389, 389, 389, 389, 389,
862 389, 389, 389, 389, 389, 389, 387, 387, 387, 389,
863
864 92, 389, 389, 389, 389, 389, 389, 389, 389, 389,
865 389, 389, 389, 389, 389, 389, 389, 389, 387, 389,
866 389, 389, 389, 389, 389, 389, 389, 387, 387, 387,
867 389, 387, 389, 389, 387, 389, 389, 389, 389, 389,
868 389, 387, 387, 387, 389, 389, 389, 389, 389, 389,
869 389, 389, 389, 389, 389, 389, 387, 389, 389, 389,
870 389, 387, 389, 389, 389, 389, 389, 389, 389, 389,
871 389, 389, 389, 389, 389, 389, 389, 387, 387, 389,
872 389, 389, 389, 389, 389, 389, 389, 389, 389, 389,
873 389, 387, 387, 389, 389, 389, 389, 389, 389, 387,
874
875 387, 387, 389, 389, 389, 387, 389, 389, 389, 389,
876 389, 389, 389, 389, 389, 389, 389, 389, 389, 389,
877 387, 389, 389, 387, 387, 389, 389, 389, 389, 389,
878 389, 387, 389, 389, 389, 389, 387, 387, 389, 389,
879 389, 389, 389, 389, 389, 389, 389, 389, 387, 389,
880 389, 387, 389, 389, 389, 389, 389, 389, 389, 389,
881 389, 389, 387, 387, 389, 389, 389, 389, 389, 389,
882 389, 389, 387, 387, 387, 389, 387, 389, 389, 389,
883 387, 389, 389, 387, 387, 387, 0, 387, 387, 387,
884 387, 387, 387, 387, 387
885
886 } ;
887
888static const flex_int16_t yy_nxt[2667] =
889 { 0,
890 12, 13, 14, 13, 12, 15, 16, 12, 17, 18,
891 19, 20, 21, 22, 22, 22, 22, 23, 24, 12,
892 12, 12, 12, 12, 25, 26, 12, 27, 12, 12,
893 28, 12, 29, 12, 30, 12, 12, 12, 12, 12,
894 25, 31, 12, 12, 12, 12, 12, 12, 32, 12,
895 12, 12, 12, 12, 33, 12, 12, 12, 12, 12,
896 12, 34, 35, 37, 14, 37, 37, 14, 37, 38,
897 41, 40, 38, 12, 12, 40, 12, 12, 12, 12,
898 12, 12, 12, 12, 12, 12, 12, 41, 42, 77,
899 42, 71, 12, 12, 12, 12, 72, 84, 12, 74,
900
901 12, 74, 12, 262, 75, 75, 75, 75, 12, 12,
902 12, 12, 39, 77, 12, 66, 12, 67, 67, 67,
903 67, 66, 12, 69, 69, 69, 69, 76, 68, 12,
904 12, 44, 44, 44, 68, 78, 46, 76, 70, 70,
905 70, 70, 76, 42, 68, 42, 42, 77, 42, 68,
906 68, 78, 79, 66, 47, 69, 69, 69, 69, 78,
907 87, 232, 199, 121, 48, 68, 68, 49, 50, 51,
908 52, 80, 53, 119, 54, 81, 55, 56, 57, 58,
909 59, 60, 68, 61, 62, 63, 64, 121, 88, 44,
910 44, 44, 87, 119, 46, 44, 44, 44, 91, 120,
911
912 46, 121, 44, 44, 44, 45, 129, 46, 160, 119,
913 44, 44, 44, 120, 166, 46, 44, 44, 44, 120,
914 88, 46, 48, 129, 162, 124, 45, 126, 48, 122,
915 45, 125, 160, 123, 45, 48, 43, 44, 44, 44,
916 162, 45, 46, 48, 89, 45, 94, 45, 92, 48,
917 162, 98, 160, 44, 44, 44, 95, 93, 46, 44,
918 44, 44, 96, 197, 46, 97, 165, 44, 44, 44,
919 48, 161, 46, 44, 44, 44, 163, 99, 46, 197,
920 100, 85, 44, 44, 44, 83, 48, 46, 44, 44,
921 44, 161, 48, 46, 82, 73, 44, 44, 44, 101,
922
923 48, 46, 75, 75, 75, 75, 48, 104, 102, 44,
924 44, 44, 197, 103, 46, 48, 43, 105, 107, 387,
925 387, 48, 106, 161, 108, 44, 44, 44, 198, 48,
926 46, 44, 44, 44, 387, 387, 46, 387, 387, 44,
927 44, 44, 48, 164, 46, 110, 387, 387, 44, 44,
928 44, 109, 387, 46, 75, 75, 75, 75, 48, 70,
929 70, 70, 70, 387, 48, 111, 387, 387, 387, 387,
930 68, 112, 48, 387, 66, 387, 67, 67, 67, 67,
931 113, 48, 387, 387, 387, 387, 68, 68, 44, 44,
932 44, 114, 387, 46, 387, 387, 116, 86, 115, 387,
933
934 74, 117, 74, 68, 86, 75, 75, 75, 75, 66,
935 387, 69, 69, 69, 69, 70, 70, 70, 70, 387,
936 387, 48, 68, 387, 387, 86, 68, 387, 387, 86,
937 44, 44, 44, 86, 387, 46, 127, 387, 68, 387,
938 86, 387, 68, 387, 86, 387, 86, 86, 387, 387,
939 387, 387, 44, 44, 44, 387, 387, 46, 387, 387,
940 44, 44, 44, 48, 130, 46, 387, 387, 387, 387,
941 387, 387, 131, 131, 131, 131, 387, 387, 387, 387,
942 131, 131, 131, 131, 131, 48, 44, 44, 44, 387,
943 387, 46, 387, 48, 387, 131, 131, 131, 131, 131,
944
945 131, 387, 44, 44, 44, 387, 132, 46, 387, 44,
946 44, 44, 387, 133, 46, 44, 44, 44, 387, 48,
947 138, 44, 44, 44, 387, 387, 46, 44, 44, 44,
948 387, 387, 46, 387, 387, 48, 387, 387, 134, 44,
949 44, 44, 48, 387, 46, 387, 135, 387, 48, 387,
950 44, 44, 44, 387, 48, 46, 136, 137, 139, 387,
951 48, 387, 44, 44, 44, 140, 387, 46, 44, 44,
952 44, 387, 48, 46, 44, 44, 44, 387, 387, 46,
953 44, 44, 44, 48, 387, 46, 44, 44, 44, 387,
954 387, 46, 387, 387, 141, 48, 387, 387, 387, 142,
955
956 387, 48, 387, 44, 44, 44, 387, 48, 46, 387,
957 387, 145, 387, 48, 387, 387, 143, 387, 387, 48,
958 387, 387, 146, 44, 44, 44, 387, 144, 46, 44,
959 44, 44, 387, 387, 46, 387, 48, 44, 44, 44,
960 387, 387, 46, 387, 147, 387, 44, 44, 44, 387,
961 148, 46, 44, 44, 44, 387, 48, 46, 44, 44,
962 44, 387, 48, 46, 44, 44, 44, 387, 387, 46,
963 48, 387, 387, 153, 387, 387, 387, 149, 387, 48,
964 387, 150, 151, 152, 387, 48, 387, 44, 44, 44,
965 155, 48, 46, 44, 44, 44, 387, 48, 46, 44,
966
967 44, 44, 154, 387, 46, 44, 44, 44, 387, 387,
968 46, 387, 387, 156, 157, 387, 44, 44, 44, 387,
969 48, 46, 387, 387, 387, 387, 48, 387, 387, 387,
970 387, 158, 48, 159, 44, 44, 44, 387, 48, 46,
971 387, 387, 44, 44, 44, 387, 387, 46, 169, 48,
972 387, 387, 387, 167, 168, 168, 168, 168, 387, 387,
973 170, 387, 168, 168, 168, 168, 168, 48, 44, 44,
974 44, 387, 387, 46, 387, 48, 387, 168, 168, 168,
975 168, 168, 168, 387, 387, 44, 44, 44, 171, 173,
976 46, 44, 44, 44, 387, 387, 46, 44, 44, 44,
977
978 387, 48, 46, 387, 44, 44, 44, 387, 172, 46,
979 44, 44, 44, 387, 387, 46, 387, 387, 48, 387,
980 44, 44, 44, 387, 48, 46, 44, 44, 44, 387,
981 48, 46, 387, 44, 44, 44, 180, 48, 46, 174,
982 44, 44, 44, 48, 387, 46, 175, 176, 387, 387,
983 387, 387, 387, 48, 387, 178, 387, 177, 387, 48,
984 44, 44, 44, 387, 387, 46, 48, 44, 44, 44,
985 179, 387, 46, 48, 387, 44, 44, 44, 387, 387,
986 46, 387, 182, 387, 387, 181, 44, 44, 44, 387,
987 387, 46, 387, 48, 44, 44, 44, 387, 387, 46,
988
989 48, 44, 44, 44, 387, 387, 46, 185, 48, 387,
990 44, 44, 44, 183, 387, 46, 184, 387, 387, 48,
991 387, 387, 187, 387, 387, 186, 387, 48, 44, 44,
992 44, 387, 387, 46, 48, 387, 44, 44, 44, 387,
993 387, 46, 387, 48, 44, 44, 44, 188, 387, 46,
994 387, 387, 44, 44, 44, 189, 190, 46, 44, 44,
995 44, 48, 387, 46, 387, 44, 44, 44, 191, 48,
996 46, 44, 44, 44, 387, 387, 46, 48, 44, 44,
997 44, 192, 387, 46, 387, 48, 387, 387, 44, 44,
998 44, 48, 194, 46, 387, 387, 387, 193, 48, 387,
999
1000 387, 387, 387, 387, 48, 44, 44, 44, 387, 387,
1001 46, 48, 387, 387, 387, 387, 195, 196, 202, 387,
1002 387, 48, 387, 200, 201, 201, 201, 201, 206, 387,
1003 387, 387, 201, 201, 201, 201, 201, 387, 48, 44,
1004 44, 44, 387, 203, 46, 387, 387, 201, 201, 201,
1005 201, 201, 201, 44, 44, 44, 387, 387, 46, 44,
1006 44, 44, 387, 204, 46, 44, 44, 44, 387, 387,
1007 46, 387, 48, 44, 44, 44, 387, 387, 46, 44,
1008 44, 44, 387, 387, 46, 387, 48, 205, 209, 210,
1009 387, 387, 48, 387, 44, 44, 44, 387, 48, 46,
1010
1011 44, 44, 44, 387, 387, 46, 48, 208, 387, 387,
1012 213, 207, 48, 44, 44, 44, 387, 387, 46, 44,
1013 44, 44, 211, 387, 46, 387, 387, 48, 387, 44,
1014 44, 44, 387, 48, 46, 44, 44, 44, 387, 387,
1015 46, 387, 387, 44, 44, 44, 48, 212, 46, 387,
1016 387, 387, 48, 387, 214, 215, 44, 44, 44, 387,
1017 387, 219, 48, 387, 387, 44, 44, 44, 48, 216,
1018 46, 387, 44, 44, 44, 387, 48, 46, 387, 217,
1019 44, 44, 44, 218, 387, 46, 387, 387, 387, 48,
1020 44, 44, 44, 387, 387, 46, 387, 387, 48, 44,
1021
1022 44, 44, 387, 387, 46, 48, 44, 44, 44, 387,
1023 387, 46, 387, 48, 387, 387, 44, 44, 44, 221,
1024 220, 46, 387, 48, 44, 44, 44, 387, 387, 46,
1025 223, 387, 48, 44, 44, 44, 387, 222, 228, 48,
1026 44, 44, 44, 387, 387, 229, 224, 387, 387, 48,
1027 44, 44, 44, 387, 387, 230, 226, 48, 225, 387,
1028 231, 387, 44, 44, 44, 387, 48, 46, 387, 44,
1029 44, 44, 387, 48, 46, 44, 44, 44, 227, 387,
1030 235, 387, 387, 48, 387, 387, 44, 44, 44, 387,
1031 387, 46, 44, 44, 44, 48, 387, 46, 44, 44,
1032
1033 44, 387, 48, 46, 387, 387, 387, 387, 48, 387,
1034 387, 233, 45, 45, 45, 45, 387, 234, 387, 48,
1035 45, 45, 45, 45, 45, 48, 387, 44, 44, 44,
1036 387, 48, 46, 236, 239, 45, 45, 45, 45, 45,
1037 45, 44, 44, 44, 237, 387, 46, 387, 44, 44,
1038 44, 387, 238, 242, 387, 387, 44, 44, 44, 387,
1039 48, 243, 44, 44, 44, 387, 387, 244, 44, 44,
1040 44, 387, 387, 46, 48, 387, 240, 387, 245, 387,
1041 387, 48, 387, 44, 44, 44, 387, 241, 46, 48,
1042 387, 44, 44, 44, 387, 48, 46, 44, 44, 44,
1043
1044 387, 48, 46, 44, 44, 44, 387, 387, 46, 44,
1045 44, 44, 387, 387, 46, 387, 48, 387, 44, 44,
1046 44, 387, 387, 46, 48, 387, 246, 44, 44, 44,
1047 48, 387, 46, 247, 387, 248, 48, 387, 44, 44,
1048 44, 387, 48, 46, 387, 387, 387, 387, 387, 249,
1049 387, 48, 44, 44, 44, 250, 387, 46, 387, 387,
1050 48, 44, 44, 44, 387, 387, 46, 387, 387, 251,
1051 252, 48, 44, 44, 44, 387, 387, 257, 254, 387,
1052 387, 253, 44, 44, 44, 48, 387, 46, 44, 44,
1053 44, 387, 387, 46, 48, 387, 387, 44, 44, 44,
1054
1055 387, 255, 46, 387, 387, 48, 387, 260, 387, 387,
1056 387, 387, 387, 256, 387, 48, 387, 44, 44, 44,
1057 387, 48, 46, 44, 44, 44, 258, 387, 46, 387,
1058 48, 44, 44, 44, 387, 387, 46, 387, 44, 44,
1059 44, 387, 259, 46, 44, 44, 44, 387, 387, 46,
1060 48, 387, 387, 387, 387, 261, 48, 44, 44, 44,
1061 387, 387, 46, 387, 48, 44, 44, 44, 387, 263,
1062 46, 48, 387, 387, 44, 44, 44, 48, 387, 46,
1063 387, 387, 265, 387, 266, 264, 387, 387, 387, 387,
1064 48, 44, 44, 44, 387, 387, 46, 387, 48, 44,
1065
1066 44, 44, 387, 387, 46, 387, 387, 48, 387, 387,
1067 267, 44, 44, 44, 387, 387, 46, 387, 387, 268,
1068 269, 44, 44, 44, 48, 387, 46, 387, 44, 44,
1069 44, 270, 48, 46, 44, 44, 44, 387, 387, 46,
1070 387, 387, 387, 387, 48, 271, 44, 44, 44, 387,
1071 387, 46, 387, 387, 48, 387, 387, 44, 44, 44,
1072 272, 48, 46, 44, 44, 44, 387, 48, 278, 387,
1073 273, 44, 44, 44, 274, 387, 279, 387, 387, 48,
1074 44, 44, 44, 387, 387, 46, 44, 44, 44, 387,
1075 48, 46, 387, 275, 387, 387, 48, 277, 387, 276,
1076
1077 44, 44, 44, 387, 48, 46, 280, 44, 44, 44,
1078 387, 387, 46, 48, 387, 387, 44, 44, 44, 48,
1079 387, 46, 44, 44, 44, 387, 285, 46, 387, 387,
1080 44, 44, 44, 48, 281, 46, 387, 387, 282, 387,
1081 48, 44, 44, 44, 387, 387, 46, 387, 283, 48,
1082 387, 288, 44, 44, 44, 48, 387, 46, 286, 387,
1083 387, 284, 387, 48, 44, 44, 44, 387, 387, 46,
1084 44, 44, 44, 387, 48, 46, 44, 44, 44, 287,
1085 387, 292, 44, 44, 44, 48, 387, 293, 387, 44,
1086 44, 44, 387, 387, 46, 387, 289, 48, 387, 294,
1087
1088 44, 44, 44, 48, 387, 46, 44, 44, 44, 48,
1089 290, 46, 44, 44, 44, 48, 387, 46, 44, 44,
1090 44, 291, 48, 46, 44, 44, 44, 387, 387, 46,
1091 44, 44, 44, 48, 387, 300, 44, 44, 44, 48,
1092 387, 301, 44, 44, 44, 48, 387, 302, 387, 387,
1093 296, 48, 387, 44, 44, 44, 295, 48, 46, 387,
1094 387, 387, 387, 48, 299, 297, 44, 44, 44, 48,
1095 298, 46, 44, 44, 44, 48, 387, 46, 387, 44,
1096 44, 44, 387, 387, 306, 387, 48, 44, 44, 44,
1097 387, 387, 46, 44, 44, 44, 387, 387, 46, 48,
1098
1099 387, 387, 303, 387, 387, 48, 304, 387, 387, 387,
1100 387, 305, 48, 387, 387, 387, 44, 44, 44, 387,
1101 48, 46, 44, 44, 44, 387, 48, 46, 387, 44,
1102 44, 44, 387, 387, 46, 44, 44, 44, 387, 387,
1103 46, 308, 387, 44, 44, 44, 307, 309, 46, 48,
1104 387, 44, 44, 44, 387, 48, 46, 387, 44, 44,
1105 44, 387, 48, 46, 310, 312, 387, 387, 48, 387,
1106 311, 387, 387, 313, 387, 387, 48, 44, 44, 44,
1107 387, 387, 46, 314, 48, 44, 44, 44, 387, 387,
1108 46, 48, 44, 44, 44, 387, 387, 46, 44, 44,
1109
1110 44, 387, 387, 46, 387, 387, 315, 44, 44, 44,
1111 48, 316, 321, 387, 44, 44, 44, 317, 48, 46,
1112 387, 387, 318, 387, 387, 48, 387, 44, 44, 44,
1113 387, 48, 46, 44, 44, 44, 387, 387, 324, 387,
1114 48, 387, 387, 44, 44, 44, 319, 48, 325, 44,
1115 44, 44, 320, 387, 46, 387, 44, 44, 44, 387,
1116 48, 46, 387, 387, 322, 387, 48, 44, 44, 44,
1117 387, 387, 46, 44, 44, 44, 48, 387, 46, 323,
1118 387, 387, 48, 387, 387, 326, 44, 44, 44, 48,
1119 387, 46, 387, 44, 44, 44, 387, 387, 46, 387,
1120
1121 48, 387, 44, 44, 44, 328, 48, 332, 44, 44,
1122 44, 387, 387, 46, 387, 327, 44, 44, 44, 48,
1123 387, 46, 387, 387, 387, 387, 48, 329, 330, 331,
1124 387, 44, 44, 44, 387, 48, 46, 44, 44, 44,
1125 387, 48, 46, 44, 44, 44, 387, 387, 337, 48,
1126 387, 387, 333, 44, 44, 44, 387, 387, 338, 387,
1127 387, 44, 44, 44, 48, 334, 46, 44, 44, 44,
1128 48, 387, 46, 387, 387, 387, 48, 335, 44, 44,
1129 44, 387, 387, 46, 387, 387, 48, 387, 387, 336,
1130 44, 44, 44, 387, 48, 46, 44, 44, 44, 387,
1131
1132 48, 46, 44, 44, 44, 387, 387, 46, 44, 44,
1133 44, 48, 387, 46, 387, 339, 44, 44, 44, 387,
1134 340, 46, 387, 48, 387, 341, 44, 44, 44, 48,
1135 387, 46, 44, 44, 44, 48, 387, 349, 387, 343,
1136 342, 48, 344, 387, 387, 387, 387, 387, 345, 48,
1137 44, 44, 44, 387, 387, 46, 44, 44, 44, 48,
1138 387, 46, 44, 44, 44, 48, 387, 46, 387, 387,
1139 346, 44, 44, 44, 387, 387, 352, 387, 347, 44,
1140 44, 44, 387, 48, 46, 44, 44, 44, 348, 48,
1141 46, 387, 350, 387, 387, 48, 44, 44, 44, 387,
1142
1143 387, 46, 387, 387, 48, 387, 351, 387, 44, 44,
1144 44, 387, 48, 46, 387, 44, 44, 44, 48, 353,
1145 46, 44, 44, 44, 387, 354, 46, 387, 387, 48,
1146 387, 44, 44, 44, 387, 387, 46, 44, 44, 44,
1147 387, 48, 46, 387, 387, 355, 387, 387, 48, 387,
1148 44, 44, 44, 387, 48, 46, 44, 44, 44, 387,
1149 387, 46, 387, 357, 48, 358, 356, 44, 44, 44,
1150 48, 359, 363, 44, 44, 44, 387, 387, 364, 44,
1151 44, 44, 360, 48, 46, 44, 44, 44, 387, 48,
1152 46, 44, 44, 44, 387, 387, 46, 387, 387, 387,
1153
1154 48, 387, 361, 387, 387, 362, 48, 387, 44, 44,
1155 44, 387, 48, 46, 44, 44, 44, 387, 48, 46,
1156 387, 44, 44, 44, 48, 387, 46, 44, 44, 44,
1157 387, 365, 46, 44, 44, 44, 387, 387, 46, 366,
1158 387, 48, 387, 387, 387, 367, 387, 48, 387, 387,
1159 44, 44, 44, 369, 48, 373, 387, 368, 387, 387,
1160 48, 370, 44, 44, 44, 387, 48, 374, 44, 44,
1161 44, 371, 387, 375, 44, 44, 44, 387, 387, 46,
1162 387, 372, 387, 48, 44, 44, 44, 387, 387, 377,
1163 387, 44, 44, 44, 387, 48, 46, 44, 44, 44,
1164
1165 387, 48, 46, 44, 44, 44, 387, 48, 46, 44,
1166 44, 44, 387, 387, 381, 387, 387, 48, 44, 44,
1167 44, 387, 376, 46, 48, 387, 44, 44, 44, 387,
1168 48, 46, 387, 44, 44, 44, 48, 379, 384, 44,
1169 44, 44, 48, 387, 385, 378, 387, 44, 44, 44,
1170 387, 48, 386, 387, 387, 387, 380, 387, 387, 48,
1171 387, 387, 387, 387, 387, 387, 48, 387, 387, 387,
1172 387, 382, 48, 387, 387, 387, 387, 387, 387, 383,
1173 48, 36, 36, 36, 45, 45, 45, 65, 387, 65,
1174 86, 86, 86, 90, 90, 90, 118, 387, 118, 128,
1175
1176 128, 128, 11, 387, 387, 387, 387, 387, 387, 387,
1177 387, 387, 387, 387, 387, 387, 387, 387, 387, 387,
1178 387, 387, 387, 387, 387, 387, 387, 387, 387, 387,
1179 387, 387, 387, 387, 387, 387, 387, 387, 387, 387,
1180 387, 387, 387, 387, 387, 387, 387, 387, 387, 387,
1181 387, 387, 387, 387, 387, 387, 387, 387, 387, 387,
1182 387, 387, 387, 387, 387, 387
1183 } ;
1184
1185static const flex_int16_t yy_chk[2667] =
1186 { 0,
1187 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1188 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1189 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1190 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1191 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1192 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1193 1, 1, 1, 3, 3, 3, 4, 4, 4, 3,
1194 9, 7, 4, 5, 5, 8, 5, 5, 5, 5,
1195 5, 5, 5, 5, 5, 5, 5, 10, 13, 27,
1196 13, 21, 5, 5, 9, 5, 21, 391, 5, 25,
1197
1198 5, 25, 5, 232, 25, 25, 25, 25, 5, 5,
1199 7, 10, 5, 27, 8, 17, 5, 17, 17, 17,
1200 17, 19, 5, 19, 19, 19, 19, 26, 17, 5,
1201 5, 15, 15, 15, 19, 28, 15, 31, 20, 20,
1202 20, 20, 26, 37, 17, 37, 42, 32, 42, 20,
1203 19, 33, 31, 22, 15, 22, 22, 22, 22, 28,
1204 44, 199, 166, 78, 15, 20, 22, 15, 15, 15,
1205 15, 32, 15, 76, 15, 33, 15, 15, 15, 15,
1206 15, 15, 22, 15, 15, 15, 15, 78, 44, 45,
1207 45, 45, 86, 76, 45, 47, 47, 47, 48, 77,
1208
1209 47, 81, 49, 49, 49, 48, 128, 49, 119, 79,
1210 50, 50, 50, 80, 125, 50, 51, 51, 51, 77,
1211 86, 51, 45, 90, 121, 81, 48, 84, 47, 79,
1212 48, 83, 119, 80, 48, 49, 43, 52, 52, 52,
1213 121, 48, 52, 50, 47, 48, 50, 48, 48, 51,
1214 124, 52, 122, 53, 53, 53, 51, 49, 53, 54,
1215 54, 54, 51, 160, 54, 51, 124, 55, 55, 55,
1216 52, 120, 55, 56, 56, 56, 122, 52, 56, 160,
1217 52, 41, 57, 57, 57, 39, 53, 57, 58, 58,
1218 58, 120, 54, 58, 38, 24, 59, 59, 59, 53,
1219
1220 55, 59, 74, 74, 74, 74, 56, 55, 54, 60,
1221 60, 60, 163, 54, 60, 57, 14, 56, 57, 11,
1222 0, 58, 56, 123, 58, 61, 61, 61, 163, 59,
1223 61, 62, 62, 62, 0, 0, 62, 0, 0, 63,
1224 63, 63, 60, 123, 63, 60, 0, 0, 64, 64,
1225 64, 59, 0, 64, 75, 75, 75, 75, 61, 66,
1226 66, 66, 66, 0, 62, 61, 0, 0, 0, 0,
1227 66, 62, 63, 0, 67, 0, 67, 67, 67, 67,
1228 62, 64, 0, 0, 0, 0, 66, 67, 89, 89,
1229 89, 63, 0, 89, 0, 0, 64, 88, 63, 0,
1230
1231 68, 64, 68, 67, 88, 68, 68, 68, 68, 69,
1232 0, 69, 69, 69, 69, 70, 70, 70, 70, 0,
1233 0, 89, 69, 0, 0, 88, 70, 0, 0, 88,
1234 91, 91, 91, 88, 0, 91, 89, 0, 69, 0,
1235 88, 0, 70, 0, 88, 0, 88, 88, 0, 0,
1236 0, 0, 93, 93, 93, 0, 0, 93, 0, 0,
1237 94, 94, 94, 91, 92, 94, 0, 0, 0, 0,
1238 0, 0, 92, 92, 92, 92, 0, 0, 0, 0,
1239 92, 92, 92, 92, 92, 93, 95, 95, 95, 0,
1240 0, 95, 0, 94, 0, 92, 92, 92, 92, 92,
1241
1242 92, 0, 96, 96, 96, 0, 93, 96, 0, 97,
1243 97, 97, 0, 94, 97, 98, 98, 98, 0, 95,
1244 98, 99, 99, 99, 0, 0, 99, 100, 100, 100,
1245 0, 0, 100, 0, 0, 96, 0, 0, 95, 101,
1246 101, 101, 97, 0, 101, 0, 96, 0, 98, 0,
1247 102, 102, 102, 0, 99, 102, 97, 97, 99, 0,
1248 100, 0, 103, 103, 103, 100, 0, 103, 104, 104,
1249 104, 0, 101, 104, 105, 105, 105, 0, 0, 105,
1250 106, 106, 106, 102, 0, 106, 107, 107, 107, 0,
1251 0, 107, 0, 0, 101, 103, 0, 0, 0, 102,
1252
1253 0, 104, 0, 108, 108, 108, 0, 105, 108, 0,
1254 0, 105, 0, 106, 0, 0, 103, 0, 0, 107,
1255 0, 0, 106, 109, 109, 109, 0, 104, 109, 110,
1256 110, 110, 0, 0, 110, 0, 108, 111, 111, 111,
1257 0, 0, 111, 0, 107, 0, 112, 112, 112, 0,
1258 108, 112, 113, 113, 113, 0, 109, 113, 114, 114,
1259 114, 0, 110, 114, 115, 115, 115, 0, 0, 115,
1260 111, 0, 0, 111, 0, 0, 0, 109, 0, 112,
1261 0, 110, 110, 110, 0, 113, 0, 116, 116, 116,
1262 113, 114, 116, 117, 117, 117, 0, 115, 117, 127,
1263
1264 127, 127, 112, 0, 127, 132, 132, 132, 0, 0,
1265 132, 0, 0, 114, 115, 0, 133, 133, 133, 0,
1266 116, 133, 0, 0, 0, 0, 117, 0, 0, 0,
1267 0, 116, 127, 117, 134, 134, 134, 0, 132, 134,
1268 0, 0, 136, 136, 136, 0, 0, 136, 132, 133,
1269 0, 0, 0, 127, 131, 131, 131, 131, 0, 0,
1270 133, 0, 131, 131, 131, 131, 131, 134, 135, 135,
1271 135, 0, 0, 135, 0, 136, 0, 131, 131, 131,
1272 131, 131, 131, 0, 0, 137, 137, 137, 134, 136,
1273 137, 139, 139, 139, 0, 0, 139, 140, 140, 140,
1274
1275 0, 135, 140, 0, 141, 141, 141, 0, 135, 141,
1276 142, 142, 142, 0, 0, 142, 0, 0, 137, 0,
1277 143, 143, 143, 0, 139, 143, 144, 144, 144, 0,
1278 140, 144, 0, 145, 145, 145, 144, 141, 145, 137,
1279 146, 146, 146, 142, 0, 146, 139, 140, 0, 0,
1280 0, 0, 0, 143, 0, 142, 0, 141, 0, 144,
1281 147, 147, 147, 0, 0, 147, 145, 148, 148, 148,
1282 143, 0, 148, 146, 0, 149, 149, 149, 0, 0,
1283 149, 0, 146, 0, 0, 145, 150, 150, 150, 0,
1284 0, 150, 0, 147, 151, 151, 151, 0, 0, 151,
1285
1286 148, 152, 152, 152, 0, 0, 152, 148, 149, 0,
1287 153, 153, 153, 147, 0, 153, 147, 0, 0, 150,
1288 0, 0, 150, 0, 0, 149, 0, 151, 154, 154,
1289 154, 0, 0, 154, 152, 0, 155, 155, 155, 0,
1290 0, 155, 0, 153, 156, 156, 156, 151, 0, 156,
1291 0, 0, 157, 157, 157, 152, 153, 157, 158, 158,
1292 158, 154, 0, 158, 0, 159, 159, 159, 154, 155,
1293 159, 167, 167, 167, 0, 0, 167, 156, 169, 169,
1294 169, 155, 0, 169, 0, 157, 0, 0, 173, 173,
1295 173, 158, 157, 173, 0, 0, 0, 156, 159, 0,
1296
1297 0, 0, 0, 0, 167, 170, 170, 170, 0, 0,
1298 170, 169, 0, 0, 0, 0, 158, 159, 169, 0,
1299 0, 173, 0, 167, 168, 168, 168, 168, 173, 0,
1300 0, 0, 168, 168, 168, 168, 168, 0, 170, 172,
1301 172, 172, 0, 170, 172, 0, 0, 168, 168, 168,
1302 168, 168, 168, 171, 171, 171, 0, 0, 171, 174,
1303 174, 174, 0, 171, 174, 175, 175, 175, 0, 0,
1304 175, 0, 172, 176, 176, 176, 0, 0, 176, 177,
1305 177, 177, 0, 0, 177, 0, 171, 172, 176, 176,
1306 0, 0, 174, 0, 178, 178, 178, 0, 175, 178,
1307
1308 179, 179, 179, 0, 0, 179, 176, 175, 0, 0,
1309 179, 174, 177, 180, 180, 180, 0, 0, 180, 181,
1310 181, 181, 177, 0, 181, 0, 0, 178, 0, 182,
1311 182, 182, 0, 179, 182, 183, 183, 183, 0, 0,
1312 183, 0, 0, 184, 184, 184, 180, 178, 184, 0,
1313 0, 0, 181, 0, 180, 181, 185, 185, 185, 0,
1314 0, 185, 182, 0, 0, 186, 186, 186, 183, 182,
1315 186, 0, 187, 187, 187, 0, 184, 187, 0, 183,
1316 188, 188, 188, 184, 0, 188, 0, 0, 0, 185,
1317 189, 189, 189, 0, 0, 189, 0, 0, 186, 190,
1318
1319 190, 190, 0, 0, 190, 187, 191, 191, 191, 0,
1320 0, 191, 0, 188, 0, 0, 192, 192, 192, 187,
1321 186, 192, 0, 189, 193, 193, 193, 0, 0, 193,
1322 189, 0, 190, 194, 194, 194, 0, 188, 194, 191,
1323 195, 195, 195, 0, 0, 195, 190, 0, 0, 192,
1324 196, 196, 196, 0, 0, 196, 192, 193, 191, 0,
1325 196, 0, 200, 200, 200, 0, 194, 200, 0, 202,
1326 202, 202, 0, 195, 202, 203, 203, 203, 193, 0,
1327 203, 0, 0, 196, 0, 0, 206, 206, 206, 0,
1328 0, 206, 204, 204, 204, 200, 0, 204, 205, 205,
1329
1330 205, 0, 202, 205, 0, 0, 0, 0, 203, 0,
1331 0, 200, 201, 201, 201, 201, 0, 202, 0, 206,
1332 201, 201, 201, 201, 201, 204, 0, 207, 207, 207,
1333 0, 205, 207, 204, 206, 201, 201, 201, 201, 201,
1334 201, 208, 208, 208, 204, 0, 208, 0, 209, 209,
1335 209, 0, 205, 209, 0, 0, 210, 210, 210, 0,
1336 207, 210, 211, 211, 211, 0, 0, 211, 212, 212,
1337 212, 0, 0, 212, 208, 0, 207, 0, 212, 0,
1338 0, 209, 0, 213, 213, 213, 0, 208, 213, 210,
1339 0, 214, 214, 214, 0, 211, 214, 215, 215, 215,
1340
1341 0, 212, 215, 216, 216, 216, 0, 0, 216, 217,
1342 217, 217, 0, 0, 217, 0, 213, 0, 218, 218,
1343 218, 0, 0, 218, 214, 0, 213, 220, 220, 220,
1344 215, 0, 220, 213, 0, 214, 216, 0, 221, 221,
1345 221, 0, 217, 221, 0, 0, 0, 0, 0, 215,
1346 0, 218, 222, 222, 222, 216, 0, 222, 0, 0,
1347 220, 223, 223, 223, 0, 0, 223, 0, 0, 217,
1348 218, 221, 224, 224, 224, 0, 0, 224, 221, 0,
1349 0, 220, 225, 225, 225, 222, 0, 225, 226, 226,
1350 226, 0, 0, 226, 223, 0, 0, 227, 227, 227,
1351
1352 0, 222, 227, 0, 0, 224, 0, 227, 0, 0,
1353 0, 0, 0, 223, 0, 225, 0, 231, 231, 231,
1354 0, 226, 231, 233, 233, 233, 225, 0, 233, 0,
1355 227, 234, 234, 234, 0, 0, 234, 0, 236, 236,
1356 236, 0, 226, 236, 237, 237, 237, 0, 0, 237,
1357 231, 0, 0, 0, 0, 231, 233, 238, 238, 238,
1358 0, 0, 238, 0, 234, 239, 239, 239, 0, 233,
1359 239, 236, 0, 0, 240, 240, 240, 237, 0, 240,
1360 0, 0, 236, 0, 237, 234, 0, 0, 0, 0,
1361 238, 241, 241, 241, 0, 0, 241, 0, 239, 245,
1362
1363 245, 245, 0, 0, 245, 0, 0, 240, 0, 0,
1364 238, 246, 246, 246, 0, 0, 246, 0, 0, 239,
1365 240, 247, 247, 247, 241, 0, 247, 0, 248, 248,
1366 248, 241, 245, 248, 249, 249, 249, 0, 0, 249,
1367 0, 0, 0, 0, 246, 245, 250, 250, 250, 0,
1368 0, 250, 0, 0, 247, 0, 0, 251, 251, 251,
1369 246, 248, 251, 252, 252, 252, 0, 249, 252, 0,
1370 247, 253, 253, 253, 248, 0, 253, 0, 0, 250,
1371 254, 254, 254, 0, 0, 254, 255, 255, 255, 0,
1372 251, 255, 0, 249, 0, 0, 252, 251, 0, 250,
1373
1374 256, 256, 256, 0, 253, 256, 253, 258, 258, 258,
1375 0, 0, 258, 254, 0, 0, 259, 259, 259, 255,
1376 0, 259, 260, 260, 260, 0, 259, 260, 0, 0,
1377 261, 261, 261, 256, 254, 261, 0, 0, 255, 0,
1378 258, 263, 263, 263, 0, 0, 263, 0, 256, 259,
1379 0, 263, 264, 264, 264, 260, 0, 264, 260, 0,
1380 0, 258, 0, 261, 265, 265, 265, 0, 0, 265,
1381 266, 266, 266, 0, 263, 266, 267, 267, 267, 261,
1382 0, 267, 268, 268, 268, 264, 0, 268, 0, 269,
1383 269, 269, 0, 0, 269, 0, 264, 265, 0, 269,
1384
1385 270, 270, 270, 266, 0, 270, 271, 271, 271, 267,
1386 265, 271, 272, 272, 272, 268, 0, 272, 273, 273,
1387 273, 266, 269, 273, 274, 274, 274, 0, 0, 274,
1388 275, 275, 275, 270, 0, 275, 276, 276, 276, 271,
1389 0, 276, 277, 277, 277, 272, 0, 277, 0, 0,
1390 271, 273, 0, 280, 280, 280, 270, 274, 280, 0,
1391 0, 0, 0, 275, 274, 272, 281, 281, 281, 276,
1392 273, 281, 282, 282, 282, 277, 0, 282, 0, 283,
1393 283, 283, 0, 0, 283, 0, 280, 284, 284, 284,
1394 0, 0, 284, 285, 285, 285, 0, 0, 285, 281,
1395
1396 0, 0, 280, 0, 0, 282, 281, 0, 0, 0,
1397 0, 282, 283, 0, 0, 0, 286, 286, 286, 0,
1398 284, 286, 287, 287, 287, 0, 285, 287, 0, 288,
1399 288, 288, 0, 0, 288, 289, 289, 289, 0, 0,
1400 289, 285, 0, 290, 290, 290, 284, 285, 290, 286,
1401 0, 291, 291, 291, 0, 287, 291, 0, 294, 294,
1402 294, 0, 288, 294, 286, 288, 0, 0, 289, 0,
1403 287, 0, 0, 289, 0, 0, 290, 295, 295, 295,
1404 0, 0, 295, 290, 291, 296, 296, 296, 0, 0,
1405 296, 294, 297, 297, 297, 0, 0, 297, 298, 298,
1406
1407 298, 0, 0, 298, 0, 0, 291, 299, 299, 299,
1408 295, 294, 299, 0, 303, 303, 303, 295, 296, 303,
1409 0, 0, 296, 0, 0, 297, 0, 304, 304, 304,
1410 0, 298, 304, 305, 305, 305, 0, 0, 305, 0,
1411 299, 0, 0, 307, 307, 307, 297, 303, 307, 308,
1412 308, 308, 298, 0, 308, 0, 309, 309, 309, 0,
1413 304, 309, 0, 0, 303, 0, 305, 310, 310, 310,
1414 0, 0, 310, 311, 311, 311, 307, 0, 311, 304,
1415 0, 0, 308, 0, 0, 308, 312, 312, 312, 309,
1416 0, 312, 0, 313, 313, 313, 0, 0, 313, 0,
1417
1418 310, 0, 314, 314, 314, 310, 311, 314, 315, 315,
1419 315, 0, 0, 315, 0, 309, 316, 316, 316, 312,
1420 0, 316, 0, 0, 0, 0, 313, 311, 312, 313,
1421 0, 317, 317, 317, 0, 314, 317, 318, 318, 318,
1422 0, 315, 318, 319, 319, 319, 0, 0, 319, 316,
1423 0, 0, 315, 320, 320, 320, 0, 0, 320, 0,
1424 0, 322, 322, 322, 317, 316, 322, 323, 323, 323,
1425 318, 0, 323, 0, 0, 0, 319, 317, 326, 326,
1426 326, 0, 0, 326, 0, 0, 320, 0, 0, 318,
1427 327, 327, 327, 0, 322, 327, 328, 328, 328, 0,
1428
1429 323, 328, 329, 329, 329, 0, 0, 329, 330, 330,
1430 330, 326, 0, 330, 0, 322, 331, 331, 331, 0,
1431 323, 331, 0, 327, 0, 326, 333, 333, 333, 328,
1432 0, 333, 335, 335, 335, 329, 0, 335, 0, 328,
1433 327, 330, 329, 0, 0, 0, 0, 0, 330, 331,
1434 334, 334, 334, 0, 0, 334, 336, 336, 336, 333,
1435 0, 336, 339, 339, 339, 335, 0, 339, 0, 0,
1436 331, 340, 340, 340, 0, 0, 340, 0, 333, 341,
1437 341, 341, 0, 334, 341, 342, 342, 342, 334, 336,
1438 342, 0, 336, 0, 0, 339, 343, 343, 343, 0,
1439
1440 0, 343, 0, 0, 340, 0, 339, 0, 344, 344,
1441 344, 0, 341, 344, 0, 345, 345, 345, 342, 341,
1442 345, 346, 346, 346, 0, 342, 346, 0, 0, 343,
1443 0, 347, 347, 347, 0, 0, 347, 348, 348, 348,
1444 0, 344, 348, 0, 0, 343, 0, 0, 345, 0,
1445 350, 350, 350, 0, 346, 350, 351, 351, 351, 0,
1446 0, 351, 0, 345, 347, 346, 344, 353, 353, 353,
1447 348, 347, 353, 354, 354, 354, 0, 0, 354, 355,
1448 355, 355, 348, 350, 355, 356, 356, 356, 0, 351,
1449 356, 357, 357, 357, 0, 0, 357, 0, 0, 0,
1450
1451 353, 0, 350, 0, 0, 351, 354, 0, 358, 358,
1452 358, 0, 355, 358, 359, 359, 359, 0, 356, 359,
1453 0, 360, 360, 360, 357, 0, 360, 361, 361, 361,
1454 0, 355, 361, 362, 362, 362, 0, 0, 362, 356,
1455 0, 358, 0, 0, 0, 357, 0, 359, 0, 0,
1456 365, 365, 365, 359, 360, 365, 0, 358, 0, 0,
1457 361, 360, 366, 366, 366, 0, 362, 366, 367, 367,
1458 367, 361, 0, 367, 368, 368, 368, 0, 0, 368,
1459 0, 362, 0, 365, 369, 369, 369, 0, 0, 369,
1460 0, 370, 370, 370, 0, 366, 370, 371, 371, 371,
1461
1462 0, 367, 371, 372, 372, 372, 0, 368, 372, 376,
1463 376, 376, 0, 0, 376, 0, 0, 369, 378, 378,
1464 378, 0, 368, 378, 370, 0, 379, 379, 379, 0,
1465 371, 379, 0, 380, 380, 380, 372, 371, 380, 382,
1466 382, 382, 376, 0, 382, 370, 0, 383, 383, 383,
1467 0, 378, 383, 0, 0, 0, 372, 0, 0, 379,
1468 0, 0, 0, 0, 0, 0, 380, 0, 0, 0,
1469 0, 378, 382, 0, 0, 0, 0, 0, 0, 379,
1470 383, 388, 388, 388, 389, 389, 389, 390, 0, 390,
1471 392, 392, 392, 393, 393, 393, 394, 0, 394, 395,
1472
1473 395, 395, 387, 387, 387, 387, 387, 387, 387, 387,
1474 387, 387, 387, 387, 387, 387, 387, 387, 387, 387,
1475 387, 387, 387, 387, 387, 387, 387, 387, 387, 387,
1476 387, 387, 387, 387, 387, 387, 387, 387, 387, 387,
1477 387, 387, 387, 387, 387, 387, 387, 387, 387, 387,
1478 387, 387, 387, 387, 387, 387, 387, 387, 387, 387,
1479 387, 387, 387, 387, 387, 387
1480 } ;
1481
1482static yy_state_type yy_last_accepting_state;
1483static char *yy_last_accepting_cpos;
1484
1485extern int yy_flex_debug;
1487
1488static const flex_int16_t yy_rule_linenum[67] =
1489 { 0,
1490 134, 136, 138, 143, 144, 149, 150, 151, 163, 166,
1491 171, 178, 187, 196, 205, 218, 231, 240, 249, 258,
1492 267, 276, 285, 294, 303, 312, 321, 330, 339, 348,
1493 357, 366, 375, 384, 393, 402, 411, 420, 429, 438,
1494 447, 456, 465, 474, 483, 492, 501, 510, 611, 627,
1495 676, 684, 699, 700, 701, 702, 703, 704, 706, 724,
1496 737, 742, 746, 748, 750, 752
1497 } ;
1498
1499/* The intent behind this definition is that it'll catch
1500 * any uses of REJECT which flex missed.
1501 */
1502#define REJECT reject_used_but_not_detected
1503#define yymore() yymore_used_but_not_detected
1504#define YY_MORE_ADJ 0
1505#define YY_RESTORE_YY_MORE_OFFSET
1507#line 1 "agent_lexer.ll"
1508/* Copyright (C) 2017-2021 Internet Systems Consortium, Inc. ("ISC")
1509
1510 This Source Code Form is subject to the terms of the Mozilla Public
1511 License, v. 2.0. If a copy of the MPL was not distributed with this
1512 file, You can obtain one at http://mozilla.org/MPL/2.0/. */
1513#line 8 "agent_lexer.ll"
1514
1515/* Generated files do not make clang static analyser so happy */
1516#ifndef __clang_analyzer__
1517
1518#include <cctype>
1519#include <cerrno>
1520#include <climits>
1521#include <cstdlib>
1522#include <string>
1523#include <agent/parser_context.h>
1524#include <asiolink/io_address.h>
1525#include <boost/lexical_cast.hpp>
1526#include <exceptions/exceptions.h>
1527#include <cc/dhcp_config_error.h>
1528
1529/* Please avoid C++ style comments (// ... eol) as they break flex 2.6.2 */
1530
1531/* Work around an incompatibility in flex (at least versions
1532 2.5.31 through 2.5.33): it generates code that does
1533 not conform to C89. See Debian bug 333231
1534 <http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=333231>. */
1535# undef yywrap
1536# define yywrap() 1
1537
1538namespace {
1539
1540bool start_token_flag = false;
1541
1543unsigned int comment_start_line = 0;
1544
1545using namespace isc;
1547
1548};
1549
1550/* To avoid the call to exit... oops! */
1551#define YY_FATAL_ERROR(msg) isc::agent::ParserContext::fatal(msg)
1552#line 1552 "agent_lexer.cc"
1553/* noyywrap disables automatic rewinding for the next file to parse. Since we
1554 always parse only a single string, there's no need to do any wraps. And
1555 using yywrap requires linking with -lfl, which provides the default yywrap
1556 implementation that always returns 1 anyway. */
1557/* nounput simplifies the lexer, by removing support for putting a character
1558 back into the input stream. We never use such capability anyway. */
1559/* batch means that we'll never use the generated lexer interactively. */
1560/* avoid to get static global variables to remain with C++. */
1561/* in last resort %option reentrant */
1562/* Enables debug mode. To see the debug messages, one needs to also set
1563 yy_flex_debug to 1, then the debug messages will be printed on stderr. */
1564/* I have no idea what this option does, except it was specified in the bison
1565 examples and Postgres folks added it to remove gcc 4.3 warnings. Let's
1566 be on the safe side and keep it. */
1567#define YY_NO_INPUT 1
1568
1569/* These are not token expressions yet, just convenience expressions that
1570 can be used during actual token definitions. Note some can match
1571 incorrect inputs (e.g., IP addresses) which must be checked. */
1572/* for errors */
1573#line 97 "agent_lexer.ll"
1574/* This code run each time a pattern is matched. It updates the location
1575 by moving it ahead by yyleng bytes. yyleng specifies the length of the
1576 currently matched token. */
1577#define YY_USER_ACTION driver.loc_.columns(yyleng);
1578#line 1578 "agent_lexer.cc"
1579#line 1579 "agent_lexer.cc"
1580
1581#define INITIAL 0
1582#define COMMENT 1
1583#define DIR_ENTER 2
1584#define DIR_INCLUDE 3
1585#define DIR_EXIT 4
1586
1587#ifndef YY_NO_UNISTD_H
1588/* Special case for "unistd.h", since it is non-ANSI. We include it way
1589 * down here because we want the user's section 1 to have been scanned first.
1590 * The user has a chance to override it with an option.
1591 */
1592/* %if-c-only */
1593#include <unistd.h>
1594/* %endif */
1595/* %if-c++-only */
1596/* %endif */
1597#endif
1598
1599#ifndef YY_EXTRA_TYPE
1600#define YY_EXTRA_TYPE void *
1601#endif
1602
1603/* %if-c-only Reentrant structure and macros (non-C++). */
1604/* %if-reentrant */
1605/* %if-c-only */
1606
1607static int yy_init_globals ( void );
1608
1609/* %endif */
1610/* %if-reentrant */
1611/* %endif */
1612/* %endif End reentrant structures and macros. */
1613
1614/* Accessor methods to globals.
1615 These are made visible to non-reentrant scanners for convenience. */
1616
1617int yylex_destroy ( void );
1618
1619int yyget_debug ( void );
1620
1621void yyset_debug ( int debug_flag );
1622
1623YY_EXTRA_TYPE yyget_extra ( void );
1624
1625void yyset_extra ( YY_EXTRA_TYPE user_defined );
1626
1627FILE *yyget_in ( void );
1628
1629void yyset_in ( FILE * _in_str );
1630
1631FILE *yyget_out ( void );
1632
1633void yyset_out ( FILE * _out_str );
1634
1635 int yyget_leng ( void );
1636
1637char *yyget_text ( void );
1638
1639int yyget_lineno ( void );
1640
1641void yyset_lineno ( int _line_number );
1642
1643/* %if-bison-bridge */
1644/* %endif */
1645
1646/* Macros after this point can all be overridden by user definitions in
1647 * section 1.
1648 */
1649
1650#ifndef YY_SKIP_YYWRAP
1651#ifdef __cplusplus
1652extern "C" int yywrap ( void );
1653#else
1654extern int yywrap ( void );
1655#endif
1656#endif
1657
1658/* %not-for-header */
1659#ifndef YY_NO_UNPUT
1660
1661#endif
1662/* %ok-for-header */
1663
1664/* %endif */
1665
1666#ifndef yytext_ptr
1667static void yy_flex_strncpy ( char *, const char *, int );
1668#endif
1669
1670#ifdef YY_NEED_STRLEN
1671static int yy_flex_strlen ( const char * );
1672#endif
1673
1674#ifndef YY_NO_INPUT
1675/* %if-c-only Standard (non-C++) definition */
1676/* %not-for-header */
1677#ifdef __cplusplus
1678static int yyinput ( void );
1679#else
1680static int input ( void );
1681#endif
1682/* %ok-for-header */
1683
1684/* %endif */
1685#endif
1686
1687/* %if-c-only */
1688
1689/* %endif */
1690
1691/* Amount of stuff to slurp up with each read. */
1692#ifndef YY_READ_BUF_SIZE
1693#ifdef __ia64__
1694/* On IA-64, the buffer size is 16k, not 8k */
1695#define YY_READ_BUF_SIZE 16384
1696#else
1697#define YY_READ_BUF_SIZE 8192
1698#endif /* __ia64__ */
1699#endif
1700
1701/* Copy whatever the last rule matched to the standard output. */
1702#ifndef ECHO
1703/* %if-c-only Standard (non-C++) definition */
1704/* This used to be an fputs(), but since the string might contain NUL's,
1705 * we now use fwrite().
1706 */
1707#define ECHO do { if (fwrite( yytext, (size_t) yyleng, 1, yyout )) {} } while (0)
1708/* %endif */
1709/* %if-c++-only C++ definition */
1710/* %endif */
1711#endif
1712
1713/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL,
1714 * is returned in "result".
1715 */
1716#ifndef YY_INPUT
1717#define YY_INPUT(buf,result,max_size) \
1718/* %% [5.0] fread()/read() definition of YY_INPUT goes here unless we're doing C++ \ */\
1719 if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
1720 { \
1721 int c = '*'; \
1722 int n; \
1723 for ( n = 0; n < max_size && \
1724 (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
1725 buf[n] = (char) c; \
1726 if ( c == '\n' ) \
1727 buf[n++] = (char) c; \
1728 if ( c == EOF && ferror( yyin ) ) \
1729 YY_FATAL_ERROR( "input in flex scanner failed" ); \
1730 result = n; \
1731 } \
1732 else \
1733 { \
1734 errno=0; \
1735 while ( (result = (int) fread(buf, 1, (yy_size_t) max_size, yyin)) == 0 && ferror(yyin)) \
1736 { \
1737 if( errno != EINTR) \
1738 { \
1739 YY_FATAL_ERROR( "input in flex scanner failed" ); \
1740 break; \
1741 } \
1742 errno=0; \
1743 clearerr(yyin); \
1744 } \
1745 }\
1746\
1747/* %if-c++-only C++ definition \ */\
1748/* %endif */
1749
1750#endif
1751
1752/* No semi-colon after return; correct usage is to write "yyterminate();" -
1753 * we don't want an extra ';' after the "return" because that will cause
1754 * some compilers to complain about unreachable statements.
1755 */
1756#ifndef yyterminate
1757#define yyterminate() return YY_NULL
1758#endif
1759
1760/* Number of entries by which start-condition stack grows. */
1761#ifndef YY_START_STACK_INCR
1762#define YY_START_STACK_INCR 25
1763#endif
1764
1765/* Report a fatal error. */
1766#ifndef YY_FATAL_ERROR
1767/* %if-c-only */
1768#define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
1769/* %endif */
1770/* %if-c++-only */
1771/* %endif */
1772#endif
1773
1774/* %if-tables-serialization structures and prototypes */
1775/* %not-for-header */
1776/* %ok-for-header */
1777
1778/* %not-for-header */
1779/* %tables-yydmap generated elements */
1780/* %endif */
1781/* end tables serialization structures and prototypes */
1782
1783/* %ok-for-header */
1784
1785/* Default declaration of generated scanner - a define so the user can
1786 * easily add parameters.
1787 */
1788#ifndef YY_DECL
1789#define YY_DECL_IS_OURS 1
1790/* %if-c-only Standard (non-C++) definition */
1791
1792extern int yylex (void);
1793
1794#define YY_DECL int yylex (void)
1795/* %endif */
1796/* %if-c++-only C++ definition */
1797/* %endif */
1798#endif /* !YY_DECL */
1799
1800/* Code executed at the beginning of each rule, after yytext and yyleng
1801 * have been set up.
1802 */
1803#ifndef YY_USER_ACTION
1804#define YY_USER_ACTION
1805#endif
1806
1807/* Code executed at the end of each rule. */
1808#ifndef YY_BREAK
1809#define YY_BREAK /*LINTED*/break;
1810#endif
1811
1812/* %% [6.0] YY_RULE_SETUP definition goes here */
1813#define YY_RULE_SETUP \
1814 YY_USER_ACTION
1815
1816/* %not-for-header */
1820{
1821 yy_state_type yy_current_state;
1822 char *yy_cp, *yy_bp;
1824
1825 if ( !(yy_init) )
1826 {
1827 (yy_init) = 1;
1828
1829#ifdef YY_USER_INIT
1830 YY_USER_INIT;
1831#endif
1832
1833 if ( ! (yy_start) )
1834 (yy_start) = 1; /* first start state */
1835
1836 if ( ! yyin )
1837/* %if-c-only */
1838 yyin = stdin;
1839/* %endif */
1840/* %if-c++-only */
1841/* %endif */
1842
1843 if ( ! yyout )
1844/* %if-c-only */
1845 yyout = stdout;
1846/* %endif */
1847/* %if-c++-only */
1848/* %endif */
1849
1850 if ( ! YY_CURRENT_BUFFER ) {
1854 }
1855
1857 }
1858
1859 {
1860/* %% [7.0] user's declarations go here */
1861#line 103 "agent_lexer.ll"
1862
1863
1864
1865#line 107 "agent_lexer.ll"
1866 /* This part of the code is copied over to the verbatim to the top
1867 of the generated yylex function. Explanation:
1868 http://www.gnu.org/software/bison/manual/html_node/Multiple-start_002dsymbols.html */
1869
1870 /* Code run each time yylex is called. */
1871 driver.loc_.step();
1872
1873 /* We currently have 3 points of entries defined:
1874 START_JSON - which expects any valid JSON
1875 START_AGENT - which expects full configuration (with outer map and Control-agent
1876 object in it.
1877 START_SUB_AGENT - which expects only content of the Control-agent, this is
1878 primarily useful for testing. */
1879 if (start_token_flag) {
1880 start_token_flag = false;
1881 switch (start_token_value) {
1882 case ParserContext::PARSER_JSON:
1883 default:
1884 return isc::agent::AgentParser::make_START_JSON(driver.loc_);
1885 case ParserContext::PARSER_AGENT:
1887 case ParserContext::PARSER_SUB_AGENT:
1889 }
1890 }
1891
1892
1893#line 1893 "agent_lexer.cc"
1894
1895 while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */
1896 {
1897/* %% [8.0] yymore()-related code goes here */
1898 yy_cp = (yy_c_buf_p);
1899
1900 /* Support of yytext. */
1901 *yy_cp = (yy_hold_char);
1902
1903 /* yy_bp points to the position in yy_ch_buf of the start of
1904 * the current run.
1905 */
1906 yy_bp = yy_cp;
1907
1908/* %% [9.0] code to set up and find next match goes here */
1909 yy_current_state = (yy_start);
1910yy_match:
1911 do
1912 {
1913 YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)] ;
1914 if ( yy_accept[yy_current_state] )
1915 {
1916 (yy_last_accepting_state) = yy_current_state;
1917 (yy_last_accepting_cpos) = yy_cp;
1918 }
1919 while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
1920 {
1921 yy_current_state = (int) yy_def[yy_current_state];
1922 if ( yy_current_state >= 388 )
1923 yy_c = yy_meta[yy_c];
1924 }
1925 yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
1926 ++yy_cp;
1927 }
1928 while ( yy_current_state != 387 );
1929 yy_cp = (yy_last_accepting_cpos);
1930 yy_current_state = (yy_last_accepting_state);
1931
1932yy_find_action:
1933/* %% [10.0] code to find the action number goes here */
1934 yy_act = yy_accept[yy_current_state];
1935
1937
1938/* %% [11.0] code for yylineno update goes here */
1939
1940do_action: /* This label is used only to access EOF actions. */
1941
1942/* %% [12.0] debug code goes here */
1943 if ( yy_flex_debug )
1944 {
1945 if ( yy_act == 0 )
1946 fprintf( stderr, "--scanner backing up\n" );
1947 else if ( yy_act < 67 )
1948 fprintf( stderr, "--accepting rule at line %ld (\"%s\")\n",
1949 (long)yy_rule_linenum[yy_act], yytext );
1950 else if ( yy_act == 67 )
1951 fprintf( stderr, "--accepting default rule (\"%s\")\n",
1952 yytext );
1953 else if ( yy_act == 68 )
1954 fprintf( stderr, "--(end of buffer or a NUL)\n" );
1955 else
1956 fprintf( stderr, "--EOF (start condition %d)\n", YY_START );
1957 }
1958
1959 switch ( yy_act )
1960 { /* beginning of action switch */
1961/* %% [13.0] actions go here */
1962 case 0: /* must back up */
1963 /* undo the effects of YY_DO_BEFORE_ACTION */
1964 *yy_cp = (yy_hold_char);
1965 yy_cp = (yy_last_accepting_cpos);
1966 yy_current_state = (yy_last_accepting_state);
1967 goto yy_find_action;
1968
1969case 1:
1971#line 134 "agent_lexer.ll"
1972;
1973 YY_BREAK
1974case 2:
1976#line 136 "agent_lexer.ll"
1977;
1978 YY_BREAK
1979case 3:
1981#line 138 "agent_lexer.ll"
1982{
1983 BEGIN(COMMENT);
1984 comment_start_line = driver.loc_.end.line;;
1985}
1986 YY_BREAK
1987case 4:
1989#line 143 "agent_lexer.ll"
1990BEGIN(INITIAL);
1991 YY_BREAK
1992case 5:
1994#line 144 "agent_lexer.ll"
1995;
1996 YY_BREAK
1997case YY_STATE_EOF(COMMENT):
1998#line 145 "agent_lexer.ll"
1999{
2000 isc_throw(ParseError, "Comment not closed. (/* in line " << comment_start_line);
2001}
2002 YY_BREAK
2003case 6:
2005#line 149 "agent_lexer.ll"
2007 YY_BREAK
2008case 7:
2010#line 150 "agent_lexer.ll"
2012 YY_BREAK
2013case 8:
2015#line 151 "agent_lexer.ll"
2016{
2017 /* Include directive. */
2018
2019 /* Extract the filename. */
2020 std::string tmp(yytext+1);
2021 tmp.resize(tmp.size() - 1);
2022
2023 driver.includeFile(tmp);
2024}
2025 YY_BREAK
2029#line 160 "agent_lexer.ll"
2030{
2031 isc_throw(ParseError, "Directive not closed.");
2032}
2033 YY_BREAK
2034case 9:
2036#line 163 "agent_lexer.ll"
2037BEGIN(INITIAL);
2038 YY_BREAK
2039case 10:
2041#line 166 "agent_lexer.ll"
2042{
2043 /* Ok, we found a with space. Let's ignore it and update loc variable. */
2044 driver.loc_.step();
2045}
2046 YY_BREAK
2047case 11:
2048/* rule 11 can match eol */
2050#line 171 "agent_lexer.ll"
2051{
2052 /* Newline found. Let's update the location and continue. */
2053 driver.loc_.lines(yyleng);
2054 driver.loc_.step();
2055}
2056 YY_BREAK
2057case 12:
2059#line 178 "agent_lexer.ll"
2060{
2061 switch(driver.ctx_) {
2062 case ParserContext::CONFIG:
2063 return AgentParser::make_CONTROL_AGENT(driver.loc_);
2064 default:
2065 return AgentParser::make_STRING("Control-agent", driver.loc_);
2066 }
2067}
2068 YY_BREAK
2069case 13:
2071#line 187 "agent_lexer.ll"
2072{
2073 switch(driver.ctx_) {
2074 case ParserContext::AGENT:
2075 return AgentParser::make_HTTP_HOST(driver.loc_);
2076 default:
2077 return AgentParser::make_STRING("http-host", driver.loc_);
2078 }
2079}
2080 YY_BREAK
2081case 14:
2083#line 196 "agent_lexer.ll"
2084{
2085 switch(driver.ctx_) {
2086 case ParserContext::AGENT:
2087 return AgentParser::make_HTTP_PORT(driver.loc_);
2088 default:
2089 return AgentParser::make_STRING("http-port", driver.loc_);
2090 }
2091}
2092 YY_BREAK
2093case 15:
2095#line 205 "agent_lexer.ll"
2096{
2097 switch(driver.ctx_) {
2098 case ParserContext::AGENT:
2099 case ParserContext::AUTHENTICATION:
2100 case ParserContext::CLIENTS:
2102 case ParserContext::LOGGERS:
2103 return AgentParser::make_USER_CONTEXT(driver.loc_);
2104 default:
2105 return AgentParser::make_STRING("user-context", driver.loc_);
2106 }
2107}
2108 YY_BREAK
2109case 16:
2111#line 218 "agent_lexer.ll"
2112{
2113 switch(driver.ctx_) {
2114 case ParserContext::AGENT:
2115 case ParserContext::AUTHENTICATION:
2116 case ParserContext::CLIENTS:
2118 case ParserContext::LOGGERS:
2119 return AgentParser::make_COMMENT(driver.loc_);
2120 default:
2121 return AgentParser::make_STRING("comment", driver.loc_);
2122 }
2123}
2124 YY_BREAK
2125case 17:
2127#line 231 "agent_lexer.ll"
2128{
2129 switch(driver.ctx_) {
2130 case ParserContext::AGENT:
2131 return AgentParser::make_AUTHENTICATION(driver.loc_);
2132 default:
2133 return AgentParser::make_STRING("authentication", driver.loc_);
2134 }
2135}
2136 YY_BREAK
2137case 18:
2139#line 240 "agent_lexer.ll"
2140{
2141 switch(driver.ctx_) {
2142 case ParserContext::AUTHENTICATION:
2143 return AgentParser::make_TYPE(driver.loc_);
2144 default:
2145 return AgentParser::make_STRING("type", driver.loc_);
2146 }
2147}
2148 YY_BREAK
2149case 19:
2151#line 249 "agent_lexer.ll"
2152{
2153 switch(driver.ctx_) {
2154 case ParserContext::AUTH_TYPE:
2155 return AgentParser::make_BASIC(driver.loc_);
2156 default:
2157 return AgentParser::make_STRING("basic", driver.loc_);
2158 }
2159}
2160 YY_BREAK
2161case 20:
2163#line 258 "agent_lexer.ll"
2164{
2165 switch(driver.ctx_) {
2166 case ParserContext::AUTHENTICATION:
2167 return AgentParser::make_REALM(driver.loc_);
2168 default:
2169 return AgentParser::make_STRING("realm", driver.loc_);
2170 }
2171}
2172 YY_BREAK
2173case 21:
2175#line 267 "agent_lexer.ll"
2176{
2177 switch(driver.ctx_) {
2178 case ParserContext::AUTHENTICATION:
2179 return AgentParser::make_CLIENTS(driver.loc_);
2180 default:
2181 return AgentParser::make_STRING("clients", driver.loc_);
2182 }
2183}
2184 YY_BREAK
2185case 22:
2187#line 276 "agent_lexer.ll"
2188{
2189 switch(driver.ctx_) {
2190 case ParserContext::CLIENTS:
2191 return AgentParser::make_USER(driver.loc_);
2192 default:
2193 return AgentParser::make_STRING("user", driver.loc_);
2194 }
2195}
2196 YY_BREAK
2197case 23:
2199#line 285 "agent_lexer.ll"
2200{
2201 switch(driver.ctx_) {
2202 case ParserContext::CLIENTS:
2203 return AgentParser::make_PASSWORD(driver.loc_);
2204 default:
2205 return AgentParser::make_STRING("password", driver.loc_);
2206 }
2207}
2208 YY_BREAK
2209case 24:
2211#line 294 "agent_lexer.ll"
2212{
2213 switch(driver.ctx_) {
2214 case ParserContext::AGENT:
2215 return AgentParser::make_TRUST_ANCHOR(driver.loc_);
2216 default:
2217 return AgentParser::make_STRING("trust-anchor", driver.loc_);
2218 }
2219}
2220 YY_BREAK
2221case 25:
2223#line 303 "agent_lexer.ll"
2224{
2225 switch(driver.ctx_) {
2226 case ParserContext::AGENT:
2227 return AgentParser::make_CERT_FILE(driver.loc_);
2228 default:
2229 return AgentParser::make_STRING("cert-file", driver.loc_);
2230 }
2231}
2232 YY_BREAK
2233case 26:
2235#line 312 "agent_lexer.ll"
2236{
2237 switch(driver.ctx_) {
2238 case ParserContext::AGENT:
2239 return AgentParser::make_KEY_FILE(driver.loc_);
2240 default:
2241 return AgentParser::make_STRING("key-file", driver.loc_);
2242 }
2243}
2244 YY_BREAK
2245case 27:
2247#line 321 "agent_lexer.ll"
2248{
2249 switch(driver.ctx_) {
2250 case ParserContext::AGENT:
2251 return AgentParser::make_CERT_REQUIRED(driver.loc_);
2252 default:
2253 return AgentParser::make_STRING("cert-required", driver.loc_);
2254 }
2255}
2256 YY_BREAK
2257case 28:
2259#line 330 "agent_lexer.ll"
2260{
2261 switch(driver.ctx_) {
2262 case ParserContext::AGENT:
2263 return AgentParser::make_CONTROL_SOCKETS(driver.loc_);
2264 default:
2265 return AgentParser::make_STRING("control-sockets", driver.loc_);
2266 }
2267}
2268 YY_BREAK
2269case 29:
2271#line 339 "agent_lexer.ll"
2272{
2273 switch(driver.ctx_) {
2274 case ParserContext::CONTROL_SOCKETS:
2275 return AgentParser::make_DHCP4_SERVER(driver.loc_);
2276 default:
2277 return AgentParser::make_STRING("dhcp4", driver.loc_);
2278 }
2279}
2280 YY_BREAK
2281case 30:
2283#line 348 "agent_lexer.ll"
2284{
2285 switch(driver.ctx_) {
2286 case ParserContext::CONTROL_SOCKETS:
2287 return AgentParser::make_DHCP6_SERVER(driver.loc_);
2288 default:
2289 return AgentParser::make_STRING("dhcp6", driver.loc_);
2290 }
2291}
2292 YY_BREAK
2293case 31:
2295#line 357 "agent_lexer.ll"
2296{
2297 switch(driver.ctx_) {
2298 case ParserContext::CONTROL_SOCKETS:
2299 return AgentParser::make_D2_SERVER(driver.loc_);
2300 default:
2301 return AgentParser::make_STRING("d2", driver.loc_);
2302 }
2303}
2304 YY_BREAK
2305case 32:
2307#line 366 "agent_lexer.ll"
2308{
2309 switch(driver.ctx_) {
2311 return AgentParser::make_SOCKET_NAME(driver.loc_);
2312 default:
2313 return AgentParser::make_STRING("socket-name", driver.loc_);
2314 }
2315}
2316 YY_BREAK
2317case 33:
2319#line 375 "agent_lexer.ll"
2320{
2321 switch(driver.ctx_) {
2323 return AgentParser::make_SOCKET_TYPE(driver.loc_);
2324 default:
2325 return AgentParser::make_STRING("socket-type", driver.loc_);
2326 }
2327}
2328 YY_BREAK
2329case 34:
2331#line 384 "agent_lexer.ll"
2332{
2333 switch(driver.ctx_) {
2334 case ParserContext::SOCKET_TYPE:
2335 return AgentParser::make_UNIX(driver.loc_);
2336 default:
2337 return AgentParser::make_STRING("unix", driver.loc_);
2338 }
2339}
2340 YY_BREAK
2341case 35:
2343#line 393 "agent_lexer.ll"
2344{
2345 switch(driver.ctx_) {
2346 case ParserContext::AGENT:
2347 return AgentParser::make_HOOKS_LIBRARIES(driver.loc_);
2348 default:
2349 return AgentParser::make_STRING("hooks-libraries", driver.loc_);
2350 }
2351}
2352 YY_BREAK
2353case 36:
2355#line 402 "agent_lexer.ll"
2356{
2357 switch(driver.ctx_) {
2358 case ParserContext::HOOKS_LIBRARIES:
2359 return AgentParser::make_LIBRARY(driver.loc_);
2360 default:
2361 return AgentParser::make_STRING("library", driver.loc_);
2362 }
2363}
2364 YY_BREAK
2365case 37:
2367#line 411 "agent_lexer.ll"
2368{
2369 switch(driver.ctx_) {
2370 case ParserContext::HOOKS_LIBRARIES:
2371 return AgentParser::make_PARAMETERS(driver.loc_);
2372 default:
2373 return AgentParser::make_STRING("parameters", driver.loc_);
2374 }
2375}
2376 YY_BREAK
2377case 38:
2379#line 420 "agent_lexer.ll"
2380{
2381 switch(driver.ctx_) {
2382 case ParserContext::AGENT:
2383 return AgentParser::make_LOGGERS(driver.loc_);
2384 default:
2385 return AgentParser::make_STRING("loggers", driver.loc_);
2386 }
2387}
2388 YY_BREAK
2389case 39:
2391#line 429 "agent_lexer.ll"
2392{
2393 switch(driver.ctx_) {
2394 case ParserContext::LOGGERS:
2395 return AgentParser::make_NAME(driver.loc_);
2396 default:
2397 return AgentParser::make_STRING("name", driver.loc_);
2398 }
2399}
2400 YY_BREAK
2401case 40:
2403#line 438 "agent_lexer.ll"
2404{
2405 switch(driver.ctx_) {
2406 case ParserContext::LOGGERS:
2407 return AgentParser::make_OUTPUT_OPTIONS(driver.loc_);
2408 default:
2409 return AgentParser::make_STRING("output_options", driver.loc_);
2410 }
2411}
2412 YY_BREAK
2413case 41:
2415#line 447 "agent_lexer.ll"
2416{
2417 switch(driver.ctx_) {
2418 case ParserContext::OUTPUT_OPTIONS:
2419 return AgentParser::make_OUTPUT(driver.loc_);
2420 default:
2421 return AgentParser::make_STRING("output", driver.loc_);
2422 }
2423}
2424 YY_BREAK
2425case 42:
2427#line 456 "agent_lexer.ll"
2428{
2429 switch(driver.ctx_) {
2430 case ParserContext::OUTPUT_OPTIONS:
2431 return AgentParser::make_FLUSH(driver.loc_);
2432 default:
2433 return AgentParser::make_STRING("flush", driver.loc_);
2434 }
2435}
2436 YY_BREAK
2437case 43:
2439#line 465 "agent_lexer.ll"
2440{
2441 switch(driver.ctx_) {
2442 case ParserContext::OUTPUT_OPTIONS:
2443 return AgentParser::make_MAXSIZE(driver.loc_);
2444 default:
2445 return AgentParser::make_STRING("maxsize", driver.loc_);
2446 }
2447}
2448 YY_BREAK
2449case 44:
2451#line 474 "agent_lexer.ll"
2452{
2453 switch(driver.ctx_) {
2454 case ParserContext::OUTPUT_OPTIONS:
2455 return AgentParser::make_MAXVER(driver.loc_);
2456 default:
2457 return AgentParser::make_STRING("maxver", driver.loc_);
2458 }
2459}
2460 YY_BREAK
2461case 45:
2463#line 483 "agent_lexer.ll"
2464{
2465 switch(driver.ctx_) {
2466 case ParserContext::OUTPUT_OPTIONS:
2467 return AgentParser::make_PATTERN(driver.loc_);
2468 default:
2469 return AgentParser::make_STRING("pattern", driver.loc_);
2470 }
2471}
2472 YY_BREAK
2473case 46:
2475#line 492 "agent_lexer.ll"
2476{
2477 switch(driver.ctx_) {
2478 case ParserContext::LOGGERS:
2479 return AgentParser::make_DEBUGLEVEL(driver.loc_);
2480 default:
2481 return AgentParser::make_STRING("debuglevel", driver.loc_);
2482 }
2483}
2484 YY_BREAK
2485case 47:
2487#line 501 "agent_lexer.ll"
2488{
2489 switch(driver.ctx_) {
2490 case ParserContext::LOGGERS:
2491 return AgentParser::make_SEVERITY(driver.loc_);
2492 default:
2493 return AgentParser::make_STRING("severity", driver.loc_);
2494 }
2495}
2496 YY_BREAK
2497case 48:
2499#line 510 "agent_lexer.ll"
2500{
2501 /* A string has been matched. It contains the actual string and single quotes.
2502 We need to get those quotes out of the way and just use its content, e.g.
2503 for 'foo' we should get foo */
2504 std::string raw(yytext+1);
2505 size_t len = raw.size() - 1;
2506 raw.resize(len);
2507 std::string decoded;
2508 decoded.reserve(len);
2509 for (size_t pos = 0; pos < len; ++pos) {
2510 int b = 0;
2511 char c = raw[pos];
2512 switch (c) {
2513 case '"':
2514 /* impossible condition */
2515 driver.error(driver.loc_, "Bad quote in \"" + raw + "\"");
2516 break;
2517 case '\\':
2518 ++pos;
2519 if (pos >= len) {
2520 /* impossible condition */
2521 driver.error(driver.loc_, "Overflow escape in \"" + raw + "\"");
2522 }
2523 c = raw[pos];
2524 switch (c) {
2525 case '"':
2526 case '\\':
2527 case '/':
2528 decoded.push_back(c);
2529 break;
2530 case 'b':
2531 decoded.push_back('\b');
2532 break;
2533 case 'f':
2534 decoded.push_back('\f');
2535 break;
2536 case 'n':
2537 decoded.push_back('\n');
2538 break;
2539 case 'r':
2540 decoded.push_back('\r');
2541 break;
2542 case 't':
2543 decoded.push_back('\t');
2544 break;
2545 case 'u':
2546 /* support only \u0000 to \u00ff */
2547 ++pos;
2548 if (pos + 4 > len) {
2549 /* impossible condition */
2550 driver.error(driver.loc_,
2551 "Overflow unicode escape in \"" + raw + "\"");
2552 }
2553 if ((raw[pos] != '0') || (raw[pos + 1] != '0')) {
2554 driver.error(driver.loc_,
2555 "Unsupported unicode escape in \"" + raw + "\"",
2556 pos + 1);
2557 }
2558 pos += 2;
2559 c = raw[pos];
2560 if ((c >= '0') && (c <= '9')) {
2561 b = (c - '0') << 4;
2562 } else if ((c >= 'A') && (c <= 'F')) {
2563 b = (c - 'A' + 10) << 4;
2564 } else if ((c >= 'a') && (c <= 'f')) {
2565 b = (c - 'a' + 10) << 4;
2566 } else {
2567 /* impossible condition */
2568 driver.error(driver.loc_, "Not hexadecimal in unicode escape in \"" + raw + "\"");
2569 }
2570 pos++;
2571 c = raw[pos];
2572 if ((c >= '0') && (c <= '9')) {
2573 b |= c - '0';
2574 } else if ((c >= 'A') && (c <= 'F')) {
2575 b |= c - 'A' + 10;
2576 } else if ((c >= 'a') && (c <= 'f')) {
2577 b |= c - 'a' + 10;
2578 } else {
2579 /* impossible condition */
2580 driver.error(driver.loc_, "Not hexadecimal in unicode escape in \"" + raw + "\"");
2581 }
2582 decoded.push_back(static_cast<char>(b & 0xff));
2583 break;
2584 default:
2585 /* impossible condition */
2586 driver.error(driver.loc_, "Bad escape in \"" + raw + "\"");
2587 }
2588 break;
2589 default:
2590 if ((c >= 0) && (c < 0x20)) {
2591 /* impossible condition */
2592 driver.error(driver.loc_, "Invalid control in \"" + raw + "\"");
2593 }
2594 decoded.push_back(c);
2595 }
2596 }
2597
2598 return AgentParser::make_STRING(decoded, driver.loc_);
2599}
2600 YY_BREAK
2601case 49:
2602/* rule 49 can match eol */
2604#line 611 "agent_lexer.ll"
2605{
2606 /* Bad string with a forbidden control character inside */
2607 std::string raw(yytext+1);
2608 size_t len = raw.size() - 1;
2609 size_t pos = 0;
2610 for (; pos < len; ++pos) {
2611 char c = raw[pos];
2612 if ((c >= 0) && (c < 0x20)) {
2613 break;
2614 }
2615 }
2616 driver.error(driver.loc_,
2617 "Invalid control in " + std::string(yytext),
2618 pos + 1);
2619}
2620 YY_BREAK
2621case 50:
2622/* rule 50 can match eol */
2624#line 627 "agent_lexer.ll"
2625{
2626 /* Bad string with a bad escape inside */
2627 std::string raw(yytext+1);
2628 size_t len = raw.size() - 1;
2629 size_t pos = 0;
2630 bool found = false;
2631 for (; pos < len; ++pos) {
2632 if (found) {
2633 break;
2634 }
2635 char c = raw[pos];
2636 if (c == '\\') {
2637 ++pos;
2638 c = raw[pos];
2639 switch (c) {
2640 case '"':
2641 case '\\':
2642 case '/':
2643 case 'b':
2644 case 'f':
2645 case 'n':
2646 case 'r':
2647 case 't':
2648 break;
2649 case 'u':
2650 if ((pos + 4 > len) ||
2651 !std::isxdigit(raw[pos + 1]) ||
2652 !std::isxdigit(raw[pos + 2]) ||
2653 !std::isxdigit(raw[pos + 3]) ||
2654 !std::isxdigit(raw[pos + 4])) {
2655 found = true;
2656 }
2657 break;
2658 default:
2659 found = true;
2660 break;
2661 }
2662 }
2663 }
2664 /* The rule stops on the first " including on \" so add ... in this case */
2665 std::string trailer = "";
2666 if (raw[len - 1] == '\\') {
2667 trailer = "...";
2668 }
2669 driver.error(driver.loc_,
2670 "Bad escape in " + std::string(yytext) + trailer,
2671 pos);
2672}
2673 YY_BREAK
2674case 51:
2676#line 676 "agent_lexer.ll"
2677{
2678 /* Bad string with an open escape at the end */
2679 std::string raw(yytext+1);
2680 driver.error(driver.loc_,
2681 "Overflow escape in " + std::string(yytext),
2682 raw.size() + 1);
2683}
2684 YY_BREAK
2685case 52:
2687#line 684 "agent_lexer.ll"
2688{
2689 /* Bad string with an open unicode escape at the end */
2690 std::string raw(yytext+1);
2691 size_t pos = raw.size() - 1;
2692 for (; pos > 0; --pos) {
2693 char c = raw[pos];
2694 if (c == 'u') {
2695 break;
2696 }
2697 }
2698 driver.error(driver.loc_,
2699 "Overflow unicode escape in " + std::string(yytext),
2700 pos + 1);
2701}
2702 YY_BREAK
2703case 53:
2705#line 699 "agent_lexer.ll"
2706{ return AgentParser::make_LSQUARE_BRACKET(driver.loc_); }
2707 YY_BREAK
2708case 54:
2710#line 700 "agent_lexer.ll"
2711{ return AgentParser::make_RSQUARE_BRACKET(driver.loc_); }
2712 YY_BREAK
2713case 55:
2715#line 701 "agent_lexer.ll"
2716{ return AgentParser::make_LCURLY_BRACKET(driver.loc_); }
2717 YY_BREAK
2718case 56:
2720#line 702 "agent_lexer.ll"
2721{ return AgentParser::make_RCURLY_BRACKET(driver.loc_); }
2722 YY_BREAK
2723case 57:
2725#line 703 "agent_lexer.ll"
2726{ return AgentParser::make_COMMA(driver.loc_); }
2727 YY_BREAK
2728case 58:
2730#line 704 "agent_lexer.ll"
2731{ return AgentParser::make_COLON(driver.loc_); }
2732 YY_BREAK
2733case 59:
2735#line 706 "agent_lexer.ll"
2736{
2737 /* An integer was found. */
2738 std::string tmp(yytext);
2739 int64_t integer = 0;
2740 try {
2741 /* In substring we want to use negative values (e.g. -1).
2742 In enterprise-id we need to use values up to 0xffffffff.
2743 To cover both of those use cases, we need at least
2744 int64_t. */
2745 integer = boost::lexical_cast<int64_t>(tmp);
2746 } catch (const boost::bad_lexical_cast &) {
2747 driver.error(driver.loc_, "Failed to convert " + tmp + " to an integer.");
2748 }
2749
2750 /* The parser needs the string form as double conversion is no lossless */
2751 return AgentParser::make_INTEGER(integer, driver.loc_);
2752}
2753 YY_BREAK
2754case 60:
2756#line 724 "agent_lexer.ll"
2757{
2758 /* A floating point was found. */
2759 std::string tmp(yytext);
2760 double fp = 0.0;
2761 try {
2762 fp = boost::lexical_cast<double>(tmp);
2763 } catch (const boost::bad_lexical_cast &) {
2764 driver.error(driver.loc_, "Failed to convert " + tmp + " to a floating point.");
2765 }
2766
2767 return AgentParser::make_FLOAT(fp, driver.loc_);
2768}
2769 YY_BREAK
2770case 61:
2772#line 737 "agent_lexer.ll"
2773{
2774 string tmp(yytext);
2775 return AgentParser::make_BOOLEAN(tmp == "true", driver.loc_);
2776}
2777 YY_BREAK
2778case 62:
2780#line 742 "agent_lexer.ll"
2781{
2782 return AgentParser::make_NULL_TYPE(driver.loc_);
2783}
2784 YY_BREAK
2785case 63:
2787#line 746 "agent_lexer.ll"
2788driver.error (driver.loc_, "JSON true reserved keyword is lower case only");
2789 YY_BREAK
2790case 64:
2792#line 748 "agent_lexer.ll"
2793driver.error (driver.loc_, "JSON false reserved keyword is lower case only");
2794 YY_BREAK
2795case 65:
2797#line 750 "agent_lexer.ll"
2798driver.error (driver.loc_, "JSON null reserved keyword is lower case only");
2799 YY_BREAK
2800case 66:
2802#line 752 "agent_lexer.ll"
2803driver.error (driver.loc_, "Invalid character: " + std::string(yytext));
2804 YY_BREAK
2805case YY_STATE_EOF(INITIAL):
2806#line 754 "agent_lexer.ll"
2807{
2808 if (driver.states_.empty()) {
2809 return AgentParser::make_END(driver.loc_);
2810 }
2811 driver.loc_ = driver.locs_.back();
2812 driver.locs_.pop_back();
2813 driver.file_ = driver.files_.back();
2814 driver.files_.pop_back();
2815 if (driver.sfile_) {
2816 fclose(driver.sfile_);
2817 driver.sfile_ = 0;
2818 }
2819 if (!driver.sfiles_.empty()) {
2820 driver.sfile_ = driver.sfiles_.back();
2821 driver.sfiles_.pop_back();
2822 }
2823 agent__delete_buffer(YY_CURRENT_BUFFER);
2824 agent__switch_to_buffer(driver.states_.back());
2825 driver.states_.pop_back();
2826
2827 BEGIN(DIR_EXIT);
2828}
2829 YY_BREAK
2830case 67:
2832#line 777 "agent_lexer.ll"
2833ECHO;
2834 YY_BREAK
2835#line 2835 "agent_lexer.cc"
2836
2837 case YY_END_OF_BUFFER:
2838 {
2839 /* Amount of text matched not including the EOB char. */
2840 int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1;
2841
2842 /* Undo the effects of YY_DO_BEFORE_ACTION. */
2843 *yy_cp = (yy_hold_char);
2845
2846 if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
2847 {
2848 /* We're scanning a new file or input source. It's
2849 * possible that this happened because the user
2850 * just pointed yyin at a new source and called
2851 * yylex(). If so, then we have to assure
2852 * consistency between YY_CURRENT_BUFFER and our
2853 * globals. Here is the right place to do so, because
2854 * this is the first action (other than possibly a
2855 * back-up) that will match for the new input source.
2856 */
2857 (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
2858/* %if-c-only */
2859 YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin;
2860/* %endif */
2861/* %if-c++-only */
2862/* %endif */
2863 YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
2864 }
2865
2866 /* Note that here we test for yy_c_buf_p "<=" to the position
2867 * of the first EOB in the buffer, since yy_c_buf_p will
2868 * already have been incremented past the NUL character
2869 * (since all states make transitions on EOB to the
2870 * end-of-buffer state). Contrast this with the test
2871 * in input().
2872 */
2873 if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
2874 { /* This was really a NUL. */
2875 yy_state_type yy_next_state;
2876
2877 (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text;
2878
2879 yy_current_state = yy_get_previous_state( );
2880
2881 /* Okay, we're now positioned to make the NUL
2882 * transition. We couldn't have
2883 * yy_get_previous_state() go ahead and do it
2884 * for us because it doesn't know how to deal
2885 * with the possibility of jamming (and we don't
2886 * want to build jamming into it because then it
2887 * will run more slowly).
2888 */
2889
2890 yy_next_state = yy_try_NUL_trans( yy_current_state );
2891
2893
2894 if ( yy_next_state )
2895 {
2896 /* Consume the NUL. */
2897 yy_cp = ++(yy_c_buf_p);
2898 yy_current_state = yy_next_state;
2899 goto yy_match;
2900 }
2901
2902 else
2903 {
2904/* %% [14.0] code to do back-up for compressed tables and set up yy_cp goes here */
2905 yy_cp = (yy_last_accepting_cpos);
2906 yy_current_state = (yy_last_accepting_state);
2907 goto yy_find_action;
2908 }
2909 }
2910
2911 else switch ( yy_get_next_buffer( ) )
2912 {
2914 {
2915 (yy_did_buffer_switch_on_eof) = 0;
2916
2917 if ( yywrap( ) )
2918 {
2919 /* Note: because we've taken care in
2920 * yy_get_next_buffer() to have set up
2921 * yytext, we can now set up
2922 * yy_c_buf_p so that if some total
2923 * hoser (like flex itself) wants to
2924 * call the scanner after we return the
2925 * YY_NULL, it'll still work - another
2926 * YY_NULL will get returned.
2927 */
2928 (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ;
2929
2931 goto do_action;
2932 }
2933
2934 else
2935 {
2936 if ( ! (yy_did_buffer_switch_on_eof) )
2938 }
2939 break;
2940 }
2941
2943 (yy_c_buf_p) =
2944 (yytext_ptr) + yy_amount_of_matched_text;
2945
2946 yy_current_state = yy_get_previous_state( );
2947
2948 yy_cp = (yy_c_buf_p);
2950 goto yy_match;
2951
2952 case EOB_ACT_LAST_MATCH:
2953 (yy_c_buf_p) =
2954 &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)];
2955
2956 yy_current_state = yy_get_previous_state( );
2957
2958 yy_cp = (yy_c_buf_p);
2960 goto yy_find_action;
2961 }
2962 break;
2963 }
2964
2965 default:
2967 "fatal flex scanner internal error--no action found" );
2968 } /* end of action switch */
2969 } /* end of scanning one token */
2970 } /* end of user's declarations */
2971} /* end of yylex */
2972/* %ok-for-header */
2973
2974/* %if-c++-only */
2975/* %not-for-header */
2976/* %ok-for-header */
2977
2978/* %endif */
2979
2980/* yy_get_next_buffer - try to read in a new buffer
2981 *
2982 * Returns a code representing an action:
2983 * EOB_ACT_LAST_MATCH -
2984 * EOB_ACT_CONTINUE_SCAN - continue scanning from current position
2985 * EOB_ACT_END_OF_FILE - end of file
2986 */
2987/* %if-c-only */
2988static int yy_get_next_buffer (void)
2989/* %endif */
2990/* %if-c++-only */
2991/* %endif */
2992{
2993 char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
2994 char *source = (yytext_ptr);
2995 int number_to_move, i;
2996 int ret_val;
2997
2998 if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
3000 "fatal flex scanner internal error--end of buffer missed" );
3001
3002 if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
3003 { /* Don't try to fill the buffer, so this is an EOF. */
3004 if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 )
3005 {
3006 /* We matched a single character, the EOB, so
3007 * treat this as a final EOF.
3008 */
3009 return EOB_ACT_END_OF_FILE;
3010 }
3011
3012 else
3013 {
3014 /* We matched some text prior to the EOB, first
3015 * process it.
3016 */
3017 return EOB_ACT_LAST_MATCH;
3018 }
3019 }
3020
3021 /* Try to read more data. */
3022
3023 /* First move last chars to start of buffer. */
3024 number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr) - 1);
3025
3026 for ( i = 0; i < number_to_move; ++i )
3027 *(dest++) = *(source++);
3028
3029 if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
3030 /* don't do the read, it's not guaranteed to return an EOF,
3031 * just force an EOF
3032 */
3033 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0;
3034
3035 else
3036 {
3037 int num_to_read =
3038 YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
3039
3040 while ( num_to_read <= 0 )
3041 { /* Not enough room in the buffer - grow it. */
3042
3043 /* just a shorter name for the current buffer */
3045
3046 int yy_c_buf_p_offset =
3047 (int) ((yy_c_buf_p) - b->yy_ch_buf);
3048
3049 if ( b->yy_is_our_buffer )
3050 {
3051 int new_size = b->yy_buf_size * 2;
3052
3053 if ( new_size <= 0 )
3054 b->yy_buf_size += b->yy_buf_size / 8;
3055 else
3056 b->yy_buf_size *= 2;
3057
3058 b->yy_ch_buf = (char *)
3059 /* Include room in for 2 EOB chars. */
3060 yyrealloc( (void *) b->yy_ch_buf,
3061 (yy_size_t) (b->yy_buf_size + 2) );
3062 }
3063 else
3064 /* Can't grow it, we don't own it. */
3065 b->yy_ch_buf = NULL;
3066
3067 if ( ! b->yy_ch_buf )
3069 "fatal error - scanner input buffer overflow" );
3070
3071 (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset];
3072
3073 num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
3074 number_to_move - 1;
3075
3076 }
3077
3078 if ( num_to_read > YY_READ_BUF_SIZE )
3079 num_to_read = YY_READ_BUF_SIZE;
3080
3081 /* Read in more data. */
3082 YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
3083 (yy_n_chars), num_to_read );
3084
3085 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
3086 }
3087
3088 if ( (yy_n_chars) == 0 )
3089 {
3090 if ( number_to_move == YY_MORE_ADJ )
3091 {
3092 ret_val = EOB_ACT_END_OF_FILE;
3093 yyrestart( yyin );
3094 }
3095
3096 else
3097 {
3098 ret_val = EOB_ACT_LAST_MATCH;
3099 YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
3101 }
3102 }
3103
3104 else
3105 ret_val = EOB_ACT_CONTINUE_SCAN;
3106
3107 if (((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
3108 /* Extend the array by 50%, plus the number we really need. */
3109 int new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
3110 YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc(
3111 (void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf, (yy_size_t) new_size );
3112 if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
3113 YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
3114 /* "- 2" to take care of EOB's */
3115 YY_CURRENT_BUFFER_LVALUE->yy_buf_size = (int) (new_size - 2);
3116 }
3117
3118 (yy_n_chars) += number_to_move;
3119 YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
3120 YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
3121
3122 (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
3123
3124 return ret_val;
3125}
3126
3127/* yy_get_previous_state - get the state just before the EOB char was reached */
3128
3129/* %if-c-only */
3130/* %not-for-header */
3131 static yy_state_type yy_get_previous_state (void)
3132/* %endif */
3133/* %if-c++-only */
3134/* %endif */
3135{
3136 yy_state_type yy_current_state;
3137 char *yy_cp;
3138
3139/* %% [15.0] code to get the start state into yy_current_state goes here */
3140 yy_current_state = (yy_start);
3141
3142 for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
3143 {
3144/* %% [16.0] code to find the next state goes here */
3145 YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
3146 if ( yy_accept[yy_current_state] )
3147 {
3148 (yy_last_accepting_state) = yy_current_state;
3149 (yy_last_accepting_cpos) = yy_cp;
3150 }
3151 while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
3152 {
3153 yy_current_state = (int) yy_def[yy_current_state];
3154 if ( yy_current_state >= 388 )
3155 yy_c = yy_meta[yy_c];
3156 }
3157 yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
3158 }
3159
3160 return yy_current_state;
3161}
3162
3163/* yy_try_NUL_trans - try to make a transition on the NUL character
3164 *
3165 * synopsis
3166 * next_state = yy_try_NUL_trans( current_state );
3167 */
3168/* %if-c-only */
3169 static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state )
3170/* %endif */
3171/* %if-c++-only */
3172/* %endif */
3173{
3174 int yy_is_jam;
3175 /* %% [17.0] code to find the next state, and perhaps do backing up, goes here */
3176 char *yy_cp = (yy_c_buf_p);
3177
3178 YY_CHAR yy_c = 1;
3179 if ( yy_accept[yy_current_state] )
3180 {
3181 (yy_last_accepting_state) = yy_current_state;
3182 (yy_last_accepting_cpos) = yy_cp;
3183 }
3184 while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
3185 {
3186 yy_current_state = (int) yy_def[yy_current_state];
3187 if ( yy_current_state >= 388 )
3188 yy_c = yy_meta[yy_c];
3189 }
3190 yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
3191 yy_is_jam = (yy_current_state == 387);
3192
3193 return yy_is_jam ? 0 : yy_current_state;
3194}
3195
3196#ifndef YY_NO_UNPUT
3197/* %if-c-only */
3198
3199/* %endif */
3200#endif
3201
3202/* %if-c-only */
3203#ifndef YY_NO_INPUT
3204#ifdef __cplusplus
3205 static int yyinput (void)
3206#else
3207 static int input (void)
3208#endif
3209
3210/* %endif */
3211/* %if-c++-only */
3212/* %endif */
3213{
3214 int c;
3215
3216 *(yy_c_buf_p) = (yy_hold_char);
3217
3218 if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR )
3219 {
3220 /* yy_c_buf_p now points to the character we want to return.
3221 * If this occurs *before* the EOB characters, then it's a
3222 * valid NUL; if not, then we've hit the end of the buffer.
3223 */
3224 if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
3225 /* This was really a NUL. */
3226 *(yy_c_buf_p) = '\0';
3227
3228 else
3229 { /* need more input */
3230 int offset = (int) ((yy_c_buf_p) - (yytext_ptr));
3231 ++(yy_c_buf_p);
3232
3233 switch ( yy_get_next_buffer( ) )
3234 {
3235 case EOB_ACT_LAST_MATCH:
3236 /* This happens because yy_g_n_b()
3237 * sees that we've accumulated a
3238 * token and flags that we need to
3239 * try matching the token before
3240 * proceeding. But for input(),
3241 * there's no matching to consider.
3242 * So convert the EOB_ACT_LAST_MATCH
3243 * to EOB_ACT_END_OF_FILE.
3244 */
3245
3246 /* Reset buffer status. */
3247 yyrestart( yyin );
3248
3249 /*FALLTHROUGH*/
3250
3252 {
3253 if ( yywrap( ) )
3254 return 0;
3255
3256 if ( ! (yy_did_buffer_switch_on_eof) )
3258#ifdef __cplusplus
3259 return yyinput();
3260#else
3261 return input();
3262#endif
3263 }
3264
3266 (yy_c_buf_p) = (yytext_ptr) + offset;
3267 break;
3268 }
3269 }
3270 }
3271
3272 c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */
3273 *(yy_c_buf_p) = '\0'; /* preserve yytext */
3274 (yy_hold_char) = *++(yy_c_buf_p);
3275
3276/* %% [19.0] update BOL and yylineno */
3277
3278 return c;
3279}
3280/* %if-c-only */
3281#endif /* ifndef YY_NO_INPUT */
3282/* %endif */
3283
3289/* %if-c-only */
3290 void yyrestart (FILE * input_file )
3291/* %endif */
3292/* %if-c++-only */
3293/* %endif */
3294{
3295
3296 if ( ! YY_CURRENT_BUFFER ){
3300 }
3301
3302 yy_init_buffer( YY_CURRENT_BUFFER, input_file );
3304}
3305
3306/* %if-c++-only */
3307/* %endif */
3308
3313/* %if-c-only */
3315/* %endif */
3316/* %if-c++-only */
3317/* %endif */
3318{
3319
3320 /* TODO. We should be able to replace this entire function body
3321 * with
3322 * yypop_buffer_state();
3323 * yypush_buffer_state(new_buffer);
3324 */
3326 if ( YY_CURRENT_BUFFER == new_buffer )
3327 return;
3328
3329 if ( YY_CURRENT_BUFFER )
3330 {
3331 /* Flush out information for old buffer. */
3332 *(yy_c_buf_p) = (yy_hold_char);
3333 YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
3334 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
3335 }
3336
3337 YY_CURRENT_BUFFER_LVALUE = new_buffer;
3339
3340 /* We don't actually know whether we did this switch during
3341 * EOF (yywrap()) processing, but the only time this flag
3342 * is looked at is after yywrap() is called, so it's safe
3343 * to go ahead and always set it.
3344 */
3345 (yy_did_buffer_switch_on_eof) = 1;
3346}
3347
3348/* %if-c-only */
3349static void yy_load_buffer_state (void)
3350/* %endif */
3351/* %if-c++-only */
3352/* %endif */
3353{
3354 (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
3355 (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
3356/* %if-c-only */
3357 yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
3358/* %endif */
3359/* %if-c++-only */
3360/* %endif */
3361 (yy_hold_char) = *(yy_c_buf_p);
3362}
3363
3370/* %if-c-only */
3371 YY_BUFFER_STATE yy_create_buffer (FILE * file, int size )
3372/* %endif */
3373/* %if-c++-only */
3374/* %endif */
3375{
3377
3378 b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) );
3379 if ( ! b )
3380 YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
3381
3382 b->yy_buf_size = size;
3383
3384 /* yy_ch_buf has to be 2 characters longer than the size given because
3385 * we need to put in 2 end-of-buffer characters.
3386 */
3387 b->yy_ch_buf = (char *) yyalloc( (yy_size_t) (b->yy_buf_size + 2) );
3388 if ( ! b->yy_ch_buf )
3389 YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
3390
3391 b->yy_is_our_buffer = 1;
3392
3393 yy_init_buffer( b, file );
3394
3395 return b;
3396}
3397
3398/* %if-c++-only */
3399/* %endif */
3400
3405/* %if-c-only */
3407/* %endif */
3408/* %if-c++-only */
3409/* %endif */
3410{
3411
3412 if ( ! b )
3413 return;
3414
3415 if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
3417
3418 if ( b->yy_is_our_buffer )
3419 yyfree( (void *) b->yy_ch_buf );
3420
3421 yyfree( (void *) b );
3422}
3423
3424/* Initializes or reinitializes a buffer.
3425 * This function is sometimes called more than once on the same buffer,
3426 * such as during a yyrestart() or at EOF.
3427 */
3428/* %if-c-only */
3429 static void yy_init_buffer (YY_BUFFER_STATE b, FILE * file )
3430/* %endif */
3431/* %if-c++-only */
3432/* %endif */
3433
3434{
3435 int oerrno = errno;
3436
3437 yy_flush_buffer( b );
3438
3439/* %if-c-only */
3440 b->yy_input_file = file;
3441/* %endif */
3442/* %if-c++-only */
3443/* %endif */
3444 b->yy_fill_buffer = 1;
3445
3446 /* If b is the current buffer, then yy_init_buffer was _probably_
3447 * called from yyrestart() or through yy_get_next_buffer.
3448 * In that case, we don't want to reset the lineno or column.
3449 */
3450 if (b != YY_CURRENT_BUFFER){
3451 b->yy_bs_lineno = 1;
3452 b->yy_bs_column = 0;
3453 }
3454
3455/* %if-c-only */
3456
3457 b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
3458
3459/* %endif */
3460/* %if-c++-only */
3461/* %endif */
3462 errno = oerrno;
3463}
3464
3469/* %if-c-only */
3471/* %endif */
3472/* %if-c++-only */
3473/* %endif */
3474{
3475 if ( ! b )
3476 return;
3477
3478 b->yy_n_chars = 0;
3479
3480 /* We always need two end-of-buffer characters. The first causes
3481 * a transition to the end-of-buffer state. The second causes
3482 * a jam in that state.
3483 */
3486
3487 b->yy_buf_pos = &b->yy_ch_buf[0];
3488
3489 b->yy_at_bol = 1;
3491
3492 if ( b == YY_CURRENT_BUFFER )
3494}
3495
3496/* %if-c-or-c++ */
3503/* %if-c-only */
3505/* %endif */
3506/* %if-c++-only */
3507/* %endif */
3508{
3509 if (new_buffer == NULL)
3510 return;
3511
3513
3514 /* This block is copied from yy_switch_to_buffer. */
3515 if ( YY_CURRENT_BUFFER )
3516 {
3517 /* Flush out information for old buffer. */
3518 *(yy_c_buf_p) = (yy_hold_char);
3519 YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
3520 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
3521 }
3522
3523 /* Only push if top exists. Otherwise, replace top. */
3525 (yy_buffer_stack_top)++;
3526 YY_CURRENT_BUFFER_LVALUE = new_buffer;
3527
3528 /* copied from yy_switch_to_buffer. */
3530 (yy_did_buffer_switch_on_eof) = 1;
3531}
3532/* %endif */
3533
3534/* %if-c-or-c++ */
3539/* %if-c-only */
3540void yypop_buffer_state (void)
3541/* %endif */
3542/* %if-c++-only */
3543/* %endif */
3544{
3545 if (!YY_CURRENT_BUFFER)
3546 return;
3547
3550 if ((yy_buffer_stack_top) > 0)
3551 --(yy_buffer_stack_top);
3552
3553 if (YY_CURRENT_BUFFER) {
3555 (yy_did_buffer_switch_on_eof) = 1;
3556 }
3557}
3558/* %endif */
3559
3560/* %if-c-or-c++ */
3561/* Allocates the stack if it does not exist.
3562 * Guarantees space for at least one push.
3563 */
3564/* %if-c-only */
3565static void yyensure_buffer_stack (void)
3566/* %endif */
3567/* %if-c++-only */
3568/* %endif */
3569{
3570 yy_size_t num_to_alloc;
3571
3572 if (!(yy_buffer_stack)) {
3573
3574 /* First allocation is just for 2 elements, since we don't know if this
3575 * scanner will even need a stack. We use 2 instead of 1 to avoid an
3576 * immediate realloc on the next call.
3577 */
3578 num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */
3579 (yy_buffer_stack) = (struct yy_buffer_state**)yyalloc
3580 (num_to_alloc * sizeof(struct yy_buffer_state*)
3581 );
3582 if ( ! (yy_buffer_stack) )
3583 YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
3584
3585 memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
3586
3587 (yy_buffer_stack_max) = num_to_alloc;
3588 (yy_buffer_stack_top) = 0;
3589 return;
3590 }
3591
3592 if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
3593
3594 /* Increase the buffer to prepare for a possible push. */
3595 yy_size_t grow_size = 8 /* arbitrary grow size */;
3596
3597 num_to_alloc = (yy_buffer_stack_max) + grow_size;
3598 (yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc
3599 ((yy_buffer_stack),
3600 num_to_alloc * sizeof(struct yy_buffer_state*)
3601 );
3602 if ( ! (yy_buffer_stack) )
3603 YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
3604
3605 /* zero only the new slots.*/
3606 memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
3607 (yy_buffer_stack_max) = num_to_alloc;
3608 }
3609}
3610/* %endif */
3611
3612/* %if-c-only */
3620{
3622
3623 if ( size < 2 ||
3624 base[size-2] != YY_END_OF_BUFFER_CHAR ||
3625 base[size-1] != YY_END_OF_BUFFER_CHAR )
3626 /* They forgot to leave room for the EOB's. */
3627 return NULL;
3628
3629 b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) );
3630 if ( ! b )
3631 YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
3632
3633 b->yy_buf_size = (int) (size - 2); /* "- 2" to take care of EOB's */
3634 b->yy_buf_pos = b->yy_ch_buf = base;
3635 b->yy_is_our_buffer = 0;
3636 b->yy_input_file = NULL;
3637 b->yy_n_chars = b->yy_buf_size;
3638 b->yy_is_interactive = 0;
3639 b->yy_at_bol = 1;
3640 b->yy_fill_buffer = 0;
3642
3644
3645 return b;
3646}
3647/* %endif */
3648
3649/* %if-c-only */
3658YY_BUFFER_STATE yy_scan_string (const char * yystr )
3659{
3660
3661 return yy_scan_bytes( yystr, (int) strlen(yystr) );
3662}
3663/* %endif */
3664
3665/* %if-c-only */
3673YY_BUFFER_STATE yy_scan_bytes (const char * yybytes, int _yybytes_len )
3674{
3676 char *buf;
3677 yy_size_t n;
3678 int i;
3679
3680 /* Get memory for full buffer, including space for trailing EOB's. */
3681 n = (yy_size_t) (_yybytes_len + 2);
3682 buf = (char *) yyalloc( n );
3683 if ( ! buf )
3684 YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
3685
3686 for ( i = 0; i < _yybytes_len; ++i )
3687 buf[i] = yybytes[i];
3688
3689 buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
3690
3691 b = yy_scan_buffer( buf, n );
3692 if ( ! b )
3693 YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
3694
3695 /* It's okay to grow etc. this buffer, and we should throw it
3696 * away when we're done.
3697 */
3698 b->yy_is_our_buffer = 1;
3699
3700 return b;
3701}
3702/* %endif */
3703
3704#ifndef YY_EXIT_FAILURE
3705#define YY_EXIT_FAILURE 2
3706#endif
3707
3708/* %if-c-only */
3709static void yynoreturn yy_fatal_error (const char* msg )
3710{
3711 fprintf( stderr, "%s\n", msg );
3712 exit( YY_EXIT_FAILURE );
3713}
3714/* %endif */
3715/* %if-c++-only */
3716/* %endif */
3717
3718/* Redefine yyless() so it works in section 3 code. */
3719
3720#undef yyless
3721#define yyless(n) \
3722 do \
3723 { \
3724 /* Undo effects of setting up yytext. */ \
3725 int yyless_macro_arg = (n); \
3726 YY_LESS_LINENO(yyless_macro_arg);\
3727 yytext[yyleng] = (yy_hold_char); \
3728 (yy_c_buf_p) = yytext + yyless_macro_arg; \
3729 (yy_hold_char) = *(yy_c_buf_p); \
3730 *(yy_c_buf_p) = '\0'; \
3731 yyleng = yyless_macro_arg; \
3732 } \
3733 while ( 0 )
3734
3735/* Accessor methods (get/set functions) to struct members. */
3736
3737/* %if-c-only */
3738/* %if-reentrant */
3739/* %endif */
3740
3744int yyget_lineno (void)
3745{
3746
3747 return yylineno;
3748}
3749
3753FILE *yyget_in (void)
3754{
3755 return yyin;
3756}
3757
3761FILE *yyget_out (void)
3762{
3763 return yyout;
3764}
3765
3769int yyget_leng (void)
3770{
3771 return yyleng;
3772}
3773
3778char *yyget_text (void)
3779{
3780 return yytext;
3781}
3782
3783/* %if-reentrant */
3784/* %endif */
3785
3790void yyset_lineno (int _line_number )
3791{
3792
3793 yylineno = _line_number;
3794}
3795
3802void yyset_in (FILE * _in_str )
3803{
3804 yyin = _in_str ;
3805}
3806
3807void yyset_out (FILE * _out_str )
3808{
3809 yyout = _out_str ;
3810}
3811
3812int yyget_debug (void)
3813{
3814 return yy_flex_debug;
3815}
3816
3817void yyset_debug (int _bdebug )
3818{
3819 yy_flex_debug = _bdebug ;
3820}
3821
3822/* %endif */
3823
3824/* %if-reentrant */
3825/* %if-bison-bridge */
3826/* %endif */
3827/* %endif if-c-only */
3828
3829/* %if-c-only */
3830static int yy_init_globals (void)
3831{
3832 /* Initialization is the same as for the non-reentrant scanner.
3833 * This function is called from yylex_destroy(), so don't allocate here.
3834 */
3835
3836 (yy_buffer_stack) = NULL;
3837 (yy_buffer_stack_top) = 0;
3838 (yy_buffer_stack_max) = 0;
3839 (yy_c_buf_p) = NULL;
3840 (yy_init) = 0;
3841 (yy_start) = 0;
3842
3843/* Defined in main.c */
3844#ifdef YY_STDINIT
3845 yyin = stdin;
3846 yyout = stdout;
3847#else
3848 yyin = NULL;
3849 yyout = NULL;
3850#endif
3851
3852 /* For future reference: Set errno on error, since we are called by
3853 * yylex_init()
3854 */
3855 return 0;
3856}
3857/* %endif */
3858
3859/* %if-c-only SNIP! this currently causes conflicts with the c++ scanner */
3860/* yylex_destroy is for both reentrant and non-reentrant scanners. */
3861int yylex_destroy (void)
3862{
3863
3864 /* Pop the buffer stack, destroying each element. */
3865 while(YY_CURRENT_BUFFER){
3869 }
3870
3871 /* Destroy the stack itself. */
3872 yyfree((yy_buffer_stack) );
3873 (yy_buffer_stack) = NULL;
3874
3875 /* Reset the globals. This is important in a non-reentrant scanner so the next time
3876 * yylex() is called, initialization will occur. */
3877 yy_init_globals( );
3878
3879/* %if-reentrant */
3880/* %endif */
3881 return 0;
3882}
3883/* %endif */
3884
3885/*
3886 * Internal utility routines.
3887 */
3888
3889#ifndef yytext_ptr
3890static void yy_flex_strncpy (char* s1, const char * s2, int n )
3891{
3892
3893 int i;
3894 for ( i = 0; i < n; ++i )
3895 s1[i] = s2[i];
3896}
3897#endif
3898
3899#ifdef YY_NEED_STRLEN
3900static int yy_flex_strlen (const char * s )
3901{
3902 int n;
3903 for ( n = 0; s[n]; ++n )
3904 ;
3905
3906 return n;
3907}
3908#endif
3909
3910void *yyalloc (yy_size_t size )
3911{
3912 return malloc(size);
3913}
3914
3915void *yyrealloc (void * ptr, yy_size_t size )
3916{
3917
3918 /* The cast to (char *) in the following accommodates both
3919 * implementations that use char* generic pointers, and those
3920 * that use void* generic pointers. It works with the latter
3921 * because both ANSI C and C++ allow castless assignment from
3922 * any pointer type to void*, and deal with argument conversions
3923 * as though doing an assignment.
3924 */
3925 return realloc(ptr, size);
3926}
3927
3928void yyfree (void * ptr )
3929{
3930 free( (char *) ptr ); /* see yyrealloc() for (char *) cast */
3931}
3932
3933/* %if-tables-serialization definitions */
3934/* %define-yytables The name for this specific scanner's tables. */
3935#define YYTABLES_NAME "yytables"
3936/* %endif */
3937
3938/* %ok-for-header */
3939
3940#line 777 "agent_lexer.ll"
3941
3942
3943using namespace isc::dhcp;
3944
3945void
3946ParserContext::scanStringBegin(const std::string& str, ParserType parser_type)
3947{
3948 start_token_flag = true;
3949 start_token_value = parser_type;
3950
3951 file_ = "<string>";
3952 sfile_ = 0;
3953 loc_.initialize(&file_);
3954 yy_flex_debug = trace_scanning_;
3955 YY_BUFFER_STATE buffer;
3956 buffer = agent__scan_bytes(str.c_str(), str.size());
3957 if (!buffer) {
3958 fatal("cannot scan string");
3959 /* fatal() throws an exception so this can't be reached */
3960 }
3961}
3962
3963void
3965 const std::string& filename,
3966 ParserType parser_type)
3967{
3968 start_token_flag = true;
3969 start_token_value = parser_type;
3970
3971 file_ = filename;
3972 sfile_ = f;
3973 loc_.initialize(&file_);
3974 yy_flex_debug = trace_scanning_;
3975 YY_BUFFER_STATE buffer;
3976
3977 /* See agent_lexer.cc header for available definitions */
3978 buffer = agent__create_buffer(f, 65536 /*buffer size*/);
3979 if (!buffer) {
3980 fatal("cannot scan file " + filename);
3981 }
3982 agent__switch_to_buffer(buffer);
3983}
3984
3985void
3987 if (sfile_)
3988 fclose(sfile_);
3989 sfile_ = 0;
3990 static_cast<void>(agent_lex_destroy());
3991 /* Close files */
3992 while (!sfiles_.empty()) {
3993 FILE* f = sfiles_.back();
3994 if (f) {
3995 fclose(f);
3996 }
3997 sfiles_.pop_back();
3998 }
3999 /* Delete states */
4000 while (!states_.empty()) {
4001 agent__delete_buffer(states_.back());
4002 states_.pop_back();
4003 }
4004}
4005
4006void
4007ParserContext::includeFile(const std::string& filename) {
4008 if (states_.size() > 10) {
4009 fatal("Too many nested include.");
4010 }
4011
4012 FILE* f = fopen(filename.c_str(), "r");
4013 if (!f) {
4014 fatal("Can't open include file " + filename);
4015 }
4016 if (sfile_) {
4017 sfiles_.push_back(sfile_);
4018 }
4019 sfile_ = f;
4020 states_.push_back(YY_CURRENT_BUFFER);
4021 YY_BUFFER_STATE buffer;
4022 buffer = agent__create_buffer(f, 65536 /*buffer size*/);
4023 if (!buffer) {
4024 fatal( "Can't scan include file " + filename);
4025 }
4026 agent__switch_to_buffer(buffer);
4027 files_.push_back(file_);
4028 file_ = filename;
4029 locs_.push_back(loc_);
4030 loc_.initialize(&file_);
4031
4032 BEGIN(INITIAL);
4033}
4034
4035namespace {
4037class Dummy {
4038 /* cppcheck-suppress unusedPrivateFunction */
4039 void dummy() { yy_fatal_error("Fix me: how to disable its definition?"); }
4040};
4041}
4042#endif /* !__clang_analyzer__ */
4043
#define yylex_destroy
Definition: agent_lexer.cc:152
#define YY_NEW_FILE
Definition: agent_lexer.cc:424
#define yyget_extra
Definition: agent_lexer.cc:170
#define yyset_extra
Definition: agent_lexer.cc:176
#define yyget_in
Get the input stream.
Definition: agent_lexer.cc:182
unsigned char flex_uint8_t
Definition: agent_lexer.cc:335
#define yyset_lineno
Definition: agent_lexer.cc:224
#define COMMENT
#define yyleng
Definition: agent_lexer.cc:26
#define yyrestart
Definition: agent_lexer.cc:30
#define yyset_debug
Definition: agent_lexer.cc:164
#define YY_EXTRA_TYPE
#define DIR_INCLUDE
#define yyout
Definition: agent_lexer.cc:29
short int flex_int16_t
Definition: agent_lexer.cc:333
#define yytext
Definition: agent_lexer.cc:31
unsigned int flex_uint32_t
Definition: agent_lexer.cc:337
#define yyget_lineno
Get the current line number.
Definition: agent_lexer.cc:218
#define yy_scan_bytes
Definition: agent_lexer.cc:16
#define yylex
Definition: agent_lexer.cc:27
#define YY_BREAK
#define yynoreturn
Definition: agent_lexer.cc:388
int yy_act
#define yypush_buffer_state
Definition: agent_lexer.cc:21
struct yy_buffer_state * YY_BUFFER_STATE
Definition: agent_lexer.cc:446
#define yyfree
Definition: agent_lexer.cc:35
#define YY_BUFFER_NEW
Definition: agent_lexer.cc:539
#define yyget_out
Get the output stream.
Definition: agent_lexer.cc:194
#define YY_RESTORE_YY_MORE_OFFSET
#define yywrap
#define yylineno
Definition: agent_lexer.cc:28
#define YY_BUFFER_NORMAL
Definition: agent_lexer.cc:540
char * yy_cp
#define yypop_buffer_state
Removes and deletes the top of the stack, if present.
Definition: agent_lexer.cc:22
#define yy_scan_buffer
Definition: agent_lexer.cc:14
#define YY_MORE_ADJ
#define YY_RULE_SETUP
#define yy_scan_string
Definition: agent_lexer.cc:15
#define yy_flex_debug
Definition: agent_lexer.cc:24
#define DIR_EXIT
#define yytext_ptr
Definition: agent_lexer.cc:669
signed char flex_int8_t
Definition: agent_lexer.cc:332
#define EOB_ACT_END_OF_FILE
Definition: agent_lexer.cc:465
#define yyalloc
Definition: agent_lexer.cc:33
#define YY_CURRENT_BUFFER_LVALUE
Definition: agent_lexer.cc:581
#define yyget_leng
Get the length of the current token.
Definition: agent_lexer.cc:206
#define yyget_debug
Definition: agent_lexer.cc:158
int flex_int32_t
Definition: agent_lexer.cc:334
#define yyin
Definition: agent_lexer.cc:25
#define YY_START
Definition: agent_lexer.cc:419
#define yyensure_buffer_stack
Definition: agent_lexer.cc:23
#define yy_switch_to_buffer
Definition: agent_lexer.cc:20
int yy_state_type
Definition: agent_lexer.cc:660
#define YY_CURRENT_BUFFER
Definition: agent_lexer.cc:575
#define yy_init_buffer
Definition: agent_lexer.cc:17
#define INITIAL
char * yy_bp
#define YY_READ_BUF_SIZE
#define YY_INPUT(buf, result, max_size)
#define ECHO
#define yy_flush_buffer
Definition: agent_lexer.cc:18
#define yyrealloc
Definition: agent_lexer.cc:34
#define YY_END_OF_BUFFER
Definition: agent_lexer.cc:695
#define YY_STATE_EOF(state)
Definition: agent_lexer.cc:422
#define BEGIN
Definition: agent_lexer.cc:414
#define YY_END_OF_BUFFER_CHAR
Definition: agent_lexer.cc:425
#define YY_FATAL_ERROR(msg)
unsigned short int flex_uint16_t
Definition: agent_lexer.cc:336
#define yy_create_buffer
Definition: agent_lexer.cc:12
flex_uint8_t YY_CHAR
Definition: agent_lexer.cc:656
#define YY_DO_BEFORE_ACTION
Definition: agent_lexer.cc:685
#define yyget_text
Get the current token.
Definition: agent_lexer.cc:212
#define yy_delete_buffer
Definition: agent_lexer.cc:13
#define EOB_ACT_LAST_MATCH
Definition: agent_lexer.cc:466
size_t yy_size_t
Definition: agent_lexer.cc:451
#define YY_BUFFER_EOF_PENDING
Definition: agent_lexer.cc:551
#define yyset_out
Definition: agent_lexer.cc:200
#define EOB_ACT_CONTINUE_SCAN
Definition: agent_lexer.cc:464
#define YY_DECL
#define YY_BUF_SIZE
Definition: agent_lexer.cc:436
#define YY_EXIT_FAILURE
#define YY_SC_TO_UI(c)
Definition: agent_lexer.cc:400
#define yy_load_buffer_state
Definition: agent_lexer.cc:19
#define DIR_ENTER
#define yyset_in
Definition: agent_lexer.cc:188
Evaluation error exception raised when trying to parse.
static symbol_type make_START_AGENT(const location_type &l)
static symbol_type make_START_JSON(const location_type &l)
static symbol_type make_START_SUB_AGENT(const location_type &l)
std::vector< isc::agent::location > locs_
Location stack.
std::vector< std::string > files_
File name stack.
void scanFileBegin(FILE *f, const std::string &filename, ParserType type)
Method called before scanning starts on a file.
static void fatal(const std::string &what)
Fatal error handler.
std::vector< struct yy_buffer_state * > states_
Lexer state stack.
isc::agent::location loc_
Location of the current token.
std::string file_
File name.
void includeFile(const std::string &filename)
Divert input to an include file.
std::vector< FILE * > sfiles_
sFile (aka FILE) stack
ParserType
Defines currently supported scopes.
FILE * sfile_
sFile (aka FILE)
void scanEnd()
Method called after the last tokens are scanned.
#define isc_throw(type, stream)
A shortcut macro to insert known values into exception arguments.
Defines the logger used by the top-level component of kea-lfc.
int yy_bs_column
The column count.
Definition: agent_lexer.cc:530
FILE * yy_input_file
Definition: agent_lexer.cc:491
int yy_bs_lineno
The line count.
Definition: agent_lexer.cc:529
flex_int32_t yy_verify
Definition: agent_lexer.cc:700
flex_int32_t yy_nxt
Definition: agent_lexer.cc:701