]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[#150,!385] regen bison
authorFrancis Dupont <fdupont@isc.org>
Fri, 14 Jun 2019 18:42:31 +0000 (18:42 +0000)
committerTomek Mrugalski <tomasz@isc.org>
Wed, 14 Aug 2019 08:13:02 +0000 (10:13 +0200)
src/lib/eval/lexer.cc
src/lib/eval/location.hh
src/lib/eval/parser.cc
src/lib/eval/parser.h
src/lib/eval/position.hh
src/lib/eval/stack.hh

index d73a278ef6ba83c6c44f4df30c48360a8db2c00a..898fb5f304a29c1cc35e72d9a9c624d113fd46e3 100644 (file)
@@ -1,27 +1,22 @@
-#line 1 "lexer.cc"
+#line 2 "lexer.cc"
 
-#line 3 "lexer.cc"
+#line 4 "lexer.cc"
 
 #define  YY_INT_ALIGNED short int
 
 /* A lexical scanner generated by flex */
 
 /* %not-for-header */
+
 /* %if-c-only */
 /* %if-not-reentrant */
 #define yy_create_buffer eval_create_buffer
 #define yy_delete_buffer eval_delete_buffer
-#define yy_scan_buffer eval_scan_buffer
-#define yy_scan_string eval_scan_string
-#define yy_scan_bytes eval_scan_bytes
+#define yy_flex_debug eval_flex_debug
 #define yy_init_buffer eval_init_buffer
 #define yy_flush_buffer eval_flush_buffer
 #define yy_load_buffer_state eval_load_buffer_state
 #define yy_switch_to_buffer eval_switch_to_buffer
-#define yypush_buffer_state evalpush_buffer_state
-#define yypop_buffer_state evalpop_buffer_state
-#define yyensure_buffer_stack evalensure_buffer_stack
-#define yy_flex_debug eval_flex_debug
 #define yyin evalin
 #define yyleng evalleng
 #define yylex evallex
@@ -40,8 +35,8 @@
 
 #define FLEX_SCANNER
 #define YY_FLEX_MAJOR_VERSION 2
-#define YY_FLEX_MINOR_VERSION 6
-#define YY_FLEX_SUBMINOR_VERSION 4
+#define YY_FLEX_MINOR_VERSION 5
+#define YY_FLEX_SUBMINOR_VERSION 35
 #if YY_FLEX_SUBMINOR_VERSION > 0
 #define FLEX_BETA
 #endif
 /* %endif */
 
 /* %if-c-only */
-#ifdef yy_create_buffer
-#define eval_create_buffer_ALREADY_DEFINED
-#else
-#define yy_create_buffer eval_create_buffer
-#endif
-
-#ifdef yy_delete_buffer
-#define eval_delete_buffer_ALREADY_DEFINED
-#else
-#define yy_delete_buffer eval_delete_buffer
-#endif
-
-#ifdef yy_scan_buffer
-#define eval_scan_buffer_ALREADY_DEFINED
-#else
-#define yy_scan_buffer eval_scan_buffer
-#endif
-
-#ifdef yy_scan_string
-#define eval_scan_string_ALREADY_DEFINED
-#else
-#define yy_scan_string eval_scan_string
-#endif
-
-#ifdef yy_scan_bytes
-#define eval_scan_bytes_ALREADY_DEFINED
-#else
-#define yy_scan_bytes eval_scan_bytes
-#endif
-
-#ifdef yy_init_buffer
-#define eval_init_buffer_ALREADY_DEFINED
-#else
-#define yy_init_buffer eval_init_buffer
-#endif
-
-#ifdef yy_flush_buffer
-#define eval_flush_buffer_ALREADY_DEFINED
-#else
-#define yy_flush_buffer eval_flush_buffer
-#endif
-
-#ifdef yy_load_buffer_state
-#define eval_load_buffer_state_ALREADY_DEFINED
-#else
-#define yy_load_buffer_state eval_load_buffer_state
-#endif
-
-#ifdef yy_switch_to_buffer
-#define eval_switch_to_buffer_ALREADY_DEFINED
-#else
-#define yy_switch_to_buffer eval_switch_to_buffer
-#endif
-
-#ifdef yypush_buffer_state
-#define evalpush_buffer_state_ALREADY_DEFINED
-#else
-#define yypush_buffer_state evalpush_buffer_state
-#endif
-
-#ifdef yypop_buffer_state
-#define evalpop_buffer_state_ALREADY_DEFINED
-#else
-#define yypop_buffer_state evalpop_buffer_state
-#endif
-
-#ifdef yyensure_buffer_stack
-#define evalensure_buffer_stack_ALREADY_DEFINED
-#else
-#define yyensure_buffer_stack evalensure_buffer_stack
-#endif
-
-#ifdef yylex
-#define evallex_ALREADY_DEFINED
-#else
-#define yylex evallex
-#endif
-
-#ifdef yyrestart
-#define evalrestart_ALREADY_DEFINED
-#else
-#define yyrestart evalrestart
-#endif
-
-#ifdef yylex_init
-#define evallex_init_ALREADY_DEFINED
-#else
-#define yylex_init evallex_init
-#endif
-
-#ifdef yylex_init_extra
-#define evallex_init_extra_ALREADY_DEFINED
-#else
-#define yylex_init_extra evallex_init_extra
-#endif
-
-#ifdef yylex_destroy
-#define evallex_destroy_ALREADY_DEFINED
-#else
-#define yylex_destroy evallex_destroy
-#endif
-
-#ifdef yyget_debug
-#define evalget_debug_ALREADY_DEFINED
-#else
-#define yyget_debug evalget_debug
-#endif
-
-#ifdef yyset_debug
-#define evalset_debug_ALREADY_DEFINED
-#else
-#define yyset_debug evalset_debug
-#endif
-
-#ifdef yyget_extra
-#define evalget_extra_ALREADY_DEFINED
-#else
-#define yyget_extra evalget_extra
-#endif
-
-#ifdef yyset_extra
-#define evalset_extra_ALREADY_DEFINED
-#else
-#define yyset_extra evalset_extra
-#endif
-
-#ifdef yyget_in
-#define evalget_in_ALREADY_DEFINED
-#else
-#define yyget_in evalget_in
-#endif
-
-#ifdef yyset_in
-#define evalset_in_ALREADY_DEFINED
-#else
-#define yyset_in evalset_in
-#endif
-
-#ifdef yyget_out
-#define evalget_out_ALREADY_DEFINED
-#else
-#define yyget_out evalget_out
-#endif
-
-#ifdef yyset_out
-#define evalset_out_ALREADY_DEFINED
-#else
-#define yyset_out evalset_out
-#endif
-
-#ifdef yyget_leng
-#define evalget_leng_ALREADY_DEFINED
-#else
-#define yyget_leng evalget_leng
-#endif
-
-#ifdef yyget_text
-#define evalget_text_ALREADY_DEFINED
-#else
-#define yyget_text evalget_text
-#endif
-
-#ifdef yyget_lineno
-#define evalget_lineno_ALREADY_DEFINED
-#else
-#define yyget_lineno evalget_lineno
-#endif
-
-#ifdef yyset_lineno
-#define evalset_lineno_ALREADY_DEFINED
-#else
-#define yyset_lineno evalset_lineno
-#endif
-
-#ifdef yywrap
-#define evalwrap_ALREADY_DEFINED
-#else
-#define yywrap evalwrap
-#endif
-
+    
 /* %endif */
 
-#ifdef yyalloc
-#define evalalloc_ALREADY_DEFINED
-#else
-#define yyalloc evalalloc
-#endif
-
-#ifdef yyrealloc
-#define evalrealloc_ALREADY_DEFINED
-#else
-#define yyrealloc evalrealloc
-#endif
-
-#ifdef yyfree
-#define evalfree_ALREADY_DEFINED
-#else
-#define yyfree evalfree
-#endif
-
 /* %if-c-only */
 
-#ifdef yytext
-#define evaltext_ALREADY_DEFINED
-#else
-#define yytext evaltext
-#endif
-
-#ifdef yyleng
-#define evalleng_ALREADY_DEFINED
-#else
-#define yyleng evalleng
-#endif
-
-#ifdef yyin
-#define evalin_ALREADY_DEFINED
-#else
-#define yyin evalin
-#endif
-
-#ifdef yyout
-#define evalout_ALREADY_DEFINED
-#else
-#define yyout evalout
-#endif
-
-#ifdef yy_flex_debug
-#define eval_flex_debug_ALREADY_DEFINED
-#else
-#define yy_flex_debug eval_flex_debug
-#endif
-
-#ifdef yylineno
-#define evallineno_ALREADY_DEFINED
-#else
-#define yylineno evallineno
-#endif
-
 /* %endif */
 
 /* First, we deal with  platform-specific or compiler-specific issues. */
@@ -328,6 +90,7 @@ typedef int16_t flex_int16_t;
 typedef uint16_t flex_uint16_t;
 typedef int32_t flex_int32_t;
 typedef uint32_t flex_uint32_t;
+typedef uint64_t flex_uint64_t;
 #else
 typedef signed char flex_int8_t;
 typedef short int flex_int16_t;
@@ -335,6 +98,7 @@ typedef int flex_int32_t;
 typedef unsigned char flex_uint8_t; 
 typedef unsigned short int flex_uint16_t;
 typedef unsigned int flex_uint32_t;
+#endif /* ! C99 */
 
 /* Limits of integral types. */
 #ifndef INT8_MIN
@@ -365,39 +129,48 @@ typedef unsigned int flex_uint32_t;
 #define UINT32_MAX             (4294967295U)
 #endif
 
-#ifndef SIZE_MAX
-#define SIZE_MAX               (~(size_t)0)
-#endif
-
-#endif /* ! C99 */
-
 #endif /* ! FLEXINT_H */
 
 /* %endif */
 
-/* begin standard C++ headers. */
 /* %if-c++-only */
 /* %endif */
 
-/* TODO: this is always defined, so inline it */
-#define yyconst const
+#ifdef __cplusplus
 
-#if defined(__GNUC__) && __GNUC__ >= 3
-#define yynoreturn __attribute__((__noreturn__))
+/* The "const" storage-class-modifier is valid. */
+#define YY_USE_CONST
+
+#else  /* ! __cplusplus */
+
+/* C99 requires __STDC__ to be defined as 1. */
+#if defined (__STDC__)
+
+#define YY_USE_CONST
+
+#endif /* defined (__STDC__) */
+#endif /* ! __cplusplus */
+
+#ifdef YY_USE_CONST
+#define yyconst const
 #else
-#define yynoreturn
+#define yyconst
 #endif
 
 /* %not-for-header */
+
 /* Returned upon end-of-file. */
 #define YY_NULL 0
 /* %ok-for-header */
 
 /* %not-for-header */
-/* Promotes a possibly negative, possibly signed char to an
- *   integer in range [0..255] for use as an array index.
+
+/* Promotes a possibly negative, possibly signed char to an unsigned
+ * integer for use as an array index.  If the signed char is negative,
+ * we want to instead treat it as an 8-bit unsigned char, hence the
+ * double cast.
  */
-#define YY_SC_TO_UI(c) ((YY_CHAR) (c))
+#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
 /* %ok-for-header */
 
 /* %if-reentrant */
@@ -412,29 +185,25 @@ typedef unsigned int flex_uint32_t;
  * definition of BEGIN.
  */
 #define BEGIN (yy_start) = 1 + 2 *
+
 /* Translate the current start state into a value that can be later handed
  * to BEGIN to return to the state.  The YYSTATE alias is for lex
  * compatibility.
  */
 #define YY_START (((yy_start) - 1) / 2)
 #define YYSTATE YY_START
+
 /* Action number for EOF rule of a given start state. */
 #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
+
 /* Special action meaning "start processing a new file". */
-#define YY_NEW_FILE yyrestart( yyin  )
+#define YY_NEW_FILE evalrestart(evalin  )
+
 #define YY_END_OF_BUFFER_CHAR 0
 
 /* Size of default input buffer. */
 #ifndef YY_BUF_SIZE
-#ifdef __ia64__
-/* On IA-64, the buffer size is 16k, not 8k.
- * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case.
- * Ditto for the __ia64__ case accordingly.
- */
-#define YY_BUF_SIZE 32768
-#else
 #define YY_BUF_SIZE 16384
-#endif /* __ia64__ */
 #endif
 
 /* The state buf must be large enough to hold one state per character in the main buffer.
@@ -452,54 +221,48 @@ typedef size_t yy_size_t;
 #endif
 
 /* %if-not-reentrant */
-extern int yyleng;
+extern yy_size_t evalleng;
 /* %endif */
 
 /* %if-c-only */
 /* %if-not-reentrant */
-extern FILE *yyin, *yyout;
+extern FILE *evalin, *evalout;
 /* %endif */
 /* %endif */
 
 #define EOB_ACT_CONTINUE_SCAN 0
 #define EOB_ACT_END_OF_FILE 1
 #define EOB_ACT_LAST_MATCH 2
-    
+
     /* Note: We specifically omit the test for yy_rule_can_match_eol because it requires
      *       access to the local variable yy_act. Since yyless() is a macro, it would break
-     *       existing scanners that call yyless() from OUTSIDE yylex.
+     *       existing scanners that call yyless() from OUTSIDE evallex. 
      *       One obvious solution it to make yy_act a global. I tried that, and saw
-     *       a 5% performance hit in a non-yylineno scanner, because yy_act is
+     *       a 5% performance hit in a non-evallineno scanner, because yy_act is
      *       normally declared as a register variable-- so it is not worth it.
      */
     #define  YY_LESS_LINENO(n) \
             do { \
-                int yyl;\
-                for ( yyl = n; yyl < yyleng; ++yyl )\
-                    if ( yytext[yyl] == '\n' )\
-                        --yylineno;\
-            }while(0)
-    #define YY_LINENO_REWIND_TO(dst) \
-            do {\
-                const char *p;\
-                for ( p = yy_cp-1; p >= (dst); --p)\
-                    if ( *p == '\n' )\
-                        --yylineno;\
+                yy_size_t yyl;\
+                for ( yyl = n; yyl < evalleng; ++yyl )\
+                    if ( evaltext[yyl] == '\n' )\
+                        --evallineno;\
             }while(0)
     
 /* Return all but the first "n" matched characters back to the input stream. */
 #define yyless(n) \
        do \
                { \
-               /* Undo effects of setting up yytext. */ \
+               /* Undo effects of setting up evaltext. */ \
         int yyless_macro_arg = (n); \
         YY_LESS_LINENO(yyless_macro_arg);\
                *yy_cp = (yy_hold_char); \
                YY_RESTORE_YY_MORE_OFFSET \
                (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
-               YY_DO_BEFORE_ACTION; /* set up yytext again */ \
+               YY_DO_BEFORE_ACTION; /* set up evaltext again */ \
                } \
        while ( 0 )
+
 #define unput(c) yyunput( c, (yytext_ptr)  )
 
 #ifndef YY_STRUCT_YY_BUFFER_STATE
@@ -519,12 +282,12 @@ struct yy_buffer_state
        /* Size of input buffer in bytes, not including room for EOB
         * characters.
         */
-       int yy_buf_size;
+       yy_size_t yy_buf_size;
 
        /* Number of characters read into yy_ch_buf, not including EOB
         * characters.
         */
-       int yy_n_chars;
+       yy_size_t yy_n_chars;
 
        /* Whether we "own" the buffer - i.e., we know we created it,
         * and can realloc() it to grow it, and should free() it to
@@ -547,7 +310,7 @@ struct yy_buffer_state
 
     int yy_bs_lineno; /**< The line count. */
     int yy_bs_column; /**< The column count. */
-
+    
        /* Whether to try to fill the input buffer when we reach the
         * end of it.
         */
@@ -564,8 +327,8 @@ struct yy_buffer_state
         * possible backing-up.
         *
         * When we actually see the EOF, we change the status to "new"
-        * (via yyrestart()), so that the user can continue scanning by
-        * just pointing yyin at a new input file.
+        * (via evalrestart()), so that the user can continue scanning by
+        * just pointing evalin at a new input file.
         */
 #define YY_BUFFER_EOF_PENDING 2
 
@@ -574,12 +337,13 @@ struct yy_buffer_state
 
 /* %if-c-only Standard (non-C++) definition */
 /* %not-for-header */
+
 /* %if-not-reentrant */
 
 /* Stack of input buffers. */
 static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */
 static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */
-static YY_BUFFER_STATE * yy_buffer_stack = NULL; /**< Stack as an array. */
+static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
 /* %endif */
 /* %ok-for-header */
 
@@ -594,6 +358,7 @@ static YY_BUFFER_STATE * yy_buffer_stack = NULL; /**< Stack as an array. */
 #define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
                           ? (yy_buffer_stack)[(yy_buffer_stack_top)] \
                           : NULL)
+
 /* Same as previous macro, but useful when we know that the buffer stack is not
  * NULL or when we need an lvalue. For internal use only.
  */
@@ -603,112 +368,115 @@ static YY_BUFFER_STATE * yy_buffer_stack = NULL; /**< Stack as an array. */
 
 /* %if-not-reentrant */
 /* %not-for-header */
-/* yy_hold_char holds the character lost when yytext is formed. */
+
+/* yy_hold_char holds the character lost when evaltext is formed. */
 static char yy_hold_char;
-static int yy_n_chars;         /* number of characters read into yy_ch_buf */
-int yyleng;
+static yy_size_t yy_n_chars;           /* number of characters read into yy_ch_buf */
+yy_size_t evalleng;
 
 /* Points to current character in buffer. */
-static char *yy_c_buf_p = NULL;
+static char *yy_c_buf_p = (char *) 0;
 static int yy_init = 0;                /* whether we need to initialize */
 static int yy_start = 0;       /* start state number */
 
-/* Flag which is used to allow yywrap()'s to do buffer switches
- * instead of setting up a fresh yyin.  A bit of a hack ...
+/* Flag which is used to allow evalwrap()'s to do buffer switches
+ * instead of setting up a fresh evalin.  A bit of a hack ...
  */
 static int yy_did_buffer_switch_on_eof;
 /* %ok-for-header */
 
 /* %endif */
 
-void yyrestart ( FILE *input_file  );
-void yy_switch_to_buffer ( YY_BUFFER_STATE new_buffer  );
-YY_BUFFER_STATE yy_create_buffer ( FILE *file, int size  );
-void yy_delete_buffer ( YY_BUFFER_STATE b  );
-void yy_flush_buffer ( YY_BUFFER_STATE b  );
-void yypush_buffer_state ( YY_BUFFER_STATE new_buffer  );
-void yypop_buffer_state ( void );
+void evalrestart (FILE *input_file  );
+void eval_switch_to_buffer (YY_BUFFER_STATE new_buffer  );
+YY_BUFFER_STATE eval_create_buffer (FILE *file,int size  );
+void eval_delete_buffer (YY_BUFFER_STATE b  );
+void eval_flush_buffer (YY_BUFFER_STATE b  );
+void evalpush_buffer_state (YY_BUFFER_STATE new_buffer  );
+void evalpop_buffer_state (void );
+
+static void evalensure_buffer_stack (void );
+static void eval_load_buffer_state (void );
+static void eval_init_buffer (YY_BUFFER_STATE b,FILE *file  );
 
-static void yyensure_buffer_stack ( void );
-static void yy_load_buffer_state ( void );
-static void yy_init_buffer ( YY_BUFFER_STATE b, FILE *file  );
-#define YY_FLUSH_BUFFER yy_flush_buffer( YY_CURRENT_BUFFER )
+#define YY_FLUSH_BUFFER eval_flush_buffer(YY_CURRENT_BUFFER )
 
-YY_BUFFER_STATE yy_scan_buffer ( char *base, yy_size_t size  );
-YY_BUFFER_STATE yy_scan_string ( const char *yy_str  );
-YY_BUFFER_STATE yy_scan_bytes ( const char *bytes, int len  );
+YY_BUFFER_STATE eval_scan_buffer (char *base,yy_size_t size  );
+YY_BUFFER_STATE eval_scan_string (yyconst char *yy_str  );
+YY_BUFFER_STATE eval_scan_bytes (yyconst char *bytes,yy_size_t len  );
 
 /* %endif */
 
-void *yyalloc ( yy_size_t  );
-void *yyrealloc ( void *, yy_size_t  );
-void yyfree ( void *  );
+void *evalalloc (yy_size_t  );
+void *evalrealloc (void *,yy_size_t  );
+void evalfree (void *  );
+
+#define yy_new_buffer eval_create_buffer
 
-#define yy_new_buffer yy_create_buffer
 #define yy_set_interactive(is_interactive) \
        { \
        if ( ! YY_CURRENT_BUFFER ){ \
-        yyensure_buffer_stack (); \
+        evalensure_buffer_stack (); \
                YY_CURRENT_BUFFER_LVALUE =    \
-            yy_create_buffer( yyin, YY_BUF_SIZE ); \
+            eval_create_buffer(evalin,YY_BUF_SIZE ); \
        } \
        YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
        }
+
 #define yy_set_bol(at_bol) \
        { \
        if ( ! YY_CURRENT_BUFFER ){\
-        yyensure_buffer_stack (); \
+        evalensure_buffer_stack (); \
                YY_CURRENT_BUFFER_LVALUE =    \
-            yy_create_buffer( yyin, YY_BUF_SIZE ); \
+            eval_create_buffer(evalin,YY_BUF_SIZE ); \
        } \
        YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
        }
+
 #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
 
-/* %% [1.0] yytext/yyin/yyout/yy_state_type/yylineno etc. def's & init go here */
+/* %% [1.0] evaltext/evalin/evalout/yy_state_type/evallineno etc. def's & init go here */
 /* Begin user sect3 */
 
-#define evalwrap() (/*CONSTCOND*/1)
+#define evalwrap(n) 1
 #define YY_SKIP_YYWRAP
 
 #define FLEX_DEBUG
-typedef flex_uint8_t YY_CHAR;
 
-FILE *yyin = NULL, *yyout = NULL;
+typedef unsigned char YY_CHAR;
+
+FILE *evalin = (FILE *) 0, *evalout = (FILE *) 0;
 
 typedef int yy_state_type;
 
-extern int yylineno;
-int yylineno = 1;
+extern int evallineno;
 
-extern char *yytext;
-#ifdef yytext_ptr
-#undef yytext_ptr
-#endif
-#define yytext_ptr yytext
+int evallineno = 1;
 
-/* %% [1.5] DFA */
+extern char *evaltext;
+#define yytext_ptr evaltext
 
 /* %if-c-only Standard (non-C++) definition */
 
-static yy_state_type yy_get_previous_state ( void );
-static yy_state_type yy_try_NUL_trans ( yy_state_type current_state  );
-static int yy_get_next_buffer ( void );
-static void yynoreturn yy_fatal_error ( const char* msg  );
+static yy_state_type yy_get_previous_state (void );
+static yy_state_type yy_try_NUL_trans (yy_state_type current_state  );
+static int yy_get_next_buffer (void );
+static void yy_fatal_error (yyconst char msg[]  );
 
 /* %endif */
 
 /* Done after the current pattern has been matched and before the
- * corresponding action - sets up yytext.
+ * corresponding action - sets up evaltext.
  */
 #define YY_DO_BEFORE_ACTION \
        (yytext_ptr) = yy_bp; \
-/* %% [2.0] code to fiddle yytext and yyleng for yymore() goes here \ */\
-       yyleng = (int) (yy_cp - yy_bp); \
+/* %% [2.0] code to fiddle evaltext and evalleng for yymore() goes here \ */\
+       evalleng = (yy_size_t) (yy_cp - yy_bp); \
        (yy_hold_char) = *yy_cp; \
        *yy_cp = '\0'; \
-/* %% [3.0] code to copy yytext_ptr to yytext[] goes here, if %array \ */\
+/* %% [3.0] code to copy yytext_ptr to evaltext[] goes here, if %array \ */\
        (yy_c_buf_p) = yy_cp;
+
 /* %% [4.0] data tables for the DFA and the user's section 1 definitions go here */
 #define YY_NUM_RULES 54
 #define YY_END_OF_BUFFER 55
@@ -719,7 +487,7 @@ struct yy_trans_info
        flex_int32_t yy_verify;
        flex_int32_t yy_nxt;
        };
