]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[#3170] Regen flex/bison
authorFrancis Dupont <fdupont@isc.org>
Fri, 7 Jun 2024 20:03:22 +0000 (20:03 +0000)
committerFrancis Dupont <fdupont@isc.org>
Tue, 11 Jun 2024 14:31:50 +0000 (16:31 +0200)
src/lib/eval/lexer.cc
src/lib/eval/location.hh
src/lib/eval/parser.cc
src/lib/eval/parser.h

index 960d091f18f9c3a55bd205f402d5698b63818f52..bcf7cd2b71885d34520ab56d4ba57746d5e33c03 100644 (file)
@@ -710,8 +710,8 @@ static void yynoreturn yy_fatal_error ( const char* msg  );
 /* %% [3.0] code to copy yytext_ptr to yytext[] 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 65
-#define YY_END_OF_BUFFER 66
+#define YY_NUM_RULES 66
+#define YY_END_OF_BUFFER 67
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -719,12 +719,12 @@ struct yy_trans_info
        flex_int32_t yy_verify;
        flex_int32_t yy_nxt;
        };
-static const flex_int16_t yy_accept[287] =
+static const flex_int16_t yy_accept[290] =
     {   0,
-        0,    0,   66,   64,    1,    2,   64,   57,   58,   62,
-       63,   61,   64,   56,    5,    5,   64,   64,   64,   64,
-       59,   60,   64,   64,   64,   64,   64,   64,   64,   64,
-       64,   64,   64,   64,   64,   64,   64,   64,   64,   64,
+        0,    0,   67,   65,    1,    2,   65,   58,   59,   63,
+       64,   62,   65,   57,    5,    5,   65,   65,   65,   65,
+       60,   61,   65,   65,   65,   65,   65,   65,   65,   65,
+       65,   65,   65,   65,   65,   65,   65,   65,   65,   65,
         1,    2,    0,    3,    5,    0,    5,    0,    0,    0,
         0,    7,    8,    0,    0,    0,    0,    6,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
@@ -734,24 +734,24 @@ static const flex_int16_t yy_accept[287] =
 
        53,    0,    0,    0,   20,    0,    0,    0,   15,    0,
         0,    0,    0,    0,    0,   21,    0,   23,    0,    0,
-       52,    0,    0,   17,    0,    0,    0,   19,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,   35,
-        0,    0,    0,    0,   24,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,   22,   30,    0,
-        0,    0,    0,   14,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,   25,   18,    0,
-        0,    0,    0,   38,    0,    0,    0,    0,    0,    0,
-        0,   40,    0,    0,   39,    0,    0,    0,    0,    0,
-
-        0,    0,   26,   42,    0,   16,   27,    0,   43,    0,
-        0,    0,    0,   55,    0,    9,    0,   10,   11,   29,
-        0,    0,    0,    0,    0,   33,   28,    7,    0,    0,
-        0,    0,    0,    0,    0,   31,    0,    0,   32,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,   13,
-       12,    0,    0,    0,    0,    0,    0,    0,   44,    0,
-        0,    0,   37,    0,    0,    0,    0,   45,   36,    0,
-        0,   46,    0,    0,    0,    0,   47,   48,    0,    0,
-       49,    0,   50,   51,   34,    0
+        0,   52,    0,    0,   17,    0,    0,    0,   19,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+       35,    0,    0,    0,    0,   24,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,   22,
+       30,    0,    0,    0,    0,   14,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,   25,
+       18,    0,    0,    0,    0,   38,    0,   56,    0,    0,
+        0,    0,    0,    0,   40,    0,    0,   39,    0,    0,
+
+        0,    0,    0,    0,    0,   26,   42,    0,   16,   27,
+        0,   43,    0,    0,    0,    0,   55,    0,    9,    0,
+       10,   11,   29,    0,    0,    0,    0,    0,   33,   28,
+        7,    0,    0,    0,    0,    0,    0,    0,   31,    0,
+        0,   32,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,   13,   12,    0,    0,    0,    0,    0,    0,
+        0,   44,    0,    0,    0,   37,    0,    0,    0,    0,
+       45,   36,    0,    0,   46,    0,    0,    0,    0,   47,
+       48,    0,    0,   49,    0,   50,   51,   34,    0
     } ;
 
 static const YY_CHAR yy_ec[256] =
@@ -795,134 +795,134 @@ static const YY_CHAR yy_meta[50] =
         1,    1,    1,    1,    1,    1,    1,    1,    1
     } ;
 
-static const flex_int16_t yy_base[296] =
+static const flex_int16_t yy_base[299] =
     {   0,
-        0,    0,  391,  392,  388,  386,  384,  392,  392,  392,
-      392,  392,    0,  392,   39,   36,  367,  365,   86,  124,
-      392,  392,   35,   38,   34,   37,  349,   48,   43,  115,
-       63,  343,   22,   60,  351,  122,  116,  130,  350,  345,
-      378,  376,  374,  392,    0,    0,  125,  357,  356,    0,
-      355,    0,  392,  159,  167,    0,    0,  392,  343,  335,
-      341,  343,  330,  324,  323,  322,  330,  337,  316,  331,
-      313,   62,  316,  332,  319,  318,  327,  317,  321,  309,
-      308,    0,  320,  306,  312,  321,  310,  317,  317,  297,
-      316,  315,  302,  301,  312,  328,    0,    0,  295,    0,
-
-        0,  306,  306,  307,    0,  302,  289,  301,  287,  290,
-      287,  298,  289,  159,  282,    0,  288,    0,  295,  278,
-        0,  286,  278,  159,  292,  288,  282,    0,  273,  271,
-      275,  270,  268,  281,  280,    0,  265,  278,  280,    0,
-      264,  261,  274,  259,    0,  271,  270,  257,  282,  285,
-      253,  265,  268,  263,  245,  252,  264,    0,    0,  242,
-      259,  244,  243,    0,  243,  254,  167,  244,  253,  272,
-      241,  238,  235,  237,  234,  234,  233,    0,    0,  243,
-      229,  228,  231,    0,  240,  227,  227,  228,  236,  163,
-      223,    0,  222,  228,    0,  245,  248,  216,  217,  216,
-
-        0,  213,    0,    0,  214,    0,    0,  220,    0,  214,
-      213,  208,  221,    0,  219,    0,  219,    0,    0,    0,
-      213,  217,  202,  201,  204,  234,    0,    0,  211,  206,
-      201,  195,  194,  206,  194,    0,  193,  195,    0,  193,
-      192,  187,  181,  183,  181,  179,  178,  177,  160,    0,
-        0,  172,  160,  159,  171,  164,  156,  168,    0,  151,
-      150,  152,    0,  164,  163,  146,  164,    0,    0,  146,
-      145,    0,  141,  140,  142,  132,    0,    0,  126,  122,
-        0,  119,    0,    0,    0,  392,  211,  146,  214,  107,
-      217,  220,  224,   78,   77
+        0,    0,  394,  395,  391,  389,  387,  395,  395,  395,
+      395,  395,    0,  395,   39,   36,  370,  368,   86,  124,
+      395,  395,   35,   38,   34,   37,  352,   48,   43,  115,
+       63,  346,   22,   60,  354,  122,  116,  130,  353,  348,
+      381,  379,  377,  395,    0,    0,  125,  360,  359,    0,
+      358,    0,  395,  159,  167,    0,    0,  395,  346,  338,
+      344,  346,  333,  327,  326,  325,  333,  340,  319,  334,
+      316,   62,  319,  335,  322,  321,  133,  321,  325,  313,
+      312,    0,  324,  310,  316,  325,  314,  321,  321,  301,
+      320,  319,  306,  305,  316,  332,    0,    0,  299,    0,
+
+        0,  310,  310,  311,    0,  306,  293,  305,  291,  294,
+      291,  302,  293,  161,  286,    0,  292,    0,  298,  298,
+      281,    0,  289,  281,  159,  295,  291,  285,    0,  276,
+      274,  278,  273,  271,  284,  283,    0,  268,  281,  283,
+        0,  267,  264,  277,  262,    0,  274,  273,  260,  285,
+      288,  256,  268,  271,  263,  265,  247,  254,  266,    0,
+        0,  244,  261,  246,  245,    0,  245,  256,  168,  246,
+      255,  274,  243,  240,  237,  239,  236,  236,  235,    0,
+        0,  245,  231,  230,  233,    0,  242,    0,  229,  229,
+      230,  238,  166,  225,    0,  224,  230,    0,  247,  250,
+
+      218,  219,  218,    0,  215,    0,    0,  216,    0,    0,
+      222,    0,  216,  215,  210,  223,    0,  221,    0,  221,
+        0,    0,    0,  215,  219,  204,  203,  206,  236,    0,
+        0,  213,  208,  203,  197,  196,  208,  196,    0,  195,
+      197,    0,  195,  194,  189,  169,  185,  188,  197,  198,
+      197,  180,    0,    0,  193,  181,  180,  192,  185,  177,
+      189,    0,  172,  171,  168,    0,  169,  166,  149,  168,
+        0,    0,  149,  147,    0,  143,  142,  144,  144,    0,
+        0,  141,  134,    0,  123,    0,    0,    0,  395,  199,
+      146,  202,  107,  205,  208,  212,   78,   77
 
     } ;
 
-static const flex_int16_t yy_def[296] =
+static const flex_int16_t yy_def[299] =
     {   0,
-      286,    1,  286,  286,  286,  286,  287,  286,  286,  286,
-      286,  286,  288,  286,  286,   15,  289,  286,  286,   19,
-      286,  286,   19,   19,   19,   19,   20,   20,   20,   20,
+      289,    1,  289,  289,  289,  289,  290,  289,  289,  289,
+      289,  289,  291,  289,  289,   15,  292,  289,  289,   19,
+      289,  289,   19,   19,   19,   19,   20,   20,   20,   20,
        20,   20,   20,   20,   20,   20,   20,   20,   20,   20,
-      286,  286,  287,  286,  288,  290,   15,  289,  291,  292,
-      289,  293,  286,  286,   20,   19,   20,  286,   19,   20,
+      289,  289,  290,  289,  291,  293,   15,  292,  294,  295,
+      292,  296,  289,  289,   20,   19,   20,  289,   19,   20,
        20,   20,   20,   19,   20,   20,   20,   20,   20,   20,
        20,   20,   20,   20,   20,   20,   20,   20,   20,   20,
        20,   20,   20,   20,   20,   20,   20,   20,   20,   20,
-       20,   20,   20,   20,   20,  290,  292,  293,   19,   20,
+       20,   20,   20,   20,   20,  293,  295,  296,   19,   20,
 
        20,   20,   20,   20,   20,   20,   20,   20,   20,   20,
        20,   20,   20,   20,   20,   20,   20,   20,   20,   20,
        20,   20,   20,   20,   20,   20,   20,   20,   20,   20,
-       20,   20,   20,   20,   20,  294,   20,   20,   20,   20,
+       20,   20,   20,   20,   20,   20,  297,   20,   20,   20,
        20,   20,   20,   20,   20,   20,   20,   20,   20,   20,
        20,   20,   20,   20,   20,   20,   20,   20,   20,   20,
-       20,   20,   20,   20,   20,   20,   20,   20,   20,  294,
        20,   20,   20,   20,   20,   20,   20,   20,   20,   20,
+       20,  297,   20,   20,   20,   20,   20,   20,   20,   20,
        20,   20,   20,   20,   20,   20,   20,   20,   20,   20,
        20,   20,   20,   20,   20,   20,   20,   20,   20,   20,
 
-      295,   20,   20,   20,   20,   20,   20,   20,   20,   20,
+       20,   20,   20,  298,   20,   20,   20,   20,   20,   20,
        20,   20,   20,   20,   20,   20,   20,   20,   20,   20,
-       20,   20,   20,   20,   20,   20,   20,  295,   20,   20,
        20,   20,   20,   20,   20,   20,   20,   20,   20,   20,
+      298,   20,   20,   20,   20,   20,   20,   20,   20,   20,
        20,   20,   20,   20,   20,   20,   20,   20,   20,   20,
        20,   20,   20,   20,   20,   20,   20,   20,   20,   20,
        20,   20,   20,   20,   20,   20,   20,   20,   20,   20,
        20,   20,   20,   20,   20,   20,   20,   20,   20,   20,
-       20,   20,   20,   20,   20,    0,  286,  286,  286,  286,
-      286,  286,  286,  286,  286
+       20,   20,   20,   20,   20,   20,   20,   20,    0,  289,
+      289,  289,  289,  289,  289,  289,  289,  289
 
     } ;
 
-static const flex_int16_t yy_nxt[442] =
+static const flex_int16_t yy_nxt[445] =
     {   0,
         4,    5,    6,    7,    8,    9,   10,   11,   12,   13,
        14,   15,   16,   16,   16,   16,   16,   16,   16,   17,
        18,   19,   20,   20,   21,   22,    4,   23,   19,   24,
        25,   26,   19,   27,   28,   29,   20,   30,   31,   32,
        33,   34,   35,   36,   37,   38,   39,   20,   40,   46,
-       47,   47,   47,   47,   47,   47,   47,   47,   48,  286,
+       47,   47,   47,   47,   47,   47,   47,   47,   48,  289,
        49,   64,   50,   81,   82,   59,   49,   49,   49,   49,
        49,   49,   60,   62,   61,   72,   66,   65,   63,   69,
-      228,  170,   73,  286,   67,   70,   50,   54,   54,  112,
+      231,  172,   73,  289,   67,   70,   50,   54,   54,  112,
        77,   83,   71,  113,   78,   55,   84,   56,   56,   56,
 
        56,   56,   56,   56,   56,   48,   79,   56,   57,   57,
        96,   58,   55,   56,   56,   56,   56,   56,   56,   57,
        57,   57,   57,   57,   57,   57,   57,   57,   57,   57,
        57,   57,   57,   57,   57,   57,   57,   57,   57,   57,
-       57,   57,   57,  286,   74,   57,   75,   90,  286,   45,
+       57,   57,   57,  289,   74,   57,   75,   90,  289,   45,
        76,   57,   57,   57,   57,   57,   57,   86,   91,   92,
-       54,   54,  285,   87,   88,   93,  284,   89,  286,  286,
-      283,  149,  286,  150,  158,  282,  159,  151,  218,  196,
-      219,  197,  286,  286,   58,  198,  281,  280,  279,  278,
-      277,  276,  286,  275,  274,  273,  272,  271,  270,  269,
-
-      268,  267,  266,  265,  264,  263,  286,  262,  261,  260,
-      256,   43,  259,   43,   43,   43,   43,   51,   51,   51,
-       49,   49,   49,   97,  258,   97,   98,   98,   98,   98,
-      257,  255,  254,  253,  252,  251,  250,  249,  248,  247,
-      246,  245,  244,  243,  242,  241,  240,  239,  238,  237,
-      236,  235,  234,  233,  232,  231,  230,  229,  227,  226,
-      225,  224,  223,  222,  221,  220,  217,  216,  215,  214,
-      213,  212,  211,  210,  209,  208,  207,  206,  205,  204,
-      203,  202,  201,  200,  199,  195,  194,  193,  192,  191,
-      190,  189,  188,  187,  186,  185,  184,  183,  182,  181,
-
-      180,  179,  178,  177,  176,  175,  174,  173,  172,  171,
-      169,  168,  167,  166,  165,  164,  163,  162,  161,  160,
-      157,  156,  155,  154,  153,  152,  148,  147,  146,  145,
-      144,  143,  142,  141,  140,  139,  138,  137,  136,  135,
-      134,  133,  132,  131,  130,  129,  128,  127,  126,  125,
-      124,  123,  122,  121,  120,  119,  118,  117,  116,  115,
-      114,  111,  110,  109,  108,  107,  106,  105,  104,  103,
-      102,  101,  100,   99,   52,   48,   52,   44,   42,   41,
-       95,   94,   85,   80,   68,   53,   52,   44,   42,   41,
-      286,    3,  286,  286,  286,  286,  286,  286,  286,  286,
-
-      286,  286,  286,  286,  286,  286,  286,  286,  286,  286,
-      286,  286,  286,  286,  286,  286,  286,  286,  286,  286,
-      286,  286,  286,  286,  286,  286,  286,  286,  286,  286,
-      286,  286,  286,  286,  286,  286,  286,  286,  286,  286,
-      286
+       54,   54,  118,   87,   88,   93,  288,   89,  289,  289,
+      289,  289,  289,  150,  160,  151,  161,  119,  287,  152,
+      199,  221,  200,  222,   58,  286,  201,  285,  284,  283,
+      282,  281,  289,  280,  289,  279,  278,  277,  259,   43,
+
+      276,   43,   43,   43,   43,   51,   51,   51,   49,   49,
+       49,   97,  275,   97,   98,   98,   98,   98,  274,  273,
+      272,  271,  270,  269,  268,  267,  266,  265,  264,  263,
+      262,  261,  260,  258,  257,  256,  255,  254,  253,  252,
+      251,  250,  249,  248,  247,  246,  245,  244,  243,  242,
+      241,  240,  239,  238,  237,  236,  235,  234,  233,  232,
+      230,  229,  228,  227,  226,  225,  224,  223,  220,  219,
+      218,  217,  216,  215,  214,  213,  212,  211,  210,  209,
+      208,  207,  206,  205,  204,  203,  202,  198,  197,  196,
+      195,  194,  193,  192,  191,  190,  189,  188,  187,  186,
+
+      185,  184,  183,  182,  181,  180,  179,  178,  177,  176,
+      175,  174,  173,  171,  170,  169,  168,  167,  166,  165,
+      164,  163,  162,  159,  158,  157,  156,  155,  154,  153,
+      149,  148,  147,  146,  145,  144,  143,  142,  141,  140,
+      139,  138,  137,  136,  135,  134,  133,  132,  131,  130,
+      129,  128,  127,  126,  125,  124,  123,  122,  121,  120,
+      117,  116,  115,  114,  111,  110,  109,  108,  107,  106,
+      105,  104,  103,  102,  101,  100,   99,   52,   48,   52,
+       44,   42,   41,   95,   94,   85,   80,   68,   53,   52,
+       44,   42,   41,  289,    3,  289,  289,  289,  289,  289,
+
+      289,  289,  289,  289,  289,  289,  289,  289,  289,  289,
+      289,  289,  289,  289,  289,  289,  289,  289,  289,  289,
+      289,  289,  289,  289,  289,  289,  289,  289,  289,  289,
+      289,  289,  289,  289,  289,  289,  289,  289,  289,  289,
+      289,  289,  289,  289
     } ;
 
-static const flex_int16_t yy_chk[442] =
+static const flex_int16_t yy_chk[445] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -932,56 +932,56 @@ static const flex_int16_t yy_chk[442] =
        15,   15,   15,   15,   15,   15,   15,   15,   15,   16,
        15,   25,   15,   33,   33,   23,   15,   15,   15,   15,
        15,   15,   23,   24,   23,   29,   26,   25,   24,   28,
-      295,  294,   29,   16,   26,   28,   15,   19,   19,   72,
+      298,  297,   29,   16,   26,   28,   15,   19,   19,   72,
        31,   34,   28,   72,   31,   19,   34,   19,   19,   19,
 
        19,   19,   19,   19,   19,   19,   31,   19,   19,   19,
-      290,   19,   19,   19,   19,   19,   19,   19,   19,   19,
+      293,   19,   19,   19,   19,   19,   19,   19,   19,   19,
        19,   19,   19,   19,   19,   19,   19,   19,   19,   19,
        19,   19,   19,   19,   19,   20,   20,   20,   20,   20,
-       20,   20,   20,   20,   30,   20,   30,   37,   47,  288,
+       20,   20,   20,   20,   30,   20,   30,   37,   47,  291,
        30,   20,   20,   20,   20,   20,   20,   36,   37,   38,
-       54,   54,  282,   36,   36,   38,  280,   36,   55,   55,
-      279,  114,   47,  114,  124,  276,  124,  114,  190,  167,
-      190,  167,  243,  243,   54,  167,  275,  274,  273,  271,
-      270,  267,   55,  266,  265,  264,  262,  261,  260,  258,
-
-      257,  256,  255,  254,  253,  252,  243,  249,  248,  247,
-      243,  287,  246,  287,  287,  287,  287,  289,  289,  289,
-      291,  291,  291,  292,  245,  292,  293,  293,  293,  293,
-      244,  242,  241,  240,  238,  237,  235,  234,  233,  232,
-      231,  230,  229,  226,  225,  224,  223,  222,  221,  217,
-      215,  213,  212,  211,  210,  208,  205,  202,  200,  199,
-      198,  197,  196,  194,  193,  191,  189,  188,  187,  186,
-      185,  183,  182,  181,  180,  177,  176,  175,  174,  173,
-      172,  171,  170,  169,  168,  166,  165,  163,  162,  161,
-      160,  157,  156,  155,  154,  153,  152,  151,  150,  149,
-
-      148,  147,  146,  144,  143,  142,  141,  139,  138,  137,
-      135,  134,  133,  132,  131,  130,  129,  127,  126,  125,
-      123,  122,  120,  119,  117,  115,  113,  112,  111,  110,
-      109,  108,  107,  106,  104,  103,  102,   99,   96,   95,
-       94,   93,   92,   91,   90,   89,   88,   87,   86,   85,
-       84,   83,   81,   80,   79,   78,   77,   76,   75,   74,
-       73,   71,   70,   69,   68,   67,   66,   65,   64,   63,
-       62,   61,   60,   59,   51,   49,   48,   43,   42,   41,
-       40,   39,   35,   32,   27,   18,   17,    7,    6,    5,
-        3,  286,  286,  286,  286,  286,  286,  286,  286,  286,
-
-      286,  286,  286,  286,  286,  286,  286,  286,  286,  286,
-      286,  286,  286,  286,  286,  286,  286,  286,  286,  286,
-      286,  286,  286,  286,  286,  286,  286,  286,  286,  286,
-      286,  286,  286,  286,  286,  286,  286,  286,  286,  286,
-      286
+       54,   54,   77,   36,   36,   38,  285,   36,   55,   55,
+      246,  246,   47,  114,  125,  114,  125,   77,  283,  114,
+      169,  193,  169,  193,   54,  282,  169,  279,  278,  277,
+      276,  274,   55,  273,  246,  270,  269,  268,  246,  290,
+
+      267,  290,  290,  290,  290,  292,  292,  292,  294,  294,
+      294,  295,  265,  295,  296,  296,  296,  296,  264,  263,
+      261,  260,  259,  258,  257,  256,  255,  252,  251,  250,
+      249,  248,  247,  245,  244,  243,  241,  240,  238,  237,
+      236,  235,  234,  233,  232,  229,  228,  227,  226,  225,
+      224,  220,  218,  216,  215,  214,  213,  211,  208,  205,
+      203,  202,  201,  200,  199,  197,  196,  194,  192,  191,
+      190,  189,  187,  185,  184,  183,  182,  179,  178,  177,
+      176,  175,  174,  173,  172,  171,  170,  168,  167,  165,
+      164,  163,  162,  159,  158,  157,  156,  155,  154,  153,
+
+      152,  151,  150,  149,  148,  147,  145,  144,  143,  142,
+      140,  139,  138,  136,  135,  134,  133,  132,  131,  130,
+      128,  127,  126,  124,  123,  121,  120,  119,  117,  115,
+      113,  112,  111,  110,  109,  108,  107,  106,  104,  103,
+      102,   99,   96,   95,   94,   93,   92,   91,   90,   89,
+       88,   87,   86,   85,   84,   83,   81,   80,   79,   78,
+       76,   75,   74,   73,   71,   70,   69,   68,   67,   66,
+       65,   64,   63,   62,   61,   60,   59,   51,   49,   48,
+       43,   42,   41,   40,   39,   35,   32,   27,   18,   17,
+        7,    6,    5,    3,  289,  289,  289,  289,  289,  289,
+
+      289,  289,  289,  289,  289,  289,  289,  289,  289,  289,
+      289,  289,  289,  289,  289,  289,  289,  289,  289,  289,
+      289,  289,  289,  289,  289,  289,  289,  289,  289,  289,
+      289,  289,  289,  289,  289,  289,  289,  289,  289,  289,
+      289,  289,  289,  289
     } ;
 
 /* Table of booleans, true if rule could match eol. */
-static const flex_int32_t yy_rule_can_match_eol[66] =
+static const flex_int32_t yy_rule_can_match_eol[67] =
     {   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, 
     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,     };
 
 static yy_state_type yy_last_accepting_state;
 static char *yy_last_accepting_cpos;
@@ -989,7 +989,7 @@ static char *yy_last_accepting_cpos;
 extern int yy_flex_debug;
 int yy_flex_debug = 1;
 
-static const flex_int16_t yy_rule_linenum[65] =
+static const flex_int16_t yy_rule_linenum[66] =
     {   0,
       107,  112,  118,  127,  133,  151,  175,  189,  190,  191,
       192,  193,  194,  195,  196,  197,  198,  199,  200,  201,
@@ -997,7 +997,7 @@ static const flex_int16_t yy_rule_linenum[65] =
       212,  213,  214,  215,  216,  217,  218,  219,  220,  221,
       222,  223,  224,  225,  226,  227,  228,  229,  230,  231,
       232,  233,  234,  235,  236,  237,  238,  239,  240,  241,
-      242,  243,  244,  245
+      242,  243,  244,  245,  246
     } ;
 
 /* The intent behind this definition is that it'll catch
@@ -1009,7 +1009,7 @@ static const flex_int16_t yy_rule_linenum[65] =
 #define YY_RESTORE_YY_MORE_OFFSET
 char *yytext;
 #line 1 "lexer.ll"
-/* Copyright (C) 2015-2023 Internet Systems Consortium, Inc. ("ISC")
+/* Copyright (C) 2015-2024 Internet Systems Consortium, Inc. ("ISC")
 
    This Source Code Form is subject to the terms of the Mozilla Public
    License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -1403,13 +1403,13 @@ yy_match:
                        while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                                {
                                yy_current_state = (int) yy_def[yy_current_state];
-                               if ( yy_current_state >= 287 )
+                               if ( yy_current_state >= 290 )
                                        yy_c = yy_meta[yy_c];
                                }
                        yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
                        ++yy_cp;
                        }
-               while ( yy_current_state != 286 );
+               while ( yy_current_state != 289 );
                yy_cp = (yy_last_accepting_cpos);
                yy_current_state = (yy_last_accepting_state);
 
@@ -1438,13 +1438,13 @@ do_action:      /* This label is used only to access EOF actions. */
                        {
                        if ( yy_act == 0 )
                                fprintf( stderr, "--scanner backing up\n" );
-                       else if ( yy_act < 65 )
+                       else if ( yy_act < 66 )
                                fprintf( stderr, "--accepting rule at line %ld (\"%s\")\n",
                                         (long)yy_rule_linenum[yy_act], yytext );
-                       else if ( yy_act == 65 )
+                       else if ( yy_act == 66 )
                                fprintf( stderr, "--accepting default rule (\"%s\")\n",
                                         yytext );
-                       else if ( yy_act == 66 )
+                       else if ( yy_act == 67 )
                                fprintf( stderr, "--(end of buffer or a NUL)\n" );
                        else
                                fprintf( stderr, "--EOF (start condition %d)\n", YY_START );
@@ -1812,58 +1812,63 @@ return isc::eval::EvalParser::make_MEMBER(loc);
 case 56:
 YY_RULE_SETUP
 #line 237 "lexer.ll"
-return isc::eval::EvalParser::make_DOT(loc);
+return isc::eval::EvalParser::make_MATCH(loc);
        YY_BREAK
 case 57:
 YY_RULE_SETUP
 #line 238 "lexer.ll"
-return isc::eval::EvalParser::make_LPAREN(loc);
+return isc::eval::EvalParser::make_DOT(loc);
        YY_BREAK
 case 58:
 YY_RULE_SETUP
 #line 239 "lexer.ll"
-return isc::eval::EvalParser::make_RPAREN(loc);
+return isc::eval::EvalParser::make_LPAREN(loc);
        YY_BREAK
 case 59:
 YY_RULE_SETUP
 #line 240 "lexer.ll"
-return isc::eval::EvalParser::make_LBRACKET(loc);
+return isc::eval::EvalParser::make_RPAREN(loc);
        YY_BREAK
 case 60:
 YY_RULE_SETUP
 #line 241 "lexer.ll"
-return isc::eval::EvalParser::make_RBRACKET(loc);
+return isc::eval::EvalParser::make_LBRACKET(loc);
        YY_BREAK
 case 61:
 YY_RULE_SETUP
 #line 242 "lexer.ll"
-return isc::eval::EvalParser::make_COMA(loc);
+return isc::eval::EvalParser::make_RBRACKET(loc);
        YY_BREAK
 case 62:
 YY_RULE_SETUP
 #line 243 "lexer.ll"
-return isc::eval::EvalParser::make_ANY(loc);
+return isc::eval::EvalParser::make_COMA(loc);
        YY_BREAK
 case 63:
 YY_RULE_SETUP
 #line 244 "lexer.ll"
-return isc::eval::EvalParser::make_PLUS(loc);
+return isc::eval::EvalParser::make_ANY(loc);
        YY_BREAK
 case 64:
 YY_RULE_SETUP
 #line 245 "lexer.ll"
+return isc::eval::EvalParser::make_PLUS(loc);
+       YY_BREAK
+case 65:
+YY_RULE_SETUP
+#line 246 "lexer.ll"
 driver.error (loc, "Invalid character: " + std::string(evaltext));
        YY_BREAK
 case YY_STATE_EOF(INITIAL):
-#line 246 "lexer.ll"
+#line 247 "lexer.ll"
 return isc::eval::EvalParser::make_END(loc);
        YY_BREAK
-case 65:
+case 66:
 YY_RULE_SETUP
-#line 247 "lexer.ll"
+#line 248 "lexer.ll"
 ECHO;
        YY_BREAK
-#line 1866 "lexer.cc"
+#line 1871 "lexer.cc"
 
        case YY_END_OF_BUFFER:
                {
@@ -2182,7 +2187,7 @@ static int yy_get_next_buffer (void)
                while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                        {
                        yy_current_state = (int) yy_def[yy_current_state];
-                       if ( yy_current_state >= 287 )
+                       if ( yy_current_state >= 290 )
                                yy_c = yy_meta[yy_c];
                        }
                yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
@@ -2215,11 +2220,11 @@ static int yy_get_next_buffer (void)
        while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                {
                yy_current_state = (int) yy_def[yy_current_state];
-               if ( yy_current_state >= 287 )
+               if ( yy_current_state >= 290 )
                        yy_c = yy_meta[yy_c];
                }
        yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
-       yy_is_jam = (yy_current_state == 286);
+       yy_is_jam = (yy_current_state == 289);
 
                return yy_is_jam ? 0 : yy_current_state;
 }
@@ -2975,7 +2980,7 @@ void yyfree (void * ptr )
 
 /* %ok-for-header */
 
-#line 247 "lexer.ll"
+#line 248 "lexer.ll"
 
 
 using namespace isc::eval;
index 5bde47985a8d2444193ac8ca0efa59009963b37a..a50cf489d2a4545e2fb4b2d904120e3d76ce871c 100644 (file)
@@ -1,3 +1,4 @@
+// Generated 202406072002
 // A Bison parser, made by GNU Bison 3.8.2.
 
 // Locations for Bison parsers in C++
index fedafab4ad54e76f7ac53020a52623147a60bdfe..e5db764129efcb6b39466d0c02adaa105d4f99db 100644 (file)
@@ -463,91 +463,91 @@ namespace isc { namespace eval {
         switch (yykind)
     {
       case symbol_kind::S_STRING: // "constant string"
-#line 129 "parser.yy"
+#line 130 "parser.yy"
                  { yyoutput << yysym.value.template as < std::string > (); }
 #line 469 "parser.cc"
         break;
 
       case symbol_kind::S_INTEGER: // "integer"
-#line 129 "parser.yy"
+#line 130 "parser.yy"
                  { yyoutput << yysym.value.template as < std::string > (); }
 #line 475 "parser.cc"
         break;
 
       case symbol_kind::S_HEXSTRING: // "constant hexstring"
-#line 129 "parser.yy"
+#line 130 "parser.yy"
                  { yyoutput << yysym.value.template as < std::string > (); }
 #line 481 "parser.cc"
         break;
 
       case symbol_kind::S_OPTION_NAME: // "option name"
-#line 129 "parser.yy"
+#line 130 "parser.yy"
                  { yyoutput << yysym.value.template as < std::string > (); }
 #line 487 "parser.cc"
         break;
 
       case symbol_kind::S_IP_ADDRESS: // "ip address"
-#line 129 "parser.yy"
+#line 130 "parser.yy"
                  { yyoutput << yysym.value.template as < std::string > (); }
 #line 493 "parser.cc"
         break;
 
       case symbol_kind::S_integer_expr: // integer_expr
-#line 129 "parser.yy"
+#line 130 "parser.yy"
                  { yyoutput << yysym.value.template as < uint32_t > (); }
 #line 499 "parser.cc"
         break;
 
       case symbol_kind::S_option_code: // option_code
-#line 129 "parser.yy"
+#line 130 "parser.yy"
                  { yyoutput << yysym.value.template as < uint16_t > (); }
 #line 505 "parser.cc"
         break;
 
       case symbol_kind::S_sub_option_code: // sub_option_code
-#line 129 "parser.yy"
+#line 130 "parser.yy"
                  { yyoutput << yysym.value.template as < uint16_t > (); }
 #line 511 "parser.cc"
         break;
 
       case symbol_kind::S_option_repr_type: // option_repr_type
-#line 129 "parser.yy"
+#line 130 "parser.yy"
                  { yyoutput << yysym.value.template as < TokenOption::RepresentationType > (); }
 #line 517 "parser.cc"
         break;
 
       case symbol_kind::S_nest_level: // nest_level
-#line 129 "parser.yy"
+#line 130 "parser.yy"
                  { yyoutput << yysym.value.template as < int8_t > (); }
 #line 523 "parser.cc"
         break;
 
       case symbol_kind::S_pkt_metadata: // pkt_metadata
-#line 129 "parser.yy"
+#line 130 "parser.yy"
                  { yyoutput << yysym.value.template as < TokenPkt::MetadataType > (); }
 #line 529 "parser.cc"
         break;
 
       case symbol_kind::S_enterprise_id: // enterprise_id
-#line 129 "parser.yy"
+#line 130 "parser.yy"
                  { yyoutput << yysym.value.template as < uint32_t > (); }
 #line 535 "parser.cc"
         break;
 
       case symbol_kind::S_pkt4_field: // pkt4_field
-#line 129 "parser.yy"
+#line 130 "parser.yy"
                  { yyoutput << yysym.value.template as < TokenPkt4::FieldType > (); }
 #line 541 "parser.cc"
         break;
 
       case symbol_kind::S_pkt6_field: // pkt6_field
-#line 129 "parser.yy"
+#line 130 "parser.yy"
                  { yyoutput << yysym.value.template as < TokenPkt6::FieldType > (); }
 #line 547 "parser.cc"
         break;
 
       case symbol_kind::S_relay6_field: // relay6_field
-#line 129 "parser.yy"
+#line 130 "parser.yy"
                  { yyoutput << yysym.value.template as < TokenRelay6Field::FieldType > (); }
 #line 553 "parser.cc"
         break;
@@ -842,7 +842,7 @@ namespace isc { namespace eval {
           switch (yyn)
             {
   case 6: // bool_expr: "not" bool_expr
-#line 149 "parser.yy"
+#line 150 "parser.yy"
                 {
                     TokenPtr neg(new TokenNot());
                     ctx.expression.push_back(neg);
@@ -851,7 +851,7 @@ namespace isc { namespace eval {
     break;
 
   case 7: // bool_expr: bool_expr "and" bool_expr
-#line 154 "parser.yy"
+#line 155 "parser.yy"
                 {
                     TokenPtr neg(new TokenAnd());
                     ctx.expression.push_back(neg);
@@ -860,7 +860,7 @@ namespace isc { namespace eval {
     break;
 
   case 8: // bool_expr: bool_expr "or" bool_expr
-#line 159 "parser.yy"
+#line 160 "parser.yy"
                 {
                     TokenPtr neg(new TokenOr());
                     ctx.expression.push_back(neg);
@@ -869,7 +869,7 @@ namespace isc { namespace eval {
     break;
 
   case 9: // bool_expr: string_expr "==" string_expr
-#line 164 "parser.yy"
+#line 165 "parser.yy"
                 {
                     TokenPtr eq(new TokenEqual());
                     ctx.expression.push_back(eq);
@@ -878,7 +878,7 @@ namespace isc { namespace eval {
     break;
 
   case 10: // bool_expr: "option" "[" option_code "]" "." "exists"
-#line 169 "parser.yy"
+#line 170 "parser.yy"
                 {
                     TokenPtr opt(new TokenOption(yystack_[3].value.as < uint16_t > (), TokenOption::EXISTS));
                     ctx.expression.push_back(opt);
@@ -887,7 +887,7 @@ namespace isc { namespace eval {
     break;
 
   case 11: // bool_expr: "option" "[" option_code "]" "." "option" "[" sub_option_code "]" "." "exists"
-#line 174 "parser.yy"
+#line 175 "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);
@@ -896,7 +896,7 @@ namespace isc { namespace eval {
     break;
 
   case 12: // bool_expr: "relay4" "[" sub_option_code "]" "." "exists"
-#line 179 "parser.yy"
+#line 180 "parser.yy"
                 {
                    switch (ctx.getUniverse()) {
                    case Option::V4:
@@ -920,7 +920,7 @@ namespace isc { namespace eval {
     break;
 
   case 13: // bool_expr: "relay6" "[" nest_level "]" "." "option" "[" sub_option_code "]" "." "exists"
-#line 199 "parser.yy"
+#line 200 "parser.yy"
                 {
                     switch (ctx.getUniverse()) {
                     case Option::V6:
@@ -938,7 +938,7 @@ namespace isc { namespace eval {
     break;
 
   case 14: // bool_expr: "vendor-class" "[" enterprise_id "]" "." "exists"
-#line 213 "parser.yy"
+#line 214 "parser.yy"
               {
                   // Expression: vendor-class[1234].exists
                   //
@@ -951,7 +951,7 @@ namespace isc { namespace eval {
     break;
 
   case 15: // bool_expr: "vendor" "[" enterprise_id "]" "." "exists"
-#line 222 "parser.yy"
+#line 223 "parser.yy"
               {
                   // Expression: vendor[1234].exists
                   //
@@ -964,7 +964,7 @@ namespace isc { namespace eval {
     break;
 
   case 16: // bool_expr: "vendor" "[" enterprise_id "]" "." "option" "[" sub_option_code "]" "." "exists"
-#line 231 "parser.yy"
+#line 232 "parser.yy"
               {
                   // Expression vendor[1234].option[123].exists
                   //
@@ -978,7 +978,7 @@ namespace isc { namespace eval {
     break;
 
   case 17: // bool_expr: "member" "(" "constant string" ")"
-#line 241 "parser.yy"
+#line 242 "parser.yy"
               {
                   // Expression member('foo')
                   //
@@ -996,53 +996,66 @@ namespace isc { namespace eval {
 #line 997 "parser.cc"
     break;
 
-  case 18: // string_expr: "constant string"
-#line 258 "parser.yy"
+  case 18: // bool_expr: "match" "(" "constant string" "," string_expr ")"
+#line 257 "parser.yy"
+              {
+                  // Expression match('<regex>', <string_expr>)
+                  //
+                  // This token will check if the regular expression matches
+                  // the string expression.
+                  TokenPtr match(new TokenMatch(yystack_[3].value.as < std::string > ()));
+                  ctx.expression.push_back(match);
+              }
+#line 1010 "parser.cc"
+    break;
+
+  case 19: // string_expr: "constant string"
+#line 268 "parser.yy"
                   {
                       TokenPtr str(new TokenString(yystack_[0].value.as < std::string > ()));
                       ctx.expression.push_back(str);
                   }
-#line 1006 "parser.cc"
+#line 1019 "parser.cc"
     break;
 
-  case 19: // string_expr: "constant hexstring"
-#line 263 "parser.yy"
+  case 20: // string_expr: "constant hexstring"
+#line 273 "parser.yy"
                   {
                       TokenPtr hex(new TokenHexString(yystack_[0].value.as < std::string > ()));
                       ctx.expression.push_back(hex);
                   }
-#line 1015 "parser.cc"
+#line 1028 "parser.cc"
     break;
 
-  case 20: // string_expr: "ip address"
-#line 268 "parser.yy"
+  case 21: // string_expr: "ip address"
+#line 278 "parser.yy"
                   {
                       TokenPtr ip(new TokenIpAddress(yystack_[0].value.as < std::string > ()));
                       ctx.expression.push_back(ip);
                   }
-#line 1024 "parser.cc"
+#line 1037 "parser.cc"
     break;
 
-  case 21: // string_expr: "option" "[" option_code "]" "." option_repr_type
-#line 273 "parser.yy"
+  case 22: // string_expr: "option" "[" option_code "]" "." option_repr_type
+#line 283 "parser.yy"
                   {
                       TokenPtr opt(new TokenOption(yystack_[3].value.as < uint16_t > (), yystack_[0].value.as < TokenOption::RepresentationType > ()));
                       ctx.expression.push_back(opt);
                   }
-#line 1033 "parser.cc"
+#line 1046 "parser.cc"
     break;
 
-  case 22: // string_expr: "option" "[" option_code "]" "." "option" "[" sub_option_code "]" "." option_repr_type
-#line 278 "parser.yy"
+  case 23: // string_expr: "option" "[" option_code "]" "." "option" "[" sub_option_code "]" "." option_repr_type
+#line 288 "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 1042 "parser.cc"
+#line 1055 "parser.cc"
     break;
 
-  case 23: // string_expr: "relay4" "[" sub_option_code "]" "." option_repr_type
-#line 283 "parser.yy"
+  case 24: // string_expr: "relay4" "[" sub_option_code "]" "." option_repr_type
+#line 293 "parser.yy"
                   {
                      switch (ctx.getUniverse()) {
                      case Option::V4:
@@ -1062,11 +1075,11 @@ namespace isc { namespace eval {
                          error(yystack_[5].location, "relay4 can only be used in DHCPv4.");
                      }
                   }
-#line 1066 "parser.cc"
+#line 1079 "parser.cc"
     break;
 
-  case 24: // string_expr: "relay6" "[" nest_level "]" "." "option" "[" sub_option_code "]" "." option_repr_type
-#line 304 "parser.yy"
+  case 25: // string_expr: "relay6" "[" nest_level "]" "." "option" "[" sub_option_code "]" "." option_repr_type
+#line 314 "parser.yy"
                   {
                      switch (ctx.getUniverse()) {
                      case Option::V6:
@@ -1080,20 +1093,20 @@ namespace isc { namespace eval {
                          error(yystack_[10].location, "relay6 can only be used in DHCPv6.");
                      }
                   }
-#line 1084 "parser.cc"
+#line 1097 "parser.cc"
     break;
 
-  case 25: // string_expr: "pkt" "." pkt_metadata
-#line 319 "parser.yy"
+  case 26: // string_expr: "pkt" "." pkt_metadata
+#line 329 "parser.yy"
                   {
                       TokenPtr pkt_metadata(new TokenPkt(yystack_[0].value.as < TokenPkt::MetadataType > ()));
                       ctx.expression.push_back(pkt_metadata);
                   }
-#line 1093 "parser.cc"
+#line 1106 "parser.cc"
     break;
 
-  case 26: // string_expr: "pkt4" "." pkt4_field
-#line 324 "parser.yy"
+  case 27: // string_expr: "pkt4" "." pkt4_field
+#line 334 "parser.yy"
                   {
                      switch (ctx.getUniverse()) {
                      case Option::V4:
@@ -1107,11 +1120,11 @@ namespace isc { namespace eval {
                          error(yystack_[2].location, "pkt4 can only be used in DHCPv4.");
                      }
                   }
-#line 1111 "parser.cc"
+#line 1124 "parser.cc"
     break;
 
-  case 27: // string_expr: "pkt6" "." pkt6_field
-#line 338 "parser.yy"
+  case 28: // string_expr: "pkt6" "." pkt6_field
+#line 348 "parser.yy"
                   {
                      switch (ctx.getUniverse()) {
                      case Option::V6:
@@ -1125,11 +1138,11 @@ namespace isc { namespace eval {
                          error(yystack_[2].location, "pkt6 can only be used in DHCPv6.");
                      }
                   }
-#line 1129 "parser.cc"
+#line 1142 "parser.cc"
     break;
 
-  case 28: // string_expr: "relay6" "[" nest_level "]" "." relay6_field
-#line 352 "parser.yy"
+  case 29: // string_expr: "relay6" "[" nest_level "]" "." relay6_field
+#line 362 "parser.yy"
                   {
                      switch (ctx.getUniverse()) {
                      case Option::V6:
@@ -1143,146 +1156,146 @@ namespace isc { namespace eval {
                          error(yystack_[5].location, "relay6 can only be used in DHCPv6.");
                      }
                   }
-#line 1147 "parser.cc"
+#line 1160 "parser.cc"
     break;
 
-  case 29: // string_expr: "substring" "(" string_expr "," start_expr "," length_expr ")"
-#line 367 "parser.yy"
+  case 30: // string_expr: "substring" "(" string_expr "," start_expr "," length_expr ")"
+#line 377 "parser.yy"
                   {
                       TokenPtr sub(new TokenSubstring());
                       ctx.expression.push_back(sub);
                   }
-#line 1156 "parser.cc"
+#line 1169 "parser.cc"
     break;
 
-  case 30: // string_expr: "split" "(" string_expr "," string_expr "," int_expr ")"
-#line 372 "parser.yy"
+  case 31: // string_expr: "split" "(" string_expr "," string_expr "," int_expr ")"
+#line 382 "parser.yy"
                   {
                       TokenPtr split(new TokenSplit());
                       ctx.expression.push_back(split);
                   }
-#line 1165 "parser.cc"
+#line 1178 "parser.cc"
     break;
 
-  case 31: // string_expr: "concat" "(" string_expr "," string_expr ")"
-#line 377 "parser.yy"
+  case 32: // string_expr: "concat" "(" string_expr "," string_expr ")"
+#line 387 "parser.yy"
                   {
                       TokenPtr conc(new TokenConcat());
                       ctx.expression.push_back(conc);
                   }
-#line 1174 "parser.cc"
+#line 1187 "parser.cc"
     break;
 
-  case 32: // string_expr: string_expr "+" string_expr
-#line 382 "parser.yy"
+  case 33: // string_expr: string_expr "+" string_expr
+#line 392 "parser.yy"
                   {
                       TokenPtr conc(new TokenConcat());
                       ctx.expression.push_back(conc);
                   }
-#line 1183 "parser.cc"
+#line 1196 "parser.cc"
     break;
 
-  case 33: // string_expr: "lcase" "(" string_expr ")"
-#line 387 "parser.yy"
+  case 34: // string_expr: "lcase" "(" string_expr ")"
+#line 397 "parser.yy"
                   {
                       TokenPtr lcase(new TokenLowerCase());
                       ctx.expression.push_back(lcase);
                   }
-#line 1192 "parser.cc"
+#line 1205 "parser.cc"
     break;
 
-  case 34: // string_expr: "ucase" "(" string_expr ")"
-#line 392 "parser.yy"
+  case 35: // string_expr: "ucase" "(" string_expr ")"
+#line 402 "parser.yy"
                   {
                       TokenPtr ucase(new TokenUpperCase());
                       ctx.expression.push_back(ucase);
                   }
-#line 1201 "parser.cc"
+#line 1214 "parser.cc"
     break;
 
-  case 35: // string_expr: "ifelse" "(" bool_expr "," string_expr "," string_expr ")"
-#line 397 "parser.yy"
+  case 36: // string_expr: "ifelse" "(" bool_expr "," string_expr "," string_expr ")"
+#line 407 "parser.yy"
                   {
                       TokenPtr cond(new TokenIfElse());
                       ctx.expression.push_back(cond);
                   }
-#line 1210 "parser.cc"
+#line 1223 "parser.cc"
     break;
 
-  case 36: // string_expr: "hexstring" "(" string_expr "," string_expr ")"
-#line 402 "parser.yy"
+  case 37: // string_expr: "hexstring" "(" string_expr "," string_expr ")"
+#line 412 "parser.yy"
                   {
                       TokenPtr tohex(new TokenToHexString());
                       ctx.expression.push_back(tohex);
                   }
-#line 1219 "parser.cc"
+#line 1232 "parser.cc"
     break;
 
-  case 37: // string_expr: "addrtotext" "(" string_expr ")"
-#line 407 "parser.yy"
+  case 38: // string_expr: "addrtotext" "(" string_expr ")"
+#line 417 "parser.yy"
                   {
                       TokenPtr addrtotext(new TokenIpAddressToText());
                       ctx.expression.push_back(addrtotext);
                   }
-#line 1228 "parser.cc"
+#line 1241 "parser.cc"
     break;
 
-  case 38: // string_expr: "int8totext" "(" string_expr ")"
-#line 412 "parser.yy"
+  case 39: // string_expr: "int8totext" "(" string_expr ")"
+#line 422 "parser.yy"
                   {
                       TokenPtr int8totext(new TokenInt8ToText());
                       ctx.expression.push_back(int8totext);
                   }
-#line 1237 "parser.cc"
+#line 1250 "parser.cc"
     break;
 
-  case 39: // string_expr: "int16totext" "(" string_expr ")"
-#line 417 "parser.yy"
+  case 40: // string_expr: "int16totext" "(" string_expr ")"
+#line 427 "parser.yy"
                   {
                       TokenPtr int16totext(new TokenInt16ToText());
                       ctx.expression.push_back(int16totext);
                   }
-#line 1246 "parser.cc"
+#line 1259 "parser.cc"
     break;
 
-  case 40: // string_expr: "int32totext" "(" string_expr ")"
-#line 422 "parser.yy"
+  case 41: // string_expr: "int32totext" "(" string_expr ")"
+#line 432 "parser.yy"
                   {
                       TokenPtr int32totext(new TokenInt32ToText());
                       ctx.expression.push_back(int32totext);
                   }
-#line 1255 "parser.cc"
+#line 1268 "parser.cc"
     break;
 
-  case 41: // string_expr: "uint8totext" "(" string_expr ")"
-#line 427 "parser.yy"
+  case 42: // string_expr: "uint8totext" "(" string_expr ")"
+#line 437 "parser.yy"
                   {
                       TokenPtr uint8totext(new TokenUInt8ToText());
                       ctx.expression.push_back(uint8totext);
                   }
-#line 1264 "parser.cc"
+#line 1277 "parser.cc"
     break;
 
-  case 42: // string_expr: "uint16totext" "(" string_expr ")"
-#line 432 "parser.yy"
+  case 43: // string_expr: "uint16totext" "(" string_expr ")"
+#line 442 "parser.yy"
                   {
                       TokenPtr uint16totext(new TokenUInt16ToText());
                       ctx.expression.push_back(uint16totext);
                   }
-#line 1273 "parser.cc"
+#line 1286 "parser.cc"
     break;
 
-  case 43: // string_expr: "uint32totext" "(" string_expr ")"
-#line 437 "parser.yy"
+  case 44: // string_expr: "uint32totext" "(" string_expr ")"
+#line 447 "parser.yy"
                   {
                       TokenPtr uint32totext(new TokenUInt32ToText());
                       ctx.expression.push_back(uint32totext);
                   }
-#line 1282 "parser.cc"
+#line 1295 "parser.cc"
     break;
 
-  case 44: // string_expr: "vendor" "." "enterprise"
-#line 442 "parser.yy"
+  case 45: // string_expr: "vendor" "." "enterprise"
+#line 452 "parser.yy"
                 {
                     // expression: vendor.enterprise
                     //
@@ -1291,11 +1304,11 @@ namespace isc { namespace eval {
                     TokenPtr vendor(new TokenVendor(ctx.getUniverse(), 0, TokenVendor::ENTERPRISE_ID));
                     ctx.expression.push_back(vendor);
                 }
-#line 1295 "parser.cc"
+#line 1308 "parser.cc"
     break;
 
-  case 45: // string_expr: "vendor-class" "." "enterprise"
-#line 451 "parser.yy"
+  case 46: // string_expr: "vendor-class" "." "enterprise"
+#line 461 "parser.yy"
                 {
                     // expression: vendor-class.enterprise
                     //
@@ -1305,11 +1318,11 @@ namespace isc { namespace eval {
                                                          TokenVendor::ENTERPRISE_ID));
                     ctx.expression.push_back(vendor);
                 }
-#line 1309 "parser.cc"
+#line 1322 "parser.cc"
     break;
 
-  case 46: // string_expr: "vendor" "[" enterprise_id "]" "." "option" "[" sub_option_code "]" "." option_repr_type
-#line 461 "parser.yy"
+  case 47: // string_expr: "vendor" "[" enterprise_id "]" "." "option" "[" sub_option_code "]" "." option_repr_type
+#line 471 "parser.yy"
                 {
                     // This token will search for vendor option with
                     // specified enterprise-id.  If found, will search
@@ -1318,11 +1331,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 1322 "parser.cc"
+#line 1335 "parser.cc"
     break;
 
-  case 47: // string_expr: "vendor-class" "[" enterprise_id "]" "." "data"
-#line 470 "parser.yy"
+  case 48: // string_expr: "vendor-class" "[" enterprise_id "]" "." "data"
+#line 480 "parser.yy"
                 {
                     // expression: vendor-class[1234].data
                     //
@@ -1335,11 +1348,11 @@ namespace isc { namespace eval {
                                                                TokenVendor::DATA, 0));
                     ctx.expression.push_back(vendor_class);
                 }
-#line 1339 "parser.cc"
+#line 1352 "parser.cc"
     break;
 
-  case 48: // string_expr: "vendor-class" "[" enterprise_id "]" "." "data" "[" "integer" "]"
-#line 483 "parser.yy"
+  case 49: // string_expr: "vendor-class" "[" enterprise_id "]" "." "data" "[" "integer" "]"
+#line 493 "parser.yy"
                 {
                     // expression: vendor-class[1234].data[5]
                     //
@@ -1352,264 +1365,264 @@ namespace isc { namespace eval {
                                                                TokenVendor::DATA, index));
                     ctx.expression.push_back(vendor_class);
                 }
-#line 1356 "parser.cc"
+#line 1369 "parser.cc"
     break;
 
-  case 49: // string_expr: integer_expr
-#line 496 "parser.yy"
+  case 50: // string_expr: integer_expr
+#line 506 "parser.yy"
                 {
                     TokenPtr integer(new TokenInteger(yystack_[0].value.as < uint32_t > ()));
                     ctx.expression.push_back(integer);
                 }
-#line 1365 "parser.cc"
+#line 1378 "parser.cc"
     break;
 
-  case 51: // integer_expr: "integer"
-#line 504 "parser.yy"
+  case 52: // integer_expr: "integer"
+#line 514 "parser.yy"
                  {
                      yylhs.value.as < uint32_t > () = ctx.convertUint32(yystack_[0].value.as < std::string > (), yystack_[0].location);
                  }
-#line 1373 "parser.cc"
+#line 1386 "parser.cc"
     break;
 
-  case 52: // option_code: "integer"
-#line 510 "parser.yy"
+  case 53: // option_code: "integer"
+#line 520 "parser.yy"
                  {
                      yylhs.value.as < uint16_t > () = ctx.convertOptionCode(yystack_[0].value.as < std::string > (), yystack_[0].location);
                  }
-#line 1381 "parser.cc"
+#line 1394 "parser.cc"
     break;
 
-  case 53: // option_code: "option name"
-#line 514 "parser.yy"
+  case 54: // option_code: "option name"
+#line 524 "parser.yy"
                  {
                      yylhs.value.as < uint16_t > () = ctx.convertOptionName(yystack_[0].value.as < std::string > (), yystack_[0].location);
                  }
-#line 1389 "parser.cc"
+#line 1402 "parser.cc"
     break;
 
-  case 54: // sub_option_code: "integer"
-#line 520 "parser.yy"
+  case 55: // sub_option_code: "integer"
+#line 530 "parser.yy"
                  {
                      yylhs.value.as < uint16_t > () = ctx.convertOptionCode(yystack_[0].value.as < std::string > (), yystack_[0].location);
                  }
-#line 1397 "parser.cc"
+#line 1410 "parser.cc"
     break;
 
-  case 55: // option_repr_type: "text"
-#line 526 "parser.yy"
+  case 56: // option_repr_type: "text"
+#line 536 "parser.yy"
                       {
                           yylhs.value.as < TokenOption::RepresentationType > () = TokenOption::TEXTUAL;
                       }
-#line 1405 "parser.cc"
+#line 1418 "parser.cc"
     break;
 
-  case 56: // option_repr_type: "hex"
-#line 530 "parser.yy"
+  case 57: // option_repr_type: "hex"
+#line 540 "parser.yy"
                       {
                           yylhs.value.as < TokenOption::RepresentationType > () = TokenOption::HEXADECIMAL;
                       }
-#line 1413 "parser.cc"
+#line 1426 "parser.cc"
     break;
 
-  case 57: // nest_level: "integer"
-#line 536 "parser.yy"
+  case 58: // nest_level: "integer"
+#line 546 "parser.yy"
                  {
                      yylhs.value.as < int8_t > () = ctx.convertNestLevelNumber(yystack_[0].value.as < std::string > (), yystack_[0].location);
                  }
-#line 1421 "parser.cc"
+#line 1434 "parser.cc"
     break;
 
-  case 58: // pkt_metadata: "iface"
-#line 545 "parser.yy"
+  case 59: // pkt_metadata: "iface"
+#line 555 "parser.yy"
                   {
                       yylhs.value.as < TokenPkt::MetadataType > () = TokenPkt::IFACE;
                   }
-#line 1429 "parser.cc"
+#line 1442 "parser.cc"
     break;
 
-  case 59: // pkt_metadata: "src"
-#line 549 "parser.yy"
+  case 60: // pkt_metadata: "src"
+#line 559 "parser.yy"
                   {
                       yylhs.value.as < TokenPkt::MetadataType > () = TokenPkt::SRC;
                   }
-#line 1437 "parser.cc"
+#line 1450 "parser.cc"
     break;
 
-  case 60: // pkt_metadata: "dst"
-#line 553 "parser.yy"
+  case 61: // pkt_metadata: "dst"
+#line 563 "parser.yy"
                   {
                       yylhs.value.as < TokenPkt::MetadataType > () = TokenPkt::DST;
                   }
-#line 1445 "parser.cc"
+#line 1458 "parser.cc"
     break;
 
-  case 61: // pkt_metadata: "len"
-#line 557 "parser.yy"
+  case 62: // pkt_metadata: "len"
+#line 567 "parser.yy"
                   {
                       yylhs.value.as < TokenPkt::MetadataType > () = TokenPkt::LEN;
                   }
-#line 1453 "parser.cc"
+#line 1466 "parser.cc"
     break;
 
-  case 62: // enterprise_id: "integer"
-#line 563 "parser.yy"
+  case 63: // enterprise_id: "integer"
+#line 573 "parser.yy"
                    {
                        yylhs.value.as < uint32_t > () = ctx.convertUint32(yystack_[0].value.as < std::string > (), yystack_[0].location);
                    }
-#line 1461 "parser.cc"
+#line 1474 "parser.cc"
     break;
 
-  case 63: // enterprise_id: "*"
-#line 567 "parser.yy"
+  case 64: // enterprise_id: "*"
+#line 577 "parser.yy"
                    {
                        yylhs.value.as < uint32_t > () = 0;
                    }
-#line 1469 "parser.cc"
+#line 1482 "parser.cc"
     break;
 
-  case 64: // pkt4_field: "mac"
-#line 573 "parser.yy"
+  case 65: // pkt4_field: "mac"
+#line 583 "parser.yy"
                 {
                     yylhs.value.as < TokenPkt4::FieldType > () = TokenPkt4::CHADDR;
                 }
-#line 1477 "parser.cc"
+#line 1490 "parser.cc"
     break;
 
-  case 65: // pkt4_field: "hlen"
-#line 577 "parser.yy"
+  case 66: // pkt4_field: "hlen"
+#line 587 "parser.yy"
                 {
                     yylhs.value.as < TokenPkt4::FieldType > () = TokenPkt4::HLEN;
                 }
-#line 1485 "parser.cc"
+#line 1498 "parser.cc"
     break;
 
-  case 66: // pkt4_field: "htype"
-#line 581 "parser.yy"
+  case 67: // pkt4_field: "htype"
+#line 591 "parser.yy"
                 {
                     yylhs.value.as < TokenPkt4::FieldType > () = TokenPkt4::HTYPE;
                 }
-#line 1493 "parser.cc"
+#line 1506 "parser.cc"
     break;
 
-  case 67: // pkt4_field: "ciaddr"
-#line 585 "parser.yy"
+  case 68: // pkt4_field: "ciaddr"
+#line 595 "parser.yy"
                 {
                     yylhs.value.as < TokenPkt4::FieldType > () = TokenPkt4::CIADDR;
                 }
-#line 1501 "parser.cc"
+#line 1514 "parser.cc"
     break;
 
-  case 68: // pkt4_field: "giaddr"
-#line 589 "parser.yy"
+  case 69: // pkt4_field: "giaddr"
+#line 599 "parser.yy"
                 {
                     yylhs.value.as < TokenPkt4::FieldType > () = TokenPkt4::GIADDR;
                 }
-#line 1509 "parser.cc"
+#line 1522 "parser.cc"
     break;
 
-  case 69: // pkt4_field: "yiaddr"
-#line 593 "parser.yy"
+  case 70: // pkt4_field: "yiaddr"
+#line 603 "parser.yy"
                 {
                     yylhs.value.as < TokenPkt4::FieldType > () = TokenPkt4::YIADDR;
                 }
-#line 1517 "parser.cc"
+#line 1530 "parser.cc"
     break;
 
-  case 70: // pkt4_field: "siaddr"
-#line 597 "parser.yy"
+  case 71: // pkt4_field: "siaddr"
+#line 607 "parser.yy"
                 {
                     yylhs.value.as < TokenPkt4::FieldType > () = TokenPkt4::SIADDR;
                 }
-#line 1525 "parser.cc"
+#line 1538 "parser.cc"
     break;
 
-  case 71: // pkt4_field: "msgtype"
-#line 601 "parser.yy"
+  case 72: // pkt4_field: "msgtype"
+#line 611 "parser.yy"
                  {
                     yylhs.value.as < TokenPkt4::FieldType > () = TokenPkt4::MSGTYPE;
                  }
-#line 1533 "parser.cc"
+#line 1546 "parser.cc"
     break;
 
-  case 72: // pkt4_field: "transid"
-#line 605 "parser.yy"
+  case 73: // pkt4_field: "transid"
+#line 615 "parser.yy"
                  {
                     yylhs.value.as < TokenPkt4::FieldType > () = TokenPkt4::TRANSID;
                  }
-#line 1541 "parser.cc"
+#line 1554 "parser.cc"
     break;
 
-  case 73: // pkt6_field: "msgtype"
-#line 611 "parser.yy"
+  case 74: // pkt6_field: "msgtype"
+#line 621 "parser.yy"
                  {
                      yylhs.value.as < TokenPkt6::FieldType > () = TokenPkt6::MSGTYPE;
                  }
-#line 1549 "parser.cc"
+#line 1562 "parser.cc"
     break;
 
-  case 74: // pkt6_field: "transid"
-#line 615 "parser.yy"
+  case 75: // pkt6_field: "transid"
+#line 625 "parser.yy"
                  {
                      yylhs.value.as < TokenPkt6::FieldType > () = TokenPkt6::TRANSID;
                  }
-#line 1557 "parser.cc"
+#line 1570 "parser.cc"
     break;
 
-  case 75: // relay6_field: "peeraddr"
-#line 621 "parser.yy"
+  case 76: // relay6_field: "peeraddr"
+#line 631 "parser.yy"
                    {
                        yylhs.value.as < TokenRelay6Field::FieldType > () = TokenRelay6Field::PEERADDR;
                    }
-#line 1565 "parser.cc"
+#line 1578 "parser.cc"
     break;
 
-  case 76: // relay6_field: "linkaddr"
-#line 625 "parser.yy"
+  case 77: // relay6_field: "linkaddr"
+#line 635 "parser.yy"
                    {
                        yylhs.value.as < TokenRelay6Field::FieldType > () = TokenRelay6Field::LINKADDR;
                    }
-#line 1573 "parser.cc"
+#line 1586 "parser.cc"
     break;
 
-  case 77: // start_expr: "integer"
-#line 631 "parser.yy"
+  case 78: // start_expr: "integer"
+#line 641 "parser.yy"
                 {
                     TokenPtr str(new TokenString(yystack_[0].value.as < std::string > ()));
                     ctx.expression.push_back(str);
                 }
-#line 1582 "parser.cc"
+#line 1595 "parser.cc"
     break;
 
-  case 78: // length_expr: "integer"
-#line 638 "parser.yy"
+  case 79: // length_expr: "integer"
+#line 648 "parser.yy"
                  {
                      TokenPtr str(new TokenString(yystack_[0].value.as < std::string > ()));
                      ctx.expression.push_back(str);
                  }
-#line 1591 "parser.cc"
+#line 1604 "parser.cc"
     break;
 
-  case 79: // length_expr: "all"
-#line 643 "parser.yy"
+  case 80: // length_expr: "all"
+#line 653 "parser.yy"
                  {
                      TokenPtr str(new TokenString("all"));
                      ctx.expression.push_back(str);
                  }
-#line 1600 "parser.cc"
+#line 1613 "parser.cc"
     break;
 
-  case 80: // int_expr: "integer"
-#line 649 "parser.yy"
+  case 81: // int_expr: "integer"
+#line 659 "parser.yy"
                  {
                      TokenPtr str(new TokenString(yystack_[0].value.as < std::string > ()));
                      ctx.expression.push_back(str);
                  }
-#line 1609 "parser.cc"
+#line 1622 "parser.cc"
     break;
 
 
-#line 1613 "parser.cc"
+#line 1626 "parser.cc"
 
             default:
               break;
@@ -1961,38 +1974,39 @@ namespace isc { namespace eval {
   }
 
 
-  const short EvalParser::yypact_ninf_ = -160;
+  const short EvalParser::yypact_ninf_ = -164;
 
   const signed char EvalParser::yytable_ninf_ = -1;
 
   const short
   EvalParser::yypact_[] =
   {
-     -38,   113,   162,    17,   113,   113,    23,    73,    88,   126,
-     100,   132,   163,   166,   183,   191,   195,   198,   211,   212,
-     219,   231,   233,   234,   235,   236,   153,   135,   167,  -160,
-    -160,  -160,  -160,  -160,    36,    62,  -160,   162,   180,   184,
-     225,   170,   174,   138,  -160,   124,     0,  -160,   128,   179,
-     185,   187,    86,    -4,   162,   162,   162,   113,   162,   162,
-     162,   162,   162,   162,   162,   162,   162,   162,    42,    31,
-     186,    31,   188,   113,   113,   162,   162,     2,   128,   179,
-     185,    31,    31,  -160,  -160,  -160,  -160,   226,  -160,   227,
-    -160,   229,   245,  -160,  -160,  -160,  -160,  -160,  -160,  -160,
-    -160,  -160,  -160,  -160,  -160,  -160,  -160,  -160,   181,   182,
-     189,    78,   192,     5,     6,     7,     8,    11,    12,    16,
-      28,    29,  -160,  -160,  -160,  -160,  -160,   237,  -160,   238,
-    -160,  -160,   244,   138,  -160,   239,   240,   241,   242,   243,
-     246,   247,   248,  -160,   190,   162,   162,   162,   162,  -160,
-    -160,  -160,  -160,  -160,  -160,  -160,  -160,  -160,   249,   250,
-     251,   252,   253,   254,   255,    72,    94,    91,  -160,   214,
-     193,    30,   196,    32,   -17,    10,    80,   114,    93,   203,
-     264,   259,  -160,  -160,  -160,  -160,  -160,  -160,   260,  -160,
-    -160,  -160,   -31,   199,  -160,   162,  -160,  -160,   261,   262,
-    -160,   263,   265,   266,   179,   179,  -160,  -160,   258,  -160,
-     275,    33,   220,   179,   179,   179,   179,   267,   268,  -160,
-    -160,  -160,   269,   270,   271,   272,   273,   274,   276,  -160,
-     277,   278,   279,   280,   101,   122,   161,   114,   114,   114,
-    -160,  -160,  -160,  -160,  -160,  -160
+      55,   124,   182,    22,   124,   124,    56,    59,    68,    27,
+     108,   115,    45,   100,   154,   157,   160,   178,   181,   186,
+     210,   211,   212,   215,   216,   218,   217,    83,   111,   232,
+    -164,  -164,  -164,  -164,  -164,   131,    10,  -164,   182,   223,
+     224,   225,   165,   179,   202,  -164,    19,     0,  -164,   132,
+     180,   184,   187,    96,    61,   182,   182,   182,   124,   182,
+     182,   182,   182,   182,   182,   182,   182,   182,   182,    91,
+     -36,   192,   -36,   193,   190,   124,   124,   182,   182,     2,
+     132,   180,   184,   -36,   -36,  -164,  -164,  -164,  -164,   226,
+    -164,   237,  -164,   238,   251,  -164,  -164,  -164,  -164,  -164,
+    -164,  -164,  -164,  -164,  -164,  -164,  -164,  -164,  -164,  -164,
+     162,   163,   167,    80,   168,     5,     6,     7,     8,    11,
+      12,    13,    17,    29,  -164,  -164,  -164,  -164,  -164,   240,
+    -164,   241,  -164,   221,  -164,   253,   202,  -164,   244,   245,
+     246,   247,   248,   249,   250,   252,  -164,   205,   182,   182,
+     182,   182,  -164,  -164,  -164,  -164,  -164,  -164,  -164,  -164,
+    -164,   254,   255,   182,   256,   257,   258,   259,   260,    86,
+      92,    15,  -164,   228,   172,    30,   173,    31,   -17,    87,
+      33,    90,   158,    88,   213,   269,   264,  -164,  -164,  -164,
+    -164,  -164,  -164,   265,  -164,  -164,  -164,   -31,   219,  -164,
+     182,  -164,  -164,   266,   268,  -164,  -164,   270,   271,   272,
+     180,   180,  -164,  -164,   280,  -164,   284,    34,   227,   180,
+     180,   180,   180,   273,   275,  -164,  -164,  -164,   276,   277,
+     278,   279,   281,   282,   283,  -164,   285,   286,   287,   288,
+     104,   133,   136,   158,   158,   158,  -164,  -164,  -164,  -164,
+    -164,  -164
   };
 
   const signed char
@@ -2000,171 +2014,175 @@ namespace isc { namespace eval {
   {
        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,    18,
-      51,    19,    20,     2,     4,     0,    49,     0,     0,     0,
-       0,     0,     0,     3,     1,     0,     0,     6,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      19,    52,    20,    21,     2,     4,     0,    50,     0,     0,
+       0,     0,     0,     0,     3,     1,     0,     0,     6,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     5,    50,    52,    53,     0,    54,     0,
-      57,     0,     0,    58,    59,    60,    61,    25,    64,    65,
-      66,    67,    68,    69,    70,    71,    72,    26,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    73,    74,    27,    63,    62,     0,    45,     0,
-      44,     7,     8,     9,    32,     0,     0,     0,     0,     0,
-       0,     0,     0,    17,     0,     0,     0,     0,     0,    37,
-      38,    39,    40,    41,    42,    43,    33,    34,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    77,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    55,    56,    10,    21,    12,    23,     0,    75,
-      76,    28,     0,     0,    31,     0,    36,    14,    47,     0,
-      15,     0,     0,     0,     0,     0,    79,    78,     0,    80,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    29,
-      30,    35,     0,     0,     0,     0,     0,     0,     0,    48,
+       0,     0,     0,     0,     0,     5,    51,    53,    54,     0,
+      55,     0,    58,     0,     0,    59,    60,    61,    62,    26,
+      65,    66,    67,    68,    69,    70,    71,    72,    73,    27,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      11,    22,    13,    24,    16,    46
+       0,     0,     0,     0,    74,    75,    28,    64,    63,     0,
+      46,     0,    45,     0,     7,     8,     9,    33,     0,     0,
+       0,     0,     0,     0,     0,     0,    17,     0,     0,     0,
+       0,     0,    38,    39,    40,    41,    42,    43,    44,    34,
+      35,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    78,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    56,    57,    10,
+      22,    12,    24,     0,    76,    77,    29,     0,     0,    32,
+       0,    37,    14,    48,     0,    15,    18,     0,     0,     0,
+       0,     0,    80,    79,     0,    81,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    30,    31,    36,     0,     0,
+       0,     0,     0,     0,     0,    49,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    11,    23,    13,    25,
+      16,    47
   };
 
   const short
   EvalParser::yypgoto_[] =
   {
-    -160,  -160,  -160,     9,    -2,  -160,   221,   -78,  -159,   210,
-    -160,    15,  -160,  -160,  -160,  -160,  -160,  -160
+    -164,  -164,  -164,     9,    -2,  -164,   229,   -80,  -163,   214,
+    -164,   -41,  -164,  -164,  -164,  -164,  -164,  -164
   };
 
   const unsigned char
   EvalParser::yydefgoto_[] =
   {
-       0,     3,    33,    34,    35,    36,    87,    89,   185,    91,
-      97,   127,   107,   124,   191,   169,   208,   210
+       0,     3,    34,    35,    36,    37,    89,    91,   190,    93,
+      99,   129,   109,   126,   196,   173,   214,   216
   };
 
   const unsigned char
   EvalParser::yytable_[] =
   {
-      43,   136,    46,   197,    84,   206,    84,   187,    75,   149,
-     150,   151,   152,    45,    47,   153,   154,    44,   187,   199,
-     155,     1,     2,    98,    99,   100,   101,   102,   103,   104,
-     200,   207,   156,   157,   194,    77,   196,   221,    48,    76,
-     198,    76,    73,    74,    76,    76,    76,    76,   105,   106,
-      76,    76,   108,   109,   110,    76,   112,   113,   114,   115,
-     116,   117,   118,   119,   120,   121,   111,    76,    76,    76,
-      75,    76,    76,   133,   134,   241,   243,   245,   241,   243,
-     245,   181,   131,   132,    73,    74,   129,   125,    49,   201,
-     182,   183,   184,   126,   122,   123,   138,   139,   182,   183,
-     188,    76,   202,    50,   189,   190,   189,   190,    93,    94,
-      95,    96,   182,   183,   186,   147,     4,    52,     5,   182,
-     183,   240,     6,     7,     8,     9,   217,   218,    83,    51,
-      73,    74,   182,   183,    10,   223,   224,   225,   226,    11,
-     182,   183,   242,   170,   171,   172,   173,    12,    13,    53,
-      69,    14,    70,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    37,    54,    27,    28,    55,
-      68,    38,    39,    40,    29,    30,    31,    76,    32,   182,
-     183,   244,    71,    10,    72,    81,    56,    70,    11,    82,
-      85,    72,    86,   211,    57,    78,    12,    13,    58,    79,
-      14,    59,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    60,    61,    41,    42,   144,   145,
-      76,    76,    62,    29,    30,    31,   146,    32,    76,   148,
-     193,    76,    76,   195,    63,    76,    64,    65,    66,    67,
-      80,    88,   140,   141,   128,   142,   130,    90,    92,   143,
-      73,   192,   168,   158,   159,   160,   161,   162,   163,   164,
-     198,   209,   219,   165,   166,   167,   174,   175,   176,   177,
-     178,   179,   180,   203,   204,   205,   212,   213,   214,   220,
-     215,   216,   222,   227,   228,   229,   230,   231,   232,   233,
-     137,   234,     0,   235,   236,   237,   238,   239,     0,   135
+      44,   139,    47,   202,    86,   212,    86,   192,    77,   152,
+     153,   154,   155,    46,    48,   156,   157,   158,    77,   192,
+     127,   159,    45,    85,   193,    75,    76,   128,   194,   195,
+      52,   131,   213,   160,   199,   201,    79,   206,   227,    78,
+     203,    78,   141,   142,    78,    78,    78,    78,    55,    78,
+      78,    78,    78,   110,   111,   112,    78,   114,   115,   116,
+     117,   118,   119,   120,   121,   122,   123,   113,    78,    78,
+      78,    49,    78,    78,    50,   136,   137,   247,   249,   251,
+     247,   249,   251,    51,   134,   135,    75,    76,   100,   101,
+     102,   103,   104,   105,   106,   186,   204,   208,    70,   207,
+      71,   194,   195,    56,   187,   188,   189,   205,   187,   188,
+     187,   188,   191,   107,   108,     1,     2,   150,    95,    96,
+      97,    98,   187,   188,   246,    53,    72,     4,    73,     5,
+     223,   224,    54,     6,     7,     8,     9,    75,    76,   229,
+     230,   231,   232,   124,   125,    10,   174,   175,   176,   177,
+      11,   187,   188,   248,   187,   188,   250,    57,    12,    13,
+      58,   180,    14,    59,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,   187,   188,    27,    28,
+      83,    60,    71,    29,    61,    38,    30,    31,    32,    62,
+      33,    39,    40,    41,    84,    87,    73,    88,   217,   147,
+     148,    78,    78,    10,   149,   151,    78,    78,    11,   198,
+     200,    78,    78,    63,    64,    65,    12,    13,    66,    67,
+      14,    68,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    69,    74,    42,    43,    80,    81,
+      82,    78,   143,    90,    30,    31,    32,    92,    33,    94,
+     130,   132,   133,   144,   145,   146,   161,   162,   163,    75,
+     164,   165,   166,   167,   168,   197,   169,   170,   172,   171,
+     203,   178,   179,   181,   182,   183,   184,   185,   209,   210,
+     211,   218,   215,   219,   225,   220,   221,   222,   226,   233,
+     228,   234,   235,   236,   237,   238,   140,   239,     0,   240,
+     241,     0,   242,   243,   244,   245,     0,     0,     0,   138
   };
 
   const short
   EvalParser::yycheck_[] =
   {
-       2,    79,     4,    20,     4,    36,     4,   166,     8,     4,
-       4,     4,     4,     4,     5,     4,     4,     0,   177,     9,
-       4,    59,    60,    27,    28,    29,    30,    31,    32,    33,
-      20,    62,     4,     4,     4,    37,     4,     4,    15,    39,
-      57,    39,     6,     7,    39,    39,    39,    39,    52,    53,
-      39,    39,    54,    55,    56,    39,    58,    59,    60,    61,
-      62,    63,    64,    65,    66,    67,    57,    39,    39,    39,
-       8,    39,    39,    75,    76,   234,   235,   236,   237,   238,
-     239,     9,    73,    74,     6,     7,    71,    56,    15,     9,
-      18,    19,    20,    62,    52,    53,    81,    82,    18,    19,
-       9,    39,     9,    15,    13,    14,    13,    14,    22,    23,
-      24,    25,    18,    19,    20,    37,     3,    17,     5,    18,
-      19,    20,     9,    10,    11,    12,   204,   205,     4,     3,
-       6,     7,    18,    19,    21,   213,   214,   215,   216,    26,
-      18,    19,    20,   145,   146,   147,   148,    34,    35,    17,
-      15,    38,    17,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,    51,     3,     3,    54,    55,     3,
-      17,     9,    10,    11,    61,    62,    63,    39,    65,    18,
-      19,    20,    15,    21,    17,    15,     3,    17,    26,    15,
-      62,    17,    64,   195,     3,    15,    34,    35,     3,    15,
+       2,    81,     4,    20,     4,    36,     4,   170,     8,     4,
+       4,     4,     4,     4,     5,     4,     4,     4,     8,   182,
+      56,     4,     0,     4,     9,     6,     7,    63,    13,    14,
+       3,    72,    63,     4,     4,     4,    38,     4,     4,    39,
+      57,    39,    83,    84,    39,    39,    39,    39,     3,    39,
+      39,    39,    39,    55,    56,    57,    39,    59,    60,    61,
+      62,    63,    64,    65,    66,    67,    68,    58,    39,    39,
+      39,    15,    39,    39,    15,    77,    78,   240,   241,   242,
+     243,   244,   245,    15,    75,    76,     6,     7,    27,    28,
+      29,    30,    31,    32,    33,     9,     9,     9,    15,     9,
+      17,    13,    14,     3,    18,    19,    20,    20,    18,    19,
+      18,    19,    20,    52,    53,    60,    61,    37,    22,    23,
+      24,    25,    18,    19,    20,    17,    15,     3,    17,     5,
+     210,   211,    17,     9,    10,    11,    12,     6,     7,   219,
+     220,   221,   222,    52,    53,    21,   148,   149,   150,   151,
+      26,    18,    19,    20,    18,    19,    20,     3,    34,    35,
+       3,   163,    38,     3,    40,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    50,    51,    18,    19,    54,    55,
+      15,     3,    17,    59,     3,     3,    62,    63,    64,     3,
+      66,     9,    10,    11,    15,    63,    17,    65,   200,    37,
+      37,    39,    39,    21,    37,    37,    39,    39,    26,    37,
+      37,    39,    39,     3,     3,     3,    34,    35,     3,     3,
       38,     3,    40,    41,    42,    43,    44,    45,    46,    47,
-      48,    49,    50,    51,     3,     3,    54,    55,    37,    37,
-      39,    39,     3,    61,    62,    63,    37,    65,    39,    37,
-      37,    39,    39,    37,     3,    39,     3,     3,     3,     3,
-      15,    62,    16,    16,    58,    16,    58,    62,    61,     4,
-       6,    37,    62,    16,    16,    16,    16,    16,    16,    16,
-      57,    62,     4,    17,    17,    17,    17,    17,    17,    17,
-      17,    17,    17,     9,    15,    15,    15,    15,    15,     4,
-      15,    15,    62,    16,    16,    16,    16,    16,    16,    16,
-      80,    17,    -1,    17,    17,    17,    17,    17,    -1,    78
+      48,    49,    50,    51,    17,     3,    54,    55,    15,    15,
+      15,    39,    16,    63,    62,    63,    64,    63,    66,    62,
+      58,    58,    62,    16,    16,     4,    16,    16,    37,     6,
+      16,    16,    16,    16,    16,    37,    17,    17,    63,    17,
+      57,    17,    17,    17,    17,    17,    17,    17,     9,    15,
+      15,    15,    63,    15,     4,    15,    15,    15,     4,    16,
+      63,    16,    16,    16,    16,    16,    82,    16,    -1,    17,
+      17,    -1,    17,    17,    17,    17,    -1,    -1,    -1,    80
   };
 
   const signed char
   EvalParser::yystos_[] =
   {
-       0,    59,    60,    67,     3,     5,     9,    10,    11,    12,
+       0,    60,    61,    68,     3,     5,     9,    10,    11,    12,
       21,    26,    34,    35,    38,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    54,    55,    61,
-      62,    63,    65,    68,    69,    70,    71,     3,     9,    10,
-      11,    54,    55,    70,     0,    69,    70,    69,    15,    15,
-      15,     3,    17,    17,     3,     3,     3,     3,     3,     3,
-       3,     3,     3,     3,     3,     3,     3,     3,    17,    15,
-      17,    15,    17,     6,     7,     8,    39,    70,    15,    15,
-      15,    15,    15,     4,     4,    62,    64,    72,    62,    73,
-      62,    75,    61,    22,    23,    24,    25,    76,    27,    28,
-      29,    30,    31,    32,    33,    52,    53,    78,    70,    70,
-      70,    69,    70,    70,    70,    70,    70,    70,    70,    70,
-      70,    70,    52,    53,    79,    56,    62,    77,    58,    77,
-      58,    69,    69,    70,    70,    72,    73,    75,    77,    77,
-      16,    16,    16,     4,    37,    37,    37,    37,    37,     4,
-       4,     4,     4,     4,     4,     4,     4,     4,    16,    16,
-      16,    16,    16,    16,    16,    17,    17,    17,    62,    81,
-      70,    70,    70,    70,    17,    17,    17,    17,    17,    17,
-      17,     9,    18,    19,    20,    74,    20,    74,     9,    13,
-      14,    80,    37,    37,     4,    37,     4,    20,    57,     9,
-      20,     9,     9,     9,    15,    15,    36,    62,    82,    62,
-      83,    70,    15,    15,    15,    15,    15,    73,    73,     4,
-       4,     4,    62,    73,    73,    73,    73,    16,    16,    16,
-      16,    16,    16,    16,    17,    17,    17,    17,    17,    17,
-      20,    74,    20,    74,    20,    74
+      45,    46,    47,    48,    49,    50,    51,    54,    55,    59,
+      62,    63,    64,    66,    69,    70,    71,    72,     3,     9,
+      10,    11,    54,    55,    71,     0,    70,    71,    70,    15,
+      15,    15,     3,    17,    17,     3,     3,     3,     3,     3,
+       3,     3,     3,     3,     3,     3,     3,     3,     3,    17,
+      15,    17,    15,    17,     3,     6,     7,     8,    39,    71,
+      15,    15,    15,    15,    15,     4,     4,    63,    65,    73,
+      63,    74,    63,    76,    62,    22,    23,    24,    25,    77,
+      27,    28,    29,    30,    31,    32,    33,    52,    53,    79,
+      71,    71,    71,    70,    71,    71,    71,    71,    71,    71,
+      71,    71,    71,    71,    52,    53,    80,    56,    63,    78,
+      58,    78,    58,    62,    70,    70,    71,    71,    73,    74,
+      76,    78,    78,    16,    16,    16,     4,    37,    37,    37,
+      37,    37,     4,     4,     4,     4,     4,     4,     4,     4,
+       4,    16,    16,    37,    16,    16,    16,    16,    16,    17,
+      17,    17,    63,    82,    71,    71,    71,    71,    17,    17,
+      71,    17,    17,    17,    17,    17,     9,    18,    19,    20,
+      75,    20,    75,     9,    13,    14,    81,    37,    37,     4,
+      37,     4,    20,    57,     9,    20,     4,     9,     9,     9,
+      15,    15,    36,    63,    83,    63,    84,    71,    15,    15,
+      15,    15,    15,    74,    74,     4,     4,     4,    63,    74,
+      74,    74,    74,    16,    16,    16,    16,    16,    16,    16,
+      17,    17,    17,    17,    17,    17,    20,    75,    20,    75,
+      20,    75
   };
 
   const signed char
   EvalParser::yyr1_[] =
   {
-       0,    66,    67,    67,    68,    69,    69,    69,    69,    69,
-      69,    69,    69,    69,    69,    69,    69,    69,    70,    70,
-      70,    70,    70,    70,    70,    70,    70,    70,    70,    70,
-      70,    70,    70,    70,    70,    70,    70,    70,    70,    70,
-      70,    70,    70,    70,    70,    70,    70,    70,    70,    70,
-      70,    71,    72,    72,    73,    74,    74,    75,    76,    76,
-      76,    76,    77,    77,    78,    78,    78,    78,    78,    78,
-      78,    78,    78,    79,    79,    80,    80,    81,    82,    82,
-      83
+       0,    67,    68,    68,    69,    70,    70,    70,    70,    70,
+      70,    70,    70,    70,    70,    70,    70,    70,    70,    71,
+      71,    71,    71,    71,    71,    71,    71,    71,    71,    71,
+      71,    71,    71,    71,    71,    71,    71,    71,    71,    71,
+      71,    71,    71,    71,    71,    71,    71,    71,    71,    71,
+      71,    71,    72,    73,    73,    74,    75,    75,    76,    77,
+      77,    77,    77,    78,    78,    79,    79,    79,    79,    79,
+      79,    79,    79,    79,    80,    80,    81,    81,    82,    83,
+      83,    84
   };
 
   const signed char
   EvalParser::yyr2_[] =
   {
        0,     2,     2,     2,     1,     3,     2,     3,     3,     3,
-       6,    11,     6,    11,     6,     6,    11,     4,     1,     1,
-       1,     6,    11,     6,    11,     3,     3,     3,     6,     8,
-       8,     6,     3,     4,     4,     8,     6,     4,     4,     4,
-       4,     4,     4,     4,     3,     3,    11,     6,     9,     1,
-       3,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       6,    11,     6,    11,     6,     6,    11,     4,     6,     1,
+       1,     1,     6,    11,     6,    11,     3,     3,     3,     6,
+       8,     8,     6,     3,     4,     4,     8,     6,     4,     4,
+       4,     4,     4,     4,     4,     3,     3,    11,     6,     9,
+       1,     3,     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
   };
 
 
@@ -2186,13 +2204,13 @@ namespace isc { namespace eval {
   "\"uint8totext\"", "\"uint16totext\"", "\"uint32totext\"", "\"lcase\"",
   "\"ucase\"", "\"pkt6\"", "\"msgtype\"", "\"transid\"",
   "\"vendor-class\"", "\"vendor\"", "\"*\"", "\"data\"", "\"enterprise\"",
-  "\"top-level bool\"", "\"top-level string\"", "\"constant string\"",
-  "\"integer\"", "\"constant hexstring\"", "\"option name\"",
-  "\"ip address\"", "$accept", "start", "expression", "bool_expr",
-  "string_expr", "integer_expr", "option_code", "sub_option_code",
-  "option_repr_type", "nest_level", "pkt_metadata", "enterprise_id",
-  "pkt4_field", "pkt6_field", "relay6_field", "start_expr", "length_expr",
-  "int_expr", YY_NULLPTR
+  "\"match\"", "\"top-level bool\"", "\"top-level string\"",
+  "\"constant string\"", "\"integer\"", "\"constant hexstring\"",
+  "\"option name\"", "\"ip address\"", "$accept", "start", "expression",
+  "bool_expr", "string_expr", "integer_expr", "option_code",
+  "sub_option_code", "option_repr_type", "nest_level", "pkt_metadata",
+  "enterprise_id", "pkt4_field", "pkt6_field", "relay6_field",
+  "start_expr", "length_expr", "int_expr", YY_NULLPTR
   };
 #endif
 
@@ -2201,15 +2219,15 @@ namespace isc { namespace eval {
   const short
   EvalParser::yyrline_[] =
   {
-       0,   138,   138,   139,   144,   147,   148,   153,   158,   163,
-     168,   173,   178,   198,   212,   221,   230,   240,   257,   262,
-     267,   272,   277,   282,   303,   318,   323,   337,   351,   366,
-     371,   376,   381,   386,   391,   396,   401,   406,   411,   416,
-     421,   426,   431,   436,   441,   450,   460,   469,   482,   495,
-     500,   503,   509,   513,   519,   525,   529,   535,   544,   548,
-     552,   556,   562,   566,   572,   576,   580,   584,   588,   592,
-     596,   600,   604,   610,   614,   620,   624,   630,   637,   642,
-     648
+       0,   139,   139,   140,   145,   148,   149,   154,   159,   164,
+     169,   174,   179,   199,   213,   222,   231,   241,   256,   267,
+     272,   277,   282,   287,   292,   313,   328,   333,   347,   361,
+     376,   381,   386,   391,   396,   401,   406,   411,   416,   421,
+     426,   431,   436,   441,   446,   451,   460,   470,   479,   492,
+     505,   510,   513,   519,   523,   529,   535,   539,   545,   554,
+     558,   562,   566,   572,   576,   582,   586,   590,   594,   598,
+     602,   606,   610,   614,   620,   624,   630,   634,   640,   647,
+     652,   658
   };
 
   void
@@ -2242,9 +2260,9 @@ namespace isc { namespace eval {
 
 #line 14 "parser.yy"
 } } // isc::eval
-#line 2246 "parser.cc"
+#line 2264 "parser.cc"
 
-#line 655 "parser.yy"
+#line 665 "parser.yy"
 
 void
 isc::eval::EvalParser::error(const location_type& loc,
index 435035d650db662e03b4ee0d01f145368e21b3ef..96e2143ca0ca27fd132598bdb358144048422768 100644 (file)
@@ -564,13 +564,14 @@ namespace isc { namespace eval {
     TOKEN_ANY = 311,               // "*"
     TOKEN_DATA = 312,              // "data"
     TOKEN_ENTERPRISE = 313,        // "enterprise"
-    TOKEN_TOPLEVEL_BOOL = 314,     // "top-level bool"
-    TOKEN_TOPLEVEL_STRING = 315,   // "top-level string"
-    TOKEN_STRING = 316,            // "constant string"
-    TOKEN_INTEGER = 317,           // "integer"
-    TOKEN_HEXSTRING = 318,         // "constant hexstring"
-    TOKEN_OPTION_NAME = 319,       // "option name"
-    TOKEN_IP_ADDRESS = 320         // "ip address"
+    TOKEN_MATCH = 314,             // "match"
+    TOKEN_TOPLEVEL_BOOL = 315,     // "top-level bool"
+    TOKEN_TOPLEVEL_STRING = 316,   // "top-level string"
+    TOKEN_STRING = 317,            // "constant string"
+    TOKEN_INTEGER = 318,           // "integer"
+    TOKEN_HEXSTRING = 319,         // "constant hexstring"
+    TOKEN_OPTION_NAME = 320,       // "option name"
+    TOKEN_IP_ADDRESS = 321         // "ip address"
       };
       /// Backward compatibility alias (Bison 3.6).
       typedef token_kind_type yytokentype;
@@ -587,7 +588,7 @@ namespace isc { namespace eval {
     {
       enum symbol_kind_type
       {
-        YYNTOKENS = 66, ///< Number of tokens.
+        YYNTOKENS = 67, ///< Number of tokens.
         S_YYEMPTY = -2,
         S_YYEOF = 0,                             // "end of file"
         S_YYerror = 1,                           // error
@@ -648,31 +649,32 @@ namespace isc { namespace eval {
         S_ANY = 56,                              // "*"
         S_DATA = 57,                             // "data"
         S_ENTERPRISE = 58,                       // "enterprise"
-        S_TOPLEVEL_BOOL = 59,                    // "top-level bool"
-        S_TOPLEVEL_STRING = 60,                  // "top-level string"
-        S_STRING = 61,                           // "constant string"
-        S_INTEGER = 62,                          // "integer"
-        S_HEXSTRING = 63,                        // "constant hexstring"
-        S_OPTION_NAME = 64,                      // "option name"
-        S_IP_ADDRESS = 65,                       // "ip address"
-        S_YYACCEPT = 66,                         // $accept
-        S_start = 67,                            // start
-        S_expression = 68,                       // expression
-        S_bool_expr = 69,                        // bool_expr
-        S_string_expr = 70,                      // string_expr
-        S_integer_expr = 71,                     // integer_expr
-        S_option_code = 72,                      // option_code
-        S_sub_option_code = 73,                  // sub_option_code
-        S_option_repr_type = 74,                 // option_repr_type
-        S_nest_level = 75,                       // nest_level
-        S_pkt_metadata = 76,                     // pkt_metadata
-        S_enterprise_id = 77,                    // enterprise_id
-        S_pkt4_field = 78,                       // pkt4_field
-        S_pkt6_field = 79,                       // pkt6_field
-        S_relay6_field = 80,                     // relay6_field
-        S_start_expr = 81,                       // start_expr
-        S_length_expr = 82,                      // length_expr
-        S_int_expr = 83                          // int_expr
+        S_MATCH = 59,                            // "match"
+        S_TOPLEVEL_BOOL = 60,                    // "top-level bool"
+        S_TOPLEVEL_STRING = 61,                  // "top-level string"
+        S_STRING = 62,                           // "constant string"
+        S_INTEGER = 63,                          // "integer"
+        S_HEXSTRING = 64,                        // "constant hexstring"
+        S_OPTION_NAME = 65,                      // "option name"
+        S_IP_ADDRESS = 66,                       // "ip address"
+        S_YYACCEPT = 67,                         // $accept
+        S_start = 68,                            // start
+        S_expression = 69,                       // expression
+        S_bool_expr = 70,                        // bool_expr
+        S_string_expr = 71,                      // string_expr
+        S_integer_expr = 72,                     // integer_expr
+        S_option_code = 73,                      // option_code
+        S_sub_option_code = 74,                  // sub_option_code
+        S_option_repr_type = 75,                 // option_repr_type
+        S_nest_level = 76,                       // nest_level
+        S_pkt_metadata = 77,                     // pkt_metadata
+        S_enterprise_id = 78,                    // enterprise_id
+        S_pkt4_field = 79,                       // pkt4_field
+        S_pkt6_field = 80,                       // pkt6_field
+        S_relay6_field = 81,                     // relay6_field
+        S_start_expr = 82,                       // start_expr
+        S_length_expr = 83,                      // length_expr
+        S_int_expr = 84                          // int_expr
       };
     };
 
@@ -2012,6 +2014,21 @@ switch (yykind)
         return symbol_type (token::TOKEN_ENTERPRISE, l);
       }
 #endif
+#if 201103L <= YY_CPLUSPLUS
+      static
+      symbol_type
+      make_MATCH (location_type l)
+      {
+        return symbol_type (token::TOKEN_MATCH, std::move (l));
+      }
+#else
+      static
+      symbol_type
+      make_MATCH (const location_type& l)
+      {
+        return symbol_type (token::TOKEN_MATCH, l);
+      }
+#endif
 #if 201103L <= YY_CPLUSPLUS
       static
       symbol_type
@@ -2447,9 +2464,9 @@ switch (yykind)
     /// Constants.
     enum
     {
-      yylast_ = 299,     ///< Last index in yytable_.
+      yylast_ = 309,     ///< Last index in yytable_.
       yynnts_ = 18,  ///< Number of nonterminal symbols.
-      yyfinal_ = 44 ///< Termination state number.
+      yyfinal_ = 45 ///< Termination state number.
     };
 
 
@@ -2500,10 +2517,10 @@ switch (yykind)
       35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
       45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
       55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
-      65
+      65,    66
     };
     // Last valid token kind.
-    const int code_max = 320;
+    const int code_max = 321;
 
     if (t <= 0)
       return symbol_kind::S_YYEOF;
@@ -2704,7 +2721,7 @@ switch (yykind)
 
 #line 14 "parser.yy"
 } } // isc::eval
-#line 2708 "parser.h"
+#line 2725 "parser.h"