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