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