-static const flex_int16_t yy_accept[213] =
+static yyconst flex_int16_t yy_accept[213] =
     {   0,
         0,    0,   55,   53,    1,    2,   53,   47,   48,   52,
        51,   53,   46,    5,    5,   53,   53,   53,   53,   49,
@@ -747,7 +515,7 @@ static const flex_int16_t yy_accept[213] =
        34,    0
     } ;
 
-static const YY_CHAR yy_ec[256] =
+static yyconst flex_int32_t yy_ec[256] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -779,7 +547,7 @@ static const YY_CHAR yy_ec[256] =
         1,    1,    1,    1,    1
     } ;
 
-static const YY_CHAR yy_meta[45] =
+static yyconst flex_int32_t yy_meta[45] =
     {   0,
         1,    1,    2,    1,    1,    1,    1,    1,    1,    3,
         4,    4,    4,    4,    5,    1,    4,    1,    1,    1,
@@ -788,7 +556,7 @@ static const YY_CHAR yy_meta[45] =
         1,    1,    1,    1
     } ;
 
-static const flex_int16_t yy_base[218] =
+static yyconst flex_int16_t yy_base[218] =
     {   0,
         0,    0,  325,  326,  322,  320,  318,  326,  326,  326,
       326,   34,  326,   39,   36,  306,  304,   81,  115,  326,
@@ -816,7 +584,7 @@ static const flex_int16_t yy_base[218] =
         0,  326,  208,  210,  212,   85,  215
     } ;
 
-static const flex_int16_t yy_def[218] =
+static yyconst flex_int16_t yy_def[218] =
     {   0,
       212,    1,  212,  212,  212,  212,  213,  212,  212,  212,
       212,  212,  212,  212,   14,  214,  212,  212,   18,  212,
@@ -844,7 +612,7 @@ static const flex_int16_t yy_def[218] =
        19,    0,  212,  212,  212,  212,  212
     } ;
 
-static const flex_int16_t yy_nxt[371] =
+static yyconst flex_int16_t yy_nxt[371] =
     {   0,
         4,    5,    6,    7,    8,    9,   10,   11,   12,   13,
        14,   15,   15,   15,   16,   17,   18,   19,   19,   20,
@@ -888,7 +656,7 @@ static const flex_int16_t yy_nxt[371] =
       212,  212,  212,  212,  212,  212,  212,  212,  212,  212
     } ;
 
-static const flex_int16_t yy_chk[371] =
+static yyconst flex_int16_t yy_chk[371] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -933,7 +701,7 @@ static const flex_int16_t yy_chk[371] =
     } ;
 
 /* Table of booleans, true if rule could match eol. */
