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