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