-static const flex_int32_t yy_rule_can_match_eol[55] =
+static yyconst flex_int32_t yy_rule_can_match_eol[55] =
     {   0,
 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
@@ -942,17 +710,17 @@ static const flex_int32_t yy_rule_can_match_eol[55] =
 static yy_state_type yy_last_accepting_state;
 static char *yy_last_accepting_cpos;
 
-extern int yy_flex_debug;
-int yy_flex_debug = 1;
+extern int eval_flex_debug;
+int eval_flex_debug = 1;
 
-static const flex_int16_t yy_rule_linenum[54] =
+static yyconst flex_int16_t yy_rule_linenum[54] =
     {   0,
-      106,  111,  117,  127,  133,  151,  175,  189,  190,  191,
-      192,  193,  194,  195,  196,  197,  198,  199,  200,  201,
-      202,  203,  204,  205,  206,  207,  208,  209,  210,  211,
-      212,  213,  214,  215,  216,  217,  218,  219,  220,  221,
-      222,  223,  224,  225,  226,  227,  228,  229,  230,  231,
-      232,  233,  234
+      105,  110,  116,  126,  132,  150,  174,  188,  189,  190,
+      191,  192,  193,  194,  195,  196,  197,  198,  199,  200,
+      201,  202,  203,  204,  205,  206,  207,  208,  209,  210,
+      211,  212,  213,  214,  215,  216,  217,  218,  219,  220,
+      221,  222,  223,  224,  225,  226,  227,  228,  229,  230,
+      231,  232,  233
     } ;
 
 /* The intent behind this definition is that it'll catch
@@ -962,7 +730,7 @@ static const flex_int16_t yy_rule_linenum[54] =
 #define yymore() yymore_used_but_not_detected
 #define YY_MORE_ADJ 0
 #define YY_RESTORE_YY_MORE_OFFSET
-char *yytext;
+char *evaltext;
 #line 1 "lexer.ll"
 /* Copyright (C) 2015-2019 Internet Systems Consortium, Inc. ("ISC")
 
@@ -989,8 +757,8 @@ char *yytext;
    2.5.31 through 2.5.33): it generates code that does
    not conform to C89.  See Debian bug 333231
    <http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=333231>. */
-# undef yywrap
-# define yywrap() 1
+# undef evalwrap
+# define evalwrap() 1
 
 /* The location of the current token. The lexer will keep updating it. This
    variable will be useful for logging errors. */
@@ -1003,10 +771,9 @@ namespace {
 
 /* To avoid the call to exit... oops! */
 #define YY_FATAL_ERROR(msg) isc::eval::EvalContext::fatal(msg)
-#line 1006 "lexer.cc"
 /* noyywrap disables automatic rewinding for the next file to parse. Since we
    always parse only a single string, there's no need to do any wraps. And
-   using yywrap requires linking with -lfl, which provides the default yywrap
+   using evalwrap requires linking with -lfl, which provides the default evalwrap
    implementation that always returns 1 anyway. */
 /* nounput simplifies the lexer, by removing support for putting a character
    back into the input stream. We never use such capability anyway. */
@@ -1025,11 +792,10 @@ namespace {
    incorrect inputs (e.g., IP addresses) which must be checked. */
 #line 80 "lexer.ll"
 /* This code run each time a pattern is matched. It updates the location
-   by moving it ahead by yyleng bytes. yyleng specifies the length of the
+   by moving it ahead by evalleng bytes. evalleng specifies the length of the
    currently matched token. */
 #define YY_USER_ACTION  loc.columns(evalleng);
-#line 1031 "lexer.cc"
-#line 1032 "lexer.cc"
+#line 799 "lexer.cc"
 
 #define INITIAL 0
 
@@ -1053,7 +819,7 @@ namespace {
 /* %if-reentrant */
 /* %if-c-only */
 
-static int yy_init_globals ( void );
+static int yy_init_globals (void );
 
 /* %endif */
 /* %if-reentrant */
@@ -1063,31 +829,31 @@ static int yy_init_globals ( void );
 /* Accessor methods to globals.
    These are made visible to non-reentrant scanners for convenience. */
 
-int yylex_destroy ( void );
+int evallex_destroy (void );
 
-int yyget_debug ( void );
+int evalget_debug (void );
 
-void yyset_debug ( int debug_flag  );
+void evalset_debug (int debug_flag  );
 
-YY_EXTRA_TYPE yyget_extra ( void );
+YY_EXTRA_TYPE evalget_extra (void );
 
-void yyset_extra ( YY_EXTRA_TYPE user_defined  );
+void evalset_extra (YY_EXTRA_TYPE user_defined  );
 
-FILE *yyget_in ( void );
+FILE *evalget_in (void );
 
-void yyset_in  ( FILE * _in_str  );
+void evalset_in  (FILE * in_str  );
 
-FILE *yyget_out ( void );
+FILE *evalget_out (void );
 
-void yyset_out  ( FILE * _out_str  );
+void evalset_out  (FILE * out_str  );
 
-                       int yyget_leng ( void );
+yy_size_t evalget_leng (void );
 
-char *yyget_text ( void );
+char *evalget_text (void );
 
-int yyget_lineno ( void );
+int evalget_lineno (void );
 
-void yyset_lineno ( int _line_number  );
+void evalset_lineno (int line_number  );
 
 /* %if-bison-bridge */
 /* %endif */
@@ -1098,35 +864,34 @@ void yyset_lineno ( int _line_number  );
 
 #ifndef YY_SKIP_YYWRAP
 #ifdef __cplusplus
-extern "C" int yywrap ( void );
+extern "C" int evalwrap (void );
 #else
-extern int yywrap ( void );
+extern int evalwrap (void );
 #endif
 #endif
 
 /* %not-for-header */
-#ifndef YY_NO_UNPUT
-    
-#endif
+
 /* %ok-for-header */
 
 /* %endif */
 
 #ifndef yytext_ptr
-static void yy_flex_strncpy ( char *, const char *, int );
+static void yy_flex_strncpy (char *,yyconst char *,int );
 #endif
 
 #ifdef YY_NEED_STRLEN
-static int yy_flex_strlen ( const char * );
+static int yy_flex_strlen (yyconst char * );
 #endif
 
 #ifndef YY_NO_INPUT
 /* %if-c-only Standard (non-C++) definition */
 /* %not-for-header */
+
 #ifdef __cplusplus
-static int yyinput ( void );
+static int yyinput (void );
 #else
-static int input ( void );
+static int input (void );
 #endif
 /* %ok-for-header */
 
@@ -1139,12 +904,7 @@ static int input ( void );
 
 /* Amount of stuff to slurp up with each read. */
 #ifndef YY_READ_BUF_SIZE
-#ifdef __ia64__
-/* On IA-64, the buffer size is 16k, not 8k */
-#define YY_READ_BUF_SIZE 16384
-#else
 #define YY_READ_BUF_SIZE 8192
-#endif /* __ia64__ */
 #endif
 
 /* Copy whatever the last rule matched to the standard output. */
@@ -1153,7 +913,7 @@ static int input ( void );
 /* This used to be an fputs(), but since the string might contain NUL's,
  * we now use fwrite().
  */
-#define ECHO do { if (fwrite( yytext, (size_t) yyleng, 1, yyout )) {} } while (0)
+#define ECHO fwrite( evaltext, evalleng, 1, evalout )
 /* %endif */
 /* %if-c++-only C++ definition */
 /* %endif */
@@ -1168,20 +928,20 @@ static int input ( void );
        if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
                { \
                int c = '*'; \
-               int n; \
+               yy_size_t n; \
                for ( n = 0; n < max_size && \
-                            (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
+                            (c = getc( evalin )) != EOF && c != '\n'; ++n ) \
                        buf[n] = (char) c; \
                if ( c == '\n' ) \
                        buf[n++] = (char) c; \
-               if ( c == EOF && ferror( yyin ) ) \
+               if ( c == EOF && ferror( evalin ) ) \
                        YY_FATAL_ERROR( "input in flex scanner failed" ); \
                result = n; \
                } \
        else \
                { \
                errno=0; \
-               while ( (result = (int) fread(buf, 1, (yy_size_t) max_size, yyin)) == 0 && ferror(yyin)) \
+               while ( (result = fread(buf, 1, max_size, evalin))==0 && ferror(evalin)) \
                        { \
                        if( errno != EINTR) \
                                { \
@@ -1189,7 +949,7 @@ static int input ( void );
                                break; \
                                } \
                        errno=0; \
-                       clearerr(yyin); \
+                       clearerr(evalin); \
                        } \
                }\
 \
@@ -1222,9 +982,11 @@ static int input ( void );
 
 /* %if-tables-serialization structures and prototypes */
 /* %not-for-header */
+
 /* %ok-for-header */
 
 /* %not-for-header */
+
 /* %tables-yydmap generated elements */
 /* %endif */
 /* end tables serialization structures and prototypes */
@@ -1238,15 +1000,15 @@ static int input ( void );
 #define YY_DECL_IS_OURS 1
 /* %if-c-only Standard (non-C++) definition */
 
-extern int yylex (void);
+extern int evallex (void);
 
-#define YY_DECL int yylex (void)
+#define YY_DECL int evallex (void)
 /* %endif */
 /* %if-c++-only C++ definition */
 /* %endif */
 #endif /* !YY_DECL */
 
-/* Code executed at the beginning of each rule, after yytext and yyleng
+/* Code executed at the beginning of each rule, after evaltext and evalleng
  * have been set up.
  */
 #ifndef YY_USER_ACTION
@@ -1255,7 +1017,7 @@ extern int yylex (void);
 
 /* Code executed at the end of each rule. */
 #ifndef YY_BREAK
-#define YY_BREAK /*LINTED*/break;
+#define YY_BREAK break;
 #endif
 
 /* %% [6.0] YY_RULE_SETUP definition goes here */
@@ -1263,14 +1025,38 @@ extern int yylex (void);
        YY_USER_ACTION
 
 /* %not-for-header */
+
 /** The main scanner function which does all the work.
  */
 YY_DECL
 {
-       yy_state_type yy_current_state;
-       char *yy_cp, *yy_bp;
-       int yy_act;
+       register yy_state_type yy_current_state;
+       register char *yy_cp, *yy_bp;
+       register int yy_act;
     
+/* %% [7.0] user's declarations go here */
+#line 86 "lexer.ll"
+
+
+
+    /* Code run each time evallex is called. */
+    loc.step();
+
+    if (start_token_flag) {
+        start_token_flag = false;
+        switch (start_token_value) {
+        case EvalContext::PARSER_BOOL:
+            return isc::eval::EvalParser::make_TOPLEVEL_BOOL(loc);
+        default:
+        case EvalContext::PARSER_STRING:
+            return isc::eval::EvalParser::make_TOPLEVEL_STRING(loc);
+        }
+    }
+
+
+
+#line 1059 "lexer.cc"
+
        if ( !(yy_init) )
                {
                (yy_init) = 1;
@@ -1282,60 +1068,35 @@ YY_DECL
                if ( ! (yy_start) )
                        (yy_start) = 1; /* first start state */
 
-               if ( ! yyin )
+               if ( ! evalin )
 /* %if-c-only */
-                       yyin = stdin;
+                       evalin = stdin;
 /* %endif */
 /* %if-c++-only */
 /* %endif */
 
-               if ( ! yyout )
+               if ( ! evalout )
 /* %if-c-only */
-                       yyout = stdout;
+                       evalout = stdout;
 /* %endif */
 /* %if-c++-only */
 /* %endif */
 
                if ( ! YY_CURRENT_BUFFER ) {
-                       yyensure_buffer_stack ();
+                       evalensure_buffer_stack ();
                        YY_CURRENT_BUFFER_LVALUE =
-                               yy_create_buffer( yyin, YY_BUF_SIZE );
+                               eval_create_buffer(evalin,YY_BUF_SIZE );
                }
 
-               yy_load_buffer_state(  );
+               eval_load_buffer_state( );
                }
 
-       {
-/* %% [7.0] user's declarations go here */
-#line 86 "lexer.ll"
-
-
-
-#line 90 "lexer.ll"
-    /* Code run each time evallex is called. */
-    loc.step();
-
-    if (start_token_flag) {
-        start_token_flag = false;
-        switch (start_token_value) {
-        case EvalContext::PARSER_BOOL:
-            return isc::eval::EvalParser::make_TOPLEVEL_BOOL(loc);
-        default:
-        case EvalContext::PARSER_STRING:
-            return isc::eval::EvalParser::make_TOPLEVEL_STRING(loc);
-        }
-    }
-
-
-
-#line 1331 "lexer.cc"
-
-       while ( /*CONSTCOND*/1 )                /* loops until end-of-file is reached */
+       while ( 1 )             /* loops until end-of-file is reached */
                {
 /* %% [8.0] yymore()-related code goes here */
                yy_cp = (yy_c_buf_p);
 
-               /* Support of yytext. */
+               /* Support of evaltext. */
                *yy_cp = (yy_hold_char);
 
                /* yy_bp points to the position in yy_ch_buf of the start of
@@ -1348,7 +1109,7 @@ YY_DECL
 yy_match:
                do
                        {
-                       YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)] ;
+                       register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
                        if ( yy_accept[yy_current_state] )
                                {
                                (yy_last_accepting_state) = yy_current_state;
@@ -1358,9 +1119,9 @@ yy_match:
                                {
                                yy_current_state = (int) yy_def[yy_current_state];
                                if ( yy_current_state >= 213 )
-                                       yy_c = yy_meta[yy_c];
+                                       yy_c = yy_meta[(unsigned int) yy_c];
                                }
-                       yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
+                       yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
                        ++yy_cp;
                        }
                while ( yy_current_state != 212 );
@@ -1373,31 +1134,31 @@ yy_find_action:
 
                YY_DO_BEFORE_ACTION;
 
-/* %% [11.0] code for yylineno update goes here */
+/* %% [11.0] code for evallineno update goes here */
 
                if ( yy_act != YY_END_OF_BUFFER && yy_rule_can_match_eol[yy_act] )
                        {
-                       int yyl;
-                       for ( yyl = 0; yyl < yyleng; ++yyl )
-                               if ( yytext[yyl] == '\n' )
-                                       
-    yylineno++;
+                       yy_size_t yyl;
+                       for ( yyl = 0; yyl < evalleng; ++yyl )
+                               if ( evaltext[yyl] == '\n' )
+                                          
+    evallineno++;
 ;
                        }
 
 do_action:     /* This label is used only to access EOF actions. */
 
 /* %% [12.0] debug code goes here */
-               if ( yy_flex_debug )
+               if ( eval_flex_debug )
                        {
                        if ( yy_act == 0 )
                                fprintf( stderr, "--scanner backing up\n" );
                        else if ( yy_act < 54 )
                                fprintf( stderr, "--accepting rule at line %ld (\"%s\")\n",
-                                        (long)yy_rule_linenum[yy_act], yytext );
+                                        (long)yy_rule_linenum[yy_act], evaltext );
                        else if ( yy_act == 54 )
                                fprintf( stderr, "--accepting default rule (\"%s\")\n",
-                                        yytext );
+                                        evaltext );
                        else if ( yy_act == 55 )
                                fprintf( stderr, "--(end of buffer or a NUL)\n" );
                        else
@@ -1416,7 +1177,7 @@ do_action:        /* This label is used only to access EOF actions. */
 
 case 1:
 YY_RULE_SETUP
-#line 106 "lexer.ll"
+#line 105 "lexer.ll"
 {
     /* Ok, we found a with space. Let's ignore it and update loc variable. */
     loc.step();
@@ -1425,7 +1186,7 @@ YY_RULE_SETUP
 case 2:
 /* rule 2 can match eol */
 YY_RULE_SETUP
-#line 111 "lexer.ll"
+#line 110 "lexer.ll"
 {
     /* Newline found. Let's update the location and continue. */
     loc.lines(evalleng);
@@ -1434,7 +1195,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 3:
 YY_RULE_SETUP
-#line 117 "lexer.ll"
+#line 116 "lexer.ll"
 {
     /* A string has been matched. It contains the actual string and single quotes.
        We need to get those quotes out of the way and just use its content, e.g.
@@ -1447,7 +1208,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 4:
 YY_RULE_SETUP
-#line 127 "lexer.ll"
+#line 126 "lexer.ll"
 {
     /* A hex string has been matched. It contains the '0x' or '0X' header
        followed by at least one hexadecimal digit. */
@@ -1456,7 +1217,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 5:
 YY_RULE_SETUP
-#line 133 "lexer.ll"
+#line 132 "lexer.ll"
 {
     /* An integer was found. */
     std::string tmp(evaltext);
@@ -1477,12 +1238,11 @@ YY_RULE_SETUP
        YY_BREAK
 case 6:
 /* rule 6 can match eol */
-*yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
-YY_LINENO_REWIND_TO(yy_cp - 1);
+*yy_cp = (yy_hold_char); /* undo effects of setting up evaltext */
 (yy_c_buf_p) = yy_cp -= 1;
-YY_DO_BEFORE_ACTION; /* set up yytext again */
+YY_DO_BEFORE_ACTION; /* set up evaltext again */
 YY_RULE_SETUP
-#line 151 "lexer.ll"
+#line 150 "lexer.ll"
 {
     /* This string specifies option name starting with a letter
        and further containing letters, digits, hyphens and
@@ -1509,7 +1269,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 7:
 YY_RULE_SETUP
-#line 175 "lexer.ll"
+#line 174 "lexer.ll"
 {
     /* IPv4 or IPv6 address */
     std::string tmp(evaltext);
@@ -1526,244 +1286,244 @@ YY_RULE_SETUP
        YY_BREAK
 case 8:
 YY_RULE_SETUP
-#line 189 "lexer.ll"
+#line 188 "lexer.ll"
 return isc::eval::EvalParser::make_EQUAL(loc);
        YY_BREAK
 case 9:
 YY_RULE_SETUP
-#line 190 "lexer.ll"
+#line 189 "lexer.ll"
 return isc::eval::EvalParser::make_OPTION(loc);
        YY_BREAK
 case 10:
 YY_RULE_SETUP
-#line 191 "lexer.ll"
+#line 190 "lexer.ll"
 return isc::eval::EvalParser::make_RELAY4(loc);
        YY_BREAK
 case 11:
 YY_RULE_SETUP
-#line 192 "lexer.ll"
+#line 191 "lexer.ll"
 return isc::eval::EvalParser::make_RELAY6(loc);
        YY_BREAK
 case 12:
 YY_RULE_SETUP
-#line 193 "lexer.ll"
+#line 192 "lexer.ll"
 return isc::eval::EvalParser::make_PEERADDR(loc);
        YY_BREAK
 case 13:
 YY_RULE_SETUP
-#line 194 "lexer.ll"
+#line 193 "lexer.ll"
 return isc::eval::EvalParser::make_LINKADDR(loc);
        YY_BREAK
 case 14:
 YY_RULE_SETUP
-#line 195 "lexer.ll"
+#line 194 "lexer.ll"
 return isc::eval::EvalParser::make_TEXT(loc);
        YY_BREAK
 case 15:
 YY_RULE_SETUP
-#line 196 "lexer.ll"
+#line 195 "lexer.ll"
 return isc::eval::EvalParser::make_HEX(loc);
        YY_BREAK
 case 16:
 YY_RULE_SETUP
-#line 197 "lexer.ll"
+#line 196 "lexer.ll"
 return isc::eval::EvalParser::make_EXISTS(loc);
        YY_BREAK
 case 17:
 YY_RULE_SETUP
-#line 198 "lexer.ll"
+#line 197 "lexer.ll"
 return isc::eval::EvalParser::make_PKT(loc);
        YY_BREAK
 case 18:
 YY_RULE_SETUP
-#line 199 "lexer.ll"
+#line 198 "lexer.ll"
 return isc::eval::EvalParser::make_IFACE(loc);
        YY_BREAK
 case 19:
 YY_RULE_SETUP
-#line 200 "lexer.ll"
+#line 199 "lexer.ll"
 return isc::eval::EvalParser::make_SRC(loc);
        YY_BREAK
 case 20:
 YY_RULE_SETUP
-#line 201 "lexer.ll"
+#line 200 "lexer.ll"
 return isc::eval::EvalParser::make_DST(loc);
        YY_BREAK
 case 21:
 YY_RULE_SETUP
-#line 202 "lexer.ll"
+#line 201 "lexer.ll"
 return isc::eval::EvalParser::make_LEN(loc);
        YY_BREAK
 case 22:
 YY_RULE_SETUP
-#line 203 "lexer.ll"
+#line 202 "lexer.ll"
 return isc::eval::EvalParser::make_PKT4(loc);
        YY_BREAK
 case 23:
 YY_RULE_SETUP
-#line 204 "lexer.ll"
+#line 203 "lexer.ll"
 return isc::eval::EvalParser::make_CHADDR(loc);
        YY_BREAK
 case 24:
 YY_RULE_SETUP
-#line 205 "lexer.ll"
+#line 204 "lexer.ll"
 return isc::eval::EvalParser::make_HLEN(loc);
        YY_BREAK
 case 25:
 YY_RULE_SETUP
-#line 206 "lexer.ll"
+#line 205 "lexer.ll"
 return isc::eval::EvalParser::make_HTYPE(loc);
        YY_BREAK
 case 26:
 YY_RULE_SETUP
-#line 207 "lexer.ll"
+#line 206 "lexer.ll"
 return isc::eval::EvalParser::make_CIADDR(loc);
        YY_BREAK
 case 27:
 YY_RULE_SETUP
-#line 208 "lexer.ll"
+#line 207 "lexer.ll"
 return isc::eval::EvalParser::make_GIADDR(loc);
        YY_BREAK
 case 28:
 YY_RULE_SETUP
-#line 209 "lexer.ll"
+#line 208 "lexer.ll"
 return isc::eval::EvalParser::make_YIADDR(loc);
        YY_BREAK
 case 29:
 YY_RULE_SETUP
-#line 210 "lexer.ll"
+#line 209 "lexer.ll"
 return isc::eval::EvalParser::make_SIADDR(loc);
        YY_BREAK
 case 30:
 YY_RULE_SETUP
-#line 211 "lexer.ll"
+#line 210 "lexer.ll"
 return isc::eval::EvalParser::make_PKT6(loc);
        YY_BREAK
 case 31:
 YY_RULE_SETUP
-#line 212 "lexer.ll"
+#line 211 "lexer.ll"
 return isc::eval::EvalParser::make_MSGTYPE(loc);
        YY_BREAK
 case 32:
 YY_RULE_SETUP
-#line 213 "lexer.ll"
+#line 212 "lexer.ll"
 return isc::eval::EvalParser::make_TRANSID(loc);
        YY_BREAK
 case 33:
 YY_RULE_SETUP
-#line 214 "lexer.ll"
+#line 213 "lexer.ll"
 return isc::eval::EvalParser::make_VENDOR(loc);
        YY_BREAK
 case 34:
 YY_RULE_SETUP
-#line 215 "lexer.ll"
+#line 214 "lexer.ll"
 return isc::eval::EvalParser::make_VENDOR_CLASS(loc);
        YY_BREAK
 case 35:
 YY_RULE_SETUP
-#line 216 "lexer.ll"
+#line 215 "lexer.ll"
 return isc::eval::EvalParser::make_DATA(loc);
        YY_BREAK
 case 36:
 YY_RULE_SETUP
-#line 217 "lexer.ll"
+#line 216 "lexer.ll"
 return isc::eval::EvalParser::make_ENTERPRISE(loc);
        YY_BREAK
 case 37:
 YY_RULE_SETUP
-#line 218 "lexer.ll"
+#line 217 "lexer.ll"
 return isc::eval::EvalParser::make_SUBSTRING(loc);
        YY_BREAK
 case 38:
 YY_RULE_SETUP
-#line 219 "lexer.ll"
+#line 218 "lexer.ll"
 return isc::eval::EvalParser::make_ALL(loc);
        YY_BREAK
 case 39:
 YY_RULE_SETUP
-#line 220 "lexer.ll"
+#line 219 "lexer.ll"
 return isc::eval::EvalParser::make_CONCAT(loc);
        YY_BREAK
 case 40:
 YY_RULE_SETUP
-#line 221 "lexer.ll"
+#line 220 "lexer.ll"
 return isc::eval::EvalParser::make_IFELSE(loc);
        YY_BREAK
 case 41:
 YY_RULE_SETUP
-#line 222 "lexer.ll"
+#line 221 "lexer.ll"
 return isc::eval::EvalParser::make_TOHEXSTRING(loc);
        YY_BREAK
 case 42:
 YY_RULE_SETUP
-#line 223 "lexer.ll"
+#line 222 "lexer.ll"
 return isc::eval::EvalParser::make_NOT(loc);
        YY_BREAK
 case 43:
 YY_RULE_SETUP
-#line 224 "lexer.ll"
+#line 223 "lexer.ll"
 return isc::eval::EvalParser::make_AND(loc);
        YY_BREAK
 case 44:
 YY_RULE_SETUP
-#line 225 "lexer.ll"
+#line 224 "lexer.ll"
 return isc::eval::EvalParser::make_OR(loc);
        YY_BREAK
 case 45:
 YY_RULE_SETUP
-#line 226 "lexer.ll"
+#line 225 "lexer.ll"
 return isc::eval::EvalParser::make_MEMBER(loc);
        YY_BREAK
 case 46:
 YY_RULE_SETUP
-#line 227 "lexer.ll"
+#line 226 "lexer.ll"
 return isc::eval::EvalParser::make_DOT(loc);
        YY_BREAK
 case 47:
 YY_RULE_SETUP
-#line 228 "lexer.ll"
+#line 227 "lexer.ll"
 return isc::eval::EvalParser::make_LPAREN(loc);
        YY_BREAK
 case 48:
 YY_RULE_SETUP
-#line 229 "lexer.ll"
+#line 228 "lexer.ll"
 return isc::eval::EvalParser::make_RPAREN(loc);
        YY_BREAK
 case 49:
 YY_RULE_SETUP
-#line 230 "lexer.ll"
+#line 229 "lexer.ll"
 return isc::eval::EvalParser::make_LBRACKET(loc);
        YY_BREAK
 case 50:
 YY_RULE_SETUP
-#line 231 "lexer.ll"
+#line 230 "lexer.ll"
 return isc::eval::EvalParser::make_RBRACKET(loc);
        YY_BREAK
 case 51:
 YY_RULE_SETUP
-#line 232 "lexer.ll"
+#line 231 "lexer.ll"
 return isc::eval::EvalParser::make_COMA(loc);
        YY_BREAK
 case 52:
 YY_RULE_SETUP
-#line 233 "lexer.ll"
+#line 232 "lexer.ll"
 return isc::eval::EvalParser::make_ANY(loc);
        YY_BREAK
 case 53:
 YY_RULE_SETUP
-#line 234 "lexer.ll"
+#line 233 "lexer.ll"
 driver.error (loc, "Invalid character: " + std::string(evaltext));
        YY_BREAK
 case YY_STATE_EOF(INITIAL):
-#line 235 "lexer.ll"
+#line 234 "lexer.ll"
 return isc::eval::EvalParser::make_END(loc);
        YY_BREAK
 case 54:
 YY_RULE_SETUP
-#line 236 "lexer.ll"
+#line 235 "lexer.ll"
 ECHO;
        YY_BREAK
-#line 1766 "lexer.cc"
+#line 1527 "lexer.cc"
 
        case YY_END_OF_BUFFER:
                {
@@ -1778,19 +1538,15 @@ ECHO;
                        {
                        /* We're scanning a new file or input source.  It's
                         * possible that this happened because the user
-                        * just pointed yyin at a new source and called
-                        * yylex().  If so, then we have to assure
+                        * just pointed evalin at a new source and called
+                        * evallex().  If so, then we have to assure
                         * consistency between YY_CURRENT_BUFFER and our
                         * globals.  Here is the right place to do so, because
                         * this is the first action (other than possibly a
                         * back-up) that will match for the new input source.
                         */
                        (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
-/* %if-c-only */
-                       YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin;
-/* %endif */
-/* %if-c++-only */
-/* %endif */
+                       YY_CURRENT_BUFFER_LVALUE->yy_input_file = evalin;
                        YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
                        }
 
@@ -1845,11 +1601,11 @@ ECHO;
                                {
                                (yy_did_buffer_switch_on_eof) = 0;
 
-                               if ( yywrap(  ) )
+                               if ( evalwrap( ) )
                                        {
                                        /* Note: because we've taken care in
                                         * yy_get_next_buffer() to have set up
-                                        * yytext, we can now set up
+                                        * evaltext, we can now set up
                                         * yy_c_buf_p so that if some total
                                         * hoser (like flex itself) wants to
                                         * call the scanner after we return the
@@ -1898,12 +1654,12 @@ ECHO;
                        "fatal flex scanner internal error--no action found" );
        } /* end of action switch */
                } /* end of scanning one token */
-       } /* end of user's declarations */
-} /* end of yylex */
+} /* end of evallex */
 /* %ok-for-header */
 
 /* %if-c++-only */
 /* %not-for-header */
+
 /* %ok-for-header */
 
 /* %endif */
@@ -1921,9 +1677,9 @@ static int yy_get_next_buffer (void)
 /* %if-c++-only */
 /* %endif */
 {
-       char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
-       char *source = (yytext_ptr);
-       int number_to_move, i;
+       register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
+       register char *source = (yytext_ptr);
+       register int number_to_move, i;
        int ret_val;
 
        if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
@@ -1952,7 +1708,7 @@ static int yy_get_next_buffer (void)
        /* Try to read more data. */
 
        /* First move last chars to start of buffer. */
-       number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr) - 1);
+       number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1;
 
        for ( i = 0; i < number_to_move; ++i )
                *(dest++) = *(source++);
@@ -1965,21 +1721,21 @@ static int yy_get_next_buffer (void)
 
        else
                {
-                       int num_to_read =
+                       yy_size_t num_to_read =
                        YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
 
                while ( num_to_read <= 0 )
                        { /* Not enough room in the buffer - grow it. */
 
                        /* just a shorter name for the current buffer */
-                       YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE;
+                       YY_BUFFER_STATE b = YY_CURRENT_BUFFER;
 
                        int yy_c_buf_p_offset =
                                (int) ((yy_c_buf_p) - b->yy_ch_buf);
 
                        if ( b->yy_is_our_buffer )
                                {
-                               int new_size = b->yy_buf_size * 2;
+                               yy_size_t new_size = b->yy_buf_size * 2;
 
                                if ( new_size <= 0 )
                                        b->yy_buf_size += b->yy_buf_size / 8;
@@ -1988,12 +1744,11 @@ static int yy_get_next_buffer (void)
 
                                b->yy_ch_buf = (char *)
                                        /* Include room in for 2 EOB chars. */
-                                       yyrealloc( (void *) b->yy_ch_buf,
-                                                        (yy_size_t) (b->yy_buf_size + 2)  );
+                                       evalrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2  );
                                }
                        else
                                /* Can't grow it, we don't own it. */
-                               b->yy_ch_buf = NULL;
+                               b->yy_ch_buf = 0;
 
                        if ( ! b->yy_ch_buf )
                                YY_FATAL_ERROR(
@@ -2021,7 +1776,7 @@ static int yy_get_next_buffer (void)
                if ( number_to_move == YY_MORE_ADJ )
                        {
                        ret_val = EOB_ACT_END_OF_FILE;
-                       yyrestart( yyin  );
+                       evalrestart(evalin  );
                        }
 
                else
@@ -2035,15 +1790,12 @@ static int yy_get_next_buffer (void)
        else
                ret_val = EOB_ACT_CONTINUE_SCAN;
 
-       if (((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
+       if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
                /* Extend the array by 50%, plus the number we really need. */
-               int new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
-               YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc(
-                       (void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf, (yy_size_t) new_size  );
+               yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
+               YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) evalrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size  );
                if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
                        YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
-               /* "- 2" to take care of EOB's */
-               YY_CURRENT_BUFFER_LVALUE->yy_buf_size = (int) (new_size - 2);
        }
 
        (yy_n_chars) += number_to_move;
@@ -2059,13 +1811,14 @@ static int yy_get_next_buffer (void)
 
 /* %if-c-only */
 /* %not-for-header */
+
     static yy_state_type yy_get_previous_state (void)
 /* %endif */
 /* %if-c++-only */
 /* %endif */
 {
-       yy_state_type yy_current_state;
-       char *yy_cp;
+       register yy_state_type yy_current_state;
+       register char *yy_cp;
     
 /* %% [15.0] code to get the start state into yy_current_state goes here */
        yy_current_state = (yy_start);
@@ -2073,7 +1826,7 @@ static int yy_get_next_buffer (void)
        for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
                {
 /* %% [16.0] code to find the next state goes here */
-               YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
+               register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
                if ( yy_accept[yy_current_state] )
                        {
                        (yy_last_accepting_state) = yy_current_state;
@@ -2083,9 +1836,9 @@ static int yy_get_next_buffer (void)
                        {
                        yy_current_state = (int) yy_def[yy_current_state];
                        if ( yy_current_state >= 213 )
-                               yy_c = yy_meta[yy_c];
+                               yy_c = yy_meta[(unsigned int) yy_c];
                        }
-               yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
+               yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
                }
 
        return yy_current_state;
@@ -2102,11 +1855,11 @@ static int yy_get_next_buffer (void)
 /* %if-c++-only */
 /* %endif */
 {
-       int yy_is_jam;
+       register int yy_is_jam;
     /* %% [17.0] code to find the next state, and perhaps do backing up, goes here */
-       char *yy_cp = (yy_c_buf_p);
+       register char *yy_cp = (yy_c_buf_p);
 
-       YY_CHAR yy_c = 1;
+       register YY_CHAR yy_c = 1;
        if ( yy_accept[yy_current_state] )
                {
                (yy_last_accepting_state) = yy_current_state;
@@ -2116,19 +1869,17 @@ static int yy_get_next_buffer (void)
                {
                yy_current_state = (int) yy_def[yy_current_state];
                if ( yy_current_state >= 213 )
-                       yy_c = yy_meta[yy_c];
+                       yy_c = yy_meta[(unsigned int) yy_c];
                }
-       yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
+       yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
        yy_is_jam = (yy_current_state == 212);
 
-               return yy_is_jam ? 0 : yy_current_state;
+       return yy_is_jam ? 0 : yy_current_state;
 }
 
-#ifndef YY_NO_UNPUT
 /* %if-c-only */
 
 /* %endif */
-#endif
 
 /* %if-c-only */
 #ifndef YY_NO_INPUT
@@ -2158,7 +1909,7 @@ static int yy_get_next_buffer (void)
 
                else
                        { /* need more input */
-                       int offset = (int) ((yy_c_buf_p) - (yytext_ptr));
+                       yy_size_t offset = (yy_c_buf_p) - (yytext_ptr);
                        ++(yy_c_buf_p);
 
                        switch ( yy_get_next_buffer(  ) )
@@ -2175,13 +1926,13 @@ static int yy_get_next_buffer (void)
                                         */
 
                                        /* Reset buffer status. */
-                                       yyrestart( yyin );
+                                       evalrestart(evalin );
 
                                        /*FALLTHROUGH*/
 
                                case EOB_ACT_END_OF_FILE:
                                        {
-                                       if ( yywrap(  ) )
+                                       if ( evalwrap( ) )
                                                return 0;
 
                                        if ( ! (yy_did_buffer_switch_on_eof) )
@@ -2201,13 +1952,13 @@ static int yy_get_next_buffer (void)
                }
 
        c = *(unsigned char *) (yy_c_buf_p);    /* cast for 8-bit char's */
-       *(yy_c_buf_p) = '\0';   /* preserve yytext */
+       *(yy_c_buf_p) = '\0';   /* preserve evaltext */
        (yy_hold_char) = *++(yy_c_buf_p);
 
-/* %% [19.0] update BOL and yylineno */
+/* %% [19.0] update BOL and evallineno */
        if ( c == '\n' )
-               
-    yylineno++;
+                  
+    evallineno++;
 ;
 
        return c;
@@ -2222,31 +1973,28 @@ static int yy_get_next_buffer (void)
  * @note This function does not reset the start condition to @c INITIAL .
  */
 /* %if-c-only */
-    void yyrestart  (FILE * input_file )
+    void evalrestart  (FILE * input_file )
 /* %endif */
 /* %if-c++-only */
 /* %endif */
 {
     
        if ( ! YY_CURRENT_BUFFER ){
-        yyensure_buffer_stack ();
+        evalensure_buffer_stack ();
                YY_CURRENT_BUFFER_LVALUE =
-            yy_create_buffer( yyin, YY_BUF_SIZE );
+            eval_create_buffer(evalin,YY_BUF_SIZE );
        }
 
-       yy_init_buffer( YY_CURRENT_BUFFER, input_file );
-       yy_load_buffer_state(  );
+       eval_init_buffer(YY_CURRENT_BUFFER,input_file );
+       eval_load_buffer_state( );
 }
 
-/* %if-c++-only */
-/* %endif */
-
 /** Switch to a different input buffer.
  * @param new_buffer The new input buffer.
  * 
  */
 /* %if-c-only */
-    void yy_switch_to_buffer  (YY_BUFFER_STATE  new_buffer )
+    void eval_switch_to_buffer  (YY_BUFFER_STATE  new_buffer )
 /* %endif */
 /* %if-c++-only */
 /* %endif */
@@ -2254,10 +2002,10 @@ static int yy_get_next_buffer (void)
     
        /* TODO. We should be able to replace this entire function body
         * with
-        *              yypop_buffer_state();
-        *              yypush_buffer_state(new_buffer);
+        *              evalpop_buffer_state();
+        *              evalpush_buffer_state(new_buffer);
      */
-       yyensure_buffer_stack ();
+       evalensure_buffer_stack ();
        if ( YY_CURRENT_BUFFER == new_buffer )
                return;
 
@@ -2270,29 +2018,25 @@ static int yy_get_next_buffer (void)
                }
 
        YY_CURRENT_BUFFER_LVALUE = new_buffer;
-       yy_load_buffer_state(  );
+       eval_load_buffer_state( );
 
        /* We don't actually know whether we did this switch during
-        * EOF (yywrap()) processing, but the only time this flag
-        * is looked at is after yywrap() is called, so it's safe
+        * EOF (evalwrap()) processing, but the only time this flag
+        * is looked at is after evalwrap() is called, so it's safe
         * to go ahead and always set it.
         */
        (yy_did_buffer_switch_on_eof) = 1;
 }
 
 /* %if-c-only */
-static void yy_load_buffer_state  (void)
+static void eval_load_buffer_state  (void)
 /* %endif */
 /* %if-c++-only */
 /* %endif */
 {
        (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
        (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
-/* %if-c-only */
-       yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
-/* %endif */
-/* %if-c++-only */
-/* %endif */
+       evalin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
        (yy_hold_char) = *(yy_c_buf_p);
 }
 
@@ -2303,42 +2047,39 @@ static void yy_load_buffer_state  (void)
  * @return the allocated buffer state.
  */
 /* %if-c-only */
-    YY_BUFFER_STATE yy_create_buffer  (FILE * file, int  size )
+    YY_BUFFER_STATE eval_create_buffer  (FILE * file, int  size )
 /* %endif */
 /* %if-c++-only */
 /* %endif */
 {
        YY_BUFFER_STATE b;
     
-       b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state )  );
+       b = (YY_BUFFER_STATE) evalalloc(sizeof( struct yy_buffer_state )  );
        if ( ! b )
-               YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
+               YY_FATAL_ERROR( "out of dynamic memory in eval_create_buffer()" );
 
        b->yy_buf_size = size;
 
        /* yy_ch_buf has to be 2 characters longer than the size given because
         * we need to put in 2 end-of-buffer characters.
         */
-       b->yy_ch_buf = (char *) yyalloc( (yy_size_t) (b->yy_buf_size + 2)  );
+       b->yy_ch_buf = (char *) evalalloc(b->yy_buf_size + 2  );
        if ( ! b->yy_ch_buf )
-               YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
+               YY_FATAL_ERROR( "out of dynamic memory in eval_create_buffer()" );
 
        b->yy_is_our_buffer = 1;
 
-       yy_init_buffer( b, file );
+       eval_init_buffer(b,file );
 
        return b;
 }
 
-/* %if-c++-only */
-/* %endif */
-
 /** Destroy the buffer.
- * @param b a buffer created with yy_create_buffer()
+ * @param b a buffer created with eval_create_buffer()
  * 
  */
 /* %if-c-only */
-    void yy_delete_buffer (YY_BUFFER_STATE  b )
+    void eval_delete_buffer (YY_BUFFER_STATE  b )
 /* %endif */
 /* %if-c++-only */
 /* %endif */
@@ -2351,17 +2092,28 @@ static void yy_load_buffer_state  (void)
                YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
 
        if ( b->yy_is_our_buffer )
-               yyfree( (void *) b->yy_ch_buf  );
+               evalfree((void *) b->yy_ch_buf  );
 
-       yyfree( (void *) b  );
+       evalfree((void *) b  );
 }
 
+/* %if-c-only */
+
+#ifndef __cplusplus
+extern int isatty (int );
+#endif /* __cplusplus */
+    
+/* %endif */
+
+/* %if-c++-only */
+/* %endif */
+
 /* Initializes or reinitializes a buffer.
  * This function is sometimes called more than once on the same buffer,
- * such as during a yyrestart() or at EOF.
+ * such as during a evalrestart() or at EOF.
  */
 /* %if-c-only */
-    static void yy_init_buffer  (YY_BUFFER_STATE  b, FILE * file )
+    static void eval_init_buffer  (YY_BUFFER_STATE  b, FILE * file )
 /* %endif */
 /* %if-c++-only */
 /* %endif */
@@ -2369,17 +2121,13 @@ static void yy_load_buffer_state  (void)
 {
        int oerrno = errno;
     
-       yy_flush_buffer( b );
+       eval_flush_buffer(b );
 
-/* %if-c-only */
        b->yy_input_file = file;
-/* %endif */
-/* %if-c++-only */
-/* %endif */
        b->yy_fill_buffer = 1;
 
-    /* If b is the current buffer, then yy_init_buffer was _probably_
-     * called from yyrestart() or through yy_get_next_buffer.
+    /* If b is the current buffer, then eval_init_buffer was _probably_
+     * called from evalrestart() or through yy_get_next_buffer.
      * In that case, we don't want to reset the lineno or column.
      */
     if (b != YY_CURRENT_BUFFER){
@@ -2402,7 +2150,7 @@ static void yy_load_buffer_state  (void)
  * 
  */
 /* %if-c-only */
-    void yy_flush_buffer (YY_BUFFER_STATE  b )
+    void eval_flush_buffer (YY_BUFFER_STATE  b )
 /* %endif */
 /* %if-c++-only */
 /* %endif */
@@ -2425,7 +2173,7 @@ static void yy_load_buffer_state  (void)
        b->yy_buffer_status = YY_BUFFER_NEW;
 
        if ( b == YY_CURRENT_BUFFER )
-               yy_load_buffer_state(  );
+               eval_load_buffer_state( );
 }
 
 /* %if-c-or-c++ */
@@ -2436,7 +2184,7 @@ static void yy_load_buffer_state  (void)
  *  
  */
 /* %if-c-only */
-void yypush_buffer_state (YY_BUFFER_STATE new_buffer )
+void evalpush_buffer_state (YY_BUFFER_STATE new_buffer )
 /* %endif */
 /* %if-c++-only */
 /* %endif */
@@ -2444,9 +2192,9 @@ void yypush_buffer_state (YY_BUFFER_STATE new_buffer )
        if (new_buffer == NULL)
                return;
 
-       yyensure_buffer_stack();
+       evalensure_buffer_stack();
 
-       /* This block is copied from yy_switch_to_buffer. */
+       /* This block is copied from eval_switch_to_buffer. */
        if ( YY_CURRENT_BUFFER )
                {
                /* Flush out information for old buffer. */
@@ -2460,8 +2208,8 @@ void yypush_buffer_state (YY_BUFFER_STATE new_buffer )
                (yy_buffer_stack_top)++;
        YY_CURRENT_BUFFER_LVALUE = new_buffer;
 
-       /* copied from yy_switch_to_buffer. */
-       yy_load_buffer_state(  );
+       /* copied from eval_switch_to_buffer. */
+       eval_load_buffer_state( );
        (yy_did_buffer_switch_on_eof) = 1;
 }
 /* %endif */
@@ -2472,7 +2220,7 @@ void yypush_buffer_state (YY_BUFFER_STATE new_buffer )
  *  
  */
 /* %if-c-only */
-void yypop_buffer_state (void)
+void evalpop_buffer_state (void)
 /* %endif */
 /* %if-c++-only */
 /* %endif */
@@ -2480,13 +2228,13 @@ void yypop_buffer_state (void)
        if (!YY_CURRENT_BUFFER)
                return;
 
-       yy_delete_buffer(YY_CURRENT_BUFFER );
+       eval_delete_buffer(YY_CURRENT_BUFFER );
        YY_CURRENT_BUFFER_LVALUE = NULL;
        if ((yy_buffer_stack_top) > 0)
                --(yy_buffer_stack_top);
 
        if (YY_CURRENT_BUFFER) {
-               yy_load_buffer_state(  );
+               eval_load_buffer_state( );
                (yy_did_buffer_switch_on_eof) = 1;
        }
 }
@@ -2497,7 +2245,7 @@ void yypop_buffer_state (void)
  *  Guarantees space for at least one push.
  */
 /* %if-c-only */
-static void yyensure_buffer_stack (void)
+static void evalensure_buffer_stack (void)
 /* %endif */
 /* %if-c++-only */
 /* %endif */
@@ -2510,15 +2258,15 @@ static void yyensure_buffer_stack (void)
                 * scanner will even need a stack. We use 2 instead of 1 to avoid an
                 * immediate realloc on the next call.
          */
-      num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */
-               (yy_buffer_stack) = (struct yy_buffer_state**)yyalloc
+               num_to_alloc = 1;
+               (yy_buffer_stack) = (struct yy_buffer_state**)evalalloc
                                                                (num_to_alloc * sizeof(struct yy_buffer_state*)
                                                                );
                if ( ! (yy_buffer_stack) )
-                       YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
-
+                       YY_FATAL_ERROR( "out of dynamic memory in evalensure_buffer_stack()" );
+                                                                 
                memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
-
+                               
                (yy_buffer_stack_max) = num_to_alloc;
                (yy_buffer_stack_top) = 0;
                return;
@@ -2527,15 +2275,15 @@ static void yyensure_buffer_stack (void)
        if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
 
                /* Increase the buffer to prepare for a possible push. */
-               yy_size_t grow_size = 8 /* arbitrary grow size */;
+               int grow_size = 8 /* arbitrary grow size */;
 
                num_to_alloc = (yy_buffer_stack_max) + grow_size;
-               (yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc
+               (yy_buffer_stack) = (struct yy_buffer_state**)evalrealloc
                                                                ((yy_buffer_stack),
                                                                num_to_alloc * sizeof(struct yy_buffer_state*)
                                                                );
                if ( ! (yy_buffer_stack) )
-                       YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
+                       YY_FATAL_ERROR( "out of dynamic memory in evalensure_buffer_stack()" );
 
                /* zero only the new slots.*/
                memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
@@ -2549,9 +2297,9 @@ static void yyensure_buffer_stack (void)
  * @param base the character buffer
  * @param size the size in bytes of the character buffer
  * 
- * @return the newly allocated buffer state object.
+ * @return the newly allocated buffer state object. 
  */
-YY_BUFFER_STATE yy_scan_buffer  (char * base, yy_size_t  size )
+YY_BUFFER_STATE eval_scan_buffer  (char * base, yy_size_t  size )
 {
        YY_BUFFER_STATE b;
     
@@ -2559,73 +2307,72 @@ YY_BUFFER_STATE yy_scan_buffer  (char * base, yy_size_t  size )
             base[size-2] != YY_END_OF_BUFFER_CHAR ||
             base[size-1] != YY_END_OF_BUFFER_CHAR )
                /* They forgot to leave room for the EOB's. */
-               return NULL;
+               return 0;
 
-       b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state )  );
+       b = (YY_BUFFER_STATE) evalalloc(sizeof( struct yy_buffer_state )  );
        if ( ! b )
-               YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
+               YY_FATAL_ERROR( "out of dynamic memory in eval_scan_buffer()" );
 
-       b->yy_buf_size = (int) (size - 2);      /* "- 2" to take care of EOB's */
+       b->yy_buf_size = size - 2;      /* "- 2" to take care of EOB's */
        b->yy_buf_pos = b->yy_ch_buf = base;
        b->yy_is_our_buffer = 0;
-       b->yy_input_file = NULL;
+       b->yy_input_file = 0;
        b->yy_n_chars = b->yy_buf_size;
        b->yy_is_interactive = 0;
        b->yy_at_bol = 1;
        b->yy_fill_buffer = 0;
        b->yy_buffer_status = YY_BUFFER_NEW;
 
-       yy_switch_to_buffer( b  );
+       eval_switch_to_buffer(b  );
 
        return b;
 }
 /* %endif */
 
 /* %if-c-only */
-/** Setup the input buffer state to scan a string. The next call to yylex() will
+/** Setup the input buffer state to scan a string. The next call to evallex() will
  * scan from a @e copy of @a str.
  * @param yystr a NUL-terminated string to scan
  * 
  * @return the newly allocated buffer state object.
  * @note If you want to scan bytes that may contain NUL values, then use
- *       yy_scan_bytes() instead.
+ *       eval_scan_bytes() instead.
  */
-YY_BUFFER_STATE yy_scan_string (const char * yystr )
+YY_BUFFER_STATE eval_scan_string (yyconst char * yystr )
 {
     
-       return yy_scan_bytes( yystr, (int) strlen(yystr) );
+       return eval_scan_bytes(yystr,strlen(yystr) );
 }
 /* %endif */
 
 /* %if-c-only */
-/** Setup the input buffer state to scan the given bytes. The next call to yylex() will
+/** Setup the input buffer state to scan the given bytes. The next call to evallex() will
  * scan from a @e copy of @a bytes.
- * @param yybytes the byte buffer to scan
- * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes.
+ * @param bytes the byte buffer to scan
+ * @param len the number of bytes in the buffer pointed to by @a bytes.
  * 
  * @return the newly allocated buffer state object.
  */
-YY_BUFFER_STATE yy_scan_bytes  (const char * yybytes, int  _yybytes_len )
+YY_BUFFER_STATE eval_scan_bytes  (yyconst char * yybytes, yy_size_t  _yybytes_len )
 {
        YY_BUFFER_STATE b;
        char *buf;
-       yy_size_t n;
-       int i;
+       yy_size_t n, i;
     
        /* Get memory for full buffer, including space for trailing EOB's. */
-       n = (yy_size_t) (_yybytes_len + 2);
-       buf = (char *) yyalloc( n  );
+       n = _yybytes_len + 2;
+       buf = (char *) evalalloc(n  );
        if ( ! buf )
-               YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
+               YY_FATAL_ERROR( "out of dynamic memory in eval_scan_bytes()" );
 
        for ( i = 0; i < _yybytes_len; ++i )
                buf[i] = yybytes[i];
 
        buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
 
-       b = yy_scan_buffer( buf, n );
+       b = eval_scan_buffer(buf,n );
        if ( ! b )
-               YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
+               YY_FATAL_ERROR( "bad buffer in eval_scan_bytes()" );
 
        /* It's okay to grow etc. this buffer, and we should throw it
         * away when we're done.
@@ -2641,9 +2388,9 @@ YY_BUFFER_STATE yy_scan_bytes  (const char * yybytes, int  _yybytes_len )
 #endif
 
 /* %if-c-only */
-static void yynoreturn yy_fatal_error (const char* msg )
+static void yy_fatal_error (yyconst char* msg )
 {
-                       fprintf( stderr, "%s\n", msg );
+       (void) fprintf( stderr, "%s\n", msg );
        exit( YY_EXIT_FAILURE );
 }
 /* %endif */
@@ -2656,14 +2403,14 @@ static void yynoreturn yy_fatal_error (const char* msg )
 #define yyless(n) \
        do \
                { \
-               /* Undo effects of setting up yytext. */ \
+               /* Undo effects of setting up evaltext. */ \
         int yyless_macro_arg = (n); \
         YY_LESS_LINENO(yyless_macro_arg);\
-               yytext[yyleng] = (yy_hold_char); \
-               (yy_c_buf_p) = yytext + yyless_macro_arg; \
+               evaltext[evalleng] = (yy_hold_char); \
+               (yy_c_buf_p) = evaltext + yyless_macro_arg; \
                (yy_hold_char) = *(yy_c_buf_p); \
                *(yy_c_buf_p) = '\0'; \
-               yyleng = yyless_macro_arg; \
+               evalleng = yyless_macro_arg; \
                } \
        while ( 0 )
 
@@ -2676,82 +2423,82 @@ static void yynoreturn yy_fatal_error (const char* msg )
 /** Get the current line number.
  * 
  */
-int yyget_lineno  (void)
+int evalget_lineno  (void)
 {
-    
-    return yylineno;
+        
+    return evallineno;
 }
 
 /** Get the input stream.
  * 
  */
-FILE *yyget_in  (void)
+FILE *evalget_in  (void)
 {
-        return yyin;
+        return evalin;
 }
 
 /** Get the output stream.
  * 
  */
-FILE *yyget_out  (void)
+FILE *evalget_out  (void)
 {
-        return yyout;
+        return evalout;
 }
 
 /** Get the length of the current token.
  * 
  */
-int yyget_leng  (void)
+yy_size_t evalget_leng  (void)
 {
-        return yyleng;
+        return evalleng;
 }
 
 /** Get the current token.
  * 
  */
 
-char *yyget_text  (void)
+char *evalget_text  (void)
 {
-        return yytext;
+        return evaltext;
 }
 
 /* %if-reentrant */
 /* %endif */
 
 /** Set the current line number.
- * @param _line_number line number
+ * @param line_number
  * 
  */
-void yyset_lineno (int  _line_number )
+void evalset_lineno (int  line_number )
 {
     
-    yylineno = _line_number;
+    evallineno = line_number;
 }
 
 /** Set the input stream. This does not discard the current
  * input buffer.
- * @param _in_str A readable stream.
+ * @param in_str A readable stream.
  * 
- * @see yy_switch_to_buffer
+ * @see eval_switch_to_buffer
  */
-void yyset_in (FILE *  _in_str )
+void evalset_in (FILE *  in_str )
 {
-        yyin = _in_str ;
+        evalin = in_str ;
 }
 
-void yyset_out (FILE *  _out_str )
+void evalset_out (FILE *  out_str )
 {
-        yyout = _out_str ;
+        evalout = out_str ;
 }
 
-int yyget_debug  (void)
+int evalget_debug  (void)
 {
-        return yy_flex_debug;
+        return eval_flex_debug;
 }
 
-void yyset_debug (int  _bdebug )
+void evalset_debug (int  bdebug )
 {
-        yy_flex_debug = _bdebug ;
+        eval_flex_debug = bdebug ;
 }
 
 /* %endif */
@@ -2765,53 +2512,53 @@ void yyset_debug (int  _bdebug )
 static int yy_init_globals (void)
 {
         /* Initialization is the same as for the non-reentrant scanner.
-     * This function is called from yylex_destroy(), so don't allocate here.
+     * This function is called from evallex_destroy(), so don't allocate here.
      */
 
-    /* We do not touch yylineno unless the option is enabled. */
-    yylineno =  1;
+    /* We do not touch evallineno unless the option is enabled. */
+    evallineno =  1;
     
-    (yy_buffer_stack) = NULL;
+    (yy_buffer_stack) = 0;
     (yy_buffer_stack_top) = 0;
     (yy_buffer_stack_max) = 0;
-    (yy_c_buf_p) = NULL;
+    (yy_c_buf_p) = (char *) 0;
     (yy_init) = 0;
     (yy_start) = 0;
 
 /* Defined in main.c */
 #ifdef YY_STDINIT
-    yyin = stdin;
-    yyout = stdout;
+    evalin = stdin;
+    evalout = stdout;
 #else
-    yyin = NULL;
-    yyout = NULL;
+    evalin = (FILE *) 0;
+    evalout = (FILE *) 0;
 #endif
 
     /* For future reference: Set errno on error, since we are called by
-     * yylex_init()
+     * evallex_init()
      */
     return 0;
 }
 /* %endif */
 
 /* %if-c-only SNIP! this currently causes conflicts with the c++ scanner */
-/* yylex_destroy is for both reentrant and non-reentrant scanners. */
-int yylex_destroy  (void)
+/* evallex_destroy is for both reentrant and non-reentrant scanners. */
+int evallex_destroy  (void)
 {
     
     /* Pop the buffer stack, destroying each element. */
        while(YY_CURRENT_BUFFER){
-               yy_delete_buffer( YY_CURRENT_BUFFER  );
+               eval_delete_buffer(YY_CURRENT_BUFFER  );
                YY_CURRENT_BUFFER_LVALUE = NULL;
-               yypop_buffer_state();
+               evalpop_buffer_state();
        }
 
        /* Destroy the stack itself. */
-       yyfree((yy_buffer_stack) );
+       evalfree((yy_buffer_stack) );
        (yy_buffer_stack) = NULL;
 
     /* Reset the globals. This is important in a non-reentrant scanner so the next time
-     * yylex() is called, initialization will occur. */
+     * evallex() is called, initialization will occur. */
     yy_init_globals( );
 
 /* %if-reentrant */
@@ -2825,19 +2572,18 @@ int yylex_destroy  (void)
  */
 
 #ifndef yytext_ptr
-static void yy_flex_strncpy (char* s1, const char * s2, int n )
+static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
 {
-               
-       int i;
+       register int i;
        for ( i = 0; i < n; ++i )
                s1[i] = s2[i];
 }
 #endif
 
 #ifdef YY_NEED_STRLEN
-static int yy_flex_strlen (const char * s )
+static int yy_flex_strlen (yyconst char * s )
 {
-       int n;
+       register int n;
        for ( n = 0; s[n]; ++n )
                ;
 
@@ -2845,14 +2591,13 @@ static int yy_flex_strlen (const char * s )
 }
 #endif
 
-void *yyalloc (yy_size_t  size )
+void *evalalloc (yy_size_t  size )
 {
-                       return malloc(size);
+       return (void *) malloc( size );
 }
 
-void *yyrealloc  (void * ptr, yy_size_t  size )
+void *evalrealloc  (void * ptr, yy_size_t  size )
 {
-               
        /* The cast to (char *) in the following accommodates both
         * implementations that use char* generic pointers, and those
         * that use void* generic pointers.  It works with the latter
@@ -2860,12 +2605,12 @@ void *yyrealloc  (void * ptr, yy_size_t  size )
         * any pointer type to void*, and deal with argument conversions
         * as though doing an assignment.
         */
-       return realloc(ptr, size);
+       return (void *) realloc( (char *) ptr, size );
 }
 
-void yyfree (void * ptr )
+void evalfree (void * ptr )
 {
-                       free( (char *) ptr );   /* see yyrealloc() for (char *) cast */
+       free( (char *) ptr );   /* see evalrealloc() for (char *) cast */
 }
 
 /* %if-tables-serialization definitions */
@@ -2875,7 +2620,8 @@ void yyfree (void * ptr )
 
 /* %ok-for-header */
 
-#line 236 "lexer.ll"
+#line 235 "lexer.ll"
+
 
 
 using namespace isc::eval;
index 135200f062cd03ec4d9a117d4020b8249389e68b..cf3341af9be3532243bd9228321219d8b082fd94 100644 (file)
@@ -1,4 +1,3 @@
-// Generated 201906181714
 // A Bison parser, made by GNU Bison 3.4.1.
 
 // Locations for Bison parsers in C++
index ca0869e596bf37e1ea4b031947bbd5a3b5b4e1b5..890a4706eb8333107f25ccd951b39d83ae93547f 100644 (file)
@@ -849,6 +849,15 @@ namespace isc { namespace eval {
 
   case 11:
 #line 156 "parser.yy"
+    {
+                    TokenPtr opt(new TokenSubOption(yystack_[8].value.as < uint16_t > (), yystack_[3].value.as < uint16_t > (), TokenOption::EXISTS));
+                    ctx.expression.push_back(opt);
+                }
+#line 857 "parser.cc"
+    break;
+
+  case 12:
+#line 161 "parser.yy"
     {
                    switch (ctx.getUniverse()) {
                    case Option::V4:
@@ -868,11 +877,11 @@ namespace isc { namespace eval {
                        error(yystack_[5].location, "relay4 can only be used in DHCPv4.");
                    }
                 }
-#line 872 "parser.cc"
+#line 881 "parser.cc"
     break;
 
-  case 12:
-#line 176 "parser.yy"
+  case 13:
+#line 181 "parser.yy"
     {
                     switch (ctx.getUniverse()) {
                     case Option::V6:
@@ -886,11 +895,11 @@ namespace isc { namespace eval {
                         error(yystack_[10].location, "relay6 can only be used in DHCPv6.");
                     }
                 }
-#line 890 "parser.cc"
+#line 899 "parser.cc"
     break;
 
-  case 13:
-#line 190 "parser.yy"
+  case 14:
+#line 195 "parser.yy"
     {
                   // Expression: vendor-class[1234].exists
                   //
@@ -899,11 +908,11 @@ namespace isc { namespace eval {
                   TokenPtr exist(new TokenVendorClass(ctx.getUniverse(), yystack_[3].value.as < uint32_t > (), TokenOption::EXISTS));
                   ctx.expression.push_back(exist);
               }
-#line 903 "parser.cc"
+#line 912 "parser.cc"
     break;
 
-  case 14:
-#line 199 "parser.yy"
+  case 15:
+#line 204 "parser.yy"
     {
                   // Expression: vendor[1234].exists
                   //
@@ -912,11 +921,11 @@ namespace isc { namespace eval {
                   TokenPtr exist(new TokenVendor(ctx.getUniverse(), yystack_[3].value.as < uint32_t > (), TokenOption::EXISTS));
                   ctx.expression.push_back(exist);
               }
-#line 916 "parser.cc"
+#line 925 "parser.cc"
     break;
 
-  case 15:
-#line 208 "parser.yy"
+  case 16:
+#line 213 "parser.yy"
     {
                   // Expression vendor[1234].option[123].exists
                   //
@@ -926,11 +935,11 @@ namespace isc { namespace eval {
                   TokenPtr exist(new TokenVendor(ctx.getUniverse(), yystack_[8].value.as < uint32_t > (), TokenOption::EXISTS, yystack_[3].value.as < uint16_t > ()));
                   ctx.expression.push_back(exist);
                }
-#line 930 "parser.cc"
+#line 939 "parser.cc"
     break;
 
-  case 16:
-#line 218 "parser.yy"
+  case 17:
+#line 223 "parser.yy"
     {
                   // Expression member('foo')
                   //
@@ -945,23 +954,14 @@ namespace isc { namespace eval {
                   TokenPtr member(new TokenMember(cc));
                   ctx.expression.push_back(member);
               }
-#line 949 "parser.cc"
-    break;
-
-  case 17:
-#line 235 "parser.yy"
-    {
-                      TokenPtr str(new TokenString(yystack_[0].value.as < std::string > ()));
-                      ctx.expression.push_back(str);
-                  }
 #line 958 "parser.cc"
     break;
 
   case 18:
 #line 240 "parser.yy"
     {
-                      TokenPtr hex(new TokenHexString(yystack_[0].value.as < std::string > ()));
-                      ctx.expression.push_back(hex);
+                      TokenPtr str(new TokenString(yystack_[0].value.as < std::string > ()));
+                      ctx.expression.push_back(str);
                   }
 #line 967 "parser.cc"
     break;
@@ -969,8 +969,8 @@ namespace isc { namespace eval {
   case 19:
 #line 245 "parser.yy"
     {
-                      TokenPtr ip(new TokenIpAddress(yystack_[0].value.as < std::string > ()));
-                      ctx.expression.push_back(ip);
+                      TokenPtr hex(new TokenHexString(yystack_[0].value.as < std::string > ()));
+                      ctx.expression.push_back(hex);
                   }
 #line 976 "parser.cc"
     break;
@@ -978,14 +978,32 @@ namespace isc { namespace eval {
   case 20:
 #line 250 "parser.yy"
     {
-                      TokenPtr opt(new TokenOption(yystack_[3].value.as < uint16_t > (), yystack_[0].value.as < TokenOption::RepresentationType > ()));
-                      ctx.expression.push_back(opt);
+                      TokenPtr ip(new TokenIpAddress(yystack_[0].value.as < std::string > ()));
+                      ctx.expression.push_back(ip);
                   }
 #line 985 "parser.cc"
     break;
 
   case 21:
 #line 255 "parser.yy"
+    {
+                      TokenPtr opt(new TokenOption(yystack_[3].value.as < uint16_t > (), yystack_[0].value.as < TokenOption::RepresentationType > ()));
+                      ctx.expression.push_back(opt);
+                  }
+#line 994 "parser.cc"
+    break;
+
+  case 22:
+#line 260 "parser.yy"
+    {
+                      TokenPtr opt(new TokenSubOption(yystack_[8].value.as < uint16_t > (), yystack_[3].value.as < uint16_t > (), yystack_[0].value.as < TokenOption::RepresentationType > ()));
+                      ctx.expression.push_back(opt);
+                  }
+#line 1003 "parser.cc"
+    break;
+
+  case 23:
+#line 265 "parser.yy"
     {
                      switch (ctx.getUniverse()) {
                      case Option::V4:
@@ -1005,11 +1023,11 @@ namespace isc { namespace eval {
                          error(yystack_[5].location, "relay4 can only be used in DHCPv4.");
                      }
                   }
-#line 1009 "parser.cc"
+#line 1027 "parser.cc"
     break;
 
-  case 22:
-#line 276 "parser.yy"
+  case 24:
+#line 286 "parser.yy"
     {
                      switch (ctx.getUniverse()) {
                      case Option::V6:
@@ -1023,20 +1041,20 @@ namespace isc { namespace eval {
                          error(yystack_[10].location, "relay6 can only be used in DHCPv6.");
                      }
                   }
-#line 1027 "parser.cc"
+#line 1045 "parser.cc"
     break;
 
-  case 23:
-#line 291 "parser.yy"
+  case 25:
+#line 301 "parser.yy"
     {
                       TokenPtr pkt_metadata(new TokenPkt(yystack_[0].value.as < TokenPkt::MetadataType > ()));
                       ctx.expression.push_back(pkt_metadata);
                   }
-#line 1036 "parser.cc"
+#line 1054 "parser.cc"
     break;
 
-  case 24:
-#line 296 "parser.yy"
+  case 26:
+#line 306 "parser.yy"
     {
                      switch (ctx.getUniverse()) {
                      case Option::V4:
@@ -1050,11 +1068,11 @@ namespace isc { namespace eval {
                          error(yystack_[2].location, "pkt4 can only be used in DHCPv4.");
                      }
                   }
-#line 1054 "parser.cc"
+#line 1072 "parser.cc"
     break;
 
-  case 25:
-#line 310 "parser.yy"
+  case 27:
+#line 320 "parser.yy"
     {
                      switch (ctx.getUniverse()) {
                      case Option::V6:
@@ -1068,11 +1086,11 @@ namespace isc { namespace eval {
                          error(yystack_[2].location, "pkt6 can only be used in DHCPv6.");
                      }
                   }
-#line 1072 "parser.cc"
+#line 1090 "parser.cc"
     break;
 
-  case 26:
-#line 324 "parser.yy"
+  case 28:
+#line 334 "parser.yy"
     {
                      switch (ctx.getUniverse()) {
                      case Option::V6:
@@ -1086,47 +1104,47 @@ namespace isc { namespace eval {
                          error(yystack_[5].location, "relay6 can only be used in DHCPv6.");
                      }
                   }
-#line 1090 "parser.cc"
+#line 1108 "parser.cc"
     break;
 
-  case 27:
-#line 339 "parser.yy"
+  case 29:
+#line 349 "parser.yy"
     {
                       TokenPtr sub(new TokenSubstring());
                       ctx.expression.push_back(sub);
                   }
-#line 1099 "parser.cc"
+#line 1117 "parser.cc"
     break;
 
-  case 28:
-#line 344 "parser.yy"
+  case 30:
+#line 354 "parser.yy"
     {
                       TokenPtr conc(new TokenConcat());
                       ctx.expression.push_back(conc);
                   }
-#line 1108 "parser.cc"
+#line 1126 "parser.cc"
     break;
 
-  case 29:
-#line 349 "parser.yy"
+  case 31:
+#line 359 "parser.yy"
     {
                       TokenPtr cond(new TokenIfElse());
                       ctx.expression.push_back(cond);
                   }
-#line 1117 "parser.cc"
+#line 1135 "parser.cc"
     break;
 
-  case 30:
-#line 354 "parser.yy"
+  case 32:
+#line 364 "parser.yy"
     {
                       TokenPtr tohex(new TokenToHexString());
                       ctx.expression.push_back(tohex);
                   }
-#line 1126 "parser.cc"
+#line 1144 "parser.cc"
     break;
 
-  case 31:
-#line 359 "parser.yy"
+  case 33:
+#line 369 "parser.yy"
     {
                     // expression: vendor.enterprise
                     //
@@ -1135,11 +1153,11 @@ namespace isc { namespace eval {
                     TokenPtr vendor(new TokenVendor(ctx.getUniverse(), 0, TokenVendor::ENTERPRISE_ID));
                     ctx.expression.push_back(vendor);
                 }
-#line 1139 "parser.cc"
+#line 1157 "parser.cc"
     break;
 
-  case 32:
-#line 368 "parser.yy"
+  case 34:
+#line 378 "parser.yy"
     {
                     // expression: vendor-class.enterprise
                     //
@@ -1149,11 +1167,11 @@ namespace isc { namespace eval {
                                                          TokenVendor::ENTERPRISE_ID));
                     ctx.expression.push_back(vendor);
                 }
-#line 1153 "parser.cc"
+#line 1171 "parser.cc"
     break;
 
-  case 33:
-#line 378 "parser.yy"
+  case 35:
+#line 388 "parser.yy"
     {
                     // This token will search for vendor option with
                     // specified enterprise-id.  If found, will search
@@ -1162,11 +1180,11 @@ namespace isc { namespace eval {
                     TokenPtr opt(new TokenVendor(ctx.getUniverse(), yystack_[8].value.as < uint32_t > (), yystack_[0].value.as < TokenOption::RepresentationType > (), yystack_[3].value.as < uint16_t > ()));
                     ctx.expression.push_back(opt);
                 }
-#line 1166 "parser.cc"
+#line 1184 "parser.cc"
     break;
 
-  case 34:
-#line 387 "parser.yy"
+  case 36:
+#line 397 "parser.yy"
     {
                     // expression: vendor-class[1234].data
                     //
@@ -1179,11 +1197,11 @@ namespace isc { namespace eval {
                                                                TokenVendor::DATA, 0));
                     ctx.expression.push_back(vendor_class);
                 }
-#line 1183 "parser.cc"
+#line 1201 "parser.cc"
     break;
 
-  case 35:
-#line 400 "parser.yy"
+  case 37:
+#line 410 "parser.yy"
     {
                     // expression: vendor-class[1234].data[5]
                     //
@@ -1196,247 +1214,247 @@ namespace isc { namespace eval {
                                                                TokenVendor::DATA, index));
                     ctx.expression.push_back(vendor_class);
                 }
-#line 1200 "parser.cc"
+#line 1218 "parser.cc"
     break;
 
-  case 36:
-#line 413 "parser.yy"
+  case 38:
+#line 423 "parser.yy"
     {
                     TokenPtr integer(new TokenInteger(yystack_[0].value.as < uint32_t > ()));
                     ctx.expression.push_back(integer);
                 }
-#line 1209 "parser.cc"
+#line 1227 "parser.cc"
     break;
 
-  case 37:
-#line 420 "parser.yy"
+  case 39:
+#line 430 "parser.yy"
     {
                      yylhs.value.as < uint32_t > () = ctx.convertUint32(yystack_[0].value.as < std::string > (), yystack_[0].location);
                  }
-#line 1217 "parser.cc"
+#line 1235 "parser.cc"
     break;
 
-  case 38:
-#line 426 "parser.yy"
+  case 40:
+#line 436 "parser.yy"
     {
                      yylhs.value.as < uint16_t > () = ctx.convertOptionCode(yystack_[0].value.as < std::string > (), yystack_[0].location);
                  }
-#line 1225 "parser.cc"
+#line 1243 "parser.cc"
     break;
 
-  case 39:
-#line 430 "parser.yy"
+  case 41:
+#line 440 "parser.yy"
     {
                      yylhs.value.as < uint16_t > () = ctx.convertOptionName(yystack_[0].value.as < std::string > (), yystack_[0].location);
                  }
-#line 1233 "parser.cc"
+#line 1251 "parser.cc"
     break;
 
-  case 40:
-#line 436 "parser.yy"
+  case 42:
+#line 446 "parser.yy"
     {
                           yylhs.value.as < TokenOption::RepresentationType > () = TokenOption::TEXTUAL;
                       }
-#line 1241 "parser.cc"
+#line 1259 "parser.cc"
     break;
 
-  case 41:
-#line 440 "parser.yy"
+  case 43:
+#line 450 "parser.yy"
     {
                           yylhs.value.as < TokenOption::RepresentationType > () = TokenOption::HEXADECIMAL;
                       }
-#line 1249 "parser.cc"
+#line 1267 "parser.cc"
     break;
 
-  case 42:
-#line 446 "parser.yy"
+  case 44:
+#line 456 "parser.yy"
     {
                      yylhs.value.as < int8_t > () = ctx.convertNestLevelNumber(yystack_[0].value.as < std::string > (), yystack_[0].location);
                  }
-#line 1257 "parser.cc"
+#line 1275 "parser.cc"
     break;
 
-  case 43:
-#line 455 "parser.yy"
+  case 45:
+#line 465 "parser.yy"
     {
                       yylhs.value.as < TokenPkt::MetadataType > () = TokenPkt::IFACE;
                   }
-#line 1265 "parser.cc"
+#line 1283 "parser.cc"
     break;
 
-  case 44:
-#line 459 "parser.yy"
+  case 46:
+#line 469 "parser.yy"
     {
                       yylhs.value.as < TokenPkt::MetadataType > () = TokenPkt::SRC;
                   }
-#line 1273 "parser.cc"
+#line 1291 "parser.cc"
     break;
 
-  case 45:
-#line 463 "parser.yy"
+  case 47:
+#line 473 "parser.yy"
     {
                       yylhs.value.as < TokenPkt::MetadataType > () = TokenPkt::DST;
                   }
-#line 1281 "parser.cc"
+#line 1299 "parser.cc"
     break;
 
-  case 46:
-#line 467 "parser.yy"
+  case 48:
+#line 477 "parser.yy"
     {
                       yylhs.value.as < TokenPkt::MetadataType > () = TokenPkt::LEN;
                   }
-#line 1289 "parser.cc"
+#line 1307 "parser.cc"
     break;
 
-  case 47:
-#line 473 "parser.yy"
+  case 49:
+#line 483 "parser.yy"
     {
                        yylhs.value.as < uint32_t > () = ctx.convertUint32(yystack_[0].value.as < std::string > (), yystack_[0].location);
                    }
-#line 1297 "parser.cc"
+#line 1315 "parser.cc"
     break;
 
-  case 48:
-#line 477 "parser.yy"
+  case 50:
+#line 487 "parser.yy"
     {
                        yylhs.value.as < uint32_t > () = 0;
                    }
-#line 1305 "parser.cc"
+#line 1323 "parser.cc"
     break;
 
-  case 49:
-#line 483 "parser.yy"
+  case 51:
+#line 493 "parser.yy"
     {
                     yylhs.value.as < TokenPkt4::FieldType > () = TokenPkt4::CHADDR;
                 }
-#line 1313 "parser.cc"
+#line 1331 "parser.cc"
     break;
 
-  case 50:
-#line 487 "parser.yy"
+  case 52:
+#line 497 "parser.yy"
     {
                     yylhs.value.as < TokenPkt4::FieldType > () = TokenPkt4::HLEN;
                 }
-#line 1321 "parser.cc"
+#line 1339 "parser.cc"
     break;
 
-  case 51:
-#line 491 "parser.yy"
+  case 53:
+#line 501 "parser.yy"
     {
                     yylhs.value.as < TokenPkt4::FieldType > () = TokenPkt4::HTYPE;
                 }
-#line 1329 "parser.cc"
+#line 1347 "parser.cc"
     break;
 
-  case 52:
-#line 495 "parser.yy"
+  case 54:
+#line 505 "parser.yy"
     {
                     yylhs.value.as < TokenPkt4::FieldType > () = TokenPkt4::CIADDR;
                 }
-#line 1337 "parser.cc"
+#line 1355 "parser.cc"
     break;
 
-  case 53:
-#line 499 "parser.yy"
+  case 55:
+#line 509 "parser.yy"
     {
                     yylhs.value.as < TokenPkt4::FieldType > () = TokenPkt4::GIADDR;
                 }
-#line 1345 "parser.cc"
+#line 1363 "parser.cc"
     break;
 
-  case 54:
-#line 503 "parser.yy"
+  case 56:
+#line 513 "parser.yy"
     {
                     yylhs.value.as < TokenPkt4::FieldType > () = TokenPkt4::YIADDR;
                 }
-#line 1353 "parser.cc"
+#line 1371 "parser.cc"
     break;
 
-  case 55:
-#line 507 "parser.yy"
+  case 57:
+#line 517 "parser.yy"
     {
                     yylhs.value.as < TokenPkt4::FieldType > () = TokenPkt4::SIADDR;
                 }
-#line 1361 "parser.cc"
+#line 1379 "parser.cc"
     break;
 
-  case 56:
-#line 511 "parser.yy"
+  case 58:
+#line 521 "parser.yy"
     {
                     yylhs.value.as < TokenPkt4::FieldType > () = TokenPkt4::MSGTYPE;
                  }
-#line 1369 "parser.cc"
+#line 1387 "parser.cc"
     break;
 
-  case 57:
-#line 515 "parser.yy"
+  case 59:
+#line 525 "parser.yy"
     {
                     yylhs.value.as < TokenPkt4::FieldType > () = TokenPkt4::TRANSID;
                  }
-#line 1377 "parser.cc"
+#line 1395 "parser.cc"
     break;
 
-  case 58:
-#line 521 "parser.yy"
+  case 60:
+#line 531 "parser.yy"
     {
                      yylhs.value.as < TokenPkt6::FieldType > () = TokenPkt6::MSGTYPE;
                  }
-#line 1385 "parser.cc"
+#line 1403 "parser.cc"
     break;
 
-  case 59:
-#line 525 "parser.yy"
+  case 61:
+#line 535 "parser.yy"
     {
                      yylhs.value.as < TokenPkt6::FieldType > () = TokenPkt6::TRANSID;
                  }
-#line 1393 "parser.cc"
+#line 1411 "parser.cc"
     break;
 
-  case 60:
-#line 531 "parser.yy"
+  case 62:
+#line 541 "parser.yy"
     {
                        yylhs.value.as < TokenRelay6Field::FieldType > () = TokenRelay6Field::PEERADDR;
                    }
-#line 1401 "parser.cc"
+#line 1419 "parser.cc"
     break;
 
-  case 61:
-#line 535 "parser.yy"
+  case 63:
+#line 545 "parser.yy"
     {
                        yylhs.value.as < TokenRelay6Field::FieldType > () = TokenRelay6Field::LINKADDR;
                    }
-#line 1409 "parser.cc"
+#line 1427 "parser.cc"
     break;
 
-  case 62:
-#line 541 "parser.yy"
+  case 64:
+#line 551 "parser.yy"
     {
                     TokenPtr str(new TokenString(yystack_[0].value.as < std::string > ()));
                     ctx.expression.push_back(str);
                 }
-#line 1418 "parser.cc"
+#line 1436 "parser.cc"
     break;
 
-  case 63:
-#line 548 "parser.yy"
+  case 65:
+#line 558 "parser.yy"
     {
                      TokenPtr str(new TokenString(yystack_[0].value.as < std::string > ()));
                      ctx.expression.push_back(str);
                  }
-#line 1427 "parser.cc"
+#line 1445 "parser.cc"
     break;
 
-  case 64:
-#line 553 "parser.yy"
+  case 66:
+#line 563 "parser.yy"
     {
                      TokenPtr str(new TokenString("all"));
                      ctx.expression.push_back(str);
                  }
-#line 1436 "parser.cc"
+#line 1454 "parser.cc"
     break;
 
 
-#line 1440 "parser.cc"
+#line 1458 "parser.cc"
 
             default:
               break;
@@ -1714,113 +1732,121 @@ namespace isc { namespace eval {
   const short
   EvalParser::yypact_[] =
   {
-     -14,    27,    76,    17,    27,    27,    37,    41,    53,    39,
-      52,    59,    77,    85,    93,    98,    88,    29,    94,  -118,
-    -118,  -118,  -118,  -118,    56,   104,  -118,   114,   124,   129,
-     119,   120,  -118,  -118,     7,  -118,    87,    87,    67,    95,
-      50,    62,    76,    76,    27,    76,   100,   -35,    99,   -35,
-     101,    27,    27,    76,    87,    87,    67,   -35,   -35,  -118,
-    -118,  -118,   131,   133,  -118,   134,   147,  -118,  -118,  -118,
+      25,    50,    -6,    14,    50,    50,     8,    20,    32,    39,
+      41,   108,    96,   145,   146,   147,   134,    35,    88,  -118,
+    -118,  -118,  -118,  -118,    85,     9,  -118,   137,   138,   139,
+     124,   125,  -118,  -118,    79,  -118,    92,    92,   104,   106,
+      73,    82,    -6,    -6,    50,    -6,    80,    27,   110,    27,
+     111,    50,    50,    -6,    92,    92,   104,    27,    27,  -118,
+    -118,  -118,   143,   144,  -118,   148,   157,  -118,  -118,  -118,
     -118,  -118,  -118,  -118,  -118,  -118,  -118,  -118,  -118,  -118,
-    -118,  -118,   116,   117,    -3,   118,  -118,  -118,  -118,  -118,
-    -118,   139,  -118,   140,  -118,  -118,   151,  -118,   142,   143,
-     144,   145,   146,   148,   149,   150,  -118,   112,    76,    76,
-      76,   152,   153,   154,   155,   156,   157,   158,     9,    64,
-      12,  -118,   128,   164,   141,   172,   -15,     0,   103,   103,
-      36,   132,   170,  -118,  -118,  -118,  -118,  -118,  -118,   165,
-    -118,  -118,  -118,   -29,  -118,    76,  -118,  -118,   166,   167,
-    -118,   168,   169,    87,  -118,  -118,   181,   182,   136,    87,
-      87,    87,   173,  -118,  -118,   174,   175,   176,   177,   171,
-    -118,   178,   179,   180,    80,   113,   103,   103,  -118,  -118,
-    -118,  -118
+    -118,  -118,   126,   127,     0,   129,  -118,  -118,  -118,  -118,
+    -118,   150,  -118,   151,  -118,  -118,   162,  -118,   153,   154,
+     155,   156,   158,   159,   160,   161,  -118,   122,    -6,    -6,
+      -6,   163,   164,   165,   166,   167,   168,   169,     7,    98,
+      66,  -118,   152,   171,   170,   175,    -7,     2,    45,   128,
+      68,   141,   180,   176,  -118,  -118,  -118,  -118,  -118,  -118,
+     177,  -118,  -118,  -118,   -27,  -118,    -6,  -118,  -118,   178,
+     179,  -118,   181,   182,   183,    92,    92,  -118,  -118,   186,
+     191,   149,    92,    92,    92,    92,   185,   187,  -118,  -118,
+     188,   189,   192,   193,   194,   190,   195,  -118,   196,   197,
+     198,   199,   112,   115,   118,   128,   128,   128,  -118,  -118,
+    -118,  -118,  -118,  -118
   };
 
   const unsigned char
   EvalParser::yydefact_[] =
   {
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    17,
-      37,    18,    19,     2,     4,     0,    36,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    18,
+      39,    19,    20,     2,     4,     0,    38,     0,     0,     0,
        0,     0,     3,     1,     0,     6,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     5,
-      38,    39,     0,     0,    42,     0,     0,    43,    44,    45,
-      46,    23,    49,    50,    51,    52,    53,    54,    55,    56,
-      57,    24,     0,     0,     0,     0,    58,    59,    25,    48,
-      47,     0,    32,     0,    31,     7,     8,     9,     0,     0,
-       0,     0,     0,     0,     0,     0,    16,     0,     0,     0,
+      40,    41,     0,     0,    44,     0,     0,    45,    46,    47,
+      48,    25,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,    26,     0,     0,     0,     0,    60,    61,    27,    50,
+      49,     0,    34,     0,    33,     7,     8,     9,     0,     0,
+       0,     0,     0,     0,     0,     0,    17,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    62,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    40,    41,    10,    20,    11,    21,     0,
-      60,    61,    26,     0,    28,     0,    30,    13,    34,     0,
-      14,     0,     0,     0,    64,    63,     0,     0,     0,     0,
-       0,     0,     0,    27,    29,     0,     0,     0,     0,     0,
-      35,     0,     0,     0,     0,     0,     0,     0,    12,    22,
-      15,    33
+       0,    64,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    42,    43,    10,    21,    12,    23,
+       0,    62,    63,    28,     0,    30,     0,    32,    14,    36,
+       0,    15,     0,     0,     0,     0,     0,    66,    65,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    29,    31,
+       0,     0,     0,     0,     0,     0,     0,    37,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    11,    22,
+      13,    24,    16,    35
   };
 
   const short
   EvalParser::yypgoto_[] =
   {
-    -118,  -118,  -118,     3,    -2,  -118,   -36,  -117,   138,  -118,
-     -34,  -118,  -118,  -118,  -118,  -118
+    -118,  -118,  -118,     5,    -2,  -118,   -36,  -117,   172,  -118,
+     -28,  -118,  -118,  -118,  -118,  -118
   };
 
   const short
   EvalParser::yydefgoto_[] =
   {
-      -1,     3,    23,    24,    25,    26,    62,   136,    65,    71,
-      91,    81,    88,   142,   122,   156
+      -1,     3,    23,    24,    25,    26,    62,   137,    65,    71,
+      91,    81,    88,   143,   122,   159
   };
 
   const unsigned char
   EvalParser::yytable_[] =
   {
-      32,    63,   138,    51,    52,   147,   154,    34,    35,   149,
-      89,    59,   138,    51,    52,    93,    90,    33,    98,    99,
-     150,   139,   155,   101,   102,   140,   141,   133,   134,   135,
-       4,   148,     5,   109,     1,     2,     6,     7,     8,     9,
-      82,    83,    39,    85,    47,   151,    48,    84,    10,   140,
-     141,    97,    36,    11,    95,    96,    37,   179,   181,   179,
-     181,    12,    51,    52,    13,    14,    15,    16,    38,    40,
-      17,    18,    67,    68,    69,    70,    41,    19,    20,    21,
-      42,    22,   133,   134,   137,    27,    28,    29,    43,    72,
-      73,    74,    75,    76,    77,    78,    44,    10,   133,   134,
-     178,    45,    11,    79,    80,    46,   123,   124,   125,    49,
-      12,    50,    53,    13,    14,    15,    16,   162,    64,    30,
-      31,   133,   134,   166,   167,   168,    19,    20,    21,    54,
-      22,   133,   134,   180,    57,    58,    48,    50,    60,    55,
-      61,    86,    87,   157,    56,    66,    92,   103,    94,   104,
-     105,   106,   107,   108,   110,   111,   112,    51,   113,   114,
-     115,   116,   117,   121,   143,   118,   119,   120,   144,   126,
-     127,   128,   129,   130,   131,   132,   146,   145,   148,   152,
-     153,   158,   159,   160,   161,   163,   164,   165,   174,   169,
-     170,   171,   172,   173,   100,   175,   176,   177
+      32,    63,   139,    27,    28,    29,    51,    52,   157,    34,
+      35,   150,   139,   148,    33,    10,   133,    53,    98,    99,
+      11,    93,   151,    36,   158,   134,   135,   136,    12,   101,
+     102,    13,    14,    15,    16,    37,   109,    30,    31,   149,
+      82,    83,    39,    85,    19,    20,    21,    38,    22,    84,
+      47,    97,    48,     4,   152,     5,    95,    96,    40,     6,
+       7,     8,     9,   134,   135,   189,   191,   193,   189,   191,
+     193,    10,    89,     1,     2,   140,    11,   153,    90,   141,
+     142,   141,   142,    59,    12,    51,    52,    13,    14,    15,
+      16,    51,    52,    17,    18,    67,    68,    69,    70,    42,
+      19,    20,    21,    49,    22,    50,   123,   124,   125,    72,
+      73,    74,    75,    76,    77,    78,   134,   135,   138,   166,
+     167,    86,    87,    79,    80,    41,   171,   172,   173,   174,
+     134,   135,   188,   134,   135,   190,   134,   135,   192,    57,
+      58,    48,    50,    60,   160,    61,   134,   135,    43,    44,
+      45,    46,    54,    55,    56,    64,    66,    92,    94,   103,
+     104,   106,   107,   108,   105,   110,   111,   112,    51,   113,
+     114,   115,   116,   121,   117,   145,   118,   119,   120,   147,
+     126,   127,   128,   129,   130,   131,   132,   149,   144,   154,
+     168,   155,   156,   161,   162,   169,   163,   164,   165,     0,
+     170,   175,     0,   176,   177,   178,   146,   182,   179,   180,
+     181,     0,   183,   184,   185,   186,   187,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   100
   };
 
-  const unsigned char
+  const short
   EvalParser::yycheck_[] =
   {
-       2,    37,   119,     6,     7,    20,    35,     4,     5,     9,
-      45,     4,   129,     6,     7,    49,    51,     0,    54,    55,
-      20,     9,    51,    57,    58,    13,    14,    18,    19,    20,
-       3,    46,     5,    36,    48,    49,     9,    10,    11,    12,
-      42,    43,     3,    45,    15,     9,    17,    44,    21,    13,
-      14,    53,    15,    26,    51,    52,    15,   174,   175,   176,
-     177,    34,     6,     7,    37,    38,    39,    40,    15,    17,
-      43,    44,    22,    23,    24,    25,    17,    50,    51,    52,
-       3,    54,    18,    19,    20,     9,    10,    11,     3,    27,
-      28,    29,    30,    31,    32,    33,     3,    21,    18,    19,
-      20,     3,    26,    41,    42,    17,   108,   109,   110,    15,
-      34,    17,     8,    37,    38,    39,    40,   153,    51,    43,
-      44,    18,    19,   159,   160,   161,    50,    51,    52,    15,
-      54,    18,    19,    20,    15,    15,    17,    17,    51,    15,
-      53,    41,    42,   145,    15,    50,    47,    16,    47,    16,
-      16,     4,    36,    36,    36,    16,    16,     6,    16,    16,
-      16,    16,    16,    51,    36,    17,    17,    17,     4,    17,
-      17,    17,    17,    17,    17,    17,     4,    36,    46,     9,
-      15,    15,    15,    15,    15,     4,     4,    51,    17,    16,
-      16,    16,    16,    16,    56,    17,    17,    17
+       2,    37,   119,     9,    10,    11,     6,     7,    35,     4,
+       5,     9,   129,    20,     0,    21,     9,     8,    54,    55,
+      26,    49,    20,    15,    51,    18,    19,    20,    34,    57,
+      58,    37,    38,    39,    40,    15,    36,    43,    44,    46,
+      42,    43,     3,    45,    50,    51,    52,    15,    54,    44,
+      15,    53,    17,     3,     9,     5,    51,    52,    17,     9,
+      10,    11,    12,    18,    19,   182,   183,   184,   185,   186,
+     187,    21,    45,    48,    49,     9,    26,     9,    51,    13,
+      14,    13,    14,     4,    34,     6,     7,    37,    38,    39,
+      40,     6,     7,    43,    44,    22,    23,    24,    25,     3,
+      50,    51,    52,    15,    54,    17,   108,   109,   110,    27,
+      28,    29,    30,    31,    32,    33,    18,    19,    20,   155,
+     156,    41,    42,    41,    42,    17,   162,   163,   164,   165,
+      18,    19,    20,    18,    19,    20,    18,    19,    20,    15,
+      15,    17,    17,    51,   146,    53,    18,    19,     3,     3,
+       3,    17,    15,    15,    15,    51,    50,    47,    47,    16,
+      16,     4,    36,    36,    16,    36,    16,    16,     6,    16,
+      16,    16,    16,    51,    16,     4,    17,    17,    17,     4,
+      17,    17,    17,    17,    17,    17,    17,    46,    36,     9,
+       4,    15,    15,    15,    15,     4,    15,    15,    15,    -1,
+      51,    16,    -1,    16,    16,    16,    36,    17,    16,    16,
+      16,    -1,    17,    17,    17,    17,    17,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    56
   };
 
   const unsigned char
@@ -1839,36 +1865,37 @@ namespace isc { namespace eval {
       63,    65,    65,    16,    16,    16,     4,    36,    36,    36,
       36,    16,    16,    16,    16,    16,    16,    16,    17,    17,
       17,    51,    69,    59,    59,    59,    17,    17,    17,    17,
-      17,    17,    17,    18,    19,    20,    62,    20,    62,     9,
-      13,    14,    68,    36,     4,    36,     4,    20,    46,     9,
-      20,     9,     9,    15,    35,    51,    70,    59,    15,    15,
-      15,    15,    61,     4,     4,    51,    61,    61,    61,    16,
-      16,    16,    16,    16,    17,    17,    17,    17,    20,    62,
-      20,    62
+      17,    17,    17,     9,    18,    19,    20,    62,    20,    62,
+       9,    13,    14,    68,    36,     4,    36,     4,    20,    46,
+       9,    20,     9,     9,     9,    15,    15,    35,    51,    70,
+      59,    15,    15,    15,    15,    15,    61,    61,     4,     4,
+      51,    61,    61,    61,    61,    16,    16,    16,    16,    16,
+      16,    16,    17,    17,    17,    17,    17,    17,    20,    62,
+      20,    62,    20,    62
   };
 
   const unsigned char
   EvalParser::yyr1_[] =
   {
        0,    55,    56,    56,    57,    58,    58,    58,    58,    58,
-      58,    58,    58,    58,    58,    58,    58,    59,    59,    59,
+      58,    58,    58,    58,    58,    58,    58,    58,    59,    59,
       59,    59,    59,    59,    59,    59,    59,    59,    59,    59,
-      59,    59,    59,    59,    59,    59,    59,    60,    61,    61,
-      62,    62,    63,    64,    64,    64,    64,    65,    65,    66,
-      66,    66,    66,    66,    66,    66,    66,    66,    67,    67,
-      68,    68,    69,    70,    70
+      59,    59,    59,    59,    59,    59,    59,    59,    59,    60,
+      61,    61,    62,    62,    63,    64,    64,    64,    64,    65,
+      65,    66,    66,    66,    66,    66,    66,    66,    66,    66,
+      67,    67,    68,    68,    69,    70,    70
   };
 
   const unsigned char
   EvalParser::yyr2_[] =
   {
        0,     2,     2,     2,     1,     3,     2,     3,     3,     3,
-       6,     6,    11,     6,     6,    11,     4,     1,     1,     1,
-       6,     6,    11,     3,     3,     3,     6,     8,     6,     8,
-       6,     3,     3,    11,     6,     9,     1,     1,     1,     1,
+       6,    11,     6,    11,     6,     6,    11,     4,     1,     1,
+       1,     6,    11,     6,    11,     3,     3,     3,     6,     8,
+       6,     8,     6,     3,     3,    11,     6,     9,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1
+       1,     1,     1,     1,     1,     1,     1
   };
 
 
@@ -1900,12 +1927,12 @@ namespace isc { namespace eval {
   EvalParser::yyrline_[] =
   {
        0,   120,   120,   121,   126,   129,   130,   135,   140,   145,
-     150,   155,   175,   189,   198,   207,   217,   234,   239,   244,
-     249,   254,   275,   290,   295,   309,   323,   338,   343,   348,
-     353,   358,   367,   377,   386,   399,   412,   419,   425,   429,
-     435,   439,   445,   454,   458,   462,   466,   472,   476,   482,
-     486,   490,   494,   498,   502,   506,   510,   514,   520,   524,
-     530,   534,   540,   547,   552
+     150,   155,   160,   180,   194,   203,   212,   222,   239,   244,
+     249,   254,   259,   264,   285,   300,   305,   319,   333,   348,
+     353,   358,   363,   368,   377,   387,   396,   409,   422,   429,
+     435,   439,   445,   449,   455,   464,   468,   472,   476,   482,
+     486,   492,   496,   500,   504,   508,   512,   516,   520,   524,
+     530,   534,   540,   544,   550,   557,   562
   };
 
   // Print the state stack on the debug stream.
@@ -1940,9 +1967,9 @@ namespace isc { namespace eval {
 
 #line 14 "parser.yy"
 } } // isc::eval
-#line 1944 "parser.cc"
+#line 1971 "parser.cc"
 
-#line 559 "parser.yy"
+#line 569 "parser.yy"
 
 void
 isc::eval::EvalParser::error(const location_type& loc,
index c789ce468514b3802f981de57f21b386c36f459a..3959db25e5343957c36820eaf3e3a75c379ec078 100644 (file)
@@ -1737,7 +1737,7 @@ switch (yytype)
   // number is the opposite.  If YYTABLE_NINF, syntax error.
   static const unsigned char yytable_[];
 
-  static const unsigned char yycheck_[];
+  static const short yycheck_[];
 
   // YYSTOS[STATE-NUM] -- The (internal number of the) accessing
   // symbol of state STATE-NUM.
@@ -1987,7 +1987,7 @@ switch (yytype)
     enum
     {
       yyeof_ = 0,
-      yylast_ = 197,     ///< Last index in yytable_.
+      yylast_ = 228,     ///< Last index in yytable_.
       yynnts_ = 16,  ///< Number of nonterminal symbols.
       yyfinal_ = 33, ///< Termination state number.
       yyterror_ = 1,
index 160393c15e766e1433b659a275e92604cf82588e..c1280f1a347f04673eec0c941db19fe333a28d04 100644 (file)
@@ -1,4 +1,3 @@
-// Generated 201906181714
 // A Bison parser, made by GNU Bison 3.4.1.
 
 // Starting with Bison 3.2, this file is useless: the structure it
index 958da53ee1e4681c6d6548a82d300c34a602564b..0f7aafe5290020a3e768189165049d4f8a4cc490 100644 (file)
@@ -1,4 +1,3 @@
-// Generated 201906181714
 // A Bison parser, made by GNU Bison 3.4.1.
 
 // Starting with Bison 3.2, this file is useless: the structure it