]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[#3502] Regen flex/bison
authorFrancis Dupont <fdupont@isc.org>
Wed, 7 Aug 2024 19:33:44 +0000 (19:33 +0000)
committerFrancis Dupont <fdupont@isc.org>
Wed, 21 Aug 2024 13:12:38 +0000 (15:12 +0200)
src/lib/eval/location.hh
src/lib/eval/parser.cc
src/lib/eval/parser.h

index f9224dbceaff667c31bb39cd37571bc7616f7a7c..8301f120263d85471a7995b7712e58e540fef018 100644 (file)
@@ -1,4 +1,4 @@
-// Generated 202408071754
+// Generated 202408071933
 // A Bison parser, made by GNU Bison 3.8.2.
 
 // Locations for Bison parsers in C++
index 3ddfc8e8d4ea844b09fd71f5c7f27ef969550adc..c40bbf75eca48653625a1ec18297e8f64d6ed267 100644 (file)
@@ -850,71 +850,95 @@ namespace isc { namespace eval {
 #line 851 "parser.cc"
     break;
 
-  case 7: // bool_expr: bool_expr "and" bool_expr
+  case 7: // $@1: %empty
 #line 160 "parser.yy"
                 {
-                    TokenPtr neg(new TokenAnd());
-                    ctx.expression.push_back(neg);
+                    unsigned target = ++ctx.label;
+                    ctx.labels.push_back(target);
+                    TokenPtr pobf(new TokenPopOrBranchFalse(target));
+                    ctx.expression.push_back(pobf);
                 }
-#line 860 "parser.cc"
+#line 862 "parser.cc"
     break;
 
-  case 8: // bool_expr: bool_expr "sand" bool_expr
+  case 8: // bool_expr: bool_expr "and" $@1 bool_expr
 #line 165 "parser.yy"
+                            {
+                    unsigned target = ctx.labels.pop_back();
+                    TokenPtr lab(new TokenLabel(target));
+                    ctx.expression.push_back(lab);
+                }
+#line 872 "parser.cc"
+    break;
+
+  case 9: // bool_expr: bool_expr "sand" bool_expr
+#line 171 "parser.yy"
                 {
                     TokenPtr neg(new TokenAnd());
                     ctx.expression.push_back(neg);
                 }
-#line 869 "parser.cc"
+#line 881 "parser.cc"
     break;
 
-  case 9: // bool_expr: bool_expr "or" bool_expr
-#line 170 "parser.yy"
+  case 10: // $@2: %empty
+#line 176 "parser.yy"
                 {
-                    TokenPtr neg(new TokenOr());
-                    ctx.expression.push_back(neg);
+                    unsigned target = ++ctx.label;
+                    ctx.labels.push_back(target);
+                    TokenPtr pobt(new TokenPopOrBranchTrue(target));
+                    ctx.expression.push_back(pobt);
                 }
-#line 878 "parser.cc"
+#line 892 "parser.cc"
     break;
 
-  case 10: // bool_expr: bool_expr "sor" bool_expr
-#line 175 "parser.yy"
+  case 11: // bool_expr: bool_expr "or" $@2 bool_expr
+#line 181 "parser.yy"
+                            {
+                    unsigned target = ctx.labels.pop_back();
+                    TokenPtr lab(new TokenLabel(target));
+                    ctx.expression.push_back(lab);
+                }
+#line 902 "parser.cc"
+    break;
+
+  case 12: // bool_expr: bool_expr "sor" bool_expr
+#line 187 "parser.yy"
                 {
                     TokenPtr neg(new TokenOr());
                     ctx.expression.push_back(neg);
                 }
-#line 887 "parser.cc"
+#line 911 "parser.cc"
     break;
 
-  case 11: // bool_expr: string_expr "==" string_expr
-#line 180 "parser.yy"
+  case 13: // bool_expr: string_expr "==" string_expr
+#line 192 "parser.yy"
                 {
                     TokenPtr eq(new TokenEqual());
                     ctx.expression.push_back(eq);
                 }
-#line 896 "parser.cc"
+#line 920 "parser.cc"
     break;
 
-  case 12: // bool_expr: "option" "[" option_code "]" "." "exists"
-#line 185 "parser.yy"
+  case 14: // bool_expr: "option" "[" option_code "]" "." "exists"
+#line 197 "parser.yy"
                 {
                     TokenPtr opt(new TokenOption(yystack_[3].value.as < uint16_t > (), TokenOption::EXISTS));
                     ctx.expression.push_back(opt);
                 }
-#line 905 "parser.cc"
+#line 929 "parser.cc"
     break;
 
-  case 13: // bool_expr: "option" "[" option_code "]" "." "option" "[" sub_option_code "]" "." "exists"
-#line 190 "parser.yy"
+  case 15: // bool_expr: "option" "[" option_code "]" "." "option" "[" sub_option_code "]" "." "exists"
+#line 202 "parser.yy"
                 {
                     TokenPtr opt(new TokenSubOption(yystack_[8].value.as < uint16_t > (), yystack_[3].value.as < uint16_t > (), TokenOption::EXISTS));
                     ctx.expression.push_back(opt);
                 }
-#line 914 "parser.cc"
+#line 938 "parser.cc"
     break;
 
-  case 14: // bool_expr: "relay4" "[" sub_option_code "]" "." "exists"
-#line 195 "parser.yy"
+  case 16: // bool_expr: "relay4" "[" sub_option_code "]" "." "exists"
+#line 207 "parser.yy"
                 {
                    switch (ctx.getUniverse()) {
                    case Option::V4:
@@ -934,11 +958,11 @@ namespace isc { namespace eval {
                        error(yystack_[5].location, "relay4 can only be used in DHCPv4.");
                    }
                 }
-#line 938 "parser.cc"
+#line 962 "parser.cc"
     break;
 
-  case 15: // bool_expr: "relay6" "[" nest_level "]" "." "option" "[" sub_option_code "]" "." "exists"
-#line 215 "parser.yy"
+  case 17: // bool_expr: "relay6" "[" nest_level "]" "." "option" "[" sub_option_code "]" "." "exists"
+#line 227 "parser.yy"
                 {
                     switch (ctx.getUniverse()) {
                     case Option::V6:
@@ -952,11 +976,11 @@ namespace isc { namespace eval {
                         error(yystack_[10].location, "relay6 can only be used in DHCPv6.");
                     }
                 }
-#line 956 "parser.cc"
+#line 980 "parser.cc"
     break;
 
-  case 16: // bool_expr: "vendor-class" "[" enterprise_id "]" "." "exists"
-#line 229 "parser.yy"
+  case 18: // bool_expr: "vendor-class" "[" enterprise_id "]" "." "exists"
+#line 241 "parser.yy"
               {
                   // Expression: vendor-class[1234].exists
                   //
@@ -965,11 +989,11 @@ namespace isc { namespace eval {
                   TokenPtr exist(new TokenVendorClass(ctx.getUniverse(), yystack_[3].value.as < uint32_t > (), TokenOption::EXISTS));
                   ctx.expression.push_back(exist);
               }
-#line 969 "parser.cc"
+#line 993 "parser.cc"
     break;
 
-  case 17: // bool_expr: "vendor" "[" enterprise_id "]" "." "exists"
-#line 238 "parser.yy"
+  case 19: // bool_expr: "vendor" "[" enterprise_id "]" "." "exists"
+#line 250 "parser.yy"
               {
                   // Expression: vendor[1234].exists
                   //
@@ -978,11 +1002,11 @@ namespace isc { namespace eval {
                   TokenPtr exist(new TokenVendor(ctx.getUniverse(), yystack_[3].value.as < uint32_t > (), TokenOption::EXISTS));
                   ctx.expression.push_back(exist);
               }
-#line 982 "parser.cc"
+#line 1006 "parser.cc"
     break;
 
-  case 18: // bool_expr: "vendor" "[" enterprise_id "]" "." "option" "[" sub_option_code "]" "." "exists"
-#line 247 "parser.yy"
+  case 20: // bool_expr: "vendor" "[" enterprise_id "]" "." "option" "[" sub_option_code "]" "." "exists"
+#line 259 "parser.yy"
               {
                   // Expression vendor[1234].option[123].exists
                   //
@@ -992,11 +1016,11 @@ namespace isc { namespace eval {
                   TokenPtr exist(new TokenVendor(ctx.getUniverse(), yystack_[8].value.as < uint32_t > (), TokenOption::EXISTS, yystack_[3].value.as < uint16_t > ()));
                   ctx.expression.push_back(exist);
                }
-#line 996 "parser.cc"
+#line 1020 "parser.cc"
     break;
 
-  case 19: // bool_expr: "member" "(" "constant string" ")"
-#line 257 "parser.yy"
+  case 21: // bool_expr: "member" "(" "constant string" ")"
+#line 269 "parser.yy"
               {
                   // Expression member('foo')
                   //
@@ -1011,11 +1035,11 @@ namespace isc { namespace eval {
                   TokenPtr member(new TokenMember(cc));
                   ctx.expression.push_back(member);
               }
-#line 1015 "parser.cc"
+#line 1039 "parser.cc"
     break;
 
-  case 20: // bool_expr: "match" "(" "constant string" "," string_expr ")"
-#line 272 "parser.yy"
+  case 22: // bool_expr: "match" "(" "constant string" "," string_expr ")"
+#line 284 "parser.yy"
               {
                   // Expression match('<regex>', <string_expr>)
                   //
@@ -1024,56 +1048,56 @@ namespace isc { namespace eval {
                   TokenPtr match(new TokenMatch(yystack_[3].value.as < std::string > ()));
                   ctx.expression.push_back(match);
               }
-#line 1028 "parser.cc"
+#line 1052 "parser.cc"
     break;
 
-  case 21: // string_expr: "constant string"
-#line 283 "parser.yy"
+  case 23: // string_expr: "constant string"
+#line 295 "parser.yy"
                   {
                       TokenPtr str(new TokenString(yystack_[0].value.as < std::string > ()));
                       ctx.expression.push_back(str);
                   }
-#line 1037 "parser.cc"
+#line 1061 "parser.cc"
     break;
 
-  case 22: // string_expr: "constant hexstring"
-#line 288 "parser.yy"
+  case 24: // string_expr: "constant hexstring"
+#line 300 "parser.yy"
                   {
                       TokenPtr hex(new TokenHexString(yystack_[0].value.as < std::string > ()));
                       ctx.expression.push_back(hex);
                   }
-#line 1046 "parser.cc"
+#line 1070 "parser.cc"
     break;
 
-  case 23: // string_expr: "ip address"
-#line 293 "parser.yy"
+  case 25: // string_expr: "ip address"
+#line 305 "parser.yy"
                   {
                       TokenPtr ip(new TokenIpAddress(yystack_[0].value.as < std::string > ()));
                       ctx.expression.push_back(ip);
                   }
-#line 1055 "parser.cc"
+#line 1079 "parser.cc"
     break;
 
-  case 24: // string_expr: "option" "[" option_code "]" "." option_repr_type
-#line 298 "parser.yy"
+  case 26: // string_expr: "option" "[" option_code "]" "." option_repr_type
+#line 310 "parser.yy"
                   {
                       TokenPtr opt(new TokenOption(yystack_[3].value.as < uint16_t > (), yystack_[0].value.as < TokenOption::RepresentationType > ()));
                       ctx.expression.push_back(opt);
                   }
-#line 1064 "parser.cc"
+#line 1088 "parser.cc"
     break;
 
-  case 25: // string_expr: "option" "[" option_code "]" "." "option" "[" sub_option_code "]" "." option_repr_type
-#line 303 "parser.yy"
+  case 27: // string_expr: "option" "[" option_code "]" "." "option" "[" sub_option_code "]" "." option_repr_type
+#line 315 "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 1073 "parser.cc"
+#line 1097 "parser.cc"
     break;
 
-  case 26: // string_expr: "relay4" "[" sub_option_code "]" "." option_repr_type
-#line 308 "parser.yy"
+  case 28: // string_expr: "relay4" "[" sub_option_code "]" "." option_repr_type
+#line 320 "parser.yy"
                   {
                      switch (ctx.getUniverse()) {
                      case Option::V4:
@@ -1093,11 +1117,11 @@ namespace isc { namespace eval {
                          error(yystack_[5].location, "relay4 can only be used in DHCPv4.");
                      }
                   }
-#line 1097 "parser.cc"
+#line 1121 "parser.cc"
     break;
 
-  case 27: // string_expr: "relay6" "[" nest_level "]" "." "option" "[" sub_option_code "]" "." option_repr_type
-#line 329 "parser.yy"
+  case 29: // string_expr: "relay6" "[" nest_level "]" "." "option" "[" sub_option_code "]" "." option_repr_type
+#line 341 "parser.yy"
                   {
                      switch (ctx.getUniverse()) {
                      case Option::V6:
@@ -1111,20 +1135,20 @@ namespace isc { namespace eval {
                          error(yystack_[10].location, "relay6 can only be used in DHCPv6.");
                      }
                   }
-#line 1115 "parser.cc"
+#line 1139 "parser.cc"
     break;
 
-  case 28: // string_expr: "pkt" "." pkt_metadata
-#line 344 "parser.yy"
+  case 30: // string_expr: "pkt" "." pkt_metadata
+#line 356 "parser.yy"
                   {
                       TokenPtr pkt_metadata(new TokenPkt(yystack_[0].value.as < TokenPkt::MetadataType > ()));
                       ctx.expression.push_back(pkt_metadata);
                   }
-#line 1124 "parser.cc"
+#line 1148 "parser.cc"
     break;
 
-  case 29: // string_expr: "pkt4" "." pkt4_field
-#line 349 "parser.yy"
+  case 31: // string_expr: "pkt4" "." pkt4_field
+#line 361 "parser.yy"
                   {
                      switch (ctx.getUniverse()) {
                      case Option::V4:
@@ -1138,11 +1162,11 @@ namespace isc { namespace eval {
                          error(yystack_[2].location, "pkt4 can only be used in DHCPv4.");
                      }
                   }
-#line 1142 "parser.cc"
+#line 1166 "parser.cc"
     break;
 
-  case 30: // string_expr: "pkt6" "." pkt6_field
-#line 363 "parser.yy"
+  case 32: // string_expr: "pkt6" "." pkt6_field
+#line 375 "parser.yy"
                   {
                      switch (ctx.getUniverse()) {
                      case Option::V6:
@@ -1156,11 +1180,11 @@ namespace isc { namespace eval {
                          error(yystack_[2].location, "pkt6 can only be used in DHCPv6.");
                      }
                   }
-#line 1160 "parser.cc"
+#line 1184 "parser.cc"
     break;
 
-  case 31: // string_expr: "relay6" "[" nest_level "]" "." relay6_field
-#line 377 "parser.yy"
+  case 33: // string_expr: "relay6" "[" nest_level "]" "." relay6_field
+#line 389 "parser.yy"
                   {
                      switch (ctx.getUniverse()) {
                      case Option::V6:
@@ -1174,155 +1198,181 @@ namespace isc { namespace eval {
                          error(yystack_[5].location, "relay6 can only be used in DHCPv6.");
                      }
                   }
-#line 1178 "parser.cc"
+#line 1202 "parser.cc"
     break;
 
-  case 32: // string_expr: "substring" "(" string_expr "," start_expr "," length_expr ")"
-#line 392 "parser.yy"
+  case 34: // string_expr: "substring" "(" string_expr "," start_expr "," length_expr ")"
+#line 404 "parser.yy"
                   {
                       TokenPtr sub(new TokenSubstring());
                       ctx.expression.push_back(sub);
                   }
-#line 1187 "parser.cc"
+#line 1211 "parser.cc"
     break;
 
-  case 33: // string_expr: "split" "(" string_expr "," string_expr "," int_expr ")"
-#line 397 "parser.yy"
+  case 35: // string_expr: "split" "(" string_expr "," string_expr "," int_expr ")"
+#line 409 "parser.yy"
                   {
                       TokenPtr split(new TokenSplit());
                       ctx.expression.push_back(split);
                   }
-#line 1196 "parser.cc"
+#line 1220 "parser.cc"
     break;
 
-  case 34: // string_expr: "concat" "(" string_expr "," string_expr ")"
-#line 402 "parser.yy"
+  case 36: // string_expr: "concat" "(" string_expr "," string_expr ")"
+#line 414 "parser.yy"
                   {
                       TokenPtr conc(new TokenConcat());
                       ctx.expression.push_back(conc);
                   }
-#line 1205 "parser.cc"
+#line 1229 "parser.cc"
     break;
 
-  case 35: // string_expr: string_expr "+" string_expr
-#line 407 "parser.yy"
+  case 37: // string_expr: string_expr "+" string_expr
+#line 419 "parser.yy"
                   {
                       TokenPtr conc(new TokenConcat());
                       ctx.expression.push_back(conc);
                   }
-#line 1214 "parser.cc"
+#line 1238 "parser.cc"
     break;
 
-  case 36: // string_expr: "lcase" "(" string_expr ")"
-#line 412 "parser.yy"
+  case 38: // string_expr: "lcase" "(" string_expr ")"
+#line 424 "parser.yy"
                   {
                       TokenPtr lcase(new TokenLowerCase());
                       ctx.expression.push_back(lcase);
                   }
-#line 1223 "parser.cc"
+#line 1247 "parser.cc"
     break;
 
-  case 37: // string_expr: "ucase" "(" string_expr ")"
-#line 417 "parser.yy"
+  case 39: // string_expr: "ucase" "(" string_expr ")"
+#line 429 "parser.yy"
                   {
                       TokenPtr ucase(new TokenUpperCase());
                       ctx.expression.push_back(ucase);
                   }
-#line 1232 "parser.cc"
+#line 1256 "parser.cc"
     break;
 
-  case 38: // string_expr: "ifelse" "(" bool_expr "," string_expr "," string_expr ")"
-#line 422 "parser.yy"
+  case 40: // $@3: %empty
+#line 434 "parser.yy"
                   {
-                      TokenPtr cond(new TokenIfElse());
-                      ctx.expression.push_back(cond);
+                      unsigned target = ++ctx.label;
+                      ctx.labels.push_back(target);
+                      TokenPtr pabf(new TokenPopAndBranchFalse(target));
+                      ctx.expression.push_back(pabf);
+                  }
+#line 1267 "parser.cc"
+    break;
+
+  case 41: // $@4: %empty
+#line 439 "parser.yy"
+                                    {
+                      unsigned target = ctx.labels.pop_back();
+                      unsigned target2 = ++ctx.label;
+                      ctx.labels.push_back(target2);
+                      TokenPtr branch(new TokenBranch(target2));
+                      ctx.expression.push_back(branch);
+                      TokenPtr lab(new TokenLabel(target));
+                      ctx.expression.push_back(lab);
                   }
-#line 1241 "parser.cc"
+#line 1281 "parser.cc"
     break;
 
-  case 39: // string_expr: "sifelse" "(" bool_expr "," string_expr "," string_expr ")"
-#line 427 "parser.yy"
+  case 42: // string_expr: "ifelse" "(" bool_expr "," $@3 string_expr "," $@4 string_expr ")"
+#line 447 "parser.yy"
+                                    {
+                      unsigned target = ctx.labels.pop_back();
+                      TokenPtr lab(new TokenLabel(target));
+                      ctx.expression.push_back(lab);
+                  }
+#line 1291 "parser.cc"
+    break;
+
+  case 43: // string_expr: "sifelse" "(" bool_expr "," string_expr "," string_expr ")"
+#line 453 "parser.yy"
                   {
                       TokenPtr cond(new TokenIfElse());
                       ctx.expression.push_back(cond);
                   }
-#line 1250 "parser.cc"
+#line 1300 "parser.cc"
     break;
 
-  case 40: // string_expr: "hexstring" "(" string_expr "," string_expr ")"
-#line 432 "parser.yy"
+  case 44: // string_expr: "hexstring" "(" string_expr "," string_expr ")"
+#line 458 "parser.yy"
                   {
                       TokenPtr tohex(new TokenToHexString());
                       ctx.expression.push_back(tohex);
                   }
-#line 1259 "parser.cc"
+#line 1309 "parser.cc"
     break;
 
-  case 41: // string_expr: "addrtotext" "(" string_expr ")"
-#line 437 "parser.yy"
+  case 45: // string_expr: "addrtotext" "(" string_expr ")"
+#line 463 "parser.yy"
                   {
                       TokenPtr addrtotext(new TokenIpAddressToText());
                       ctx.expression.push_back(addrtotext);
                   }
-#line 1268 "parser.cc"
+#line 1318 "parser.cc"
     break;
 
-  case 42: // string_expr: "int8totext" "(" string_expr ")"
-#line 442 "parser.yy"
+  case 46: // string_expr: "int8totext" "(" string_expr ")"
+#line 468 "parser.yy"
                   {
                       TokenPtr int8totext(new TokenInt8ToText());
                       ctx.expression.push_back(int8totext);
                   }
-#line 1277 "parser.cc"
+#line 1327 "parser.cc"
     break;
 
-  case 43: // string_expr: "int16totext" "(" string_expr ")"
-#line 447 "parser.yy"
+  case 47: // string_expr: "int16totext" "(" string_expr ")"
+#line 473 "parser.yy"
                   {
                       TokenPtr int16totext(new TokenInt16ToText());
                       ctx.expression.push_back(int16totext);
                   }
-#line 1286 "parser.cc"
+#line 1336 "parser.cc"
     break;
 
-  case 44: // string_expr: "int32totext" "(" string_expr ")"
-#line 452 "parser.yy"
+  case 48: // string_expr: "int32totext" "(" string_expr ")"
+#line 478 "parser.yy"
                   {
                       TokenPtr int32totext(new TokenInt32ToText());
                       ctx.expression.push_back(int32totext);
                   }
-#line 1295 "parser.cc"
+#line 1345 "parser.cc"
     break;
 
-  case 45: // string_expr: "uint8totext" "(" string_expr ")"
-#line 457 "parser.yy"
+  case 49: // string_expr: "uint8totext" "(" string_expr ")"
+#line 483 "parser.yy"
                   {
                       TokenPtr uint8totext(new TokenUInt8ToText());
                       ctx.expression.push_back(uint8totext);
                   }
-#line 1304 "parser.cc"
+#line 1354 "parser.cc"
     break;
 
-  case 46: // string_expr: "uint16totext" "(" string_expr ")"
-#line 462 "parser.yy"
+  case 50: // string_expr: "uint16totext" "(" string_expr ")"
+#line 488 "parser.yy"
                   {
                       TokenPtr uint16totext(new TokenUInt16ToText());
                       ctx.expression.push_back(uint16totext);
                   }
-#line 1313 "parser.cc"
+#line 1363 "parser.cc"
     break;
 
-  case 47: // string_expr: "uint32totext" "(" string_expr ")"
-#line 467 "parser.yy"
+  case 51: // string_expr: "uint32totext" "(" string_expr ")"
+#line 493 "parser.yy"
                   {
                       TokenPtr uint32totext(new TokenUInt32ToText());
                       ctx.expression.push_back(uint32totext);
                   }
-#line 1322 "parser.cc"
+#line 1372 "parser.cc"
     break;
 
-  case 48: // string_expr: "vendor" "." "enterprise"
-#line 472 "parser.yy"
+  case 52: // string_expr: "vendor" "." "enterprise"
+#line 498 "parser.yy"
                 {
                     // expression: vendor.enterprise
                     //
@@ -1331,11 +1381,11 @@ namespace isc { namespace eval {
                     TokenPtr vendor(new TokenVendor(ctx.getUniverse(), 0, TokenVendor::ENTERPRISE_ID));
                     ctx.expression.push_back(vendor);
                 }
-#line 1335 "parser.cc"
+#line 1385 "parser.cc"
     break;
 
-  case 49: // string_expr: "vendor-class" "." "enterprise"
-#line 481 "parser.yy"
+  case 53: // string_expr: "vendor-class" "." "enterprise"
+#line 507 "parser.yy"
                 {
                     // expression: vendor-class.enterprise
                     //
@@ -1345,11 +1395,11 @@ namespace isc { namespace eval {
                                                          TokenVendor::ENTERPRISE_ID));
                     ctx.expression.push_back(vendor);
                 }
-#line 1349 "parser.cc"
+#line 1399 "parser.cc"
     break;
 
-  case 50: // string_expr: "vendor" "[" enterprise_id "]" "." "option" "[" sub_option_code "]" "." option_repr_type
-#line 491 "parser.yy"
+  case 54: // string_expr: "vendor" "[" enterprise_id "]" "." "option" "[" sub_option_code "]" "." option_repr_type
+#line 517 "parser.yy"
                 {
                     // This token will search for vendor option with
                     // specified enterprise-id.  If found, will search
@@ -1358,11 +1408,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 1362 "parser.cc"
+#line 1412 "parser.cc"
     break;
 
-  case 51: // string_expr: "vendor-class" "[" enterprise_id "]" "." "data"
-#line 500 "parser.yy"
+  case 55: // string_expr: "vendor-class" "[" enterprise_id "]" "." "data"
+#line 526 "parser.yy"
                 {
                     // expression: vendor-class[1234].data
                     //
@@ -1375,11 +1425,11 @@ namespace isc { namespace eval {
                                                                TokenVendor::DATA, 0));
                     ctx.expression.push_back(vendor_class);
                 }
-#line 1379 "parser.cc"
+#line 1429 "parser.cc"
     break;
 
-  case 52: // string_expr: "vendor-class" "[" enterprise_id "]" "." "data" "[" "integer" "]"
-#line 513 "parser.yy"
+  case 56: // string_expr: "vendor-class" "[" enterprise_id "]" "." "data" "[" "integer" "]"
+#line 539 "parser.yy"
                 {
                     // expression: vendor-class[1234].data[5]
                     //
@@ -1392,264 +1442,264 @@ namespace isc { namespace eval {
                                                                TokenVendor::DATA, index));
                     ctx.expression.push_back(vendor_class);
                 }
-#line 1396 "parser.cc"
+#line 1446 "parser.cc"
     break;
 
-  case 53: // string_expr: integer_expr
-#line 526 "parser.yy"
+  case 57: // string_expr: integer_expr
+#line 552 "parser.yy"
                 {
                     TokenPtr integer(new TokenInteger(yystack_[0].value.as < uint32_t > ()));
                     ctx.expression.push_back(integer);
                 }
-#line 1405 "parser.cc"
+#line 1455 "parser.cc"
     break;
 
-  case 55: // integer_expr: "integer"
-#line 534 "parser.yy"
+  case 59: // integer_expr: "integer"
+#line 560 "parser.yy"
                  {
                      yylhs.value.as < uint32_t > () = ctx.convertUint32(yystack_[0].value.as < std::string > (), yystack_[0].location);
                  }
-#line 1413 "parser.cc"
+#line 1463 "parser.cc"
     break;
 
-  case 56: // option_code: "integer"
-#line 540 "parser.yy"
+  case 60: // option_code: "integer"
+#line 566 "parser.yy"
                  {
                      yylhs.value.as < uint16_t > () = ctx.convertOptionCode(yystack_[0].value.as < std::string > (), yystack_[0].location);
                  }
-#line 1421 "parser.cc"
+#line 1471 "parser.cc"
     break;
 
-  case 57: // option_code: "option name"
-#line 544 "parser.yy"
+  case 61: // option_code: "option name"
+#line 570 "parser.yy"
                  {
                      yylhs.value.as < uint16_t > () = ctx.convertOptionName(yystack_[0].value.as < std::string > (), yystack_[0].location);
                  }
-#line 1429 "parser.cc"
+#line 1479 "parser.cc"
     break;
 
-  case 58: // sub_option_code: "integer"
-#line 550 "parser.yy"
+  case 62: // sub_option_code: "integer"
+#line 576 "parser.yy"
                  {
                      yylhs.value.as < uint16_t > () = ctx.convertOptionCode(yystack_[0].value.as < std::string > (), yystack_[0].location);
                  }
-#line 1437 "parser.cc"
+#line 1487 "parser.cc"
     break;
 
-  case 59: // option_repr_type: "text"
-#line 556 "parser.yy"
+  case 63: // option_repr_type: "text"
+#line 582 "parser.yy"
                       {
                           yylhs.value.as < TokenOption::RepresentationType > () = TokenOption::TEXTUAL;
                       }
-#line 1445 "parser.cc"
+#line 1495 "parser.cc"
     break;
 
-  case 60: // option_repr_type: "hex"
-#line 560 "parser.yy"
+  case 64: // option_repr_type: "hex"
+#line 586 "parser.yy"
                       {
                           yylhs.value.as < TokenOption::RepresentationType > () = TokenOption::HEXADECIMAL;
                       }
-#line 1453 "parser.cc"
+#line 1503 "parser.cc"
     break;
 
-  case 61: // nest_level: "integer"
-#line 566 "parser.yy"
+  case 65: // nest_level: "integer"
+#line 592 "parser.yy"
                  {
                      yylhs.value.as < int8_t > () = ctx.convertNestLevelNumber(yystack_[0].value.as < std::string > (), yystack_[0].location);
                  }
-#line 1461 "parser.cc"
+#line 1511 "parser.cc"
     break;
 
-  case 62: // pkt_metadata: "iface"
-#line 575 "parser.yy"
+  case 66: // pkt_metadata: "iface"
+#line 601 "parser.yy"
                   {
                       yylhs.value.as < TokenPkt::MetadataType > () = TokenPkt::IFACE;
                   }
-#line 1469 "parser.cc"
+#line 1519 "parser.cc"
     break;
 
-  case 63: // pkt_metadata: "src"
-#line 579 "parser.yy"
+  case 67: // pkt_metadata: "src"
+#line 605 "parser.yy"
                   {
                       yylhs.value.as < TokenPkt::MetadataType > () = TokenPkt::SRC;
                   }
-#line 1477 "parser.cc"
+#line 1527 "parser.cc"
     break;
 
-  case 64: // pkt_metadata: "dst"
-#line 583 "parser.yy"
+  case 68: // pkt_metadata: "dst"
+#line 609 "parser.yy"
                   {
                       yylhs.value.as < TokenPkt::MetadataType > () = TokenPkt::DST;
                   }
-#line 1485 "parser.cc"
+#line 1535 "parser.cc"
     break;
 
-  case 65: // pkt_metadata: "len"
-#line 587 "parser.yy"
+  case 69: // pkt_metadata: "len"
+#line 613 "parser.yy"
                   {
                       yylhs.value.as < TokenPkt::MetadataType > () = TokenPkt::LEN;
                   }
-#line 1493 "parser.cc"
+#line 1543 "parser.cc"
     break;
 
-  case 66: // enterprise_id: "integer"
-#line 593 "parser.yy"
+  case 70: // enterprise_id: "integer"
+#line 619 "parser.yy"
                    {
                        yylhs.value.as < uint32_t > () = ctx.convertUint32(yystack_[0].value.as < std::string > (), yystack_[0].location);
                    }
-#line 1501 "parser.cc"
+#line 1551 "parser.cc"
     break;
 
-  case 67: // enterprise_id: "*"
-#line 597 "parser.yy"
+  case 71: // enterprise_id: "*"
+#line 623 "parser.yy"
                    {
                        yylhs.value.as < uint32_t > () = 0;
                    }
-#line 1509 "parser.cc"
+#line 1559 "parser.cc"
     break;
 
-  case 68: // pkt4_field: "mac"
-#line 603 "parser.yy"
+  case 72: // pkt4_field: "mac"
+#line 629 "parser.yy"
                 {
                     yylhs.value.as < TokenPkt4::FieldType > () = TokenPkt4::CHADDR;
                 }
-#line 1517 "parser.cc"
+#line 1567 "parser.cc"
     break;
 
-  case 69: // pkt4_field: "hlen"
-#line 607 "parser.yy"
+  case 73: // pkt4_field: "hlen"
+#line 633 "parser.yy"
                 {
                     yylhs.value.as < TokenPkt4::FieldType > () = TokenPkt4::HLEN;
                 }
-#line 1525 "parser.cc"
+#line 1575 "parser.cc"
     break;
 
-  case 70: // pkt4_field: "htype"
-#line 611 "parser.yy"
+  case 74: // pkt4_field: "htype"
+#line 637 "parser.yy"
                 {
                     yylhs.value.as < TokenPkt4::FieldType > () = TokenPkt4::HTYPE;
                 }
-#line 1533 "parser.cc"
+#line 1583 "parser.cc"
     break;
 
-  case 71: // pkt4_field: "ciaddr"
-#line 615 "parser.yy"
+  case 75: // pkt4_field: "ciaddr"
+#line 641 "parser.yy"
                 {
                     yylhs.value.as < TokenPkt4::FieldType > () = TokenPkt4::CIADDR;
                 }
-#line 1541 "parser.cc"
+#line 1591 "parser.cc"
     break;
 
-  case 72: // pkt4_field: "giaddr"
-#line 619 "parser.yy"
+  case 76: // pkt4_field: "giaddr"
+#line 645 "parser.yy"
                 {
                     yylhs.value.as < TokenPkt4::FieldType > () = TokenPkt4::GIADDR;
                 }
-#line 1549 "parser.cc"
+#line 1599 "parser.cc"
     break;
 
-  case 73: // pkt4_field: "yiaddr"
-#line 623 "parser.yy"
+  case 77: // pkt4_field: "yiaddr"
+#line 649 "parser.yy"
                 {
                     yylhs.value.as < TokenPkt4::FieldType > () = TokenPkt4::YIADDR;
                 }
-#line 1557 "parser.cc"
+#line 1607 "parser.cc"
     break;
 
-  case 74: // pkt4_field: "siaddr"
-#line 627 "parser.yy"
+  case 78: // pkt4_field: "siaddr"
+#line 653 "parser.yy"
                 {
                     yylhs.value.as < TokenPkt4::FieldType > () = TokenPkt4::SIADDR;
                 }
-#line 1565 "parser.cc"
+#line 1615 "parser.cc"
     break;
 
-  case 75: // pkt4_field: "msgtype"
-#line 631 "parser.yy"
+  case 79: // pkt4_field: "msgtype"
+#line 657 "parser.yy"
                  {
                     yylhs.value.as < TokenPkt4::FieldType > () = TokenPkt4::MSGTYPE;
                  }
-#line 1573 "parser.cc"
+#line 1623 "parser.cc"
     break;
 
-  case 76: // pkt4_field: "transid"
-#line 635 "parser.yy"
+  case 80: // pkt4_field: "transid"
+#line 661 "parser.yy"
                  {
                     yylhs.value.as < TokenPkt4::FieldType > () = TokenPkt4::TRANSID;
                  }
-#line 1581 "parser.cc"
+#line 1631 "parser.cc"
     break;
 
-  case 77: // pkt6_field: "msgtype"
-#line 641 "parser.yy"
+  case 81: // pkt6_field: "msgtype"
+#line 667 "parser.yy"
                  {
                      yylhs.value.as < TokenPkt6::FieldType > () = TokenPkt6::MSGTYPE;
                  }
-#line 1589 "parser.cc"
+#line 1639 "parser.cc"
     break;
 
-  case 78: // pkt6_field: "transid"
-#line 645 "parser.yy"
+  case 82: // pkt6_field: "transid"
+#line 671 "parser.yy"
                  {
                      yylhs.value.as < TokenPkt6::FieldType > () = TokenPkt6::TRANSID;
                  }
-#line 1597 "parser.cc"
+#line 1647 "parser.cc"
     break;
 
-  case 79: // relay6_field: "peeraddr"
-#line 651 "parser.yy"
+  case 83: // relay6_field: "peeraddr"
+#line 677 "parser.yy"
                    {
                        yylhs.value.as < TokenRelay6Field::FieldType > () = TokenRelay6Field::PEERADDR;
                    }
-#line 1605 "parser.cc"
+#line 1655 "parser.cc"
     break;
 
-  case 80: // relay6_field: "linkaddr"
-#line 655 "parser.yy"
+  case 84: // relay6_field: "linkaddr"
+#line 681 "parser.yy"
                    {
                        yylhs.value.as < TokenRelay6Field::FieldType > () = TokenRelay6Field::LINKADDR;
                    }
-#line 1613 "parser.cc"
+#line 1663 "parser.cc"
     break;
 
-  case 81: // start_expr: "integer"
-#line 661 "parser.yy"
+  case 85: // start_expr: "integer"
+#line 687 "parser.yy"
                 {
                     TokenPtr str(new TokenString(yystack_[0].value.as < std::string > ()));
                     ctx.expression.push_back(str);
                 }
-#line 1622 "parser.cc"
+#line 1672 "parser.cc"
     break;
 
-  case 82: // length_expr: "integer"
-#line 668 "parser.yy"
+  case 86: // length_expr: "integer"
+#line 694 "parser.yy"
                  {
                      TokenPtr str(new TokenString(yystack_[0].value.as < std::string > ()));
                      ctx.expression.push_back(str);
                  }
-#line 1631 "parser.cc"
+#line 1681 "parser.cc"
     break;
 
-  case 83: // length_expr: "all"
-#line 673 "parser.yy"
+  case 87: // length_expr: "all"
+#line 699 "parser.yy"
                  {
                      TokenPtr str(new TokenString("all"));
                      ctx.expression.push_back(str);
                  }
-#line 1640 "parser.cc"
+#line 1690 "parser.cc"
     break;
 
-  case 84: // int_expr: "integer"
-#line 679 "parser.yy"
+  case 88: // int_expr: "integer"
+#line 706 "parser.yy"
                  {
                      TokenPtr str(new TokenString(yystack_[0].value.as < std::string > ()));
                      ctx.expression.push_back(str);
                  }
-#line 1649 "parser.cc"
+#line 1699 "parser.cc"
     break;
 
 
-#line 1653 "parser.cc"
+#line 1703 "parser.cc"
 
             default:
               break;
@@ -2001,40 +2051,40 @@ namespace isc { namespace eval {
   }
 
 
-  const short EvalParser::yypact_ninf_ = -172;
+  const short EvalParser::yypact_ninf_ = -173;
 
   const signed char EvalParser::yytable_ninf_ = -1;
 
   const short
   EvalParser::yypact_[] =
   {
-     -45,   147,   207,    44,   147,   147,    57,    61,    98,   116,
-     105,   126,   148,   171,   203,   208,   230,   235,   236,   237,
-     238,   239,   242,   243,   245,   259,   260,   166,    74,   108,
-     263,  -172,  -172,  -172,  -172,  -172,   132,     7,  -172,   207,
-     250,   251,   252,   162,   163,    94,  -172,   114,     1,  -172,
-     120,   204,   205,   210,   138,    -4,   207,   207,   207,   147,
-     147,   207,   207,   207,   207,   207,   207,   207,   207,   207,
-     207,   -32,    45,   217,    45,   218,   212,   147,   147,   147,
-     147,   207,   207,     2,   120,   204,   205,    45,    45,  -172,
-    -172,  -172,  -172,   262,  -172,   264,  -172,   265,   277,  -172,
-    -172,  -172,  -172,  -172,  -172,  -172,  -172,  -172,  -172,  -172,
-    -172,  -172,  -172,  -172,   176,   182,   183,    89,    93,   186,
-       4,     5,     6,     8,     9,    12,    17,    30,    31,  -172,
-    -172,  -172,  -172,  -172,   266,  -172,   267,  -172,   247,  -172,
-     281,   196,   102,    94,  -172,   270,   271,   272,   273,   274,
-     275,   276,   278,  -172,   227,   207,   207,   207,   207,   207,
-    -172,  -172,  -172,  -172,  -172,  -172,  -172,  -172,  -172,   279,
-     280,   207,   282,   283,   284,   285,   286,    92,   122,   115,
-    -172,   257,   187,    32,   190,   193,    34,   -19,    11,    35,
-      96,   216,   118,   240,   295,   290,  -172,  -172,  -172,  -172,
-    -172,  -172,   291,  -172,  -172,  -172,   -34,   244,  -172,   207,
-     207,  -172,  -172,   292,   294,  -172,  -172,   296,   297,   298,
-     204,   204,  -172,  -172,   308,  -172,   312,    36,    53,   253,
-     204,   204,   204,   204,   299,   300,  -172,  -172,  -172,  -172,
-     302,   303,   304,   305,   306,   307,   309,  -172,   310,   311,
-     313,   314,   146,   151,   156,   216,   216,   216,  -172,  -172,
-    -172,  -172,  -172,  -172
+     -45,   175,   236,     4,   175,   175,    61,   101,   107,    25,
+      26,    82,   102,   149,   159,   179,   182,   192,   198,   205,
+     206,   210,   211,   213,   227,   228,   232,   136,   156,   157,
+     240,  -173,  -173,  -173,  -173,  -173,   134,     7,  -173,   236,
+     151,   229,   233,   160,   164,   126,  -173,   113,     1,  -173,
+     124,   185,   186,   180,   120,    79,   236,   236,   236,   175,
+     175,   236,   236,   236,   236,   236,   236,   236,   236,   236,
+     236,   -33,   -35,   193,   -35,   194,   188,  -173,   175,  -173,
+     175,   236,   236,     2,   124,   185,   186,   -35,   -35,  -173,
+    -173,  -173,  -173,   238,  -173,   239,  -173,   242,   254,  -173,
+    -173,  -173,  -173,  -173,  -173,  -173,  -173,  -173,  -173,  -173,
+    -173,  -173,  -173,  -173,   152,   155,   158,    68,    84,   161,
+       3,     5,     6,     8,     9,    10,    11,    12,    16,  -173,
+    -173,  -173,  -173,  -173,   243,  -173,   244,  -173,   224,   175,
+     259,   175,   125,   126,  -173,   248,   249,   250,   251,   252,
+     255,   256,   258,  -173,   225,   236,   236,  -173,   236,   236,
+    -173,  -173,  -173,  -173,  -173,  -173,  -173,  -173,  -173,   273,
+     276,   236,  -173,    91,   277,   278,   279,   280,   281,    74,
+     106,    88,  -173,   265,   165,    28,   236,   166,    29,   -19,
+      18,    30,    95,   116,   114,   246,   260,   290,  -173,  -173,
+    -173,  -173,  -173,  -173,   291,  -173,  -173,  -173,    -8,   245,
+    -173,   195,   236,  -173,  -173,   292,   293,  -173,  -173,   295,
+     296,   297,   185,   185,  -173,  -173,   311,  -173,   312,  -173,
+      31,   253,   185,   185,   185,   185,   299,   300,  -173,  -173,
+     236,  -173,   302,   303,   304,   305,   306,   307,   308,    32,
+    -173,   309,   310,   313,   314,   138,   144,  -173,   150,   116,
+     116,   116,  -173,  -173,  -173,  -173,  -173,  -173
   };
 
   const signed char
@@ -2043,122 +2093,126 @@ 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,     0,
-       0,    21,    55,    22,    23,     2,     4,     0,    53,     0,
+       0,    23,    59,    24,    25,     2,     4,     0,    57,     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,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     7,     0,    10,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     5,
-      54,    56,    57,     0,    58,     0,    61,     0,     0,    62,
-      63,    64,    65,    28,    68,    69,    70,    71,    72,    73,
-      74,    75,    76,    29,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    77,
-      78,    30,    67,    66,     0,    49,     0,    48,     0,     7,
-       8,     9,    10,    11,    35,     0,     0,     0,     0,     0,
-       0,     0,     0,    19,     0,     0,     0,     0,     0,     0,
-      41,    42,    43,    44,    45,    46,    47,    36,    37,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      81,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    59,    60,    12,    24,
-      14,    26,     0,    79,    80,    31,     0,     0,    34,     0,
-       0,    40,    16,    51,     0,    17,    20,     0,     0,     0,
-       0,     0,    83,    82,     0,    84,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    32,    33,    38,    39,
-       0,     0,     0,     0,     0,     0,     0,    52,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    13,    25,
-      15,    27,    18,    50
+      58,    60,    61,     0,    62,     0,    65,     0,     0,    66,
+      67,    68,    69,    30,    72,    73,    74,    75,    76,    77,
+      78,    79,    80,    31,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    81,
+      82,    32,    71,    70,     0,    53,     0,    52,     0,     0,
+       9,     0,    12,    13,    37,     0,     0,     0,     0,     0,
+       0,     0,     0,    21,     0,     0,     0,    40,     0,     0,
+      45,    46,    47,    48,    49,    50,    51,    38,    39,     0,
+       0,     0,     8,    11,     0,     0,     0,     0,     0,     0,
+       0,     0,    85,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    63,    64,
+      14,    26,    16,    28,     0,    83,    84,    33,     0,     0,
+      36,     0,     0,    44,    18,    55,     0,    19,    22,     0,
+       0,     0,     0,     0,    87,    86,     0,    88,     0,    41,
+       0,     0,     0,     0,     0,     0,     0,     0,    34,    35,
+       0,    43,     0,     0,     0,     0,     0,     0,     0,     0,
+      56,     0,     0,     0,     0,     0,     0,    42,     0,     0,
+       0,     0,    15,    27,    17,    29,    20,    54
   };
 
   const short
   EvalParser::yypgoto_[] =
   {
-    -172,  -172,  -172,    10,    -2,  -172,   241,   -84,  -171,   248,
-    -172,    18,  -172,  -172,  -172,  -172,  -172,  -172
+    -173,  -173,  -173,    22,  -173,  -173,    -2,  -173,  -173,  -173,
+     241,   -84,  -172,   257,  -173,   -49,  -173,  -173,  -173,  -173,
+    -173,  -173
   };
 
   const unsigned char
   EvalParser::yydefgoto_[] =
   {
-       0,     3,    35,    36,    37,    38,    93,    95,   199,    97,
-     103,   134,   113,   131,   205,   181,   224,   226
+       0,     3,    35,    36,   139,   141,    37,   186,   240,    38,
+      93,    95,   201,    97,   103,   134,   113,   131,   207,   183,
+     226,   228
   };
 
   const short
   EvalParser::yytable_[] =
   {
-      45,   146,    48,   212,   222,    90,    90,   201,   160,   161,
-     162,    81,   163,   164,    47,    49,   165,    81,     1,     2,
-     201,   166,   214,   129,   130,   104,   105,   106,   107,   108,
-     109,   110,   223,   215,   167,   168,   208,    83,   211,   216,
-     238,   213,    82,    82,    46,    82,    82,    82,    82,    82,
-      82,   111,   112,    82,   114,   115,   116,   239,    82,   119,
-     120,   121,   122,   123,   124,   125,   126,   127,   128,   117,
-     118,    82,    82,    82,    50,    82,    82,    82,    51,   143,
-     144,   259,   261,   263,   259,   261,   263,   139,   140,   141,
-     142,    72,   136,    73,    82,    77,    78,    79,    80,    77,
-      78,    79,    80,   195,   132,   148,   149,   217,    77,    78,
-      79,   133,   196,   197,   198,    52,   196,   197,    89,    53,
-      77,    78,    79,    80,    54,    74,   202,    75,   157,   218,
-     203,   204,   158,   203,   204,    82,   234,   235,    77,    78,
-      79,    80,   196,   197,   200,    55,   241,   242,   243,   244,
-       4,    56,     5,   182,   183,   184,   185,   186,     6,     7,
-       8,     9,    99,   100,   101,   102,   196,   197,   258,   189,
-      10,   196,   197,   260,    57,    11,   196,   197,   262,    87,
-      88,    73,    75,    12,    13,    71,    91,    14,    92,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    77,    78,    28,    29,    58,   227,   228,    30,
-      39,    59,    31,    32,    33,   154,    34,    82,    40,    41,
-      42,   155,   156,    82,    82,   159,   207,    82,    82,   209,
-      10,    82,   210,    60,    82,    11,   196,   197,    61,    62,
-      63,    64,    65,    12,    13,    66,    67,    14,    68,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    69,    70,    43,    44,    76,    84,    85,    86,
-      94,    96,    31,    32,    33,    98,    34,   138,   135,   137,
-     150,   153,   151,   152,   169,   170,   171,    77,   172,   173,
-     174,   175,   176,   180,   177,   178,   206,   179,   187,   188,
-     213,   190,   191,   192,   193,   194,   219,   220,   221,   229,
-     225,   230,   236,   231,   232,   233,   237,   245,   246,   240,
-     247,   248,   249,   250,   251,   145,   252,     0,   253,   254,
-     255,     0,   256,   257,   147
+      45,   146,    48,   214,    46,    90,    90,   160,   203,   161,
+     162,    81,   163,   164,   165,   166,   167,    81,     1,     2,
+     168,   203,   129,   130,   132,   136,    47,    49,    53,   216,
+     224,   133,   210,   213,   218,   241,   257,    83,   148,   149,
+     217,   215,    82,    82,    82,    54,    82,    82,    82,    82,
+      82,    82,    82,    82,   114,   115,   116,    82,   225,   119,
+     120,   121,   122,   123,   124,   125,   126,   127,   128,    82,
+      82,    82,    82,    82,    77,    78,    79,    80,    50,   143,
+     144,   117,   118,   263,   265,   197,   267,   263,   265,   267,
+      77,    78,    79,    80,   198,   199,   200,    77,    78,   204,
+     140,    55,   142,   205,   206,    56,   219,   157,   104,   105,
+     106,   107,   108,   109,   110,   198,   199,    89,    51,    77,
+      78,    79,    80,   158,    52,   220,   198,   199,   202,   205,
+     206,    77,    78,    79,   111,   112,   198,   199,   236,   237,
+      77,    78,    79,    80,    99,   100,   101,   102,   243,   244,
+     245,   246,    57,   184,   185,    71,   187,   188,   198,   199,
+     262,   172,    58,   173,   198,   199,   264,    82,    84,   191,
+     198,   199,   266,    72,    74,    73,    75,    87,     4,    73,
+       5,    88,    59,    75,   211,    60,     6,     7,     8,     9,
+      91,   154,    92,    82,   155,    61,    82,   156,    10,    82,
+     159,    62,    82,    11,   209,   212,    82,    82,    63,    64,
+     230,    12,    13,    65,    66,    14,    67,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      68,    69,    28,    29,   229,    70,    82,    30,   249,    39,
+      31,    32,    33,    76,    34,    98,    85,    40,    41,    42,
+      86,    94,    96,   138,   135,   137,   150,   151,   153,    10,
+     152,   169,   170,   171,    11,    77,   174,   175,   176,   177,
+     178,   221,    12,    13,   179,   180,    14,   181,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,   182,   189,    43,    44,   190,   192,   193,   194,   195,
+     196,    31,    32,    33,   208,    34,   215,   222,   223,   231,
+     232,   227,   233,   234,   235,   238,   239,   247,   248,   242,
+     250,   251,   252,   253,   254,   145,   255,   256,   258,   259,
+       0,     0,   260,   261,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   147
   };
 
   const short
   EvalParser::yycheck_[] =
   {
-       2,    85,     4,    22,    38,     4,     4,   178,     4,     4,
-       4,    10,     4,     4,     4,     5,     4,    10,    63,    64,
-     191,     4,    11,    55,    56,    29,    30,    31,    32,    33,
-      34,    35,    66,    22,     4,     4,     4,    39,     4,     4,
-       4,    60,    41,    41,     0,    41,    41,    41,    41,    41,
-      41,    55,    56,    41,    56,    57,    58,     4,    41,    61,
-      62,    63,    64,    65,    66,    67,    68,    69,    70,    59,
-      60,    41,    41,    41,    17,    41,    41,    41,    17,    81,
-      82,   252,   253,   254,   255,   256,   257,    77,    78,    79,
-      80,    17,    74,    19,    41,     6,     7,     8,     9,     6,
-       7,     8,     9,    11,    59,    87,    88,    11,     6,     7,
-       8,    66,    20,    21,    22,    17,    20,    21,     4,     3,
-       6,     7,     8,     9,    19,    17,    11,    19,    39,    11,
-      15,    16,    39,    15,    16,    41,   220,   221,     6,     7,
-       8,     9,    20,    21,    22,    19,   230,   231,   232,   233,
-       3,     3,     5,   155,   156,   157,   158,   159,    11,    12,
-      13,    14,    24,    25,    26,    27,    20,    21,    22,   171,
-      23,    20,    21,    22,     3,    28,    20,    21,    22,    17,
-      17,    19,    19,    36,    37,    19,    66,    40,    68,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,    54,     6,     7,    57,    58,     3,   209,   210,    62,
-       3,     3,    65,    66,    67,    39,    69,    41,    11,    12,
-      13,    39,    39,    41,    41,    39,    39,    41,    41,    39,
-      23,    41,    39,     3,    41,    28,    20,    21,     3,     3,
-       3,     3,     3,    36,    37,     3,     3,    40,     3,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,    54,     3,     3,    57,    58,     3,    17,    17,    17,
-      66,    66,    65,    66,    67,    65,    69,    65,    61,    61,
-      18,     4,    18,    18,    18,    18,    39,     6,    18,    18,
-      18,    18,    18,    66,    19,    19,    39,    19,    19,    19,
-      60,    19,    19,    19,    19,    19,    11,    17,    17,    17,
-      66,    17,     4,    17,    17,    17,     4,    18,    18,    66,
-      18,    18,    18,    18,    18,    84,    19,    -1,    19,    19,
-      19,    -1,    19,    19,    86
+       2,    85,     4,    22,     0,     4,     4,     4,   180,     4,
+       4,    10,     4,     4,     4,     4,     4,    10,    63,    64,
+       4,   193,    55,    56,    59,    74,     4,     5,     3,    11,
+      38,    66,     4,     4,     4,     4,     4,    39,    87,    88,
+      22,    60,    41,    41,    41,    19,    41,    41,    41,    41,
+      41,    41,    41,    41,    56,    57,    58,    41,    66,    61,
+      62,    63,    64,    65,    66,    67,    68,    69,    70,    41,
+      41,    41,    41,    41,     6,     7,     8,     9,    17,    81,
+      82,    59,    60,   255,   256,    11,   258,   259,   260,   261,
+       6,     7,     8,     9,    20,    21,    22,     6,     7,    11,
+      78,    19,    80,    15,    16,     3,    11,    39,    29,    30,
+      31,    32,    33,    34,    35,    20,    21,     4,    17,     6,
+       7,     8,     9,    39,    17,    11,    20,    21,    22,    15,
+      16,     6,     7,     8,    55,    56,    20,    21,   222,   223,
+       6,     7,     8,     9,    24,    25,    26,    27,   232,   233,
+     234,   235,     3,   155,   156,    19,   158,   159,    20,    21,
+      22,   139,     3,   141,    20,    21,    22,    41,    17,   171,
+      20,    21,    22,    17,    17,    19,    19,    17,     3,    19,
+       5,    17,     3,    19,   186,     3,    11,    12,    13,    14,
+      66,    39,    68,    41,    39,     3,    41,    39,    23,    41,
+      39,     3,    41,    28,    39,    39,    41,    41,     3,     3,
+     212,    36,    37,     3,     3,    40,     3,    42,    43,    44,
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+       3,     3,    57,    58,    39,     3,    41,    62,   240,     3,
+      65,    66,    67,     3,    69,    65,    17,    11,    12,    13,
+      17,    66,    66,    65,    61,    61,    18,    18,     4,    23,
+      18,    18,    18,    39,    28,     6,    18,    18,    18,    18,
+      18,    11,    36,    37,    19,    19,    40,    19,    42,    43,
+      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      54,    66,    19,    57,    58,    19,    19,    19,    19,    19,
+      19,    65,    66,    67,    39,    69,    60,    17,    17,    17,
+      17,    66,    17,    17,    17,     4,     4,    18,    18,    66,
+      18,    18,    18,    18,    18,    84,    19,    19,    19,    19,
+      -1,    -1,    19,    19,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    86
   };
 
   const signed char
@@ -2167,58 +2221,58 @@ namespace isc { namespace eval {
        0,    63,    64,    71,     3,     5,    11,    12,    13,    14,
       23,    28,    36,    37,    40,    42,    43,    44,    45,    46,
       47,    48,    49,    50,    51,    52,    53,    54,    57,    58,
-      62,    65,    66,    67,    69,    72,    73,    74,    75,     3,
-      11,    12,    13,    57,    58,    74,     0,    73,    74,    73,
+      62,    65,    66,    67,    69,    72,    73,    76,    79,     3,
+      11,    12,    13,    57,    58,    76,     0,    73,    76,    73,
       17,    17,    17,     3,    19,    19,     3,     3,     3,     3,
        3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
        3,    19,    17,    19,    17,    19,     3,     6,     7,     8,
-       9,    10,    41,    74,    17,    17,    17,    17,    17,     4,
-       4,    66,    68,    76,    66,    77,    66,    79,    65,    24,
-      25,    26,    27,    80,    29,    30,    31,    32,    33,    34,
-      35,    55,    56,    82,    74,    74,    74,    73,    73,    74,
-      74,    74,    74,    74,    74,    74,    74,    74,    74,    55,
-      56,    83,    59,    66,    81,    61,    81,    61,    65,    73,
-      73,    73,    73,    74,    74,    76,    77,    79,    81,    81,
+       9,    10,    41,    76,    17,    17,    17,    17,    17,     4,
+       4,    66,    68,    80,    66,    81,    66,    83,    65,    24,
+      25,    26,    27,    84,    29,    30,    31,    32,    33,    34,
+      35,    55,    56,    86,    76,    76,    76,    73,    73,    76,
+      76,    76,    76,    76,    76,    76,    76,    76,    76,    55,
+      56,    87,    59,    66,    85,    61,    85,    61,    65,    74,
+      73,    75,    73,    76,    76,    80,    81,    83,    85,    85,
       18,    18,    18,     4,    39,    39,    39,    39,    39,    39,
        4,     4,     4,     4,     4,     4,     4,     4,     4,    18,
-      18,    39,    18,    18,    18,    18,    18,    19,    19,    19,
-      66,    85,    74,    74,    74,    74,    74,    19,    19,    74,
-      19,    19,    19,    19,    19,    11,    20,    21,    22,    78,
-      22,    78,    11,    15,    16,    84,    39,    39,     4,    39,
-      39,     4,    22,    60,    11,    22,     4,    11,    11,    11,
-      17,    17,    38,    66,    86,    66,    87,    74,    74,    17,
-      17,    17,    17,    17,    77,    77,     4,     4,     4,     4,
-      66,    77,    77,    77,    77,    18,    18,    18,    18,    18,
-      18,    18,    19,    19,    19,    19,    19,    19,    22,    78,
-      22,    78,    22,    78
+      18,    39,    73,    73,    18,    18,    18,    18,    18,    19,
+      19,    19,    66,    89,    76,    76,    77,    76,    76,    19,
+      19,    76,    19,    19,    19,    19,    19,    11,    20,    21,
+      22,    82,    22,    82,    11,    15,    16,    88,    39,    39,
+       4,    76,    39,     4,    22,    60,    11,    22,     4,    11,
+      11,    11,    17,    17,    38,    66,    90,    66,    91,    39,
+      76,    17,    17,    17,    17,    17,    81,    81,     4,     4,
+      78,     4,    66,    81,    81,    81,    81,    18,    18,    76,
+      18,    18,    18,    18,    18,    19,    19,     4,    19,    19,
+      19,    19,    22,    82,    22,    82,    22,    82
   };
 
   const signed char
   EvalParser::yyr1_[] =
   {
-       0,    70,    71,    71,    72,    73,    73,    73,    73,    73,
-      73,    73,    73,    73,    73,    73,    73,    73,    73,    73,
-      73,    74,    74,    74,    74,    74,    74,    74,    74,    74,
-      74,    74,    74,    74,    74,    74,    74,    74,    74,    74,
-      74,    74,    74,    74,    74,    74,    74,    74,    74,    74,
-      74,    74,    74,    74,    74,    75,    76,    76,    77,    78,
-      78,    79,    80,    80,    80,    80,    81,    81,    82,    82,
-      82,    82,    82,    82,    82,    82,    82,    83,    83,    84,
-      84,    85,    86,    86,    87
+       0,    70,    71,    71,    72,    73,    73,    74,    73,    73,
+      75,    73,    73,    73,    73,    73,    73,    73,    73,    73,
+      73,    73,    73,    76,    76,    76,    76,    76,    76,    76,
+      76,    76,    76,    76,    76,    76,    76,    76,    76,    76,
+      77,    78,    76,    76,    76,    76,    76,    76,    76,    76,
+      76,    76,    76,    76,    76,    76,    76,    76,    76,    79,
+      80,    80,    81,    82,    82,    83,    84,    84,    84,    84,
+      85,    85,    86,    86,    86,    86,    86,    86,    86,    86,
+      86,    87,    87,    88,    88,    89,    90,    90,    91
   };
 
   const signed char
   EvalParser::yyr2_[] =
   {
-       0,     2,     2,     2,     1,     3,     2,     3,     3,     3,
-       3,     3,     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,     8,
-       6,     4,     4,     4,     4,     4,     4,     4,     3,     3,
-      11,     6,     9,     1,     3,     1,     1,     1,     1,     1,
+       0,     2,     2,     2,     1,     3,     2,     0,     4,     3,
+       0,     4,     3,     3,     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,
+       0,     0,    10,     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,     1,     1,     1,     1
   };
 
 
@@ -2243,10 +2297,11 @@ namespace isc { namespace eval {
   "\"enterprise\"", "\"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
+  "start", "expression", "bool_expr", "$@1", "$@2", "string_expr", "$@3",
+  "$@4", "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
 
@@ -2255,15 +2310,15 @@ namespace isc { namespace eval {
   const short
   EvalParser::yyrline_[] =
   {
-       0,   144,   144,   145,   150,   153,   154,   159,   164,   169,
-     174,   179,   184,   189,   194,   214,   228,   237,   246,   256,
-     271,   282,   287,   292,   297,   302,   307,   328,   343,   348,
-     362,   376,   391,   396,   401,   406,   411,   416,   421,   426,
-     431,   436,   441,   446,   451,   456,   461,   466,   471,   480,
-     490,   499,   512,   525,   530,   533,   539,   543,   549,   555,
-     559,   565,   574,   578,   582,   586,   592,   596,   602,   606,
-     610,   614,   618,   622,   626,   630,   634,   640,   644,   650,
-     654,   660,   667,   672,   678
+       0,   144,   144,   145,   150,   153,   154,   160,   159,   170,
+     176,   175,   186,   191,   196,   201,   206,   226,   240,   249,
+     258,   268,   283,   294,   299,   304,   309,   314,   319,   340,
+     355,   360,   374,   388,   403,   408,   413,   418,   423,   428,
+     434,   439,   433,   452,   457,   462,   467,   472,   477,   482,
+     487,   492,   497,   506,   516,   525,   538,   551,   556,   559,
+     565,   569,   575,   581,   585,   591,   600,   604,   608,   612,
+     618,   622,   628,   632,   636,   640,   644,   648,   652,   656,
+     660,   666,   670,   676,   680,   686,   693,   698,   705
   };
 
   void
@@ -2296,9 +2351,9 @@ namespace isc { namespace eval {
 
 #line 14 "parser.yy"
 } } // isc::eval
-#line 2300 "parser.cc"
+#line 2355 "parser.cc"
 
-#line 685 "parser.yy"
+#line 712 "parser.yy"
 
 void
 isc::eval::EvalParser::error(const location_type& loc,
index b4fedeccc07ab742c58e54984b999e184c9e5034..487ebac78282ffc8ed0744713fcbc208737abaea 100644 (file)
@@ -667,20 +667,24 @@ namespace isc { namespace eval {
         S_start = 71,                            // start
         S_expression = 72,                       // expression
         S_bool_expr = 73,                        // bool_expr
-        S_string_expr = 74,                      // string_expr
-        S_integer_expr = 75,                     // integer_expr
-        S_option_code = 76,                      // option_code
-        S_sub_option_code = 77,                  // sub_option_code
-        S_option_repr_type = 78,                 // option_repr_type
-        S_nest_level = 79,                       // nest_level
-        S_pkt_metadata = 80,                     // pkt_metadata
-        S_enterprise_id = 81,                    // enterprise_id
-        S_pkt4_field = 82,                       // pkt4_field
-        S_pkt6_field = 83,                       // pkt6_field
-        S_relay6_field = 84,                     // relay6_field
-        S_start_expr = 85,                       // start_expr
-        S_length_expr = 86,                      // length_expr
-        S_int_expr = 87                          // int_expr
+        S_74_1 = 74,                             // $@1
+        S_75_2 = 75,                             // $@2
+        S_string_expr = 76,                      // string_expr
+        S_77_3 = 77,                             // $@3
+        S_78_4 = 78,                             // $@4
+        S_integer_expr = 79,                     // integer_expr
+        S_option_code = 80,                      // option_code
+        S_sub_option_code = 81,                  // sub_option_code
+        S_option_repr_type = 82,                 // option_repr_type
+        S_nest_level = 83,                       // nest_level
+        S_pkt_metadata = 84,                     // pkt_metadata
+        S_enterprise_id = 85,                    // enterprise_id
+        S_pkt4_field = 86,                       // pkt4_field
+        S_pkt6_field = 87,                       // pkt6_field
+        S_relay6_field = 88,                     // relay6_field
+        S_start_expr = 89,                       // start_expr
+        S_length_expr = 90,                      // length_expr
+        S_int_expr = 91                          // int_expr
       };
     };
 
@@ -2515,8 +2519,8 @@ switch (yykind)
     /// Constants.
     enum
     {
-      yylast_ = 334,     ///< Last index in yytable_.
-      yynnts_ = 18,  ///< Number of nonterminal symbols.
+      yylast_ = 343,     ///< Last index in yytable_.
+      yynnts_ = 22,  ///< Number of nonterminal symbols.
       yyfinal_ = 46 ///< Termination state number.
     };
 
@@ -2772,7 +2776,7 @@ switch (yykind)
 
 #line 14 "parser.yy"
 } } // isc::eval
-#line 2776 "parser.h"
+#line 2780 "parser.h"