]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[#30,!37] Regen bison 30-implement-control-socket-for-ddns
authorFrancis Dupont <fdupont@isc.org>
Thu, 27 Dec 2018 20:10:20 +0000 (20:10 +0000)
committerFrancis Dupont <fdupont@isc.org>
Thu, 27 Dec 2018 20:10:20 +0000 (20:10 +0000)
src/bin/d2/d2_parser.cc
src/bin/d2/d2_parser.h
src/bin/d2/location.hh
src/bin/d2/position.hh
src/bin/d2/stack.hh

index 72d47f37b2823676ec98407a07a2333eed4bd608..7633b75e3628ebc77a96f6b3ed50946d088201f4 100644 (file)
@@ -1,4 +1,4 @@
-// A Bison parser, made by GNU Bison 3.2.1.
+// A Bison parser, made by GNU Bison 3.2.4.
 
 // Skeleton implementation for Bison LALR(1) parsers in C++
 
@@ -245,25 +245,25 @@ namespace isc { namespace d2 {
   {
     switch (that.type_get ())
     {
-      case 68: // value
-      case 72: // map_value
-      case 96: // ncr_protocol_value
+      case 71: // value
+      case 75: // map_value
+      case 99: // ncr_protocol_value
         value.YY_MOVE_OR_COPY< ElementPtr > (YY_MOVE (that.value));
         break;
 
-      case 56: // "boolean"
+      case 59: // "boolean"
         value.YY_MOVE_OR_COPY< bool > (YY_MOVE (that.value));
         break;
 
-      case 55: // "floating point"
+      case 58: // "floating point"
         value.YY_MOVE_OR_COPY< double > (YY_MOVE (that.value));
         break;
 
-      case 54: // "integer"
+      case 57: // "integer"
         value.YY_MOVE_OR_COPY< int64_t > (YY_MOVE (that.value));
         break;
 
-      case 53: // "constant string"
+      case 56: // "constant string"
         value.YY_MOVE_OR_COPY< std::string > (YY_MOVE (that.value));
         break;
 
@@ -282,25 +282,25 @@ namespace isc { namespace d2 {
   {
     switch (that.type_get ())
     {
-      case 68: // value
-      case 72: // map_value
-      case 96: // ncr_protocol_value
+      case 71: // value
+      case 75: // map_value
+      case 99: // ncr_protocol_value
         value.move< ElementPtr > (YY_MOVE (that.value));
         break;
 
-      case 56: // "boolean"
+      case 59: // "boolean"
         value.move< bool > (YY_MOVE (that.value));
         break;
 
-      case 55: // "floating point"
+      case 58: // "floating point"
         value.move< double > (YY_MOVE (that.value));
         break;
 
-      case 54: // "integer"
+      case 57: // "integer"
         value.move< int64_t > (YY_MOVE (that.value));
         break;
 
-      case 53: // "constant string"
+      case 56: // "constant string"
         value.move< std::string > (YY_MOVE (that.value));
         break;
 
@@ -319,25 +319,25 @@ namespace isc { namespace d2 {
     state = that.state;
     switch (that.type_get ())
     {
-      case 68: // value
-      case 72: // map_value
-      case 96: // ncr_protocol_value
+      case 71: // value
+      case 75: // map_value
+      case 99: // ncr_protocol_value
         value.move< ElementPtr > (that.value);
         break;
 
-      case 56: // "boolean"
+      case 59: // "boolean"
         value.move< bool > (that.value);
         break;
 
-      case 55: // "floating point"
+      case 58: // "floating point"
         value.move< double > (that.value);
         break;
 
-      case 54: // "integer"
+      case 57: // "integer"
         value.move< int64_t > (that.value);
         break;
 
-      case 53: // "constant string"
+      case 56: // "constant string"
         value.move< std::string > (that.value);
         break;
 
@@ -378,51 +378,51 @@ namespace isc { namespace d2 {
         << yysym.location << ": ";
     switch (yytype)
     {
-            case 53: // "constant string"
+            case 56: // "constant string"
 
-#line 111 "d2_parser.yy" // lalr1.cc:672
+#line 115 "d2_parser.yy" // lalr1.cc:672
         { yyoutput << yysym.value.template as< std::string > (); }
 #line 386 "d2_parser.cc" // lalr1.cc:672
         break;
 
-      case 54: // "integer"
+      case 57: // "integer"
 
-#line 111 "d2_parser.yy" // lalr1.cc:672
+#line 115 "d2_parser.yy" // lalr1.cc:672
         { yyoutput << yysym.value.template as< int64_t > (); }
 #line 393 "d2_parser.cc" // lalr1.cc:672
         break;
 
-      case 55: // "floating point"
+      case 58: // "floating point"
 
-#line 111 "d2_parser.yy" // lalr1.cc:672
+#line 115 "d2_parser.yy" // lalr1.cc:672
         { yyoutput << yysym.value.template as< double > (); }
 #line 400 "d2_parser.cc" // lalr1.cc:672
         break;
 
-      case 56: // "boolean"
+      case 59: // "boolean"
 
-#line 111 "d2_parser.yy" // lalr1.cc:672
+#line 115 "d2_parser.yy" // lalr1.cc:672
         { yyoutput << yysym.value.template as< bool > (); }
 #line 407 "d2_parser.cc" // lalr1.cc:672
         break;
 
-      case 68: // value
+      case 71: // value
 
-#line 111 "d2_parser.yy" // lalr1.cc:672
+#line 115 "d2_parser.yy" // lalr1.cc:672
         { yyoutput << yysym.value.template as< ElementPtr > (); }
 #line 414 "d2_parser.cc" // lalr1.cc:672
         break;
 
-      case 72: // map_value
+      case 75: // map_value
 
-#line 111 "d2_parser.yy" // lalr1.cc:672
+#line 115 "d2_parser.yy" // lalr1.cc:672
         { yyoutput << yysym.value.template as< ElementPtr > (); }
 #line 421 "d2_parser.cc" // lalr1.cc:672
         break;
 
-      case 96: // ncr_protocol_value
+      case 99: // ncr_protocol_value
 
-#line 111 "d2_parser.yy" // lalr1.cc:672
+#line 115 "d2_parser.yy" // lalr1.cc:672
         { yyoutput << yysym.value.template as< ElementPtr > (); }
 #line 428 "d2_parser.cc" // lalr1.cc:672
         break;
@@ -634,25 +634,25 @@ namespace isc { namespace d2 {
          when using variants.  */
       switch (yyr1_[yyn])
     {
-      case 68: // value
-      case 72: // map_value
-      case 96: // ncr_protocol_value
+      case 71: // value
+      case 75: // map_value
+      case 99: // ncr_protocol_value
         yylhs.value.emplace< ElementPtr > ();
         break;
 
-      case 56: // "boolean"
+      case 59: // "boolean"
         yylhs.value.emplace< bool > ();
         break;
 
-      case 55: // "floating point"
+      case 58: // "floating point"
         yylhs.value.emplace< double > ();
         break;
 
-      case 54: // "integer"
+      case 57: // "integer"
         yylhs.value.emplace< int64_t > ();
         break;
 
-      case 53: // "constant string"
+      case 56: // "constant string"
         yylhs.value.emplace< std::string > ();
         break;
 
@@ -677,103 +677,103 @@ namespace isc { namespace d2 {
           switch (yyn)
             {
   case 2:
-#line 120 "d2_parser.yy" // lalr1.cc:907
+#line 124 "d2_parser.yy" // lalr1.cc:907
     { ctx.ctx_ = ctx.NO_KEYWORD; }
 #line 683 "d2_parser.cc" // lalr1.cc:907
     break;
 
   case 4:
-#line 121 "d2_parser.yy" // lalr1.cc:907
+#line 125 "d2_parser.yy" // lalr1.cc:907
     { ctx.ctx_ = ctx.CONFIG; }
 #line 689 "d2_parser.cc" // lalr1.cc:907
     break;
 
   case 6:
-#line 122 "d2_parser.yy" // lalr1.cc:907
+#line 126 "d2_parser.yy" // lalr1.cc:907
     { ctx.ctx_ = ctx.DHCPDDNS; }
 #line 695 "d2_parser.cc" // lalr1.cc:907
     break;
 
   case 8:
-#line 123 "d2_parser.yy" // lalr1.cc:907
+#line 127 "d2_parser.yy" // lalr1.cc:907
     { ctx.ctx_ = ctx.TSIG_KEY; }
 #line 701 "d2_parser.cc" // lalr1.cc:907
     break;
 
   case 10:
-#line 124 "d2_parser.yy" // lalr1.cc:907
+#line 128 "d2_parser.yy" // lalr1.cc:907
     { ctx.ctx_ = ctx.TSIG_KEYS; }
 #line 707 "d2_parser.cc" // lalr1.cc:907
     break;
 
   case 12:
-#line 125 "d2_parser.yy" // lalr1.cc:907
+#line 129 "d2_parser.yy" // lalr1.cc:907
     { ctx.ctx_ = ctx.DDNS_DOMAIN; }
 #line 713 "d2_parser.cc" // lalr1.cc:907
     break;
 
   case 14:
-#line 126 "d2_parser.yy" // lalr1.cc:907
+#line 130 "d2_parser.yy" // lalr1.cc:907
     { ctx.ctx_ = ctx.DDNS_DOMAINS; }
 #line 719 "d2_parser.cc" // lalr1.cc:907
     break;
 
   case 16:
-#line 127 "d2_parser.yy" // lalr1.cc:907
+#line 131 "d2_parser.yy" // lalr1.cc:907
     { ctx.ctx_ = ctx.DNS_SERVERS; }
 #line 725 "d2_parser.cc" // lalr1.cc:907
     break;
 
   case 18:
-#line 128 "d2_parser.yy" // lalr1.cc:907
+#line 132 "d2_parser.yy" // lalr1.cc:907
     { ctx.ctx_ = ctx.DNS_SERVERS; }
 #line 731 "d2_parser.cc" // lalr1.cc:907
     break;
 
   case 20:
-#line 136 "d2_parser.yy" // lalr1.cc:907
+#line 140 "d2_parser.yy" // lalr1.cc:907
     { yylhs.value.as< ElementPtr > () = ElementPtr(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); }
 #line 737 "d2_parser.cc" // lalr1.cc:907
     break;
 
   case 21:
-#line 137 "d2_parser.yy" // lalr1.cc:907
+#line 141 "d2_parser.yy" // lalr1.cc:907
     { yylhs.value.as< ElementPtr > () = ElementPtr(new DoubleElement(yystack_[0].value.as< double > (), ctx.loc2pos(yystack_[0].location))); }
 #line 743 "d2_parser.cc" // lalr1.cc:907
     break;
 
   case 22:
-#line 138 "d2_parser.yy" // lalr1.cc:907
+#line 142 "d2_parser.yy" // lalr1.cc:907
     { yylhs.value.as< ElementPtr > () = ElementPtr(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); }
 #line 749 "d2_parser.cc" // lalr1.cc:907
     break;
 
   case 23:
-#line 139 "d2_parser.yy" // lalr1.cc:907
+#line 143 "d2_parser.yy" // lalr1.cc:907
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); }
 #line 755 "d2_parser.cc" // lalr1.cc:907
     break;
 
   case 24:
-#line 140 "d2_parser.yy" // lalr1.cc:907
+#line 144 "d2_parser.yy" // lalr1.cc:907
     { yylhs.value.as< ElementPtr > () = ElementPtr(new NullElement(ctx.loc2pos(yystack_[0].location))); }
 #line 761 "d2_parser.cc" // lalr1.cc:907
     break;
 
   case 25:
-#line 141 "d2_parser.yy" // lalr1.cc:907
+#line 145 "d2_parser.yy" // lalr1.cc:907
     { yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
 #line 767 "d2_parser.cc" // lalr1.cc:907
     break;
 
   case 26:
-#line 142 "d2_parser.yy" // lalr1.cc:907
+#line 146 "d2_parser.yy" // lalr1.cc:907
     { yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
 #line 773 "d2_parser.cc" // lalr1.cc:907
     break;
 
   case 27:
-#line 145 "d2_parser.yy" // lalr1.cc:907
+#line 149 "d2_parser.yy" // lalr1.cc:907
     {
     // Push back the JSON value on the stack
     ctx.stack_.push_back(yystack_[0].value.as< ElementPtr > ());
@@ -782,7 +782,7 @@ namespace isc { namespace d2 {
     break;
 
   case 28:
-#line 150 "d2_parser.yy" // lalr1.cc:907
+#line 154 "d2_parser.yy" // lalr1.cc:907
     {
     // This code is executed when we're about to start parsing
     // the content of the map
@@ -793,7 +793,7 @@ namespace isc { namespace d2 {
     break;
 
   case 29:
-#line 155 "d2_parser.yy" // lalr1.cc:907
+#line 159 "d2_parser.yy" // lalr1.cc:907
     {
     // map parsing completed. If we ever want to do any wrap up
     // (maybe some sanity checking), this would be the best place
@@ -803,13 +803,13 @@ namespace isc { namespace d2 {
     break;
 
   case 30:
-#line 161 "d2_parser.yy" // lalr1.cc:907
+#line 165 "d2_parser.yy" // lalr1.cc:907
     { yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
 #line 809 "d2_parser.cc" // lalr1.cc:907
     break;
 
   case 33:
-#line 168 "d2_parser.yy" // lalr1.cc:907
+#line 172 "d2_parser.yy" // lalr1.cc:907
     {
                   // map containing a single entry
                   ctx.stack_.back()->set(yystack_[2].value.as< std::string > (), yystack_[0].value.as< ElementPtr > ());
@@ -818,7 +818,7 @@ namespace isc { namespace d2 {
     break;
 
   case 34:
-#line 172 "d2_parser.yy" // lalr1.cc:907
+#line 176 "d2_parser.yy" // lalr1.cc:907
     {
                   // map consisting of a shorter map followed by
                   // comma and string:value
@@ -828,7 +828,7 @@ namespace isc { namespace d2 {
     break;
 
   case 35:
-#line 179 "d2_parser.yy" // lalr1.cc:907
+#line 183 "d2_parser.yy" // lalr1.cc:907
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(l);
@@ -837,7 +837,7 @@ namespace isc { namespace d2 {
     break;
 
   case 36:
-#line 182 "d2_parser.yy" // lalr1.cc:907
+#line 186 "d2_parser.yy" // lalr1.cc:907
     {
     // list parsing complete. Put any sanity checking here
 }
@@ -845,7 +845,7 @@ namespace isc { namespace d2 {
     break;
 
   case 39:
-#line 190 "d2_parser.yy" // lalr1.cc:907
+#line 194 "d2_parser.yy" // lalr1.cc:907
     {
                   // List consisting of a single element.
                   ctx.stack_.back()->add(yystack_[0].value.as< ElementPtr > ());
@@ -854,7 +854,7 @@ namespace isc { namespace d2 {
     break;
 
   case 40:
-#line 194 "d2_parser.yy" // lalr1.cc:907
+#line 198 "d2_parser.yy" // lalr1.cc:907
     {
                   // List ending with , and a value.
                   ctx.stack_.back()->add(yystack_[0].value.as< ElementPtr > ());
@@ -863,7 +863,7 @@ namespace isc { namespace d2 {
     break;
 
   case 41:
-#line 205 "d2_parser.yy" // lalr1.cc:907
+#line 209 "d2_parser.yy" // lalr1.cc:907
     {
     const std::string& where = ctx.contextName();
     const std::string& keyword = yystack_[1].value.as< std::string > ();
@@ -874,7 +874,7 @@ namespace isc { namespace d2 {
     break;
 
   case 42:
-#line 215 "d2_parser.yy" // lalr1.cc:907
+#line 219 "d2_parser.yy" // lalr1.cc:907
     {
     // This code is executed when we're about to start parsing
     // the content of the map
@@ -885,7 +885,7 @@ namespace isc { namespace d2 {
     break;
 
   case 43:
-#line 220 "d2_parser.yy" // lalr1.cc:907
+#line 224 "d2_parser.yy" // lalr1.cc:907
     {
     // map parsing completed. If we ever want to do any wrap up
     // (maybe some sanity checking), this would be the best place
@@ -895,7 +895,7 @@ namespace isc { namespace d2 {
     break;
 
   case 52:
-#line 242 "d2_parser.yy" // lalr1.cc:907
+#line 246 "d2_parser.yy" // lalr1.cc:907
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("DhcpDdns", m);
@@ -906,7 +906,7 @@ namespace isc { namespace d2 {
     break;
 
   case 53:
-#line 247 "d2_parser.yy" // lalr1.cc:907
+#line 251 "d2_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -915,7 +915,7 @@ namespace isc { namespace d2 {
     break;
 
   case 54:
-#line 252 "d2_parser.yy" // lalr1.cc:907
+#line 256 "d2_parser.yy" // lalr1.cc:907
     {
     // Parse the dhcpddns map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -925,23 +925,23 @@ namespace isc { namespace d2 {
     break;
 
   case 55:
-#line 256 "d2_parser.yy" // lalr1.cc:907
+#line 260 "d2_parser.yy" // lalr1.cc:907
     {
     // parsing completed
 }
 #line 933 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 69:
-#line 278 "d2_parser.yy" // lalr1.cc:907
+  case 70:
+#line 283 "d2_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
 #line 941 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 70:
-#line 280 "d2_parser.yy" // lalr1.cc:907
+  case 71:
+#line 285 "d2_parser.yy" // lalr1.cc:907
     {
     ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ip-address", s);
@@ -950,8 +950,8 @@ namespace isc { namespace d2 {
 #line 951 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 71:
-#line 286 "d2_parser.yy" // lalr1.cc:907
+  case 72:
+#line 291 "d2_parser.yy" // lalr1.cc:907
     {
     if (yystack_[0].value.as< int64_t > () <= 0 || yystack_[0].value.as< int64_t > () >= 65536 ) {
         error(yystack_[0].location, "port must be greater than zero but less than 65536");
@@ -962,8 +962,8 @@ namespace isc { namespace d2 {
 #line 963 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 72:
-#line 294 "d2_parser.yy" // lalr1.cc:907
+  case 73:
+#line 299 "d2_parser.yy" // lalr1.cc:907
     {
     if (yystack_[0].value.as< int64_t > () <= 0) {
         error(yystack_[0].location, "dns-server-timeout must be greater than zero");
@@ -975,16 +975,16 @@ namespace isc { namespace d2 {
 #line 976 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 73:
-#line 303 "d2_parser.yy" // lalr1.cc:907
+  case 74:
+#line 308 "d2_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NCR_PROTOCOL);
 }
 #line 984 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 74:
-#line 305 "d2_parser.yy" // lalr1.cc:907
+  case 75:
+#line 310 "d2_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.back()->set("ncr-protocol", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
@@ -992,28 +992,28 @@ namespace isc { namespace d2 {
 #line 993 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 75:
-#line 311 "d2_parser.yy" // lalr1.cc:907
+  case 76:
+#line 316 "d2_parser.yy" // lalr1.cc:907
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("UDP", ctx.loc2pos(yystack_[0].location))); }
 #line 999 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 76:
-#line 312 "d2_parser.yy" // lalr1.cc:907
+  case 77:
+#line 317 "d2_parser.yy" // lalr1.cc:907
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("TCP", ctx.loc2pos(yystack_[0].location))); }
 #line 1005 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 77:
-#line 315 "d2_parser.yy" // lalr1.cc:907
+  case 78:
+#line 320 "d2_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NCR_FORMAT);
 }
 #line 1013 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 78:
-#line 317 "d2_parser.yy" // lalr1.cc:907
+  case 79:
+#line 322 "d2_parser.yy" // lalr1.cc:907
     {
     ElementPtr json(new StringElement("JSON", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ncr-format", json);
@@ -1022,16 +1022,16 @@ namespace isc { namespace d2 {
 #line 1023 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 79:
-#line 323 "d2_parser.yy" // lalr1.cc:907
+  case 80:
+#line 328 "d2_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
 #line 1031 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 80:
-#line 325 "d2_parser.yy" // lalr1.cc:907
+  case 81:
+#line 330 "d2_parser.yy" // lalr1.cc:907
     {
     ElementPtr parent = ctx.stack_.back();
     ElementPtr user_context = yystack_[0].value.as< ElementPtr > ();
@@ -1057,16 +1057,16 @@ namespace isc { namespace d2 {
 #line 1058 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 81:
-#line 348 "d2_parser.yy" // lalr1.cc:907
+  case 82:
+#line 353 "d2_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
 #line 1066 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 82:
-#line 350 "d2_parser.yy" // lalr1.cc:907
+  case 83:
+#line 355 "d2_parser.yy" // lalr1.cc:907
     {
     ElementPtr parent = ctx.stack_.back();
     ElementPtr user_context(new MapElement(ctx.loc2pos(yystack_[3].location)));
@@ -1094,8 +1094,8 @@ namespace isc { namespace d2 {
 #line 1095 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 83:
-#line 375 "d2_parser.yy" // lalr1.cc:907
+  case 84:
+#line 380 "d2_parser.yy" // lalr1.cc:907
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("forward-ddns", m);
@@ -1105,8 +1105,8 @@ namespace isc { namespace d2 {
 #line 1106 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 84:
-#line 380 "d2_parser.yy" // lalr1.cc:907
+  case 85:
+#line 385 "d2_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -1114,8 +1114,8 @@ namespace isc { namespace d2 {
 #line 1115 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 85:
-#line 385 "d2_parser.yy" // lalr1.cc:907
+  case 86:
+#line 390 "d2_parser.yy" // lalr1.cc:907
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("reverse-ddns", m);
@@ -1125,8 +1125,8 @@ namespace isc { namespace d2 {
 #line 1126 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 86:
-#line 390 "d2_parser.yy" // lalr1.cc:907
+  case 87:
+#line 395 "d2_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -1134,8 +1134,8 @@ namespace isc { namespace d2 {
 #line 1135 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 93:
-#line 409 "d2_parser.yy" // lalr1.cc:907
+  case 94:
+#line 414 "d2_parser.yy" // lalr1.cc:907
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ddns-domains", l);
@@ -1145,8 +1145,8 @@ namespace isc { namespace d2 {
 #line 1146 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 94:
-#line 414 "d2_parser.yy" // lalr1.cc:907
+  case 95:
+#line 419 "d2_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -1154,8 +1154,8 @@ namespace isc { namespace d2 {
 #line 1155 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 95:
-#line 419 "d2_parser.yy" // lalr1.cc:907
+  case 96:
+#line 424 "d2_parser.yy" // lalr1.cc:907
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(l);
@@ -1163,16 +1163,16 @@ namespace isc { namespace d2 {
 #line 1164 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 96:
-#line 422 "d2_parser.yy" // lalr1.cc:907
+  case 97:
+#line 427 "d2_parser.yy" // lalr1.cc:907
     {
     // parsing completed
 }
 #line 1172 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 101:
-#line 434 "d2_parser.yy" // lalr1.cc:907
+  case 102:
+#line 439 "d2_parser.yy" // lalr1.cc:907
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
@@ -1181,16 +1181,16 @@ namespace isc { namespace d2 {
 #line 1182 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 102:
-#line 438 "d2_parser.yy" // lalr1.cc:907
+  case 103:
+#line 443 "d2_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
 }
 #line 1190 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 103:
-#line 442 "d2_parser.yy" // lalr1.cc:907
+  case 104:
+#line 447 "d2_parser.yy" // lalr1.cc:907
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
@@ -1198,24 +1198,24 @@ namespace isc { namespace d2 {
 #line 1199 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 104:
-#line 445 "d2_parser.yy" // lalr1.cc:907
+  case 105:
+#line 450 "d2_parser.yy" // lalr1.cc:907
     {
     // parsing completed
 }
 #line 1207 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 113:
-#line 462 "d2_parser.yy" // lalr1.cc:907
+  case 114:
+#line 467 "d2_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
 #line 1215 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 114:
-#line 464 "d2_parser.yy" // lalr1.cc:907
+  case 115:
+#line 469 "d2_parser.yy" // lalr1.cc:907
     {
     if (yystack_[0].value.as< std::string > () == "") {
         error(yystack_[1].location, "Ddns domain name cannot be blank");
@@ -1228,16 +1228,16 @@ namespace isc { namespace d2 {
 #line 1229 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 115:
-#line 474 "d2_parser.yy" // lalr1.cc:907
+  case 116:
+#line 479 "d2_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
 #line 1237 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 116:
-#line 476 "d2_parser.yy" // lalr1.cc:907
+  case 117:
+#line 481 "d2_parser.yy" // lalr1.cc:907
     {
     ElementPtr elem(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ElementPtr name(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
@@ -1247,8 +1247,8 @@ namespace isc { namespace d2 {
 #line 1248 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 117:
-#line 486 "d2_parser.yy" // lalr1.cc:907
+  case 118:
+#line 491 "d2_parser.yy" // lalr1.cc:907
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("dns-servers", l);
@@ -1258,8 +1258,8 @@ namespace isc { namespace d2 {
 #line 1259 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 118:
-#line 491 "d2_parser.yy" // lalr1.cc:907
+  case 119:
+#line 496 "d2_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -1267,8 +1267,8 @@ namespace isc { namespace d2 {
 #line 1268 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 119:
-#line 496 "d2_parser.yy" // lalr1.cc:907
+  case 120:
+#line 501 "d2_parser.yy" // lalr1.cc:907
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(l);
@@ -1276,16 +1276,16 @@ namespace isc { namespace d2 {
 #line 1277 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 120:
-#line 499 "d2_parser.yy" // lalr1.cc:907
+  case 121:
+#line 504 "d2_parser.yy" // lalr1.cc:907
     {
     // parsing completed
 }
 #line 1285 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 123:
-#line 507 "d2_parser.yy" // lalr1.cc:907
+  case 124:
+#line 512 "d2_parser.yy" // lalr1.cc:907
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
@@ -1294,16 +1294,16 @@ namespace isc { namespace d2 {
 #line 1295 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 124:
-#line 511 "d2_parser.yy" // lalr1.cc:907
+  case 125:
+#line 516 "d2_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
 }
 #line 1303 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 125:
-#line 515 "d2_parser.yy" // lalr1.cc:907
+  case 126:
+#line 520 "d2_parser.yy" // lalr1.cc:907
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
@@ -1311,24 +1311,24 @@ namespace isc { namespace d2 {
 #line 1312 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 126:
-#line 518 "d2_parser.yy" // lalr1.cc:907
+  case 127:
+#line 523 "d2_parser.yy" // lalr1.cc:907
     {
     // parsing completed
 }
 #line 1320 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 135:
-#line 534 "d2_parser.yy" // lalr1.cc:907
+  case 136:
+#line 539 "d2_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
 #line 1328 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 136:
-#line 536 "d2_parser.yy" // lalr1.cc:907
+  case 137:
+#line 541 "d2_parser.yy" // lalr1.cc:907
     {
     if (yystack_[0].value.as< std::string > () != "") {
         error(yystack_[1].location, "hostname is not yet supported");
@@ -1341,16 +1341,16 @@ namespace isc { namespace d2 {
 #line 1342 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 137:
-#line 546 "d2_parser.yy" // lalr1.cc:907
+  case 138:
+#line 551 "d2_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
 #line 1350 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 138:
-#line 548 "d2_parser.yy" // lalr1.cc:907
+  case 139:
+#line 553 "d2_parser.yy" // lalr1.cc:907
     {
     ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ip-address", s);
@@ -1359,8 +1359,8 @@ namespace isc { namespace d2 {
 #line 1360 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 139:
-#line 554 "d2_parser.yy" // lalr1.cc:907
+  case 140:
+#line 559 "d2_parser.yy" // lalr1.cc:907
     {
     if (yystack_[0].value.as< int64_t > () <= 0 || yystack_[0].value.as< int64_t > () >= 65536 ) {
         error(yystack_[0].location, "port must be greater than zero but less than 65536");
@@ -1371,8 +1371,8 @@ namespace isc { namespace d2 {
 #line 1372 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 140:
-#line 568 "d2_parser.yy" // lalr1.cc:907
+  case 141:
+#line 573 "d2_parser.yy" // lalr1.cc:907
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("tsig-keys", l);
@@ -1382,8 +1382,8 @@ namespace isc { namespace d2 {
 #line 1383 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 141:
-#line 573 "d2_parser.yy" // lalr1.cc:907
+  case 142:
+#line 578 "d2_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -1391,8 +1391,8 @@ namespace isc { namespace d2 {
 #line 1392 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 142:
-#line 578 "d2_parser.yy" // lalr1.cc:907
+  case 143:
+#line 583 "d2_parser.yy" // lalr1.cc:907
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(l);
@@ -1400,16 +1400,16 @@ namespace isc { namespace d2 {
 #line 1401 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 143:
-#line 581 "d2_parser.yy" // lalr1.cc:907
+  case 144:
+#line 586 "d2_parser.yy" // lalr1.cc:907
     {
     // parsing completed
 }
 #line 1409 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 148:
-#line 593 "d2_parser.yy" // lalr1.cc:907
+  case 149:
+#line 598 "d2_parser.yy" // lalr1.cc:907
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
@@ -1418,16 +1418,16 @@ namespace isc { namespace d2 {
 #line 1419 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 149:
-#line 597 "d2_parser.yy" // lalr1.cc:907
+  case 150:
+#line 602 "d2_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
 }
 #line 1427 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 150:
-#line 601 "d2_parser.yy" // lalr1.cc:907
+  case 151:
+#line 606 "d2_parser.yy" // lalr1.cc:907
     {
     // Parse tsig key list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -1436,24 +1436,24 @@ namespace isc { namespace d2 {
 #line 1437 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 151:
-#line 605 "d2_parser.yy" // lalr1.cc:907
+  case 152:
+#line 610 "d2_parser.yy" // lalr1.cc:907
     {
     // parsing completed
 }
 #line 1445 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 161:
-#line 623 "d2_parser.yy" // lalr1.cc:907
+  case 162:
+#line 628 "d2_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
 #line 1453 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 162:
-#line 625 "d2_parser.yy" // lalr1.cc:907
+  case 163:
+#line 630 "d2_parser.yy" // lalr1.cc:907
     {
     if (yystack_[0].value.as< std::string > () == "") {
         error(yystack_[1].location, "TSIG key name cannot be blank");
@@ -1466,16 +1466,16 @@ namespace isc { namespace d2 {
 #line 1467 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 163:
-#line 635 "d2_parser.yy" // lalr1.cc:907
+  case 164:
+#line 640 "d2_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
 #line 1475 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 164:
-#line 637 "d2_parser.yy" // lalr1.cc:907
+  case 165:
+#line 642 "d2_parser.yy" // lalr1.cc:907
     {
     if (yystack_[0].value.as< std::string > () == "") {
         error(yystack_[1].location, "TSIG key algorithm cannot be blank");
@@ -1487,8 +1487,8 @@ namespace isc { namespace d2 {
 #line 1488 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 165:
-#line 646 "d2_parser.yy" // lalr1.cc:907
+  case 166:
+#line 651 "d2_parser.yy" // lalr1.cc:907
     {
     if (yystack_[0].value.as< int64_t > () < 0 || (yystack_[0].value.as< int64_t > () > 0  && (yystack_[0].value.as< int64_t > () % 8 != 0))) {
         error(yystack_[0].location, "TSIG key digest-bits must either be zero or a positive, multiple of eight");
@@ -1499,16 +1499,16 @@ namespace isc { namespace d2 {
 #line 1500 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 166:
-#line 654 "d2_parser.yy" // lalr1.cc:907
+  case 167:
+#line 659 "d2_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
 #line 1508 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 167:
-#line 656 "d2_parser.yy" // lalr1.cc:907
+  case 168:
+#line 661 "d2_parser.yy" // lalr1.cc:907
     {
     if (yystack_[0].value.as< std::string > () == "") {
         error(yystack_[1].location, "TSIG key secret cannot be blank");
@@ -1520,245 +1520,301 @@ namespace isc { namespace d2 {
 #line 1521 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 168:
-#line 669 "d2_parser.yy" // lalr1.cc:907
+  case 169:
+#line 675 "d2_parser.yy" // lalr1.cc:907
+    {
+    ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
+    ctx.stack_.back()->set("control-socket", m);
+    ctx.stack_.push_back(m);
+    ctx.enter(ctx.CONTROL_SOCKET);
+}
+#line 1532 "d2_parser.cc" // lalr1.cc:907
+    break;
+
+  case 170:
+#line 680 "d2_parser.yy" // lalr1.cc:907
+    {
+    ctx.stack_.pop_back();
+    ctx.leave();
+}
+#line 1541 "d2_parser.cc" // lalr1.cc:907
+    break;
+
+  case 178:
+#line 696 "d2_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1529 "d2_parser.cc" // lalr1.cc:907
+#line 1549 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 169:
-#line 671 "d2_parser.yy" // lalr1.cc:907
+  case 179:
+#line 698 "d2_parser.yy" // lalr1.cc:907
+    {
+    ElementPtr stype(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
+    ctx.stack_.back()->set("socket-type", stype);
+    ctx.leave();
+}
+#line 1559 "d2_parser.cc" // lalr1.cc:907
+    break;
+
+  case 180:
+#line 704 "d2_parser.yy" // lalr1.cc:907
+    {
+    ctx.enter(ctx.NO_KEYWORD);
+}
+#line 1567 "d2_parser.cc" // lalr1.cc:907
+    break;
+
+  case 181:
+#line 706 "d2_parser.yy" // lalr1.cc:907
+    {
+    ElementPtr name(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
+    ctx.stack_.back()->set("socket-name", name);
+    ctx.leave();
+}
+#line 1577 "d2_parser.cc" // lalr1.cc:907
+    break;
+
+  case 182:
+#line 714 "d2_parser.yy" // lalr1.cc:907
+    {
+    ctx.enter(ctx.NO_KEYWORD);
+}
+#line 1585 "d2_parser.cc" // lalr1.cc:907
+    break;
+
+  case 183:
+#line 716 "d2_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.back()->set("Dhcp6", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 1538 "d2_parser.cc" // lalr1.cc:907
+#line 1594 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 170:
-#line 676 "d2_parser.yy" // lalr1.cc:907
+  case 184:
+#line 721 "d2_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1546 "d2_parser.cc" // lalr1.cc:907
+#line 1602 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 171:
-#line 678 "d2_parser.yy" // lalr1.cc:907
+  case 185:
+#line 723 "d2_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.back()->set("Dhcp4", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 1555 "d2_parser.cc" // lalr1.cc:907
+#line 1611 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 172:
-#line 683 "d2_parser.yy" // lalr1.cc:907
+  case 186:
+#line 728 "d2_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1563 "d2_parser.cc" // lalr1.cc:907
+#line 1619 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 173:
-#line 685 "d2_parser.yy" // lalr1.cc:907
+  case 187:
+#line 730 "d2_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.back()->set("Control-agent", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 1572 "d2_parser.cc" // lalr1.cc:907
+#line 1628 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 174:
-#line 695 "d2_parser.yy" // lalr1.cc:907
+  case 188:
+#line 740 "d2_parser.yy" // lalr1.cc:907
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("Logging", m);
     ctx.stack_.push_back(m);
     ctx.enter(ctx.LOGGING);
 }
-#line 1583 "d2_parser.cc" // lalr1.cc:907
+#line 1639 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 175:
-#line 700 "d2_parser.yy" // lalr1.cc:907
+  case 189:
+#line 745 "d2_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1592 "d2_parser.cc" // lalr1.cc:907
+#line 1648 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 179:
-#line 717 "d2_parser.yy" // lalr1.cc:907
+  case 193:
+#line 762 "d2_parser.yy" // lalr1.cc:907
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("loggers", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.LOGGERS);
 }
-#line 1603 "d2_parser.cc" // lalr1.cc:907
+#line 1659 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 180:
-#line 722 "d2_parser.yy" // lalr1.cc:907
+  case 194:
+#line 767 "d2_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1612 "d2_parser.cc" // lalr1.cc:907
+#line 1668 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 183:
-#line 734 "d2_parser.yy" // lalr1.cc:907
+  case 197:
+#line 779 "d2_parser.yy" // lalr1.cc:907
     {
     ElementPtr l(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(l);
     ctx.stack_.push_back(l);
 }
-#line 1622 "d2_parser.cc" // lalr1.cc:907
+#line 1678 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 184:
-#line 738 "d2_parser.yy" // lalr1.cc:907
+  case 198:
+#line 783 "d2_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
 }
-#line 1630 "d2_parser.cc" // lalr1.cc:907
+#line 1686 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 194:
-#line 755 "d2_parser.yy" // lalr1.cc:907
+  case 208:
+#line 800 "d2_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1638 "d2_parser.cc" // lalr1.cc:907
+#line 1694 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 195:
-#line 757 "d2_parser.yy" // lalr1.cc:907
+  case 209:
+#line 802 "d2_parser.yy" // lalr1.cc:907
     {
     ElementPtr name(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("name", name);
     ctx.leave();
 }
-#line 1648 "d2_parser.cc" // lalr1.cc:907
+#line 1704 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 196:
-#line 763 "d2_parser.yy" // lalr1.cc:907
+  case 210:
+#line 808 "d2_parser.yy" // lalr1.cc:907
     {
     ElementPtr dl(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("debuglevel", dl);
 }
-#line 1657 "d2_parser.cc" // lalr1.cc:907
+#line 1713 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 197:
-#line 767 "d2_parser.yy" // lalr1.cc:907
+  case 211:
+#line 812 "d2_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1665 "d2_parser.cc" // lalr1.cc:907
+#line 1721 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 198:
-#line 769 "d2_parser.yy" // lalr1.cc:907
+  case 212:
+#line 814 "d2_parser.yy" // lalr1.cc:907
     {
     ElementPtr sev(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("severity", sev);
     ctx.leave();
 }
-#line 1675 "d2_parser.cc" // lalr1.cc:907
+#line 1731 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 199:
-#line 775 "d2_parser.yy" // lalr1.cc:907
+  case 213:
+#line 820 "d2_parser.yy" // lalr1.cc:907
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("output_options", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.OUTPUT_OPTIONS);
 }
-#line 1686 "d2_parser.cc" // lalr1.cc:907
+#line 1742 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 200:
-#line 780 "d2_parser.yy" // lalr1.cc:907
+  case 214:
+#line 825 "d2_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1695 "d2_parser.cc" // lalr1.cc:907
+#line 1751 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 203:
-#line 789 "d2_parser.yy" // lalr1.cc:907
+  case 217:
+#line 834 "d2_parser.yy" // lalr1.cc:907
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 1705 "d2_parser.cc" // lalr1.cc:907
+#line 1761 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 204:
-#line 793 "d2_parser.yy" // lalr1.cc:907
+  case 218:
+#line 838 "d2_parser.yy" // lalr1.cc:907
     {
     ctx.stack_.pop_back();
 }
-#line 1713 "d2_parser.cc" // lalr1.cc:907
+#line 1769 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 211:
-#line 807 "d2_parser.yy" // lalr1.cc:907
+  case 225:
+#line 852 "d2_parser.yy" // lalr1.cc:907
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1721 "d2_parser.cc" // lalr1.cc:907
+#line 1777 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 212:
-#line 809 "d2_parser.yy" // lalr1.cc:907
+  case 226:
+#line 854 "d2_parser.yy" // lalr1.cc:907
     {
     ElementPtr sev(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("output", sev);
     ctx.leave();
 }
-#line 1731 "d2_parser.cc" // lalr1.cc:907
+#line 1787 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 213:
-#line 815 "d2_parser.yy" // lalr1.cc:907
+  case 227:
+#line 860 "d2_parser.yy" // lalr1.cc:907
     {
     ElementPtr flush(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("flush", flush);
 }
-#line 1740 "d2_parser.cc" // lalr1.cc:907
+#line 1796 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 214:
-#line 820 "d2_parser.yy" // lalr1.cc:907
+  case 228:
+#line 865 "d2_parser.yy" // lalr1.cc:907
     {
     ElementPtr maxsize(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("maxsize", maxsize);
 }
-#line 1749 "d2_parser.cc" // lalr1.cc:907
+#line 1805 "d2_parser.cc" // lalr1.cc:907
     break;
 
-  case 215:
-#line 825 "d2_parser.yy" // lalr1.cc:907
+  case 229:
+#line 870 "d2_parser.yy" // lalr1.cc:907
     {
     ElementPtr maxver(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("maxver", maxver);
 }
-#line 1758 "d2_parser.cc" // lalr1.cc:907
+#line 1814 "d2_parser.cc" // lalr1.cc:907
     break;
 
 
-#line 1762 "d2_parser.cc" // lalr1.cc:907
+#line 1818 "d2_parser.cc" // lalr1.cc:907
             default:
               break;
             }
@@ -2016,49 +2072,52 @@ namespace isc { namespace d2 {
   }
 
 
-  const signed char D2Parser::yypact_ninf_ = -90;
+  const signed char D2Parser::yypact_ninf_ = -92;
 
   const signed char D2Parser::yytable_ninf_ = -1;
 
   const short
   D2Parser::yypact_[] =
   {
-      47,   -90,   -90,   -90,   -90,   -90,   -90,   -90,   -90,   -90,
-      12,     2,     1,    23,    33,    11,    38,    58,    64,    73,
-     -90,   -90,   -90,   -90,   -90,   -90,   -90,   -90,   -90,   -90,
-     -90,   -90,   -90,   -90,   -90,   -90,   -90,   -90,   -90,   -90,
-     -90,   -90,   -90,   -90,   -90,   -90,   -90,   -90,     2,   -25,
-       8,     9,    15,    96,    37,   115,    21,   116,   -90,   124,
-     113,   127,   130,   137,   -90,   -90,   -90,   -90,   -90,   146,
-     -90,    19,   -90,   -90,   -90,   -90,   -90,   -90,   -90,   148,
-     150,   -90,   -90,   -90,   -90,   -90,   -90,   -90,   -90,    46,
-     -90,   -90,   -90,   -90,   -90,   -90,   -90,   -90,   -90,   -90,
-     -90,   -90,   152,   -90,   -90,   -90,   -90,   -90,    76,   -90,
-     -90,   -90,   -90,   -90,   -90,   151,   155,   -90,   -90,   -90,
-     -90,   -90,   -90,   -90,    77,   -90,   -90,   -90,   -90,   -90,
-     153,   157,   -90,   -90,   161,   -90,   -90,   -90,   -90,    78,
-     -90,   -90,   -90,   -90,   -90,   118,   -90,   -90,     2,     2,
-     -90,   108,   162,   163,   164,   165,   166,   -90,     8,   -90,
-     167,   119,   120,   168,   171,   172,   173,   174,   175,   176,
-       9,   -90,   177,   128,   179,   180,    15,   -90,    15,   -90,
-      96,   181,   182,   183,    37,   -90,    37,   -90,   115,   184,
-     135,   186,    21,   -90,    21,   116,   -90,   -90,   -90,   187,
-       2,     2,     2,   185,   188,   -90,   140,   -90,   -90,    70,
-     178,   189,   141,   190,   195,   198,   -90,   154,   -90,   156,
-     158,   -90,    79,   -90,   159,   199,   160,   -90,    97,   -90,
-     169,   -90,   170,   -90,    98,   -90,     2,   -90,   -90,   -90,
-       9,   191,   -90,   -90,   -90,   -90,   -90,   -90,   -90,   -90,
-     -12,   -12,    96,   -90,   -90,   -90,   -90,   -90,   116,   -90,
-     -90,   -90,   -90,   -90,   -90,    99,   -90,   101,   -90,   -90,
-     -90,   -90,   109,   -90,   -90,   -90,   110,   200,   126,   -90,
-     201,   191,   -90,   204,   -12,   -90,   -90,   -90,   -90,   205,
-     -90,   209,   -90,   208,   115,   -90,   143,   -90,   210,    30,
-     208,   -90,   -90,   -90,   -90,   213,   -90,   -90,   -90,   -90,
-     111,   -90,   -90,   -90,   -90,   -90,   -90,   214,   215,   192,
-     216,    30,   -90,   194,   219,   -90,   197,   -90,   -90,   218,
-     -90,   -90,   145,   -90,    34,   218,   -90,   -90,   217,   223,
-     224,   112,   -90,   -90,   -90,   -90,   -90,   -90,   225,   196,
-     202,   203,    34,   -90,   206,   -90,   -90,   -90,   -90,   -90
+      50,   -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,
+      12,     2,     1,    23,    42,    11,    44,    17,    59,    65,
+     -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,
+     -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,
+     -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,     2,    18,
+       8,     9,    15,    87,    40,    99,    13,   100,   -92,   102,
+     122,   129,   118,   131,   -92,   -92,   -92,   -92,   -92,   137,
+     -92,    49,   -92,   -92,   -92,   -92,   -92,   -92,   -92,   139,
+     147,   -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,
+      78,   -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,
+     -92,   -92,   -92,   -92,   157,   -92,   -92,   -92,   -92,   -92,
+      79,   -92,   -92,   -92,   -92,   -92,   -92,   164,   132,   -92,
+     -92,   -92,   -92,   -92,   -92,   -92,    85,   -92,   -92,   -92,
+     -92,   -92,   167,   150,   -92,   -92,   158,   -92,   -92,   -92,
+     -92,   106,   -92,   -92,   -92,   -92,   -92,    47,   -92,   -92,
+       2,     2,   -92,   107,   170,   171,   172,   173,   174,   -92,
+       8,   -92,   175,   123,   125,   177,   179,   180,   181,   182,
+     183,   184,   185,     9,   -92,   186,   134,   188,   189,    15,
+     -92,    15,   -92,    87,   190,   191,   192,    40,   -92,    40,
+     -92,    99,   193,   141,   195,    13,   -92,    13,   100,   -92,
+     -92,   -92,   196,     2,     2,     2,   194,   201,   -92,   153,
+     -92,   -92,    22,   198,   203,   155,   205,   206,   209,   208,
+     -92,   160,   -92,   161,   168,   -92,   112,   -92,   169,   215,
+     176,   -92,   113,   -92,   178,   -92,   187,   -92,   114,   -92,
+       2,   -92,   -92,   -92,     9,   197,   -92,   -92,   -92,   -92,
+     -92,   -92,   -92,   -92,   -12,   -12,    87,    55,   -92,   -92,
+     -92,   -92,   -92,   100,   -92,   -92,   -92,   -92,   -92,   -92,
+     115,   -92,   116,   -92,   -92,   -92,   -92,   124,   -92,   -92,
+     -92,   146,   216,   -92,   -92,   -92,   -92,   -92,   149,   -92,
+     -92,   -92,    89,   -92,   199,   197,   -92,   217,   -12,   -92,
+     -92,   -92,   219,   222,    55,   -92,   -92,   223,   -92,   224,
+     -92,   200,   202,   -92,   220,    99,   -92,   -92,   -92,   165,
+     -92,   225,    33,   220,   -92,   -92,   -92,   -92,   226,   -92,
+     -92,   -92,   -92,   152,   -92,   -92,   -92,   -92,   -92,   -92,
+     229,   232,   204,   233,    33,   -92,   207,   234,   -92,   210,
+     -92,   -92,   231,   -92,   -92,   166,   -92,    39,   231,   -92,
+     -92,   236,   237,   238,   156,   -92,   -92,   -92,   -92,   -92,
+     -92,   240,   211,   212,   218,    39,   -92,   221,   -92,   -92,
+     -92,   -92,   -92
   };
 
   const unsigned char
@@ -2067,111 +2126,118 @@ namespace isc { namespace d2 {
        0,     2,     4,     6,     8,    10,    12,    14,    16,    18,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        1,    35,    28,    24,    23,    20,    21,    22,    27,     3,
-      25,    26,    42,     5,    54,     7,   150,     9,   142,    11,
-     103,    13,    95,    15,   125,    17,   119,    19,    37,    31,
-       0,     0,     0,   144,     0,    97,     0,     0,    39,     0,
-      38,     0,     0,    32,   168,   170,   172,    52,   174,     0,
-      51,     0,    44,    49,    46,    48,    50,    47,    69,     0,
-       0,    73,    77,    79,    81,    83,    85,   140,    68,     0,
-      56,    58,    59,    60,    61,    62,    66,    67,    63,    64,
-      65,   163,     0,   166,   161,   160,   158,   159,     0,   152,
-     154,   155,   156,   157,   148,     0,   145,   146,   115,   117,
-     113,   112,   110,   111,     0,   105,   107,   108,   109,   101,
-       0,    98,    99,   137,     0,   135,   134,   132,   133,     0,
-     127,   129,   130,   131,   123,     0,   121,    36,     0,     0,
-      29,     0,     0,     0,     0,     0,     0,    41,     0,    43,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    55,     0,     0,     0,     0,     0,   151,     0,   143,
-       0,     0,     0,     0,     0,   104,     0,    96,     0,     0,
-       0,     0,     0,   126,     0,     0,   120,    40,    33,     0,
-       0,     0,     0,     0,     0,    45,     0,    71,    72,     0,
-       0,     0,     0,     0,     0,     0,    57,     0,   165,     0,
-       0,   153,     0,   147,     0,     0,     0,   106,     0,   100,
-       0,   139,     0,   128,     0,   122,     0,   169,   171,   173,
-       0,     0,    70,    75,    76,    74,    78,    30,    80,    82,
-      87,    87,   144,   164,   167,   162,   149,   116,     0,   114,
-     102,   138,   136,   124,    34,     0,   179,     0,   176,   178,
-      93,    92,     0,    88,    89,    91,     0,     0,     0,    53,
-       0,     0,   175,     0,     0,    84,    86,   141,   118,     0,
-     177,     0,    90,     0,    97,   183,     0,   181,     0,     0,
-       0,   180,    94,   194,   199,     0,   197,   193,   191,   192,
-       0,   185,   187,   189,   190,   188,   182,     0,     0,     0,
-       0,     0,   184,     0,     0,   196,     0,   186,   195,     0,
-     198,   203,     0,   201,     0,     0,   200,   211,     0,     0,
-       0,     0,   205,   207,   208,   209,   210,   202,     0,     0,
-       0,     0,     0,   204,     0,   213,   214,   215,   206,   212
+      25,    26,    42,     5,    54,     7,   151,     9,   143,    11,
+     104,    13,    96,    15,   126,    17,   120,    19,    37,    31,
+       0,     0,     0,   145,     0,    98,     0,     0,    39,     0,
+      38,     0,     0,    32,   182,   184,   186,    52,   188,     0,
+      51,     0,    44,    49,    46,    48,    50,    47,    70,     0,
+       0,    74,    78,    80,    82,    84,    86,   141,   169,    69,
+       0,    56,    58,    59,    60,    61,    62,    67,    68,    63,
+      64,    65,    66,   164,     0,   167,   162,   161,   159,   160,
+       0,   153,   155,   156,   157,   158,   149,     0,   146,   147,
+     116,   118,   114,   113,   111,   112,     0,   106,   108,   109,
+     110,   102,     0,    99,   100,   138,     0,   136,   135,   133,
+     134,     0,   128,   130,   131,   132,   124,     0,   122,    36,
+       0,     0,    29,     0,     0,     0,     0,     0,     0,    41,
+       0,    43,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    55,     0,     0,     0,     0,     0,
+     152,     0,   144,     0,     0,     0,     0,     0,   105,     0,
+      97,     0,     0,     0,     0,     0,   127,     0,     0,   121,
+      40,    33,     0,     0,     0,     0,     0,     0,    45,     0,
+      72,    73,     0,     0,     0,     0,     0,     0,     0,     0,
+      57,     0,   166,     0,     0,   154,     0,   148,     0,     0,
+       0,   107,     0,   101,     0,   140,     0,   129,     0,   123,
+       0,   183,   185,   187,     0,     0,    71,    76,    77,    75,
+      79,    30,    81,    83,    88,    88,   145,     0,   165,   168,
+     163,   150,   117,     0,   115,   103,   139,   137,   125,    34,
+       0,   193,     0,   190,   192,    94,    93,     0,    89,    90,
+      92,     0,     0,   178,   180,   177,   175,   176,     0,   171,
+     173,   174,     0,    53,     0,     0,   189,     0,     0,    85,
+      87,   142,     0,     0,     0,   170,   119,     0,   191,     0,
+      91,     0,     0,   172,     0,    98,   179,   181,   197,     0,
+     195,     0,     0,     0,   194,    95,   208,   213,     0,   211,
+     207,   205,   206,     0,   199,   201,   203,   204,   202,   196,
+       0,     0,     0,     0,     0,   198,     0,     0,   210,     0,
+     200,   209,     0,   212,   217,     0,   215,     0,     0,   214,
+     225,     0,     0,     0,     0,   219,   221,   222,   223,   224,
+     216,     0,     0,     0,     0,     0,   218,     0,   227,   228,
+     229,   220,   226
   };
 
   const signed char
   D2Parser::yypgoto_[] =
   {
-     -90,   -90,   -90,   -90,   -90,   -90,   -90,   -90,   -90,   -90,
-     -90,   -38,   -90,    20,   -90,   -90,   -90,   -90,   -90,   -90,
-     -90,   -90,   -50,   -90,   -90,   -90,    72,   -90,   -90,   -90,
-     -90,    -8,    63,   -90,   -90,   -90,   -90,   -90,   -90,   -90,
-     -90,   -90,   -51,   -90,   -39,   -90,   -90,   -90,   -90,   -90,
-     -16,   -90,   -48,   -90,   -90,   -90,   -90,   -57,   -90,    50,
-     -90,   -90,   -90,    53,    56,   -90,   -90,   -90,   -90,   -90,
-     -90,   -90,   -90,   -17,    48,   -90,   -90,   -90,    51,    52,
-     -90,   -90,   -90,   -90,   -90,   -90,   -90,   -90,   -90,   -10,
-     -90,    71,   -90,   -90,   -90,    75,    82,   -90,   -90,   -90,
-     -90,   -90,   -90,   -90,   -90,   -90,   -90,   -90,   -90,   -90,
-     -90,   -90,   -90,   -27,   -90,   -90,   -90,   -45,   -90,   -90,
-     -60,   -90,   -90,   -90,   -90,   -90,   -90,   -90,   -90,   -73,
-     -90,   -90,   -89,   -90,   -90,   -90,   -90,   -90
+     -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,
+     -92,   -38,   -92,    31,   -92,   -92,   -92,   -92,   -92,   -92,
+     -92,   -92,   -50,   -92,   -92,   -92,    86,   -92,   -92,   -92,
+     -92,     3,    76,   -92,   -92,   -92,   -92,   -92,   -92,   -92,
+     -92,   -92,   -51,   -92,   -39,   -92,   -92,   -92,   -92,   -92,
+      -5,   -92,   -47,   -92,   -92,   -92,   -92,   -63,   -92,    64,
+     -92,   -92,   -92,    68,    72,   -92,   -92,   -92,   -92,   -92,
+     -92,   -92,   -92,    -3,    66,   -92,   -92,   -92,    70,    67,
+     -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,    20,
+     -92,    90,   -92,   -92,   -92,    93,   101,   -92,   -92,   -92,
+     -92,   -92,   -92,   -92,   -92,   -92,   -92,   -36,   -92,   -92,
+     -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,
+     -92,   -17,   -92,   -92,   -92,   -44,   -92,   -92,   -62,   -92,
+     -92,   -92,   -92,   -92,   -92,   -92,   -92,   -77,   -92,   -92,
+     -91,   -92,   -92,   -92,   -92,   -92
   };
 
   const short
   D2Parser::yydefgoto_[] =
   {
       -1,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    28,    29,    30,    49,   248,    62,    63,    31,    48,
-      59,    60,    88,    33,    50,    71,    72,    73,   155,    35,
-      51,    89,    90,    91,   160,    92,    93,    94,   163,   245,
-      95,   164,    96,   165,    97,   166,    98,   167,    99,   168,
-     272,   273,   274,   275,   283,    43,    55,   130,   131,   132,
-     186,    41,    54,   124,   125,   126,   183,   127,   181,   128,
-     182,    47,    57,   145,   146,   194,    45,    56,   139,   140,
-     141,   191,   142,   189,   143,   100,   169,    39,    53,   115,
-     116,   117,   178,    37,    52,   108,   109,   110,   175,   111,
-     172,   112,   113,   174,    74,   152,    75,   153,    76,   154,
-      77,   156,   267,   268,   269,   280,   296,   297,   299,   310,
-     311,   312,   317,   313,   314,   320,   315,   318,   332,   333,
-     334,   341,   342,   343,   348,   344,   345,   346
+      19,    28,    29,    30,    49,   252,    62,    63,    31,    48,
+      59,    60,    89,    33,    50,    71,    72,    73,   157,    35,
+      51,    90,    91,    92,   162,    93,    94,    95,   165,   249,
+      96,   166,    97,   167,    98,   168,    99,   169,   100,   170,
+     277,   278,   279,   280,   297,    43,    55,   132,   133,   134,
+     189,    41,    54,   126,   127,   128,   186,   129,   184,   130,
+     185,    47,    57,   147,   148,   197,    45,    56,   141,   142,
+     143,   194,   144,   192,   145,   101,   171,    39,    53,   117,
+     118,   119,   181,    37,    52,   110,   111,   112,   178,   113,
+     175,   114,   115,   177,   102,   172,   288,   289,   290,   302,
+     291,   303,    74,   154,    75,   155,    76,   156,    77,   158,
+     272,   273,   274,   294,   319,   320,   322,   333,   334,   335,
+     340,   336,   337,   343,   338,   341,   355,   356,   357,   364,
+     365,   366,   371,   367,   368,   369
   };
 
   const unsigned short
   D2Parser::yytable_[] =
   {
-      70,   106,   105,   122,   121,   137,   136,    21,    32,    22,
-      58,    23,    20,   107,   270,   123,    38,   138,    64,    65,
-      66,    67,   158,    78,    79,    80,    81,   159,    61,    82,
-      34,    83,    84,    85,    86,   133,   134,    83,    84,    87,
-      36,    69,    68,    83,    84,    40,   101,   102,   103,   170,
-     135,   104,    83,    84,   171,    24,    25,    26,    27,    83,
-      84,    69,    69,    42,   118,   119,   303,   304,    69,   305,
-     306,    44,   337,   120,    69,   338,   339,   340,    46,   176,
-     184,   192,   176,    69,   177,   185,   193,   256,   243,   244,
-      69,     1,     2,     3,     4,     5,     6,     7,     8,     9,
-     184,   192,   170,   114,   281,   260,   263,   279,    70,   282,
-     197,   198,   284,   284,   321,   352,   148,   285,   286,   322,
-     353,   195,   129,   144,   196,   106,   105,   106,   105,   195,
-     147,   149,   288,   122,   121,   122,   121,   107,   150,   107,
-     151,   137,   136,   137,   136,   123,   300,   123,   335,   301,
-     157,   336,   161,   138,   162,   138,   173,   179,   180,   187,
-     188,   199,   237,   238,   239,   190,   200,   201,   202,   203,
-     204,   206,   209,   207,   208,   210,   211,   212,   213,   214,
-     215,   217,   218,   219,   220,   224,   225,   226,   230,   231,
-     232,   236,   240,   242,   249,   241,    22,   250,   264,   246,
-     271,   271,   251,   252,   258,   289,   287,   253,   291,   254,
-     293,   255,   257,   259,   294,   295,   302,   319,   323,   324,
-     326,   349,   261,   262,   329,   331,   266,   350,   351,   354,
-     205,   247,   265,   216,   271,   276,   292,   298,   229,   228,
-     227,   278,   277,   235,   233,   234,   325,   328,   308,   307,
-     330,   223,   355,   222,   290,   316,   356,   357,   221,   359,
-     309,   327,   347,   358,     0,     0,     0,     0,     0,     0,
-     308,   307,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   309
+      70,   108,   107,   124,   123,   139,   138,    21,    32,    22,
+      58,    23,    20,   109,   275,   125,    38,   140,    64,    65,
+      66,    67,    42,    78,    79,    80,    81,   135,   136,    82,
+      34,    83,    84,    85,    86,    83,    84,    83,    84,    87,
+     247,   248,   137,    88,    69,    68,   103,   104,   105,    36,
+     198,    40,   160,   199,   106,    83,    84,   161,    24,    25,
+      26,    27,    83,    84,    69,    69,    44,   120,   121,    69,
+      46,    69,   326,   327,    61,   328,   329,    83,    84,   122,
+     360,   173,   179,   361,   362,   363,   174,   180,   187,    69,
+     283,   284,   198,   188,   116,   306,    69,     1,     2,     3,
+       4,     5,     6,     7,     8,     9,   131,   146,   149,   195,
+      70,    69,   200,   201,   196,   179,   187,   195,   173,   295,
+     261,   265,   268,   293,   296,   150,   152,   298,   108,   107,
+     108,   107,   299,   151,   153,   183,   124,   123,   124,   123,
+     109,   159,   109,   163,   139,   138,   139,   138,   125,   298,
+     125,   164,   304,   191,   300,   344,   140,   305,   140,   375,
+     345,   176,   193,   202,   376,   241,   242,   243,   323,   358,
+     182,   324,   359,   190,   203,   204,   205,   206,   207,   209,
+     210,   212,   211,   213,   214,   215,   216,   217,   218,   219,
+     221,   222,   223,   224,   228,   229,   230,   234,   235,   236,
+     240,   244,   269,   307,   276,   276,   286,   285,   245,   246,
+      22,   253,   254,   255,   256,   257,   258,   259,   287,   250,
+     263,   309,   301,   311,   260,   262,   312,   318,   314,   315,
+     342,   325,   264,   346,   266,   271,   347,   349,   354,   352,
+     372,   373,   374,   267,   377,   251,   208,   270,   276,   220,
+     281,   310,   321,   286,   285,   233,   316,   232,   317,   231,
+     292,   348,   237,   351,   239,   287,   353,   238,   313,   379,
+     378,   331,   330,   227,   226,   380,   282,   382,   308,   339,
+     225,   370,   350,   332,   381,     0,     0,     0,     0,     0,
+       0,     0,     0,   331,   330,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   332
   };
 
   const short
@@ -2179,101 +2245,107 @@ namespace isc { namespace d2 {
   {
       50,    52,    52,    54,    54,    56,    56,     5,     7,     7,
       48,     9,     0,    52,    26,    54,     5,    56,    10,    11,
-      12,    13,     3,    14,    15,    16,    17,     8,    53,    20,
-       7,    22,    23,    24,    25,    14,    15,    22,    23,    30,
-       7,    53,    34,    22,    23,     7,    31,    32,    33,     3,
-      29,    36,    22,    23,     8,    53,    54,    55,    56,    22,
-      23,    53,    53,     5,    27,    28,    36,    37,    53,    39,
-      40,     7,    38,    36,    53,    41,    42,    43,     5,     3,
-       3,     3,     3,    53,     8,     8,     8,     8,    18,    19,
-      53,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-       3,     3,     3,     7,     3,     8,     8,     8,   158,     8,
-     148,   149,     3,     3,     3,     3,     3,     8,     8,     8,
-       8,     3,     7,     7,     6,   176,   176,   178,   178,     3,
-       6,     4,     6,   184,   184,   186,   186,   176,     8,   178,
-       3,   192,   192,   194,   194,   184,     3,   186,     3,     6,
-       4,     6,     4,   192,     4,   194,     4,     6,     3,     6,
-       3,    53,   200,   201,   202,     4,     4,     4,     4,     4,
-       4,     4,     4,    54,    54,     4,     4,     4,     4,     4,
-       4,     4,    54,     4,     4,     4,     4,     4,     4,    54,
-       4,     4,     7,    53,    53,     7,     7,     7,   236,    21,
-     250,   251,     7,     5,     5,     4,     6,    53,     4,    53,
-       5,    53,    53,    53,     5,     7,     6,     4,     4,     4,
-       4,     4,    53,    53,     5,     7,    35,     4,     4,     4,
-     158,   211,   240,   170,   284,   251,   284,   294,   188,   186,
-     184,   258,   252,   195,   192,   194,    54,    53,   299,   299,
-      53,   180,    56,   178,   281,   300,    54,    54,   176,    53,
-     299,   321,   335,   352,    -1,    -1,    -1,    -1,    -1,    -1,
-     321,   321,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   321
+      12,    13,     5,    14,    15,    16,    17,    14,    15,    20,
+       7,    22,    23,    24,    25,    22,    23,    22,    23,    30,
+      18,    19,    29,    34,    56,    37,    31,    32,    33,     7,
+       3,     7,     3,     6,    39,    22,    23,     8,    56,    57,
+      58,    59,    22,    23,    56,    56,     7,    27,    28,    56,
+       5,    56,    39,    40,    56,    42,    43,    22,    23,    39,
+      41,     3,     3,    44,    45,    46,     8,     8,     3,    56,
+      35,    36,     3,     8,     7,     6,    56,    47,    48,    49,
+      50,    51,    52,    53,    54,    55,     7,     7,     6,     3,
+     160,    56,   150,   151,     8,     3,     3,     3,     3,     3,
+       8,     8,     8,     8,     8,     3,     8,     3,   179,   179,
+     181,   181,     8,     4,     3,     3,   187,   187,   189,   189,
+     179,     4,   181,     4,   195,   195,   197,   197,   187,     3,
+     189,     4,     3,     3,     8,     3,   195,     8,   197,     3,
+       8,     4,     4,    56,     8,   203,   204,   205,     3,     3,
+       6,     6,     6,     6,     4,     4,     4,     4,     4,     4,
+      57,     4,    57,     4,     4,     4,     4,     4,     4,     4,
+       4,    57,     4,     4,     4,     4,     4,     4,    57,     4,
+       4,     7,   240,     4,   254,   255,   257,   257,     7,    56,
+       7,    56,     7,     7,     5,     7,    56,    56,   257,    21,
+       5,     4,     6,     4,    56,    56,     4,     7,     5,     5,
+       4,     6,    56,     4,    56,    38,     4,     4,     7,     5,
+       4,     4,     4,    56,     4,   214,   160,   244,   298,   173,
+     255,   298,   315,   304,   304,   191,    56,   189,    56,   187,
+     263,    57,   195,    56,   198,   304,    56,   197,   304,    57,
+      59,   322,   322,   183,   181,    57,   256,    56,   295,   323,
+     179,   358,   344,   322,   375,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   344,   344,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   344
   };
 
   const unsigned char
   D2Parser::yystos_[] =
   {
-       0,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
-       0,     5,     7,     9,    53,    54,    55,    56,    68,    69,
-      70,    75,     7,    80,     7,    86,     7,   150,     5,   144,
-       7,   118,     5,   112,     7,   133,     5,   128,    76,    71,
-      81,    87,   151,   145,   119,   113,   134,   129,    68,    77,
-      78,    53,    73,    74,    10,    11,    12,    13,    34,    53,
-      79,    82,    83,    84,   161,   163,   165,   167,    14,    15,
-      16,    17,    20,    22,    23,    24,    25,    30,    79,    88,
-      89,    90,    92,    93,    94,    97,    99,   101,   103,   105,
-     142,    31,    32,    33,    36,    79,    99,   101,   152,   153,
-     154,   156,   158,   159,     7,   146,   147,   148,    27,    28,
-      36,    79,    99,   101,   120,   121,   122,   124,   126,     7,
-     114,   115,   116,    14,    15,    29,    79,    99,   101,   135,
-     136,   137,   139,   141,     7,   130,   131,     6,     3,     4,
-       8,     3,   162,   164,   166,    85,   168,     4,     3,     8,
-      91,     4,     4,    95,    98,   100,   102,   104,   106,   143,
-       3,     8,   157,     4,   160,   155,     3,     8,   149,     6,
-       3,   125,   127,   123,     3,     8,   117,     6,     3,   140,
-       4,   138,     3,     8,   132,     3,     6,    68,    68,    53,
-       4,     4,     4,     4,     4,    83,     4,    54,    54,     4,
-       4,     4,     4,     4,     4,     4,    89,     4,    54,     4,
-       4,   153,   152,   148,     4,     4,     4,   121,   120,   116,
-       4,    54,     4,   136,   135,   131,     4,    68,    68,    68,
-       7,     7,    53,    18,    19,    96,    21,    70,    72,    53,
-       7,     7,     5,    53,    53,    53,     8,    53,     5,    53,
-       8,    53,    53,     8,    68,    88,    35,   169,   170,   171,
-      26,    79,   107,   108,   109,   110,   107,   146,   130,     8,
-     172,     3,     8,   111,     3,     8,     8,     6,     6,     4,
-     170,     4,   109,     5,     5,     7,   173,   174,   114,   175,
-       3,     6,     6,    36,    37,    39,    40,    79,    99,   101,
-     176,   177,   178,   180,   181,   183,   174,   179,   184,     4,
-     182,     3,     8,     4,     4,    54,     4,   177,    53,     5,
-      53,     7,   185,   186,   187,     3,     6,    38,    41,    42,
-      43,   188,   189,   190,   192,   193,   194,   186,   191,     4,
-       4,     4,     3,     8,     4,    56,    54,    54,   189,    53
+       0,    47,    48,    49,    50,    51,    52,    53,    54,    55,
+      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
+       0,     5,     7,     9,    56,    57,    58,    59,    71,    72,
+      73,    78,     7,    83,     7,    89,     7,   153,     5,   147,
+       7,   121,     5,   115,     7,   136,     5,   131,    79,    74,
+      84,    90,   154,   148,   122,   116,   137,   132,    71,    80,
+      81,    56,    76,    77,    10,    11,    12,    13,    37,    56,
+      82,    85,    86,    87,   172,   174,   176,   178,    14,    15,
+      16,    17,    20,    22,    23,    24,    25,    30,    34,    82,
+      91,    92,    93,    95,    96,    97,   100,   102,   104,   106,
+     108,   145,   164,    31,    32,    33,    39,    82,   102,   104,
+     155,   156,   157,   159,   161,   162,     7,   149,   150,   151,
+      27,    28,    39,    82,   102,   104,   123,   124,   125,   127,
+     129,     7,   117,   118,   119,    14,    15,    29,    82,   102,
+     104,   138,   139,   140,   142,   144,     7,   133,   134,     6,
+       3,     4,     8,     3,   173,   175,   177,    88,   179,     4,
+       3,     8,    94,     4,     4,    98,   101,   103,   105,   107,
+     109,   146,   165,     3,     8,   160,     4,   163,   158,     3,
+       8,   152,     6,     3,   128,   130,   126,     3,     8,   120,
+       6,     3,   143,     4,   141,     3,     8,   135,     3,     6,
+      71,    71,    56,     4,     4,     4,     4,     4,    86,     4,
+      57,    57,     4,     4,     4,     4,     4,     4,     4,     4,
+      92,     4,    57,     4,     4,   156,   155,   151,     4,     4,
+       4,   124,   123,   119,     4,    57,     4,   139,   138,   134,
+       4,    71,    71,    71,     7,     7,    56,    18,    19,    99,
+      21,    73,    75,    56,     7,     7,     5,     7,    56,    56,
+      56,     8,    56,     5,    56,     8,    56,    56,     8,    71,
+      91,    38,   180,   181,   182,    26,    82,   110,   111,   112,
+     113,   110,   149,    35,    36,    82,   102,   104,   166,   167,
+     168,   170,   133,     8,   183,     3,     8,   114,     3,     8,
+       8,     6,   169,   171,     3,     8,     6,     4,   181,     4,
+     112,     4,     4,   167,     5,     5,    56,    56,     7,   184,
+     185,   117,   186,     3,     6,     6,    39,    40,    42,    43,
+      82,   102,   104,   187,   188,   189,   191,   192,   194,   185,
+     190,   195,     4,   193,     3,     8,     4,     4,    57,     4,
+     188,    56,     5,    56,     7,   196,   197,   198,     3,     6,
+      41,    44,    45,    46,   199,   200,   201,   203,   204,   205,
+     197,   202,     4,     4,     4,     3,     8,     4,    59,    57,
+      57,   200,    56
   };
 
   const unsigned char
   D2Parser::yyr1_[] =
   {
-       0,    57,    59,    58,    60,    58,    61,    58,    62,    58,
-      63,    58,    64,    58,    65,    58,    66,    58,    67,    58,
-      68,    68,    68,    68,    68,    68,    68,    69,    71,    70,
-      72,    73,    73,    74,    74,    76,    75,    77,    77,    78,
-      78,    79,    81,    80,    82,    82,    83,    83,    83,    83,
-      83,    83,    85,    84,    87,    86,    88,    88,    89,    89,
-      89,    89,    89,    89,    89,    89,    89,    89,    89,    91,
-      90,    92,    93,    95,    94,    96,    96,    98,    97,   100,
-      99,   102,   101,   104,   103,   106,   105,   107,   107,   108,
-     108,   109,   109,   111,   110,   113,   112,   114,   114,   115,
-     115,   117,   116,   119,   118,   120,   120,   121,   121,   121,
-     121,   121,   121,   123,   122,   125,   124,   127,   126,   129,
-     128,   130,   130,   132,   131,   134,   133,   135,   135,   136,
-     136,   136,   136,   136,   136,   138,   137,   140,   139,   141,
-     143,   142,   145,   144,   146,   146,   147,   147,   149,   148,
-     151,   150,   152,   152,   153,   153,   153,   153,   153,   153,
-     153,   155,   154,   157,   156,   158,   160,   159,   162,   161,
-     164,   163,   166,   165,   168,   167,   169,   169,   170,   172,
-     171,   173,   173,   175,   174,   176,   176,   177,   177,   177,
-     177,   177,   177,   177,   179,   178,   180,   182,   181,   184,
-     183,   185,   185,   187,   186,   188,   188,   189,   189,   189,
-     189,   191,   190,   192,   193,   194
+       0,    60,    62,    61,    63,    61,    64,    61,    65,    61,
+      66,    61,    67,    61,    68,    61,    69,    61,    70,    61,
+      71,    71,    71,    71,    71,    71,    71,    72,    74,    73,
+      75,    76,    76,    77,    77,    79,    78,    80,    80,    81,
+      81,    82,    84,    83,    85,    85,    86,    86,    86,    86,
+      86,    86,    88,    87,    90,    89,    91,    91,    92,    92,
+      92,    92,    92,    92,    92,    92,    92,    92,    92,    92,
+      94,    93,    95,    96,    98,    97,    99,    99,   101,   100,
+     103,   102,   105,   104,   107,   106,   109,   108,   110,   110,
+     111,   111,   112,   112,   114,   113,   116,   115,   117,   117,
+     118,   118,   120,   119,   122,   121,   123,   123,   124,   124,
+     124,   124,   124,   124,   126,   125,   128,   127,   130,   129,
+     132,   131,   133,   133,   135,   134,   137,   136,   138,   138,
+     139,   139,   139,   139,   139,   139,   141,   140,   143,   142,
+     144,   146,   145,   148,   147,   149,   149,   150,   150,   152,
+     151,   154,   153,   155,   155,   156,   156,   156,   156,   156,
+     156,   156,   158,   157,   160,   159,   161,   163,   162,   165,
+     164,   166,   166,   167,   167,   167,   167,   167,   169,   168,
+     171,   170,   173,   172,   175,   174,   177,   176,   179,   178,
+     180,   180,   181,   183,   182,   184,   184,   186,   185,   187,
+     187,   188,   188,   188,   188,   188,   188,   188,   190,   189,
+     191,   193,   192,   195,   194,   196,   196,   198,   197,   199,
+     199,   200,   200,   200,   200,   202,   201,   203,   204,   205
   };
 
   const unsigned char
@@ -2285,22 +2357,23 @@ namespace isc { namespace d2 {
        1,     0,     1,     3,     5,     0,     4,     0,     1,     1,
        3,     2,     0,     4,     1,     3,     1,     1,     1,     1,
        1,     1,     0,     6,     0,     4,     1,     3,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     0,
-       4,     3,     3,     0,     4,     1,     1,     0,     4,     0,
-       4,     0,     4,     0,     6,     0,     6,     0,     1,     1,
-       3,     1,     1,     0,     6,     0,     4,     0,     1,     1,
-       3,     0,     4,     0,     4,     1,     3,     1,     1,     1,
-       1,     1,     1,     0,     4,     0,     4,     0,     6,     0,
-       4,     1,     3,     0,     4,     0,     4,     1,     3,     1,
-       1,     1,     1,     1,     1,     0,     4,     0,     4,     3,
-       0,     6,     0,     4,     0,     1,     1,     3,     0,     4,
-       0,     4,     1,     3,     1,     1,     1,     1,     1,     1,
-       1,     0,     4,     0,     4,     3,     0,     4,     0,     4,
-       0,     4,     0,     4,     0,     6,     1,     3,     1,     0,
-       6,     1,     3,     0,     4,     1,     3,     1,     1,     1,
-       1,     1,     1,     1,     0,     4,     3,     0,     4,     0,
-       6,     1,     3,     0,     4,     1,     3,     1,     1,     1,
-       1,     0,     4,     3,     3,     3
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       0,     4,     3,     3,     0,     4,     1,     1,     0,     4,
+       0,     4,     0,     4,     0,     6,     0,     6,     0,     1,
+       1,     3,     1,     1,     0,     6,     0,     4,     0,     1,
+       1,     3,     0,     4,     0,     4,     1,     3,     1,     1,
+       1,     1,     1,     1,     0,     4,     0,     4,     0,     6,
+       0,     4,     1,     3,     0,     4,     0,     4,     1,     3,
+       1,     1,     1,     1,     1,     1,     0,     4,     0,     4,
+       3,     0,     6,     0,     4,     0,     1,     1,     3,     0,
+       4,     0,     4,     1,     3,     1,     1,     1,     1,     1,
+       1,     1,     0,     4,     0,     4,     3,     0,     4,     0,
+       6,     1,     3,     1,     1,     1,     1,     1,     0,     4,
+       0,     4,     0,     4,     0,     4,     0,     4,     0,     6,
+       1,     3,     1,     0,     6,     1,     3,     0,     4,     1,
+       3,     1,     1,     1,     1,     1,     1,     1,     0,     4,
+       3,     0,     4,     0,     6,     1,     3,     0,     4,     1,
+       3,     1,     1,     1,     1,     0,     4,     3,     3,     3
   };
 
 
@@ -2317,15 +2390,16 @@ namespace isc { namespace d2 {
   "\"ncr-format\"", "\"JSON\"", "\"user-context\"", "\"comment\"",
   "\"forward-ddns\"", "\"reverse-ddns\"", "\"ddns-domains\"",
   "\"key-name\"", "\"dns-servers\"", "\"hostname\"", "\"tsig-keys\"",
-  "\"algorithm\"", "\"digest-bits\"", "\"secret\"", "\"Logging\"",
-  "\"loggers\"", "\"name\"", "\"output_options\"", "\"output\"",
-  "\"debuglevel\"", "\"severity\"", "\"flush\"", "\"maxsize\"",
-  "\"maxver\"", "TOPLEVEL_JSON", "TOPLEVEL_DHCPDDNS", "SUB_DHCPDDNS",
-  "SUB_TSIG_KEY", "SUB_TSIG_KEYS", "SUB_DDNS_DOMAIN", "SUB_DDNS_DOMAINS",
-  "SUB_DNS_SERVER", "SUB_DNS_SERVERS", "\"constant string\"",
-  "\"integer\"", "\"floating point\"", "\"boolean\"", "$accept", "start",
-  "$@1", "$@2", "$@3", "$@4", "$@5", "$@6", "$@7", "$@8", "$@9", "value",
-  "sub_json", "map2", "$@10", "map_value", "map_content", "not_empty_map",
+  "\"algorithm\"", "\"digest-bits\"", "\"secret\"", "\"control-socket\"",
+  "\"socket-type\"", "\"socket-name\"", "\"Logging\"", "\"loggers\"",
+  "\"name\"", "\"output_options\"", "\"output\"", "\"debuglevel\"",
+  "\"severity\"", "\"flush\"", "\"maxsize\"", "\"maxver\"",
+  "TOPLEVEL_JSON", "TOPLEVEL_DHCPDDNS", "SUB_DHCPDDNS", "SUB_TSIG_KEY",
+  "SUB_TSIG_KEYS", "SUB_DDNS_DOMAIN", "SUB_DDNS_DOMAINS", "SUB_DNS_SERVER",
+  "SUB_DNS_SERVERS", "\"constant string\"", "\"integer\"",
+  "\"floating point\"", "\"boolean\"", "$accept", "start", "$@1", "$@2",
+  "$@3", "$@4", "$@5", "$@6", "$@7", "$@8", "$@9", "value", "sub_json",
+  "map2", "$@10", "map_value", "map_content", "not_empty_map",
   "list_generic", "$@11", "list_content", "not_empty_list",
   "unknown_map_entry", "syntax_map", "$@12", "global_objects",
   "global_object", "dhcpddns_object", "$@13", "sub_dhcpddns", "$@14",
@@ -2345,42 +2419,46 @@ namespace isc { namespace d2 {
   "tsig_keys_list", "not_empty_tsig_keys_list", "tsig_key", "$@36",
   "sub_tsig_key", "$@37", "tsig_key_params", "tsig_key_param",
   "tsig_key_name", "$@38", "tsig_key_algorithm", "$@39",
-  "tsig_key_digest_bits", "tsig_key_secret", "$@40", "dhcp6_json_object",
-  "$@41", "dhcp4_json_object", "$@42", "control_agent_json_object", "$@43",
-  "logging_object", "$@44", "logging_params", "logging_param", "loggers",
-  "$@45", "loggers_entries", "logger_entry", "$@46", "logger_params",
-  "logger_param", "name", "$@47", "debuglevel", "severity", "$@48",
-  "output_options_list", "$@49", "output_options_list_content",
-  "output_entry", "$@50", "output_params_list", "output_params", "output",
-  "$@51", "flush", "maxsize", "maxver", YY_NULLPTR
+  "tsig_key_digest_bits", "tsig_key_secret", "$@40", "control_socket",
+  "$@41", "control_socket_params", "control_socket_param",
+  "control_socket_type", "$@42", "control_socket_name", "$@43",
+  "dhcp6_json_object", "$@44", "dhcp4_json_object", "$@45",
+  "control_agent_json_object", "$@46", "logging_object", "$@47",
+  "logging_params", "logging_param", "loggers", "$@48", "loggers_entries",
+  "logger_entry", "$@49", "logger_params", "logger_param", "name", "$@50",
+  "debuglevel", "severity", "$@51", "output_options_list", "$@52",
+  "output_options_list_content", "output_entry", "$@53",
+  "output_params_list", "output_params", "output", "$@54", "flush",
+  "maxsize", "maxver", YY_NULLPTR
   };
 
 #if D2_PARSER_DEBUG
   const unsigned short
   D2Parser::yyrline_[] =
   {
-       0,   120,   120,   120,   121,   121,   122,   122,   123,   123,
-     124,   124,   125,   125,   126,   126,   127,   127,   128,   128,
-     136,   137,   138,   139,   140,   141,   142,   145,   150,   150,
-     161,   164,   165,   168,   172,   179,   179,   186,   187,   190,
-     194,   205,   215,   215,   227,   228,   232,   233,   234,   235,
-     236,   237,   242,   242,   252,   252,   260,   261,   265,   266,
-     267,   268,   269,   270,   271,   272,   273,   274,   275,   278,
-     278,   286,   294,   303,   303,   311,   312,   315,   315,   323,
-     323,   348,   348,   375,   375,   385,   385,   395,   396,   399,
-     400,   403,   404,   409,   409,   419,   419,   426,   427,   430,
-     431,   434,   434,   442,   442,   449,   450,   453,   454,   455,
-     456,   457,   458,   462,   462,   474,   474,   486,   486,   496,
-     496,   503,   504,   507,   507,   515,   515,   522,   523,   526,
-     527,   528,   529,   530,   531,   534,   534,   546,   546,   554,
-     568,   568,   578,   578,   585,   586,   589,   590,   593,   593,
-     601,   601,   610,   611,   614,   615,   616,   617,   618,   619,
-     620,   623,   623,   635,   635,   646,   654,   654,   669,   669,
-     676,   676,   683,   683,   695,   695,   708,   709,   713,   717,
-     717,   729,   730,   734,   734,   742,   743,   746,   747,   748,
-     749,   750,   751,   752,   755,   755,   763,   767,   767,   775,
-     775,   785,   786,   789,   789,   797,   798,   801,   802,   803,
-     804,   807,   807,   815,   820,   825
+       0,   124,   124,   124,   125,   125,   126,   126,   127,   127,
+     128,   128,   129,   129,   130,   130,   131,   131,   132,   132,
+     140,   141,   142,   143,   144,   145,   146,   149,   154,   154,
+     165,   168,   169,   172,   176,   183,   183,   190,   191,   194,
+     198,   209,   219,   219,   231,   232,   236,   237,   238,   239,
+     240,   241,   246,   246,   256,   256,   264,   265,   269,   270,
+     271,   272,   273,   274,   275,   276,   277,   278,   279,   280,
+     283,   283,   291,   299,   308,   308,   316,   317,   320,   320,
+     328,   328,   353,   353,   380,   380,   390,   390,   400,   401,
+     404,   405,   408,   409,   414,   414,   424,   424,   431,   432,
+     435,   436,   439,   439,   447,   447,   454,   455,   458,   459,
+     460,   461,   462,   463,   467,   467,   479,   479,   491,   491,
+     501,   501,   508,   509,   512,   512,   520,   520,   527,   528,
+     531,   532,   533,   534,   535,   536,   539,   539,   551,   551,
+     559,   573,   573,   583,   583,   590,   591,   594,   595,   598,
+     598,   606,   606,   615,   616,   619,   620,   621,   622,   623,
+     624,   625,   628,   628,   640,   640,   651,   659,   659,   675,
+     675,   685,   686,   689,   690,   691,   692,   693,   696,   696,
+     704,   704,   714,   714,   721,   721,   728,   728,   740,   740,
+     753,   754,   758,   762,   762,   774,   775,   779,   779,   787,
+     788,   791,   792,   793,   794,   795,   796,   797,   800,   800,
+     808,   812,   812,   820,   820,   830,   831,   834,   834,   842,
+     843,   846,   847,   848,   849,   852,   852,   860,   865,   870
   };
 
   // Print the state stack on the debug stream.
@@ -2415,8 +2493,8 @@ namespace isc { namespace d2 {
 
 #line 14 "d2_parser.yy" // lalr1.cc:1218
 } } // isc::d2
-#line 2419 "d2_parser.cc" // lalr1.cc:1218
-#line 830 "d2_parser.yy" // lalr1.cc:1219
+#line 2497 "d2_parser.cc" // lalr1.cc:1218
+#line 875 "d2_parser.yy" // lalr1.cc:1219
 
 
 void
index c32be0d7c07b59a10492a75d1519ee3fe668274b..4ebefde7094e9c5c1b37a4c0b14e3c5b2a126607 100644 (file)
@@ -1,4 +1,4 @@
-// A Bison parser, made by GNU Bison 3.2.1.
+// A Bison parser, made by GNU Bison 3.2.4.
 
 // Skeleton interface for Bison LALR(1) parsers in C++
 
@@ -569,29 +569,32 @@ namespace isc { namespace d2 {
         TOKEN_ALGORITHM = 286,
         TOKEN_DIGEST_BITS = 287,
         TOKEN_SECRET = 288,
-        TOKEN_LOGGING = 289,
-        TOKEN_LOGGERS = 290,
-        TOKEN_NAME = 291,
-        TOKEN_OUTPUT_OPTIONS = 292,
-        TOKEN_OUTPUT = 293,
-        TOKEN_DEBUGLEVEL = 294,
-        TOKEN_SEVERITY = 295,
-        TOKEN_FLUSH = 296,
-        TOKEN_MAXSIZE = 297,
-        TOKEN_MAXVER = 298,
-        TOKEN_TOPLEVEL_JSON = 299,
-        TOKEN_TOPLEVEL_DHCPDDNS = 300,
-        TOKEN_SUB_DHCPDDNS = 301,
-        TOKEN_SUB_TSIG_KEY = 302,
-        TOKEN_SUB_TSIG_KEYS = 303,
-        TOKEN_SUB_DDNS_DOMAIN = 304,
-        TOKEN_SUB_DDNS_DOMAINS = 305,
-        TOKEN_SUB_DNS_SERVER = 306,
-        TOKEN_SUB_DNS_SERVERS = 307,
-        TOKEN_STRING = 308,
-        TOKEN_INTEGER = 309,
-        TOKEN_FLOAT = 310,
-        TOKEN_BOOLEAN = 311
+        TOKEN_CONTROL_SOCKET = 289,
+        TOKEN_SOCKET_TYPE = 290,
+        TOKEN_SOCKET_NAME = 291,
+        TOKEN_LOGGING = 292,
+        TOKEN_LOGGERS = 293,
+        TOKEN_NAME = 294,
+        TOKEN_OUTPUT_OPTIONS = 295,
+        TOKEN_OUTPUT = 296,
+        TOKEN_DEBUGLEVEL = 297,
+        TOKEN_SEVERITY = 298,
+        TOKEN_FLUSH = 299,
+        TOKEN_MAXSIZE = 300,
+        TOKEN_MAXVER = 301,
+        TOKEN_TOPLEVEL_JSON = 302,
+        TOKEN_TOPLEVEL_DHCPDDNS = 303,
+        TOKEN_SUB_DHCPDDNS = 304,
+        TOKEN_SUB_TSIG_KEY = 305,
+        TOKEN_SUB_TSIG_KEYS = 306,
+        TOKEN_SUB_DDNS_DOMAIN = 307,
+        TOKEN_SUB_DDNS_DOMAINS = 308,
+        TOKEN_SUB_DNS_SERVER = 309,
+        TOKEN_SUB_DNS_SERVERS = 310,
+        TOKEN_STRING = 311,
+        TOKEN_INTEGER = 312,
+        TOKEN_FLOAT = 313,
+        TOKEN_BOOLEAN = 314
       };
     };
 
@@ -622,8 +625,13 @@ namespace isc { namespace d2 {
       /// Default constructor.
       basic_symbol ();
 
-      /// Move or copy constructor.
-      basic_symbol (YY_RVREF (basic_symbol) other);
+#if 201103L <= YY_CPLUSPLUS
+      /// Move constructor.
+      basic_symbol (basic_symbol&& that);
+#endif
+
+      /// Copy constructor.
+      basic_symbol (const basic_symbol& that);
 
 
       /// Constructor for valueless symbols, and symbols from each type.
@@ -680,7 +688,7 @@ namespace isc { namespace d2 {
     private:
 #if YY_CPLUSPLUS < 201103L
       /// Assignment operator.
-      basic_symbol& operator= (const basic_symbol& other);
+      basic_symbol& operator= (const basic_symbol& that);
 #endif
     };
 
@@ -690,8 +698,13 @@ namespace isc { namespace d2 {
       /// Default constructor.
       by_type ();
 
+#if 201103L <= YY_CPLUSPLUS
+      /// Move constructor.
+      by_type (by_type&& that);
+#endif
+
       /// Copy constructor.
-      by_type (const by_type& other);
+      by_type (const by_type& that);
 
       /// The symbol type as needed by the constructor.
       typedef token_type kind_type;
@@ -756,1158 +769,1992 @@ namespace isc { namespace d2 {
     void error (const syntax_error& err);
 
     // Symbol constructors declarations.
+#if 201103L <= YY_CPLUSPLUS
     static
     symbol_type
-    make_END (YY_COPY (location_type) l);
-
+    make_END (location_type l);
+#else
     static
     symbol_type
-    make_COMMA (YY_COPY (location_type) l);
-
+    make_END (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
     static
     symbol_type
-    make_COLON (YY_COPY (location_type) l);
-
+    make_COMMA (location_type l);
+#else
     static
     symbol_type
-    make_LSQUARE_BRACKET (YY_COPY (location_type) l);
-
+    make_COMMA (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
     static
     symbol_type
-    make_RSQUARE_BRACKET (YY_COPY (location_type) l);
-
+    make_COLON (location_type l);
+#else
     static
     symbol_type
-    make_LCURLY_BRACKET (YY_COPY (location_type) l);
-
+    make_COLON (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
     static
     symbol_type
-    make_RCURLY_BRACKET (YY_COPY (location_type) l);
-
+    make_LSQUARE_BRACKET (location_type l);
+#else
     static
     symbol_type
-    make_NULL_TYPE (YY_COPY (location_type) l);
-
+    make_LSQUARE_BRACKET (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
     static
     symbol_type
-    make_DHCP6 (YY_COPY (location_type) l);
-
+    make_RSQUARE_BRACKET (location_type l);
+#else
     static
     symbol_type
-    make_DHCP4 (YY_COPY (location_type) l);
-
+    make_RSQUARE_BRACKET (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
     static
     symbol_type
-    make_CONTROL_AGENT (YY_COPY (location_type) l);
-
+    make_LCURLY_BRACKET (location_type l);
+#else
     static
     symbol_type
-    make_DHCPDDNS (YY_COPY (location_type) l);
-
+    make_LCURLY_BRACKET (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
     static
     symbol_type
-    make_IP_ADDRESS (YY_COPY (location_type) l);
-
+    make_RCURLY_BRACKET (location_type l);
+#else
     static
     symbol_type
-    make_PORT (YY_COPY (location_type) l);
-
+    make_RCURLY_BRACKET (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
     static
     symbol_type
-    make_DNS_SERVER_TIMEOUT (YY_COPY (location_type) l);
-
+    make_NULL_TYPE (location_type l);
+#else
     static
     symbol_type
-    make_NCR_PROTOCOL (YY_COPY (location_type) l);
-
+    make_NULL_TYPE (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
     static
     symbol_type
-    make_UDP (YY_COPY (location_type) l);
-
+    make_DHCP6 (location_type l);
+#else
     static
     symbol_type
-    make_TCP (YY_COPY (location_type) l);
-
+    make_DHCP6 (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
     static
     symbol_type
-    make_NCR_FORMAT (YY_COPY (location_type) l);
-
+    make_DHCP4 (location_type l);
+#else
     static
     symbol_type
-    make_JSON (YY_COPY (location_type) l);
-
+    make_DHCP4 (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
     static
     symbol_type
-    make_USER_CONTEXT (YY_COPY (location_type) l);
-
+    make_CONTROL_AGENT (location_type l);
+#else
     static
     symbol_type
-    make_COMMENT (YY_COPY (location_type) l);
-
+    make_CONTROL_AGENT (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
     static
     symbol_type
-    make_FORWARD_DDNS (YY_COPY (location_type) l);
-
+    make_DHCPDDNS (location_type l);
+#else
     static
     symbol_type
-    make_REVERSE_DDNS (YY_COPY (location_type) l);
-
+    make_DHCPDDNS (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
     static
     symbol_type
-    make_DDNS_DOMAINS (YY_COPY (location_type) l);
-
+    make_IP_ADDRESS (location_type l);
+#else
     static
     symbol_type
-    make_KEY_NAME (YY_COPY (location_type) l);
-
+    make_IP_ADDRESS (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
     static
     symbol_type
-    make_DNS_SERVERS (YY_COPY (location_type) l);
-
+    make_PORT (location_type l);
+#else
     static
     symbol_type
-    make_HOSTNAME (YY_COPY (location_type) l);
-
+    make_PORT (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
     static
     symbol_type
-    make_TSIG_KEYS (YY_COPY (location_type) l);
-
+    make_DNS_SERVER_TIMEOUT (location_type l);
+#else
     static
     symbol_type
-    make_ALGORITHM (YY_COPY (location_type) l);
-
+    make_DNS_SERVER_TIMEOUT (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
     static
     symbol_type
-    make_DIGEST_BITS (YY_COPY (location_type) l);
-
+    make_NCR_PROTOCOL (location_type l);
+#else
     static
     symbol_type
-    make_SECRET (YY_COPY (location_type) l);
-
+    make_NCR_PROTOCOL (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
     static
     symbol_type
-    make_LOGGING (YY_COPY (location_type) l);
-
+    make_UDP (location_type l);
+#else
     static
     symbol_type
-    make_LOGGERS (YY_COPY (location_type) l);
-
+    make_UDP (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
     static
     symbol_type
-    make_NAME (YY_COPY (location_type) l);
-
+    make_TCP (location_type l);
+#else
     static
     symbol_type
-    make_OUTPUT_OPTIONS (YY_COPY (location_type) l);
-
+    make_TCP (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
     static
     symbol_type
-    make_OUTPUT (YY_COPY (location_type) l);
-
+    make_NCR_FORMAT (location_type l);
+#else
     static
     symbol_type
-    make_DEBUGLEVEL (YY_COPY (location_type) l);
-
+    make_NCR_FORMAT (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
     static
     symbol_type
-    make_SEVERITY (YY_COPY (location_type) l);
-
+    make_JSON (location_type l);
+#else
     static
     symbol_type
-    make_FLUSH (YY_COPY (location_type) l);
-
+    make_JSON (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
     static
     symbol_type
-    make_MAXSIZE (YY_COPY (location_type) l);
-
+    make_USER_CONTEXT (location_type l);
+#else
     static
     symbol_type
-    make_MAXVER (YY_COPY (location_type) l);
-
+    make_USER_CONTEXT (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
     static
     symbol_type
-    make_TOPLEVEL_JSON (YY_COPY (location_type) l);
-
+    make_COMMENT (location_type l);
+#else
     static
     symbol_type
-    make_TOPLEVEL_DHCPDDNS (YY_COPY (location_type) l);
-
+    make_COMMENT (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
     static
     symbol_type
-    make_SUB_DHCPDDNS (YY_COPY (location_type) l);
-
+    make_FORWARD_DDNS (location_type l);
+#else
     static
     symbol_type
-    make_SUB_TSIG_KEY (YY_COPY (location_type) l);
-
+    make_FORWARD_DDNS (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
     static
     symbol_type
-    make_SUB_TSIG_KEYS (YY_COPY (location_type) l);
-
+    make_REVERSE_DDNS (location_type l);
+#else
     static
     symbol_type
-    make_SUB_DDNS_DOMAIN (YY_COPY (location_type) l);
-
+    make_REVERSE_DDNS (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
     static
     symbol_type
-    make_SUB_DDNS_DOMAINS (YY_COPY (location_type) l);
-
+    make_DDNS_DOMAINS (location_type l);
+#else
     static
     symbol_type
-    make_SUB_DNS_SERVER (YY_COPY (location_type) l);
-
+    make_DDNS_DOMAINS (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
     static
     symbol_type
-    make_SUB_DNS_SERVERS (YY_COPY (location_type) l);
-
+    make_KEY_NAME (location_type l);
+#else
     static
     symbol_type
-    make_STRING (YY_COPY (std::string) v, YY_COPY (location_type) l);
-
+    make_KEY_NAME (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
     static
     symbol_type
-    make_INTEGER (YY_COPY (int64_t) v, YY_COPY (location_type) l);
-
+    make_DNS_SERVERS (location_type l);
+#else
     static
     symbol_type
-    make_FLOAT (YY_COPY (double) v, YY_COPY (location_type) l);
-
+    make_DNS_SERVERS (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
     static
     symbol_type
-    make_BOOLEAN (YY_COPY (bool) v, YY_COPY (location_type) l);
-
-
-
-  private:
-    /// This class is not copyable.
-    D2Parser (const D2Parser&);
-    D2Parser& operator= (const D2Parser&);
-
-    /// State numbers.
-    typedef int state_type;
-
-    /// Generate an error message.
-    /// \param yystate   the state where the error occurred.
-    /// \param yyla      the lookahead token.
-    virtual std::string yysyntax_error_ (state_type yystate,
-                                         const symbol_type& yyla) const;
-
-    /// Compute post-reduction state.
-    /// \param yystate   the current state
-    /// \param yysym     the nonterminal to push on the stack
-    state_type yy_lr_goto_state_ (state_type yystate, int yysym);
-
-    /// Whether the given \c yypact_ value indicates a defaulted state.
-    /// \param yyvalue   the value to check
-    static bool yy_pact_value_is_default_ (int yyvalue);
-
-    /// Whether the given \c yytable_ value indicates a syntax error.
-    /// \param yyvalue   the value to check
-    static bool yy_table_value_is_error_ (int yyvalue);
-
-    static const signed char yypact_ninf_;
-    static const signed char yytable_ninf_;
-
-    /// Convert a scanner token number \a t to a symbol number.
-    static token_number_type yytranslate_ (token_type t);
-
-    // Tables.
-  // YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
-  // STATE-NUM.
-  static const short yypact_[];
-
-  // YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
-  // Performed when YYTABLE does not specify something else to do.  Zero
-  // means the default is an error.
-  static const unsigned char yydefact_[];
-
-  // YYPGOTO[NTERM-NUM].
-  static const signed char yypgoto_[];
-
-  // YYDEFGOTO[NTERM-NUM].
-  static const short yydefgoto_[];
-
-  // YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
-  // positive, shift that token.  If negative, reduce the rule whose
-  // number is the opposite.  If YYTABLE_NINF, syntax error.
-  static const unsigned short yytable_[];
-
-  static const short yycheck_[];
-
-  // YYSTOS[STATE-NUM] -- The (internal number of the) accessing
-  // symbol of state STATE-NUM.
-  static const unsigned char yystos_[];
-
-  // YYR1[YYN] -- Symbol number of symbol that rule YYN derives.
-  static const unsigned char yyr1_[];
-
-  // YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.
-  static const unsigned char yyr2_[];
-
-
-    /// Convert the symbol name \a n to a form suitable for a diagnostic.
-    static std::string yytnamerr_ (const char *n);
-
-
-    /// For a symbol, its name in clear.
-    static const char* const yytname_[];
-#if D2_PARSER_DEBUG
-  // YYRLINE[YYN] -- Source line where rule number YYN was defined.
-  static const unsigned short yyrline_[];
-    /// Report on the debug stream that the rule \a r is going to be reduced.
-    virtual void yy_reduce_print_ (int r);
-    /// Print the state stack on the debug stream.
-    virtual void yystack_print_ ();
-
-    /// Debugging level.
-    int yydebug_;
-    /// Debug stream.
-    std::ostream* yycdebug_;
-
-    /// \brief Display a symbol type, value and location.
-    /// \param yyo    The output stream.
-    /// \param yysym  The symbol.
-    template <typename Base>
-    void yy_print_ (std::ostream& yyo, const basic_symbol<Base>& yysym) const;
+    make_HOSTNAME (location_type l);
+#else
+    static
+    symbol_type
+    make_HOSTNAME (const location_type& l);
 #endif
-
-    /// \brief Reclaim the memory associated to a symbol.
-    /// \param yymsg     Why this token is reclaimed.
-    ///                  If null, print nothing.
-    /// \param yysym     The symbol.
-    template <typename Base>
-    void yy_destroy_ (const char* yymsg, basic_symbol<Base>& yysym) const;
-
-  private:
-    /// Type access provider for state based symbols.
-    struct by_state
-    {
-      /// Default constructor.
-      by_state ();
-
-      /// The symbol type as needed by the constructor.
+#if 201103L <= YY_CPLUSPLUS
+    static
+    symbol_type
+    make_TSIG_KEYS (location_type l);
+#else
+    static
+    symbol_type
+    make_TSIG_KEYS (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
+    static
+    symbol_type
+    make_ALGORITHM (location_type l);
+#else
+    static
+    symbol_type
+    make_ALGORITHM (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
+    static
+    symbol_type
+    make_DIGEST_BITS (location_type l);
+#else
+    static
+    symbol_type
+    make_DIGEST_BITS (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
+    static
+    symbol_type
+    make_SECRET (location_type l);
+#else
+    static
+    symbol_type
+    make_SECRET (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
+    static
+    symbol_type
+    make_CONTROL_SOCKET (location_type l);
+#else
+    static
+    symbol_type
+    make_CONTROL_SOCKET (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
+    static
+    symbol_type
+    make_SOCKET_TYPE (location_type l);
+#else
+    static
+    symbol_type
+    make_SOCKET_TYPE (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
+    static
+    symbol_type
+    make_SOCKET_NAME (location_type l);
+#else
+    static
+    symbol_type
+    make_SOCKET_NAME (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
+    static
+    symbol_type
+    make_LOGGING (location_type l);
+#else
+    static
+    symbol_type
+    make_LOGGING (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
+    static
+    symbol_type
+    make_LOGGERS (location_type l);
+#else
+    static
+    symbol_type
+    make_LOGGERS (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
+    static
+    symbol_type
+    make_NAME (location_type l);
+#else
+    static
+    symbol_type
+    make_NAME (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
+    static
+    symbol_type
+    make_OUTPUT_OPTIONS (location_type l);
+#else
+    static
+    symbol_type
+    make_OUTPUT_OPTIONS (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
+    static
+    symbol_type
+    make_OUTPUT (location_type l);
+#else
+    static
+    symbol_type
+    make_OUTPUT (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
+    static
+    symbol_type
+    make_DEBUGLEVEL (location_type l);
+#else
+    static
+    symbol_type
+    make_DEBUGLEVEL (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
+    static
+    symbol_type
+    make_SEVERITY (location_type l);
+#else
+    static
+    symbol_type
+    make_SEVERITY (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
+    static
+    symbol_type
+    make_FLUSH (location_type l);
+#else
+    static
+    symbol_type
+    make_FLUSH (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
+    static
+    symbol_type
+    make_MAXSIZE (location_type l);
+#else
+    static
+    symbol_type
+    make_MAXSIZE (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
+    static
+    symbol_type
+    make_MAXVER (location_type l);
+#else
+    static
+    symbol_type
+    make_MAXVER (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
+    static
+    symbol_type
+    make_TOPLEVEL_JSON (location_type l);
+#else
+    static
+    symbol_type
+    make_TOPLEVEL_JSON (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
+    static
+    symbol_type
+    make_TOPLEVEL_DHCPDDNS (location_type l);
+#else
+    static
+    symbol_type
+    make_TOPLEVEL_DHCPDDNS (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
+    static
+    symbol_type
+    make_SUB_DHCPDDNS (location_type l);
+#else
+    static
+    symbol_type
+    make_SUB_DHCPDDNS (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
+    static
+    symbol_type
+    make_SUB_TSIG_KEY (location_type l);
+#else
+    static
+    symbol_type
+    make_SUB_TSIG_KEY (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
+    static
+    symbol_type
+    make_SUB_TSIG_KEYS (location_type l);
+#else
+    static
+    symbol_type
+    make_SUB_TSIG_KEYS (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
+    static
+    symbol_type
+    make_SUB_DDNS_DOMAIN (location_type l);
+#else
+    static
+    symbol_type
+    make_SUB_DDNS_DOMAIN (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
+    static
+    symbol_type
+    make_SUB_DDNS_DOMAINS (location_type l);
+#else
+    static
+    symbol_type
+    make_SUB_DDNS_DOMAINS (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
+    static
+    symbol_type
+    make_SUB_DNS_SERVER (location_type l);
+#else
+    static
+    symbol_type
+    make_SUB_DNS_SERVER (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
+    static
+    symbol_type
+    make_SUB_DNS_SERVERS (location_type l);
+#else
+    static
+    symbol_type
+    make_SUB_DNS_SERVERS (const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
+    static
+    symbol_type
+    make_STRING (std::string v, location_type l);
+#else
+    static
+    symbol_type
+    make_STRING (const std::string& v, const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
+    static
+    symbol_type
+    make_INTEGER (int64_t v, location_type l);
+#else
+    static
+    symbol_type
+    make_INTEGER (const int64_t& v, const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
+    static
+    symbol_type
+    make_FLOAT (double v, location_type l);
+#else
+    static
+    symbol_type
+    make_FLOAT (const double& v, const location_type& l);
+#endif
+#if 201103L <= YY_CPLUSPLUS
+    static
+    symbol_type
+    make_BOOLEAN (bool v, location_type l);
+#else
+    static
+    symbol_type
+    make_BOOLEAN (const bool& v, const location_type& l);
+#endif
+
+
+  private:
+    /// This class is not copyable.
+    D2Parser (const D2Parser&);
+    D2Parser& operator= (const D2Parser&);
+
+    /// State numbers.
+    typedef int state_type;
+
+    /// Generate an error message.
+    /// \param yystate   the state where the error occurred.
+    /// \param yyla      the lookahead token.
+    virtual std::string yysyntax_error_ (state_type yystate,
+                                         const symbol_type& yyla) const;
+
+    /// Compute post-reduction state.
+    /// \param yystate   the current state
+    /// \param yysym     the nonterminal to push on the stack
+    state_type yy_lr_goto_state_ (state_type yystate, int yysym);
+
+    /// Whether the given \c yypact_ value indicates a defaulted state.
+    /// \param yyvalue   the value to check
+    static bool yy_pact_value_is_default_ (int yyvalue);
+
+    /// Whether the given \c yytable_ value indicates a syntax error.
+    /// \param yyvalue   the value to check
+    static bool yy_table_value_is_error_ (int yyvalue);
+
+    static const signed char yypact_ninf_;
+    static const signed char yytable_ninf_;
+
+    /// Convert a scanner token number \a t to a symbol number.
+    static token_number_type yytranslate_ (token_type t);
+
+    // Tables.
+  // YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+  // STATE-NUM.
+  static const short yypact_[];
+
+  // YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
+  // Performed when YYTABLE does not specify something else to do.  Zero
+  // means the default is an error.
+  static const unsigned char yydefact_[];
+
+  // YYPGOTO[NTERM-NUM].
+  static const signed char yypgoto_[];
+
+  // YYDEFGOTO[NTERM-NUM].
+  static const short yydefgoto_[];
+
+  // YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
+  // positive, shift that token.  If negative, reduce the rule whose
+  // number is the opposite.  If YYTABLE_NINF, syntax error.
+  static const unsigned short yytable_[];
+
+  static const short yycheck_[];
+
+  // YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+  // symbol of state STATE-NUM.
+  static const unsigned char yystos_[];
+
+  // YYR1[YYN] -- Symbol number of symbol that rule YYN derives.
+  static const unsigned char yyr1_[];
+
+  // YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.
+  static const unsigned char yyr2_[];
+
+
+    /// Convert the symbol name \a n to a form suitable for a diagnostic.
+    static std::string yytnamerr_ (const char *n);
+
+
+    /// For a symbol, its name in clear.
+    static const char* const yytname_[];
+#if D2_PARSER_DEBUG
+  // YYRLINE[YYN] -- Source line where rule number YYN was defined.
+  static const unsigned short yyrline_[];
+    /// Report on the debug stream that the rule \a r is going to be reduced.
+    virtual void yy_reduce_print_ (int r);
+    /// Print the state stack on the debug stream.
+    virtual void yystack_print_ ();
+
+    /// Debugging level.
+    int yydebug_;
+    /// Debug stream.
+    std::ostream* yycdebug_;
+
+    /// \brief Display a symbol type, value and location.
+    /// \param yyo    The output stream.
+    /// \param yysym  The symbol.
+    template <typename Base>
+    void yy_print_ (std::ostream& yyo, const basic_symbol<Base>& yysym) const;
+#endif
+
+    /// \brief Reclaim the memory associated to a symbol.
+    /// \param yymsg     Why this token is reclaimed.
+    ///                  If null, print nothing.
+    /// \param yysym     The symbol.
+    template <typename Base>
+    void yy_destroy_ (const char* yymsg, basic_symbol<Base>& yysym) const;
+
+  private:
+    /// Type access provider for state based symbols.
+    struct by_state
+    {
+      /// Default constructor.
+      by_state ();
+
+      /// The symbol type as needed by the constructor.
       typedef state_type kind_type;
 
-      /// Constructor.
-      by_state (kind_type s);
+      /// Constructor.
+      by_state (kind_type s);
+
+      /// Copy constructor.
+      by_state (const by_state& other);
+
+      /// Record that this symbol is empty.
+      void clear ();
+
+      /// Steal the symbol type from \a that.
+      void move (by_state& that);
+
+      /// The (internal) type number (corresponding to \a state).
+      /// \a empty_symbol when empty.
+      symbol_number_type type_get () const;
+
+      /// The state number used to denote an empty symbol.
+      enum { empty_state = -1 };
+
+      /// The state.
+      /// \a empty when empty.
+      state_type state;
+    };
+
+    /// "Internal" symbol: element of the stack.
+    struct stack_symbol_type : basic_symbol<by_state>
+    {
+      /// Superclass.
+      typedef basic_symbol<by_state> super_type;
+      /// Construct an empty symbol.
+      stack_symbol_type ();
+      /// Move or copy construction.
+      stack_symbol_type (YY_RVREF (stack_symbol_type) that);
+      /// Steal the contents from \a sym to build this.
+      stack_symbol_type (state_type s, YY_MOVE_REF (symbol_type) sym);
+#if YY_CPLUSPLUS < 201103L
+      /// Assignment, needed by push_back by some old implementations.
+      /// Moves the contents of that.
+      stack_symbol_type& operator= (stack_symbol_type& that);
+#endif
+    };
+
+    /// Stack type.
+    typedef stack<stack_symbol_type> stack_type;
+
+    /// The stack.
+    stack_type yystack_;
+
+    /// Push a new state on the stack.
+    /// \param m    a debug message to display
+    ///             if null, no trace is output.
+    /// \param sym  the symbol
+    /// \warning the contents of \a s.value is stolen.
+    void yypush_ (const char* m, YY_MOVE_REF (stack_symbol_type) sym);
+
+    /// Push a new look ahead token on the state on the stack.
+    /// \param m    a debug message to display
+    ///             if null, no trace is output.
+    /// \param s    the state
+    /// \param sym  the symbol (for its value and location).
+    /// \warning the contents of \a sym.value is stolen.
+    void yypush_ (const char* m, state_type s, YY_MOVE_REF (symbol_type) sym);
+
+    /// Pop \a n symbols from the stack.
+    void yypop_ (int n = 1);
+
+    /// Constants.
+    enum
+    {
+      yyeof_ = 0,
+      yylast_ = 305,     ///< Last index in yytable_.
+      yynnts_ = 146,  ///< Number of nonterminal symbols.
+      yyfinal_ = 20, ///< Termination state number.
+      yyterror_ = 1,
+      yyerrcode_ = 256,
+      yyntokens_ = 60  ///< Number of tokens.
+    };
+
+
+    // User arguments.
+    isc::d2::D2ParserContext& ctx;
+  };
+
+  // Symbol number corresponding to token number t.
+  inline
+  D2Parser::token_number_type
+  D2Parser::yytranslate_ (token_type t)
+  {
+    static
+    const token_number_type
+    translate_table[] =
+    {
+     0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      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
+    };
+    const unsigned user_token_number_max_ = 314;
+    const token_number_type undef_token_ = 2;
+
+    if (static_cast<int> (t) <= yyeof_)
+      return yyeof_;
+    else if (static_cast<unsigned> (t) <= user_token_number_max_)
+      return translate_table[t];
+    else
+      return undef_token_;
+  }
+
+  inline
+  D2Parser::syntax_error::syntax_error (const location_type& l, const std::string& m)
+    : std::runtime_error (m)
+    , location (l)
+  {}
+
+  // basic_symbol.
+  template <typename Base>
+  D2Parser::basic_symbol<Base>::basic_symbol ()
+    : value ()
+    , location ()
+  {}
 
-      /// Copy constructor.
-      by_state (const by_state& other);
+#if 201103L <= YY_CPLUSPLUS
+  template <typename Base>
+  D2Parser::basic_symbol<Base>::basic_symbol (basic_symbol&& that)
+    : Base (std::move (that))
+    , value ()
+    , location (std::move (that.location))
+  {
+    switch (this->type_get ())
+    {
+      case 71: // value
+      case 75: // map_value
+      case 99: // ncr_protocol_value
+        value.move< ElementPtr > (std::move (that.value));
+        break;
 
-      /// Record that this symbol is empty.
-      void clear ();
+      case 59: // "boolean"
+        value.move< bool > (std::move (that.value));
+        break;
 
-      /// Steal the symbol type from \a that.
-      void move (by_state& that);
+      case 58: // "floating point"
+        value.move< double > (std::move (that.value));
+        break;
 
-      /// The (internal) type number (corresponding to \a state).
-      /// \a empty_symbol when empty.
-      symbol_number_type type_get () const;
+      case 57: // "integer"
+        value.move< int64_t > (std::move (that.value));
+        break;
 
-      /// The state number used to denote an empty symbol.
-      enum { empty_state = -1 };
+      case 56: // "constant string"
+        value.move< std::string > (std::move (that.value));
+        break;
 
-      /// The state.
-      /// \a empty when empty.
-      state_type state;
-    };
+      default:
+        break;
+    }
 
-    /// "Internal" symbol: element of the stack.
-    struct stack_symbol_type : basic_symbol<by_state>
+  }
+#endif
+
+  template <typename Base>
+  D2Parser::basic_symbol<Base>::basic_symbol (const basic_symbol& that)
+    : Base (that)
+    , value ()
+    , location (that.location)
+  {
+    switch (this->type_get ())
     {
-      /// Superclass.
-      typedef basic_symbol<by_state> super_type;
-      /// Construct an empty symbol.
-      stack_symbol_type ();
-      /// Move or copy construction.
-      stack_symbol_type (YY_RVREF (stack_symbol_type) that);
-      /// Steal the contents from \a sym to build this.
-      stack_symbol_type (state_type s, YY_MOVE_REF (symbol_type) sym);
-#if YY_CPLUSPLUS < 201103L
-      /// Assignment, needed by push_back by some old implementations.
-      /// Moves the contents of that.
-      stack_symbol_type& operator= (stack_symbol_type& that);
+      case 71: // value
+      case 75: // map_value
+      case 99: // ncr_protocol_value
+        value.copy< ElementPtr > (that.value);
+        break;
+
+      case 59: // "boolean"
+        value.copy< bool > (that.value);
+        break;
+
+      case 58: // "floating point"
+        value.copy< double > (that.value);
+        break;
+
+      case 57: // "integer"
+        value.copy< int64_t > (that.value);
+        break;
+
+      case 56: // "constant string"
+        value.copy< std::string > (that.value);
+        break;
+
+      default:
+        break;
+    }
+
+  }
+
+
+  // Implementation of basic_symbol constructor for each type.
+# if 201103L <= YY_CPLUSPLUS
+  template <typename Base>
+  D2Parser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, location_type&& l)
+    : Base (t)
+    , location (std::move (l))
+  {}
+#else
+  template <typename Base>
+  D2Parser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, const location_type& l)
+    : Base (t)
+    , location (l)
+  {}
+#endif
+# if 201103L <= YY_CPLUSPLUS
+  template <typename Base>
+  D2Parser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, ElementPtr&& v, location_type&& l)
+    : Base (t)
+    , value (std::move (v))
+    , location (std::move (l))
+  {}
+#else
+  template <typename Base>
+  D2Parser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, const ElementPtr& v, const location_type& l)
+    : Base (t)
+    , value (v)
+    , location (l)
+  {}
+#endif
+# if 201103L <= YY_CPLUSPLUS
+  template <typename Base>
+  D2Parser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, bool&& v, location_type&& l)
+    : Base (t)
+    , value (std::move (v))
+    , location (std::move (l))
+  {}
+#else
+  template <typename Base>
+  D2Parser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, const bool& v, const location_type& l)
+    : Base (t)
+    , value (v)
+    , location (l)
+  {}
+#endif
+# if 201103L <= YY_CPLUSPLUS
+  template <typename Base>
+  D2Parser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, double&& v, location_type&& l)
+    : Base (t)
+    , value (std::move (v))
+    , location (std::move (l))
+  {}
+#else
+  template <typename Base>
+  D2Parser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, const double& v, const location_type& l)
+    : Base (t)
+    , value (v)
+    , location (l)
+  {}
+#endif
+# if 201103L <= YY_CPLUSPLUS
+  template <typename Base>
+  D2Parser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, int64_t&& v, location_type&& l)
+    : Base (t)
+    , value (std::move (v))
+    , location (std::move (l))
+  {}
+#else
+  template <typename Base>
+  D2Parser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, const int64_t& v, const location_type& l)
+    : Base (t)
+    , value (v)
+    , location (l)
+  {}
+#endif
+# if 201103L <= YY_CPLUSPLUS
+  template <typename Base>
+  D2Parser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, std::string&& v, location_type&& l)
+    : Base (t)
+    , value (std::move (v))
+    , location (std::move (l))
+  {}
+#else
+  template <typename Base>
+  D2Parser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, const std::string& v, const location_type& l)
+    : Base (t)
+    , value (v)
+    , location (l)
+  {}
+#endif
+
+
+  template <typename Base>
+  D2Parser::basic_symbol<Base>::~basic_symbol ()
+  {
+    clear ();
+  }
+
+  template <typename Base>
+  void
+  D2Parser::basic_symbol<Base>::clear ()
+  {
+    // User destructor.
+    symbol_number_type yytype = this->type_get ();
+    basic_symbol<Base>& yysym = *this;
+    (void) yysym;
+    switch (yytype)
+    {
+   default:
+      break;
+    }
+
+    // Type destructor.
+  switch (yytype)
+    {
+      case 71: // value
+      case 75: // map_value
+      case 99: // ncr_protocol_value
+        value.template destroy< ElementPtr > ();
+        break;
+
+      case 59: // "boolean"
+        value.template destroy< bool > ();
+        break;
+
+      case 58: // "floating point"
+        value.template destroy< double > ();
+        break;
+
+      case 57: // "integer"
+        value.template destroy< int64_t > ();
+        break;
+
+      case 56: // "constant string"
+        value.template destroy< std::string > ();
+        break;
+
+      default:
+        break;
+    }
+
+    Base::clear ();
+  }
+
+  template <typename Base>
+  bool
+  D2Parser::basic_symbol<Base>::empty () const
+  {
+    return Base::type_get () == empty_symbol;
+  }
+
+  template <typename Base>
+  void
+  D2Parser::basic_symbol<Base>::move (basic_symbol& s)
+  {
+    super_type::move (s);
+    switch (this->type_get ())
+    {
+      case 71: // value
+      case 75: // map_value
+      case 99: // ncr_protocol_value
+        value.move< ElementPtr > (YY_MOVE (s.value));
+        break;
+
+      case 59: // "boolean"
+        value.move< bool > (YY_MOVE (s.value));
+        break;
+
+      case 58: // "floating point"
+        value.move< double > (YY_MOVE (s.value));
+        break;
+
+      case 57: // "integer"
+        value.move< int64_t > (YY_MOVE (s.value));
+        break;
+
+      case 56: // "constant string"
+        value.move< std::string > (YY_MOVE (s.value));
+        break;
+
+      default:
+        break;
+    }
+
+    location = YY_MOVE (s.location);
+  }
+
+  // by_type.
+  inline
+  D2Parser::by_type::by_type ()
+    : type (empty_symbol)
+  {}
+
+#if 201103L <= YY_CPLUSPLUS
+  inline
+  D2Parser::by_type::by_type (by_type&& that)
+    : type (that.type)
+  {
+    that.clear ();
+  }
 #endif
-    };
 
-    /// Stack type.
-    typedef stack<stack_symbol_type> stack_type;
+  inline
+  D2Parser::by_type::by_type (const by_type& that)
+    : type (that.type)
+  {}
 
-    /// The stack.
-    stack_type yystack_;
+  inline
+  D2Parser::by_type::by_type (token_type t)
+    : type (yytranslate_ (t))
+  {}
 
-    /// Push a new state on the stack.
-    /// \param m    a debug message to display
-    ///             if null, no trace is output.
-    /// \param sym  the symbol
-    /// \warning the contents of \a s.value is stolen.
-    void yypush_ (const char* m, YY_MOVE_REF (stack_symbol_type) sym);
+  inline
+  void
+  D2Parser::by_type::clear ()
+  {
+    type = empty_symbol;
+  }
 
-    /// Push a new look ahead token on the state on the stack.
-    /// \param m    a debug message to display
-    ///             if null, no trace is output.
-    /// \param s    the state
-    /// \param sym  the symbol (for its value and location).
-    /// \warning the contents of \a sym.value is stolen.
-    void yypush_ (const char* m, state_type s, YY_MOVE_REF (symbol_type) sym);
+  inline
+  void
+  D2Parser::by_type::move (by_type& that)
+  {
+    type = that.type;
+    that.clear ();
+  }
 
-    /// Pop \a n symbols from the stack.
-    void yypop_ (int n = 1);
+  inline
+  int
+  D2Parser::by_type::type_get () const
+  {
+    return type;
+  }
 
-    /// Constants.
-    enum
+  inline
+  D2Parser::token_type
+  D2Parser::by_type::token () const
+  {
+    // YYTOKNUM[NUM] -- (External) token number corresponding to the
+    // (internal) symbol number NUM (which must be that of a token).  */
+    static
+    const unsigned short
+    yytoken_number_[] =
     {
-      yyeof_ = 0,
-      yylast_ = 282,     ///< Last index in yytable_.
-      yynnts_ = 138,  ///< Number of nonterminal symbols.
-      yyfinal_ = 20, ///< Termination state number.
-      yyterror_ = 1,
-      yyerrcode_ = 256,
-      yyntokens_ = 57  ///< Number of tokens.
+       0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
+     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
+     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
+     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
+     295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
+     305,   306,   307,   308,   309,   310,   311,   312,   313,   314
     };
+    return static_cast<token_type> (yytoken_number_[type]);
+  }
 
-
-    // User arguments.
-    isc::d2::D2ParserContext& ctx;
-  };
-
-  // Symbol number corresponding to token number t.
+  // Implementation of make_symbol for each symbol type.
+# if 201103L <= YY_CPLUSPLUS
   inline
-  D2Parser::token_number_type
-  D2Parser::yytranslate_ (token_type t)
+  D2Parser::symbol_type
+  D2Parser::make_END (location_type l)
+  {
+    return symbol_type (token::TOKEN_END, std::move (l));
+  }
+#else
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_END (const location_type& l)
+  {
+    return symbol_type (token::TOKEN_END, l);
+  }
+#endif
+# if 201103L <= YY_CPLUSPLUS
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_COMMA (location_type l)
+  {
+    return symbol_type (token::TOKEN_COMMA, std::move (l));
+  }
+#else
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_COMMA (const location_type& l)
+  {
+    return symbol_type (token::TOKEN_COMMA, l);
+  }
+#endif
+# if 201103L <= YY_CPLUSPLUS
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_COLON (location_type l)
+  {
+    return symbol_type (token::TOKEN_COLON, std::move (l));
+  }
+#else
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_COLON (const location_type& l)
+  {
+    return symbol_type (token::TOKEN_COLON, l);
+  }
+#endif
+# if 201103L <= YY_CPLUSPLUS
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_LSQUARE_BRACKET (location_type l)
+  {
+    return symbol_type (token::TOKEN_LSQUARE_BRACKET, std::move (l));
+  }
+#else
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_LSQUARE_BRACKET (const location_type& l)
+  {
+    return symbol_type (token::TOKEN_LSQUARE_BRACKET, l);
+  }
+#endif
+# if 201103L <= YY_CPLUSPLUS
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_RSQUARE_BRACKET (location_type l)
+  {
+    return symbol_type (token::TOKEN_RSQUARE_BRACKET, std::move (l));
+  }
+#else
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_RSQUARE_BRACKET (const location_type& l)
+  {
+    return symbol_type (token::TOKEN_RSQUARE_BRACKET, l);
+  }
+#endif
+# if 201103L <= YY_CPLUSPLUS
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_LCURLY_BRACKET (location_type l)
+  {
+    return symbol_type (token::TOKEN_LCURLY_BRACKET, std::move (l));
+  }
+#else
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_LCURLY_BRACKET (const location_type& l)
+  {
+    return symbol_type (token::TOKEN_LCURLY_BRACKET, l);
+  }
+#endif
+# if 201103L <= YY_CPLUSPLUS
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_RCURLY_BRACKET (location_type l)
+  {
+    return symbol_type (token::TOKEN_RCURLY_BRACKET, std::move (l));
+  }
+#else
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_RCURLY_BRACKET (const location_type& l)
+  {
+    return symbol_type (token::TOKEN_RCURLY_BRACKET, l);
+  }
+#endif
+# if 201103L <= YY_CPLUSPLUS
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_NULL_TYPE (location_type l)
+  {
+    return symbol_type (token::TOKEN_NULL_TYPE, std::move (l));
+  }
+#else
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_NULL_TYPE (const location_type& l)
+  {
+    return symbol_type (token::TOKEN_NULL_TYPE, l);
+  }
+#endif
+# if 201103L <= YY_CPLUSPLUS
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_DHCP6 (location_type l)
+  {
+    return symbol_type (token::TOKEN_DHCP6, std::move (l));
+  }
+#else
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_DHCP6 (const location_type& l)
+  {
+    return symbol_type (token::TOKEN_DHCP6, l);
+  }
+#endif
+# if 201103L <= YY_CPLUSPLUS
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_DHCP4 (location_type l)
+  {
+    return symbol_type (token::TOKEN_DHCP4, std::move (l));
+  }
+#else
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_DHCP4 (const location_type& l)
+  {
+    return symbol_type (token::TOKEN_DHCP4, l);
+  }
+#endif
+# if 201103L <= YY_CPLUSPLUS
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_CONTROL_AGENT (location_type l)
+  {
+    return symbol_type (token::TOKEN_CONTROL_AGENT, std::move (l));
+  }
+#else
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_CONTROL_AGENT (const location_type& l)
+  {
+    return symbol_type (token::TOKEN_CONTROL_AGENT, l);
+  }
+#endif
+# if 201103L <= YY_CPLUSPLUS
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_DHCPDDNS (location_type l)
+  {
+    return symbol_type (token::TOKEN_DHCPDDNS, std::move (l));
+  }
+#else
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_DHCPDDNS (const location_type& l)
+  {
+    return symbol_type (token::TOKEN_DHCPDDNS, l);
+  }
+#endif
+# if 201103L <= YY_CPLUSPLUS
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_IP_ADDRESS (location_type l)
+  {
+    return symbol_type (token::TOKEN_IP_ADDRESS, std::move (l));
+  }
+#else
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_IP_ADDRESS (const location_type& l)
+  {
+    return symbol_type (token::TOKEN_IP_ADDRESS, l);
+  }
+#endif
+# if 201103L <= YY_CPLUSPLUS
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_PORT (location_type l)
+  {
+    return symbol_type (token::TOKEN_PORT, std::move (l));
+  }
+#else
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_PORT (const location_type& l)
+  {
+    return symbol_type (token::TOKEN_PORT, l);
+  }
+#endif
+# if 201103L <= YY_CPLUSPLUS
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_DNS_SERVER_TIMEOUT (location_type l)
+  {
+    return symbol_type (token::TOKEN_DNS_SERVER_TIMEOUT, std::move (l));
+  }
+#else
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_DNS_SERVER_TIMEOUT (const location_type& l)
+  {
+    return symbol_type (token::TOKEN_DNS_SERVER_TIMEOUT, l);
+  }
+#endif
+# if 201103L <= YY_CPLUSPLUS
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_NCR_PROTOCOL (location_type l)
+  {
+    return symbol_type (token::TOKEN_NCR_PROTOCOL, std::move (l));
+  }
+#else
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_NCR_PROTOCOL (const location_type& l)
+  {
+    return symbol_type (token::TOKEN_NCR_PROTOCOL, l);
+  }
+#endif
+# if 201103L <= YY_CPLUSPLUS
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_UDP (location_type l)
   {
-    static
-    const token_number_type
-    translate_table[] =
-    {
-     0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    56
-    };
-    const unsigned user_token_number_max_ = 311;
-    const token_number_type undef_token_ = 2;
-
-    if (static_cast<int> (t) <= yyeof_)
-      return yyeof_;
-    else if (static_cast<unsigned> (t) <= user_token_number_max_)
-      return translate_table[t];
-    else
-      return undef_token_;
+    return symbol_type (token::TOKEN_UDP, std::move (l));
   }
-
+#else
   inline
-  D2Parser::syntax_error::syntax_error (const location_type& l, const std::string& m)
-    : std::runtime_error (m)
-    , location (l)
-  {}
-
-  // basic_symbol.
-  template <typename Base>
-  D2Parser::basic_symbol<Base>::basic_symbol ()
-    : value ()
-    , location ()
-  {}
-
-  template <typename Base>
-  D2Parser::basic_symbol<Base>::basic_symbol (YY_RVREF (basic_symbol) other)
-    : Base (YY_MOVE (other))
-    , value ()
-    , location (YY_MOVE (other.location))
+  D2Parser::symbol_type
+  D2Parser::make_UDP (const location_type& l)
   {
-    switch (other.type_get ())
-    {
-      case 68: // value
-      case 72: // map_value
-      case 96: // ncr_protocol_value
-        value.YY_MOVE_OR_COPY< ElementPtr > (YY_MOVE (other.value));
-        break;
-
-      case 56: // "boolean"
-        value.YY_MOVE_OR_COPY< bool > (YY_MOVE (other.value));
-        break;
-
-      case 55: // "floating point"
-        value.YY_MOVE_OR_COPY< double > (YY_MOVE (other.value));
-        break;
-
-      case 54: // "integer"
-        value.YY_MOVE_OR_COPY< int64_t > (YY_MOVE (other.value));
-        break;
-
-      case 53: // "constant string"
-        value.YY_MOVE_OR_COPY< std::string > (YY_MOVE (other.value));
-        break;
-
-      default:
-        break;
-    }
-
+    return symbol_type (token::TOKEN_UDP, l);
   }
-
-
-  // Implementation of basic_symbol constructor for each type.
+#endif
 # if 201103L <= YY_CPLUSPLUS
-  template <typename Base>
-  D2Parser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, location_type&& l)
-    : Base (t)
-    , location (std::move (l))
-  {}
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_TCP (location_type l)
+  {
+    return symbol_type (token::TOKEN_TCP, std::move (l));
+  }
 #else
-  template <typename Base>
-  D2Parser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, const location_type& l)
-    : Base (t)
-    , location (l)
-  {}
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_TCP (const location_type& l)
+  {
+    return symbol_type (token::TOKEN_TCP, l);
+  }
 #endif
 # if 201103L <= YY_CPLUSPLUS
-  template <typename Base>
-  D2Parser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, ElementPtr&& v, location_type&& l)
-    : Base (t)
-    , value (std::move (v))
-    , location (std::move (l))
-  {}
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_NCR_FORMAT (location_type l)
+  {
+    return symbol_type (token::TOKEN_NCR_FORMAT, std::move (l));
+  }
 #else
-  template <typename Base>
-  D2Parser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, const ElementPtr& v, const location_type& l)
-    : Base (t)
-    , value (v)
-    , location (l)
-  {}
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_NCR_FORMAT (const location_type& l)
+  {
+    return symbol_type (token::TOKEN_NCR_FORMAT, l);
+  }
 #endif
 # if 201103L <= YY_CPLUSPLUS
-  template <typename Base>
-  D2Parser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, bool&& v, location_type&& l)
-    : Base (t)
-    , value (std::move (v))
-    , location (std::move (l))
-  {}
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_JSON (location_type l)
+  {
+    return symbol_type (token::TOKEN_JSON, std::move (l));
+  }
 #else
-  template <typename Base>
-  D2Parser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, const bool& v, const location_type& l)
-    : Base (t)
-    , value (v)
-    , location (l)
-  {}
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_JSON (const location_type& l)
+  {
+    return symbol_type (token::TOKEN_JSON, l);
+  }
 #endif
 # if 201103L <= YY_CPLUSPLUS
-  template <typename Base>
-  D2Parser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, double&& v, location_type&& l)
-    : Base (t)
-    , value (std::move (v))
-    , location (std::move (l))
-  {}
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_USER_CONTEXT (location_type l)
+  {
+    return symbol_type (token::TOKEN_USER_CONTEXT, std::move (l));
+  }
 #else
-  template <typename Base>
-  D2Parser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, const double& v, const location_type& l)
-    : Base (t)
-    , value (v)
-    , location (l)
-  {}
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_USER_CONTEXT (const location_type& l)
+  {
+    return symbol_type (token::TOKEN_USER_CONTEXT, l);
+  }
 #endif
 # if 201103L <= YY_CPLUSPLUS
-  template <typename Base>
-  D2Parser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, int64_t&& v, location_type&& l)
-    : Base (t)
-    , value (std::move (v))
-    , location (std::move (l))
-  {}
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_COMMENT (location_type l)
+  {
+    return symbol_type (token::TOKEN_COMMENT, std::move (l));
+  }
 #else
-  template <typename Base>
-  D2Parser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, const int64_t& v, const location_type& l)
-    : Base (t)
-    , value (v)
-    , location (l)
-  {}
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_COMMENT (const location_type& l)
+  {
+    return symbol_type (token::TOKEN_COMMENT, l);
+  }
 #endif
 # if 201103L <= YY_CPLUSPLUS
-  template <typename Base>
-  D2Parser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, std::string&& v, location_type&& l)
-    : Base (t)
-    , value (std::move (v))
-    , location (std::move (l))
-  {}
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_FORWARD_DDNS (location_type l)
+  {
+    return symbol_type (token::TOKEN_FORWARD_DDNS, std::move (l));
+  }
 #else
-  template <typename Base>
-  D2Parser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, const std::string& v, const location_type& l)
-    : Base (t)
-    , value (v)
-    , location (l)
-  {}
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_FORWARD_DDNS (const location_type& l)
+  {
+    return symbol_type (token::TOKEN_FORWARD_DDNS, l);
+  }
 #endif
-
-
-  template <typename Base>
-  D2Parser::basic_symbol<Base>::~basic_symbol ()
+# if 201103L <= YY_CPLUSPLUS
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_REVERSE_DDNS (location_type l)
   {
-    clear ();
+    return symbol_type (token::TOKEN_REVERSE_DDNS, std::move (l));
   }
-
-  template <typename Base>
-  void
-  D2Parser::basic_symbol<Base>::clear ()
+#else
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_REVERSE_DDNS (const location_type& l)
   {
-    // User destructor.
-    symbol_number_type yytype = this->type_get ();
-    basic_symbol<Base>& yysym = *this;
-    (void) yysym;
-    switch (yytype)
-    {
-   default:
-      break;
-    }
-
-    // Type destructor.
-  switch (yytype)
-    {
-      case 68: // value
-      case 72: // map_value
-      case 96: // ncr_protocol_value
-        value.template destroy< ElementPtr > ();
-        break;
-
-      case 56: // "boolean"
-        value.template destroy< bool > ();
-        break;
-
-      case 55: // "floating point"
-        value.template destroy< double > ();
-        break;
-
-      case 54: // "integer"
-        value.template destroy< int64_t > ();
-        break;
-
-      case 53: // "constant string"
-        value.template destroy< std::string > ();
-        break;
-
-      default:
-        break;
-    }
-
-    Base::clear ();
+    return symbol_type (token::TOKEN_REVERSE_DDNS, l);
+  }
+#endif
+# if 201103L <= YY_CPLUSPLUS
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_DDNS_DOMAINS (location_type l)
+  {
+    return symbol_type (token::TOKEN_DDNS_DOMAINS, std::move (l));
+  }
+#else
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_DDNS_DOMAINS (const location_type& l)
+  {
+    return symbol_type (token::TOKEN_DDNS_DOMAINS, l);
   }
-
-  template <typename Base>
-  bool
-  D2Parser::basic_symbol<Base>::empty () const
+#endif
+# if 201103L <= YY_CPLUSPLUS
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_KEY_NAME (location_type l)
   {
-    return Base::type_get () == empty_symbol;
+    return symbol_type (token::TOKEN_KEY_NAME, std::move (l));
   }
-
-  template <typename Base>
-  void
-  D2Parser::basic_symbol<Base>::move (basic_symbol& s)
+#else
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_KEY_NAME (const location_type& l)
   {
-    super_type::move (s);
-    switch (this->type_get ())
-    {
-      case 68: // value
-      case 72: // map_value
-      case 96: // ncr_protocol_value
-        value.move< ElementPtr > (YY_MOVE (s.value));
-        break;
-
-      case 56: // "boolean"
-        value.move< bool > (YY_MOVE (s.value));
-        break;
-
-      case 55: // "floating point"
-        value.move< double > (YY_MOVE (s.value));
-        break;
-
-      case 54: // "integer"
-        value.move< int64_t > (YY_MOVE (s.value));
-        break;
-
-      case 53: // "constant string"
-        value.move< std::string > (YY_MOVE (s.value));
-        break;
-
-      default:
-        break;
-    }
-
-    location = YY_MOVE (s.location);
+    return symbol_type (token::TOKEN_KEY_NAME, l);
   }
-
-  // by_type.
+#endif
+# if 201103L <= YY_CPLUSPLUS
   inline
-  D2Parser::by_type::by_type ()
-    : type (empty_symbol)
-  {}
-
+  D2Parser::symbol_type
+  D2Parser::make_DNS_SERVERS (location_type l)
+  {
+    return symbol_type (token::TOKEN_DNS_SERVERS, std::move (l));
+  }
+#else
   inline
-  D2Parser::by_type::by_type (const by_type& other)
-    : type (other.type)
-  {}
-
+  D2Parser::symbol_type
+  D2Parser::make_DNS_SERVERS (const location_type& l)
+  {
+    return symbol_type (token::TOKEN_DNS_SERVERS, l);
+  }
+#endif
+# if 201103L <= YY_CPLUSPLUS
   inline
-  D2Parser::by_type::by_type (token_type t)
-    : type (yytranslate_ (t))
-  {}
-
+  D2Parser::symbol_type
+  D2Parser::make_HOSTNAME (location_type l)
+  {
+    return symbol_type (token::TOKEN_HOSTNAME, std::move (l));
+  }
+#else
   inline
-  void
-  D2Parser::by_type::clear ()
+  D2Parser::symbol_type
+  D2Parser::make_HOSTNAME (const location_type& l)
   {
-    type = empty_symbol;
+    return symbol_type (token::TOKEN_HOSTNAME, l);
   }
-
+#endif
+# if 201103L <= YY_CPLUSPLUS
   inline
-  void
-  D2Parser::by_type::move (by_type& that)
+  D2Parser::symbol_type
+  D2Parser::make_TSIG_KEYS (location_type l)
   {
-    type = that.type;
-    that.clear ();
+    return symbol_type (token::TOKEN_TSIG_KEYS, std::move (l));
   }
-
+#else
   inline
-  int
-  D2Parser::by_type::type_get () const
+  D2Parser::symbol_type
+  D2Parser::make_TSIG_KEYS (const location_type& l)
   {
-    return type;
+    return symbol_type (token::TOKEN_TSIG_KEYS, l);
   }
-
+#endif
+# if 201103L <= YY_CPLUSPLUS
   inline
-  D2Parser::token_type
-  D2Parser::by_type::token () const
+  D2Parser::symbol_type
+  D2Parser::make_ALGORITHM (location_type l)
   {
-    // YYTOKNUM[NUM] -- (External) token number corresponding to the
-    // (internal) symbol number NUM (which must be that of a token).  */
-    static
-    const unsigned short
-    yytoken_number_[] =
-    {
-       0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
-     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
-     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
-     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
-     295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
-     305,   306,   307,   308,   309,   310,   311
-    };
-    return static_cast<token_type> (yytoken_number_[type]);
+    return symbol_type (token::TOKEN_ALGORITHM, std::move (l));
   }
-
-  // Implementation of make_symbol for each symbol type.
+#else
   inline
   D2Parser::symbol_type
-  D2Parser::make_END (YY_COPY (location_type) l)
+  D2Parser::make_ALGORITHM (const location_type& l)
   {
-    return symbol_type (token::TOKEN_END, YY_MOVE (l));
+    return symbol_type (token::TOKEN_ALGORITHM, l);
   }
-
+#endif
+# if 201103L <= YY_CPLUSPLUS
   inline
   D2Parser::symbol_type
-  D2Parser::make_COMMA (YY_COPY (location_type) l)
+  D2Parser::make_DIGEST_BITS (location_type l)
   {
-    return symbol_type (token::TOKEN_COMMA, YY_MOVE (l));
+    return symbol_type (token::TOKEN_DIGEST_BITS, std::move (l));
   }
-
+#else
   inline
   D2Parser::symbol_type
-  D2Parser::make_COLON (YY_COPY (location_type) l)
+  D2Parser::make_DIGEST_BITS (const location_type& l)
   {
-    return symbol_type (token::TOKEN_COLON, YY_MOVE (l));
+    return symbol_type (token::TOKEN_DIGEST_BITS, l);
   }
-
+#endif
+# if 201103L <= YY_CPLUSPLUS
   inline
   D2Parser::symbol_type
-  D2Parser::make_LSQUARE_BRACKET (YY_COPY (location_type) l)
+  D2Parser::make_SECRET (location_type l)
   {
-    return symbol_type (token::TOKEN_LSQUARE_BRACKET, YY_MOVE (l));
+    return symbol_type (token::TOKEN_SECRET, std::move (l));
   }
-
+#else
   inline
   D2Parser::symbol_type
-  D2Parser::make_RSQUARE_BRACKET (YY_COPY (location_type) l)
+  D2Parser::make_SECRET (const location_type& l)
   {
-    return symbol_type (token::TOKEN_RSQUARE_BRACKET, YY_MOVE (l));
+    return symbol_type (token::TOKEN_SECRET, l);
   }
-
+#endif
+# if 201103L <= YY_CPLUSPLUS
   inline
   D2Parser::symbol_type
-  D2Parser::make_LCURLY_BRACKET (YY_COPY (location_type) l)
+  D2Parser::make_CONTROL_SOCKET (location_type l)
   {
-    return symbol_type (token::TOKEN_LCURLY_BRACKET, YY_MOVE (l));
+    return symbol_type (token::TOKEN_CONTROL_SOCKET, std::move (l));
   }
-
+#else
   inline
   D2Parser::symbol_type
-  D2Parser::make_RCURLY_BRACKET (YY_COPY (location_type) l)
+  D2Parser::make_CONTROL_SOCKET (const location_type& l)
   {
-    return symbol_type (token::TOKEN_RCURLY_BRACKET, YY_MOVE (l));
+    return symbol_type (token::TOKEN_CONTROL_SOCKET, l);
   }
-
+#endif
+# if 201103L <= YY_CPLUSPLUS
   inline
   D2Parser::symbol_type
-  D2Parser::make_NULL_TYPE (YY_COPY (location_type) l)
+  D2Parser::make_SOCKET_TYPE (location_type l)
   {
-    return symbol_type (token::TOKEN_NULL_TYPE, YY_MOVE (l));
+    return symbol_type (token::TOKEN_SOCKET_TYPE, std::move (l));
   }
-
+#else
   inline
   D2Parser::symbol_type
-  D2Parser::make_DHCP6 (YY_COPY (location_type) l)
+  D2Parser::make_SOCKET_TYPE (const location_type& l)
   {
-    return symbol_type (token::TOKEN_DHCP6, YY_MOVE (l));
+    return symbol_type (token::TOKEN_SOCKET_TYPE, l);
   }
-
+#endif
+# if 201103L <= YY_CPLUSPLUS
   inline
   D2Parser::symbol_type
-  D2Parser::make_DHCP4 (YY_COPY (location_type) l)
+  D2Parser::make_SOCKET_NAME (location_type l)
   {
-    return symbol_type (token::TOKEN_DHCP4, YY_MOVE (l));
+    return symbol_type (token::TOKEN_SOCKET_NAME, std::move (l));
   }
-
+#else
   inline
   D2Parser::symbol_type
-  D2Parser::make_CONTROL_AGENT (YY_COPY (location_type) l)
+  D2Parser::make_SOCKET_NAME (const location_type& l)
   {
-    return symbol_type (token::TOKEN_CONTROL_AGENT, YY_MOVE (l));
+    return symbol_type (token::TOKEN_SOCKET_NAME, l);
   }
-
+#endif
+# if 201103L <= YY_CPLUSPLUS
   inline
   D2Parser::symbol_type
-  D2Parser::make_DHCPDDNS (YY_COPY (location_type) l)
+  D2Parser::make_LOGGING (location_type l)
   {
-    return symbol_type (token::TOKEN_DHCPDDNS, YY_MOVE (l));
+    return symbol_type (token::TOKEN_LOGGING, std::move (l));
   }
-
+#else
   inline
   D2Parser::symbol_type
-  D2Parser::make_IP_ADDRESS (YY_COPY (location_type) l)
+  D2Parser::make_LOGGING (const location_type& l)
   {
-    return symbol_type (token::TOKEN_IP_ADDRESS, YY_MOVE (l));
+    return symbol_type (token::TOKEN_LOGGING, l);
   }
-
+#endif
+# if 201103L <= YY_CPLUSPLUS
   inline
   D2Parser::symbol_type
-  D2Parser::make_PORT (YY_COPY (location_type) l)
+  D2Parser::make_LOGGERS (location_type l)
   {
-    return symbol_type (token::TOKEN_PORT, YY_MOVE (l));
+    return symbol_type (token::TOKEN_LOGGERS, std::move (l));
   }
-
+#else
   inline
   D2Parser::symbol_type
-  D2Parser::make_DNS_SERVER_TIMEOUT (YY_COPY (location_type) l)
+  D2Parser::make_LOGGERS (const location_type& l)
   {
-    return symbol_type (token::TOKEN_DNS_SERVER_TIMEOUT, YY_MOVE (l));
+    return symbol_type (token::TOKEN_LOGGERS, l);
   }
-
+#endif
+# if 201103L <= YY_CPLUSPLUS
   inline
   D2Parser::symbol_type
-  D2Parser::make_NCR_PROTOCOL (YY_COPY (location_type) l)
+  D2Parser::make_NAME (location_type l)
   {
-    return symbol_type (token::TOKEN_NCR_PROTOCOL, YY_MOVE (l));
+    return symbol_type (token::TOKEN_NAME, std::move (l));
   }
-
+#else
   inline
   D2Parser::symbol_type
-  D2Parser::make_UDP (YY_COPY (location_type) l)
+  D2Parser::make_NAME (const location_type& l)
   {
-    return symbol_type (token::TOKEN_UDP, YY_MOVE (l));
+    return symbol_type (token::TOKEN_NAME, l);
   }
-
+#endif
+# if 201103L <= YY_CPLUSPLUS
   inline
   D2Parser::symbol_type
-  D2Parser::make_TCP (YY_COPY (location_type) l)
+  D2Parser::make_OUTPUT_OPTIONS (location_type l)
   {
-    return symbol_type (token::TOKEN_TCP, YY_MOVE (l));
+    return symbol_type (token::TOKEN_OUTPUT_OPTIONS, std::move (l));
   }
-
+#else
   inline
   D2Parser::symbol_type
-  D2Parser::make_NCR_FORMAT (YY_COPY (location_type) l)
+  D2Parser::make_OUTPUT_OPTIONS (const location_type& l)
   {
-    return symbol_type (token::TOKEN_NCR_FORMAT, YY_MOVE (l));
+    return symbol_type (token::TOKEN_OUTPUT_OPTIONS, l);
   }
-
+#endif
+# if 201103L <= YY_CPLUSPLUS
   inline
   D2Parser::symbol_type
-  D2Parser::make_JSON (YY_COPY (location_type) l)
+  D2Parser::make_OUTPUT (location_type l)
   {
-    return symbol_type (token::TOKEN_JSON, YY_MOVE (l));
+    return symbol_type (token::TOKEN_OUTPUT, std::move (l));
   }
-
+#else
   inline
   D2Parser::symbol_type
-  D2Parser::make_USER_CONTEXT (YY_COPY (location_type) l)
+  D2Parser::make_OUTPUT (const location_type& l)
   {
-    return symbol_type (token::TOKEN_USER_CONTEXT, YY_MOVE (l));
+    return symbol_type (token::TOKEN_OUTPUT, l);
   }
-
+#endif
+# if 201103L <= YY_CPLUSPLUS
   inline
   D2Parser::symbol_type
-  D2Parser::make_COMMENT (YY_COPY (location_type) l)
+  D2Parser::make_DEBUGLEVEL (location_type l)
   {
-    return symbol_type (token::TOKEN_COMMENT, YY_MOVE (l));
+    return symbol_type (token::TOKEN_DEBUGLEVEL, std::move (l));
   }
-
+#else
   inline
   D2Parser::symbol_type
-  D2Parser::make_FORWARD_DDNS (YY_COPY (location_type) l)
+  D2Parser::make_DEBUGLEVEL (const location_type& l)
   {
-    return symbol_type (token::TOKEN_FORWARD_DDNS, YY_MOVE (l));
+    return symbol_type (token::TOKEN_DEBUGLEVEL, l);
   }
-
+#endif
+# if 201103L <= YY_CPLUSPLUS
   inline
   D2Parser::symbol_type
-  D2Parser::make_REVERSE_DDNS (YY_COPY (location_type) l)
+  D2Parser::make_SEVERITY (location_type l)
   {
-    return symbol_type (token::TOKEN_REVERSE_DDNS, YY_MOVE (l));
+    return symbol_type (token::TOKEN_SEVERITY, std::move (l));
   }
-
+#else
   inline
   D2Parser::symbol_type
-  D2Parser::make_DDNS_DOMAINS (YY_COPY (location_type) l)
+  D2Parser::make_SEVERITY (const location_type& l)
   {
-    return symbol_type (token::TOKEN_DDNS_DOMAINS, YY_MOVE (l));
+    return symbol_type (token::TOKEN_SEVERITY, l);
   }
-
+#endif
+# if 201103L <= YY_CPLUSPLUS
   inline
   D2Parser::symbol_type
-  D2Parser::make_KEY_NAME (YY_COPY (location_type) l)
+  D2Parser::make_FLUSH (location_type l)
   {
-    return symbol_type (token::TOKEN_KEY_NAME, YY_MOVE (l));
+    return symbol_type (token::TOKEN_FLUSH, std::move (l));
   }
-
+#else
   inline
   D2Parser::symbol_type
-  D2Parser::make_DNS_SERVERS (YY_COPY (location_type) l)
+  D2Parser::make_FLUSH (const location_type& l)
   {
-    return symbol_type (token::TOKEN_DNS_SERVERS, YY_MOVE (l));
+    return symbol_type (token::TOKEN_FLUSH, l);
   }
-
+#endif
+# if 201103L <= YY_CPLUSPLUS
   inline
   D2Parser::symbol_type
-  D2Parser::make_HOSTNAME (YY_COPY (location_type) l)
+  D2Parser::make_MAXSIZE (location_type l)
   {
-    return symbol_type (token::TOKEN_HOSTNAME, YY_MOVE (l));
+    return symbol_type (token::TOKEN_MAXSIZE, std::move (l));
   }
-
+#else
   inline
   D2Parser::symbol_type
-  D2Parser::make_TSIG_KEYS (YY_COPY (location_type) l)
+  D2Parser::make_MAXSIZE (const location_type& l)
   {
-    return symbol_type (token::TOKEN_TSIG_KEYS, YY_MOVE (l));
+    return symbol_type (token::TOKEN_MAXSIZE, l);
   }
-
+#endif
+# if 201103L <= YY_CPLUSPLUS
   inline
   D2Parser::symbol_type
-  D2Parser::make_ALGORITHM (YY_COPY (location_type) l)
+  D2Parser::make_MAXVER (location_type l)
   {
-    return symbol_type (token::TOKEN_ALGORITHM, YY_MOVE (l));
+    return symbol_type (token::TOKEN_MAXVER, std::move (l));
   }
-
+#else
   inline
   D2Parser::symbol_type
-  D2Parser::make_DIGEST_BITS (YY_COPY (location_type) l)
+  D2Parser::make_MAXVER (const location_type& l)
   {
-    return symbol_type (token::TOKEN_DIGEST_BITS, YY_MOVE (l));
+    return symbol_type (token::TOKEN_MAXVER, l);
   }
-
+#endif
+# if 201103L <= YY_CPLUSPLUS
   inline
   D2Parser::symbol_type
-  D2Parser::make_SECRET (YY_COPY (location_type) l)
+  D2Parser::make_TOPLEVEL_JSON (location_type l)
   {
-    return symbol_type (token::TOKEN_SECRET, YY_MOVE (l));
+    return symbol_type (token::TOKEN_TOPLEVEL_JSON, std::move (l));
   }
-
+#else
   inline
   D2Parser::symbol_type
-  D2Parser::make_LOGGING (YY_COPY (location_type) l)
+  D2Parser::make_TOPLEVEL_JSON (const location_type& l)
   {
-    return symbol_type (token::TOKEN_LOGGING, YY_MOVE (l));
+    return symbol_type (token::TOKEN_TOPLEVEL_JSON, l);
   }
-
+#endif
+# if 201103L <= YY_CPLUSPLUS
   inline
   D2Parser::symbol_type
-  D2Parser::make_LOGGERS (YY_COPY (location_type) l)
+  D2Parser::make_TOPLEVEL_DHCPDDNS (location_type l)
   {
-    return symbol_type (token::TOKEN_LOGGERS, YY_MOVE (l));
+    return symbol_type (token::TOKEN_TOPLEVEL_DHCPDDNS, std::move (l));
   }
-
+#else
   inline
   D2Parser::symbol_type
-  D2Parser::make_NAME (YY_COPY (location_type) l)
+  D2Parser::make_TOPLEVEL_DHCPDDNS (const location_type& l)
   {
-    return symbol_type (token::TOKEN_NAME, YY_MOVE (l));
+    return symbol_type (token::TOKEN_TOPLEVEL_DHCPDDNS, l);
   }
-
+#endif
+# if 201103L <= YY_CPLUSPLUS
   inline
   D2Parser::symbol_type
-  D2Parser::make_OUTPUT_OPTIONS (YY_COPY (location_type) l)
+  D2Parser::make_SUB_DHCPDDNS (location_type l)
   {
-    return symbol_type (token::TOKEN_OUTPUT_OPTIONS, YY_MOVE (l));
+    return symbol_type (token::TOKEN_SUB_DHCPDDNS, std::move (l));
   }
-
+#else
   inline
   D2Parser::symbol_type
-  D2Parser::make_OUTPUT (YY_COPY (location_type) l)
+  D2Parser::make_SUB_DHCPDDNS (const location_type& l)
   {
-    return symbol_type (token::TOKEN_OUTPUT, YY_MOVE (l));
+    return symbol_type (token::TOKEN_SUB_DHCPDDNS, l);
   }
-
+#endif
+# if 201103L <= YY_CPLUSPLUS
   inline
   D2Parser::symbol_type
-  D2Parser::make_DEBUGLEVEL (YY_COPY (location_type) l)
+  D2Parser::make_SUB_TSIG_KEY (location_type l)
   {
-    return symbol_type (token::TOKEN_DEBUGLEVEL, YY_MOVE (l));
+    return symbol_type (token::TOKEN_SUB_TSIG_KEY, std::move (l));
   }
-
+#else
   inline
   D2Parser::symbol_type
-  D2Parser::make_SEVERITY (YY_COPY (location_type) l)
+  D2Parser::make_SUB_TSIG_KEY (const location_type& l)
   {
-    return symbol_type (token::TOKEN_SEVERITY, YY_MOVE (l));
+    return symbol_type (token::TOKEN_SUB_TSIG_KEY, l);
   }
-
+#endif
+# if 201103L <= YY_CPLUSPLUS
   inline
   D2Parser::symbol_type
-  D2Parser::make_FLUSH (YY_COPY (location_type) l)
+  D2Parser::make_SUB_TSIG_KEYS (location_type l)
   {
-    return symbol_type (token::TOKEN_FLUSH, YY_MOVE (l));
+    return symbol_type (token::TOKEN_SUB_TSIG_KEYS, std::move (l));
   }
-
+#else
   inline
   D2Parser::symbol_type
-  D2Parser::make_MAXSIZE (YY_COPY (location_type) l)
+  D2Parser::make_SUB_TSIG_KEYS (const location_type& l)
   {
-    return symbol_type (token::TOKEN_MAXSIZE, YY_MOVE (l));
+    return symbol_type (token::TOKEN_SUB_TSIG_KEYS, l);
   }
-
+#endif
+# if 201103L <= YY_CPLUSPLUS
   inline
   D2Parser::symbol_type
-  D2Parser::make_MAXVER (YY_COPY (location_type) l)
+  D2Parser::make_SUB_DDNS_DOMAIN (location_type l)
   {
-    return symbol_type (token::TOKEN_MAXVER, YY_MOVE (l));
+    return symbol_type (token::TOKEN_SUB_DDNS_DOMAIN, std::move (l));
   }
-
+#else
   inline
   D2Parser::symbol_type
-  D2Parser::make_TOPLEVEL_JSON (YY_COPY (location_type) l)
+  D2Parser::make_SUB_DDNS_DOMAIN (const location_type& l)
   {
-    return symbol_type (token::TOKEN_TOPLEVEL_JSON, YY_MOVE (l));
+    return symbol_type (token::TOKEN_SUB_DDNS_DOMAIN, l);
   }
-
+#endif
+# if 201103L <= YY_CPLUSPLUS
   inline
   D2Parser::symbol_type
-  D2Parser::make_TOPLEVEL_DHCPDDNS (YY_COPY (location_type) l)
+  D2Parser::make_SUB_DDNS_DOMAINS (location_type l)
   {
-    return symbol_type (token::TOKEN_TOPLEVEL_DHCPDDNS, YY_MOVE (l));
+    return symbol_type (token::TOKEN_SUB_DDNS_DOMAINS, std::move (l));
   }
-
+#else
   inline
   D2Parser::symbol_type
-  D2Parser::make_SUB_DHCPDDNS (YY_COPY (location_type) l)
+  D2Parser::make_SUB_DDNS_DOMAINS (const location_type& l)
   {
-    return symbol_type (token::TOKEN_SUB_DHCPDDNS, YY_MOVE (l));
+    return symbol_type (token::TOKEN_SUB_DDNS_DOMAINS, l);
   }
-
+#endif
+# if 201103L <= YY_CPLUSPLUS
   inline
   D2Parser::symbol_type
-  D2Parser::make_SUB_TSIG_KEY (YY_COPY (location_type) l)
+  D2Parser::make_SUB_DNS_SERVER (location_type l)
   {
-    return symbol_type (token::TOKEN_SUB_TSIG_KEY, YY_MOVE (l));
+    return symbol_type (token::TOKEN_SUB_DNS_SERVER, std::move (l));
   }
-
+#else
   inline
   D2Parser::symbol_type
-  D2Parser::make_SUB_TSIG_KEYS (YY_COPY (location_type) l)
+  D2Parser::make_SUB_DNS_SERVER (const location_type& l)
   {
-    return symbol_type (token::TOKEN_SUB_TSIG_KEYS, YY_MOVE (l));
+    return symbol_type (token::TOKEN_SUB_DNS_SERVER, l);
   }
-
+#endif
+# if 201103L <= YY_CPLUSPLUS
   inline
   D2Parser::symbol_type
-  D2Parser::make_SUB_DDNS_DOMAIN (YY_COPY (location_type) l)
+  D2Parser::make_SUB_DNS_SERVERS (location_type l)
   {
-    return symbol_type (token::TOKEN_SUB_DDNS_DOMAIN, YY_MOVE (l));
+    return symbol_type (token::TOKEN_SUB_DNS_SERVERS, std::move (l));
   }
-
+#else
   inline
   D2Parser::symbol_type
-  D2Parser::make_SUB_DDNS_DOMAINS (YY_COPY (location_type) l)
+  D2Parser::make_SUB_DNS_SERVERS (const location_type& l)
   {
-    return symbol_type (token::TOKEN_SUB_DDNS_DOMAINS, YY_MOVE (l));
+    return symbol_type (token::TOKEN_SUB_DNS_SERVERS, l);
   }
-
+#endif
+# if 201103L <= YY_CPLUSPLUS
   inline
   D2Parser::symbol_type
-  D2Parser::make_SUB_DNS_SERVER (YY_COPY (location_type) l)
+  D2Parser::make_STRING (std::string v, location_type l)
   {
-    return symbol_type (token::TOKEN_SUB_DNS_SERVER, YY_MOVE (l));
+    return symbol_type (token::TOKEN_STRING, std::move (v), std::move (l));
   }
-
+#else
   inline
   D2Parser::symbol_type
-  D2Parser::make_SUB_DNS_SERVERS (YY_COPY (location_type) l)
+  D2Parser::make_STRING (const std::string& v, const location_type& l)
   {
-    return symbol_type (token::TOKEN_SUB_DNS_SERVERS, YY_MOVE (l));
+    return symbol_type (token::TOKEN_STRING, v, l);
   }
-
+#endif
+# if 201103L <= YY_CPLUSPLUS
   inline
   D2Parser::symbol_type
-  D2Parser::make_STRING (YY_COPY (std::string) v, YY_COPY (location_type) l)
+  D2Parser::make_INTEGER (int64_t v, location_type l)
   {
-    return symbol_type (token::TOKEN_STRING, YY_MOVE (v), YY_MOVE (l));
+    return symbol_type (token::TOKEN_INTEGER, std::move (v), std::move (l));
   }
-
+#else
   inline
   D2Parser::symbol_type
-  D2Parser::make_INTEGER (YY_COPY (int64_t) v, YY_COPY (location_type) l)
+  D2Parser::make_INTEGER (const int64_t& v, const location_type& l)
   {
-    return symbol_type (token::TOKEN_INTEGER, YY_MOVE (v), YY_MOVE (l));
+    return symbol_type (token::TOKEN_INTEGER, v, l);
   }
-
+#endif
+# if 201103L <= YY_CPLUSPLUS
   inline
   D2Parser::symbol_type
-  D2Parser::make_FLOAT (YY_COPY (double) v, YY_COPY (location_type) l)
+  D2Parser::make_FLOAT (double v, location_type l)
   {
-    return symbol_type (token::TOKEN_FLOAT, YY_MOVE (v), YY_MOVE (l));
+    return symbol_type (token::TOKEN_FLOAT, std::move (v), std::move (l));
   }
-
+#else
   inline
   D2Parser::symbol_type
-  D2Parser::make_BOOLEAN (YY_COPY (bool) v, YY_COPY (location_type) l)
+  D2Parser::make_FLOAT (const double& v, const location_type& l)
   {
-    return symbol_type (token::TOKEN_BOOLEAN, YY_MOVE (v), YY_MOVE (l));
+    return symbol_type (token::TOKEN_FLOAT, v, l);
   }
-
+#endif
+# if 201103L <= YY_CPLUSPLUS
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_BOOLEAN (bool v, location_type l)
+  {
+    return symbol_type (token::TOKEN_BOOLEAN, std::move (v), std::move (l));
+  }
+#else
+  inline
+  D2Parser::symbol_type
+  D2Parser::make_BOOLEAN (const bool& v, const location_type& l)
+  {
+    return symbol_type (token::TOKEN_BOOLEAN, v, l);
+  }
+#endif
 
 #line 14 "d2_parser.yy" // lalr1.cc:404
 } } // isc::d2
-#line 1911 "d2_parser.h" // lalr1.cc:404
+#line 2758 "d2_parser.h" // lalr1.cc:404
 
 
 
index 0b7e416642d27bc5be85d4f7647a2aca1e63e8da..c0116b1c93f4de50da9baa9aef9f96bb6a3b4bec 100644 (file)
@@ -1,5 +1,5 @@
-// Generated 201811271344
-// A Bison parser, made by GNU Bison 3.2.1.
+// Generated 201812272009
+// A Bison parser, made by GNU Bison 3.2.4.
 
 // Locations for Bison parsers in C++
 
index 5a854e93340eba851eeb8e258b2fdf7395f23c8c..b9c0d0695a36028f4b64be3973b2a3d33614d6b4 100644 (file)
@@ -1,5 +1,5 @@
-// Generated 201811271344
-// A Bison parser, made by GNU Bison 3.2.1.
+// Generated 201812272009
+// A Bison parser, made by GNU Bison 3.2.4.
 
 // Starting with Bison 3.2, this file is useless: the structure it
 // used to define is now defined in "location.hh".
index 4fcda222f5ab82d1bb7eb92ca6c370ff7d57d9f6..c6b99890a55f3e72b2b17e21e0d8810775538cca 100644 (file)
@@ -1,5 +1,5 @@
-// Generated 201811271344
-// A Bison parser, made by GNU Bison 3.2.1.
+// Generated 201812272009
+// A Bison parser, made by GNU Bison 3.2.4.
 
 // Starting with Bison 3.2, this file is useless: the structure it
 // used to define is now defined with the parser itself.