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