-// A Bison parser, made by GNU Bison 3.5.4.
+// A Bison parser, made by GNU Bison 3.6.2.
// Skeleton implementation for Bison LALR(1) parsers in C++
// This special exception was added by the Free Software Foundation in
// version 2.2 of Bison.
-// Undocumented macros, especially those whose name start with YY_,
-// are private implementation details. Do not rely on them.
+// DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual,
+// especially those whose name start with YY_ or yy_. They are
+// private implementation details that can be changed or removed.
// Take the name prefix into account.
#include <agent/parser_context.h>
-#line 51 "agent_parser.cc"
+#line 52 "agent_parser.cc"
#ifndef YY_
# endif
#endif
+
// Whether we are compiled with exception support.
#ifndef YY_EXCEPTIONS
# if defined __GNUC__ && !defined __EXCEPTIONS
# define YY_STACK_PRINT() \
do { \
if (yydebug_) \
- yystack_print_ (); \
+ yy_stack_print_ (); \
} while (false)
#else // !AGENT_DEBUG
#line 14 "agent_parser.yy"
namespace isc { namespace agent {
-#line 143 "agent_parser.cc"
-
-
- /* Return YYSTR after stripping away unnecessary quotes and
- backslashes, so that it's suitable for yyerror. The heuristic is
- that double-quoting is unnecessary unless the string contains an
- apostrophe, a comma, or backslash (other than backslash-backslash).
- YYSTR is taken from yytname. */
- std::string
- AgentParser::yytnamerr_ (const char *yystr)
- {
- if (*yystr == '"')
- {
- std::string yyr;
- char const *yyp = yystr;
-
- for (;;)
- switch (*++yyp)
- {
- case '\'':
- case ',':
- goto do_not_strip_quotes;
-
- case '\\':
- if (*++yyp != '\\')
- goto do_not_strip_quotes;
- else
- goto append;
-
- append:
- default:
- yyr += *yyp;
- break;
-
- case '"':
- return yyr;
- }
- do_not_strip_quotes: ;
- }
-
- return yystr;
- }
-
+#line 145 "agent_parser.cc"
/// Build a parser object.
AgentParser::AgentParser (isc::agent::ParserContext& ctx_yyarg)
{}
/*---------------.
- | Symbol types. |
+ | symbol kinds. |
`---------------*/
: state (s)
{}
- AgentParser::symbol_number_type
- AgentParser::by_state::type_get () const YY_NOEXCEPT
+ AgentParser::symbol_kind_type
+ AgentParser::by_state::kind () const YY_NOEXCEPT
{
if (state == empty_state)
- return empty_symbol;
+ return symbol_kind::S_YYEMPTY;
else
- return yystos_[+state];
+ return YY_CAST (symbol_kind_type, yystos_[+state]);
}
AgentParser::stack_symbol_type::stack_symbol_type ()
AgentParser::stack_symbol_type::stack_symbol_type (YY_RVREF (stack_symbol_type) that)
: super_type (YY_MOVE (that.state), YY_MOVE (that.location))
{
- switch (that.type_get ())
+ switch (that.kind ())
{
case 54: // value
case 57: // map_value
AgentParser::stack_symbol_type::stack_symbol_type (state_type s, YY_MOVE_REF (symbol_type) that)
: super_type (s, YY_MOVE (that.location))
{
- switch (that.type_get ())
+ switch (that.kind ())
{
case 54: // value
case 57: // map_value
}
// that is emptied.
- that.type = empty_symbol;
+ that.kind_ = symbol_kind::S_YYEMPTY;
}
#if YY_CPLUSPLUS < 201103L
AgentParser::stack_symbol_type::operator= (const stack_symbol_type& that)
{
state = that.state;
- switch (that.type_get ())
+ switch (that.kind ())
{
case 54: // value
case 57: // map_value
AgentParser::stack_symbol_type::operator= (stack_symbol_type& that)
{
state = that.state;
- switch (that.type_get ())
+ switch (that.kind ())
{
case 54: // value
case 57: // map_value
#if AGENT_DEBUG
template <typename Base>
void
- AgentParser::yy_print_ (std::ostream& yyo,
- const basic_symbol<Base>& yysym) const
+ AgentParser::yy_print_ (std::ostream& yyo, const basic_symbol<Base>& yysym) const
{
std::ostream& yyoutput = yyo;
YYUSE (yyoutput);
- symbol_number_type yytype = yysym.type_get ();
-#if defined __GNUC__ && ! defined __clang__ && ! defined __ICC && __GNUC__ * 100 + __GNUC_MINOR__ <= 408
- // Avoid a (spurious) G++ 4.8 warning about "array subscript is
- // below array bounds".
if (yysym.empty ())
- std::abort ();
-#endif
- yyo << (yytype < yyntokens_ ? "token" : "nterm")
- << ' ' << yytname_[yytype] << " ("
- << yysym.location << ": ";
- switch (yytype)
+ yyo << "empty symbol";
+ else
+ {
+ symbol_kind_type yykind = yysym.kind ();
+ yyo << (yykind < YYNTOKENS ? "token" : "nterm")
+ << ' ' << yysym.name () << " ("
+ << yysym.location << ": ";
+ switch (yykind)
{
case 42: // "constant string"
#line 104 "agent_parser.yy"
{ yyoutput << yysym.value.template as < std::string > (); }
-#line 427 "agent_parser.cc"
+#line 384 "agent_parser.cc"
break;
case 43: // "integer"
#line 104 "agent_parser.yy"
{ yyoutput << yysym.value.template as < int64_t > (); }
-#line 433 "agent_parser.cc"
+#line 390 "agent_parser.cc"
break;
case 44: // "floating point"
#line 104 "agent_parser.yy"
{ yyoutput << yysym.value.template as < double > (); }
-#line 439 "agent_parser.cc"
+#line 396 "agent_parser.cc"
break;
case 45: // "boolean"
#line 104 "agent_parser.yy"
{ yyoutput << yysym.value.template as < bool > (); }
-#line 445 "agent_parser.cc"
+#line 402 "agent_parser.cc"
break;
case 54: // value
#line 104 "agent_parser.yy"
{ yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 451 "agent_parser.cc"
+#line 408 "agent_parser.cc"
break;
case 57: // map_value
#line 104 "agent_parser.yy"
{ yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 457 "agent_parser.cc"
+#line 414 "agent_parser.cc"
break;
case 108: // socket_type_value
#line 104 "agent_parser.yy"
{ yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 463 "agent_parser.cc"
+#line 420 "agent_parser.cc"
break;
default:
break;
}
- yyo << ')';
+ yyo << ')';
+ }
}
#endif
AgentParser::state_type
AgentParser::yy_lr_goto_state_ (state_type yystate, int yysym)
{
- int yyr = yypgoto_[yysym - yyntokens_] + yystate;
+ int yyr = yypgoto_[yysym - YYNTOKENS] + yystate;
if (0 <= yyr && yyr <= yylast_ && yycheck_[yyr] == yystate)
return yytable_[yyr];
else
- return yydefgoto_[yysym - yyntokens_];
+ return yydefgoto_[yysym - YYNTOKENS];
}
bool
`-----------------------------------------------*/
yynewstate:
YYCDEBUG << "Entering state " << int (yystack_[0].state) << '\n';
+ YY_STACK_PRINT ();
// Accept?
if (yystack_[0].state == yyfinal_)
// Read a lookahead token.
if (yyla.empty ())
{
- YYCDEBUG << "Reading a token: ";
+ YYCDEBUG << "Reading a token\n";
#if YY_EXCEPTIONS
try
#endif // YY_EXCEPTIONS
}
YY_SYMBOL_PRINT ("Next token is", yyla);
+ if (yyla.kind () == symbol_kind::S_YYerror)
+ {
+ // The scanner already issued an error message, process directly
+ // to error recovery. But do not keep the error token as
+ // lookahead, it is too special and may lead us to an endless
+ // loop in error recovery. */
+ yyla.kind_ = symbol_kind::S_YYUNDEF;
+ goto yyerrlab1;
+ }
+
/* If the proper action on seeing token YYLA.TYPE is to reduce or
to detect an error, take that action. */
- yyn += yyla.type_get ();
- if (yyn < 0 || yylast_ < yyn || yycheck_[yyn] != yyla.type_get ())
+ yyn += yyla.kind ();
+ if (yyn < 0 || yylast_ < yyn || yycheck_[yyn] != yyla.kind ())
{
goto yydefault;
}
case 2:
#line 115 "agent_parser.yy"
{ ctx.ctx_ = ctx.NO_KEYWORDS; }
-#line 726 "agent_parser.cc"
+#line 695 "agent_parser.cc"
break;
case 4:
#line 116 "agent_parser.yy"
{ ctx.ctx_ = ctx.CONFIG; }
-#line 732 "agent_parser.cc"
+#line 701 "agent_parser.cc"
break;
case 6:
#line 117 "agent_parser.yy"
{ ctx.ctx_ = ctx.AGENT; }
-#line 738 "agent_parser.cc"
+#line 707 "agent_parser.cc"
break;
case 8:
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(m);
}
-#line 748 "agent_parser.cc"
+#line 717 "agent_parser.cc"
break;
case 9:
{
// parsing completed
}
-#line 756 "agent_parser.cc"
+#line 725 "agent_parser.cc"
break;
case 10:
// Push back the JSON value on the stack
ctx.stack_.push_back(yystack_[0].value.as < ElementPtr > ());
}
-#line 765 "agent_parser.cc"
+#line 734 "agent_parser.cc"
break;
case 11:
#line 142 "agent_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); }
-#line 771 "agent_parser.cc"
+#line 740 "agent_parser.cc"
break;
case 12:
#line 143 "agent_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location))); }
-#line 777 "agent_parser.cc"
+#line 746 "agent_parser.cc"
break;
case 13:
#line 144 "agent_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); }
-#line 783 "agent_parser.cc"
+#line 752 "agent_parser.cc"
break;
case 14:
#line 145 "agent_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); }
-#line 789 "agent_parser.cc"
+#line 758 "agent_parser.cc"
break;
case 15:
#line 146 "agent_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new NullElement(ctx.loc2pos(yystack_[0].location))); }
-#line 795 "agent_parser.cc"
+#line 764 "agent_parser.cc"
break;
case 16:
#line 147 "agent_parser.yy"
{ yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
-#line 801 "agent_parser.cc"
+#line 770 "agent_parser.cc"
break;
case 17:
#line 148 "agent_parser.yy"
{ yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
-#line 807 "agent_parser.cc"
+#line 776 "agent_parser.cc"
break;
case 18:
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(m);
}
-#line 818 "agent_parser.cc"
+#line 787 "agent_parser.cc"
break;
case 19:
// (maybe some sanity checking), this would be the best place
// for it.
}
-#line 828 "agent_parser.cc"
+#line 797 "agent_parser.cc"
break;
case 20:
#line 163 "agent_parser.yy"
{ yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
-#line 834 "agent_parser.cc"
+#line 803 "agent_parser.cc"
break;
case 23:
// map containing a single entry
ctx.stack_.back()->set(yystack_[2].value.as < std::string > (), yystack_[0].value.as < ElementPtr > ());
}
-#line 843 "agent_parser.cc"
+#line 812 "agent_parser.cc"
break;
case 24:
// comma and string:value
ctx.stack_.back()->set(yystack_[2].value.as < std::string > (), yystack_[0].value.as < ElementPtr > ());
}
-#line 853 "agent_parser.cc"
+#line 822 "agent_parser.cc"
break;
case 25:
ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(l);
}
-#line 862 "agent_parser.cc"
+#line 831 "agent_parser.cc"
break;
case 26:
#line 191 "agent_parser.yy"
{
}
-#line 869 "agent_parser.cc"
+#line 838 "agent_parser.cc"
break;
case 29:
// List consisting of a single element.
ctx.stack_.back()->add(yystack_[0].value.as < ElementPtr > ());
}
-#line 878 "agent_parser.cc"
+#line 847 "agent_parser.cc"
break;
case 30:
// List ending with , and a value.
ctx.stack_.back()->add(yystack_[0].value.as < ElementPtr > ());
}
-#line 887 "agent_parser.cc"
+#line 856 "agent_parser.cc"
break;
case 31:
error(yystack_[1].location,
"got unexpected keyword \"" + keyword + "\" in " + where + " map.");
}
-#line 898 "agent_parser.cc"
+#line 867 "agent_parser.cc"
break;
case 32:
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(m);
}
-#line 909 "agent_parser.cc"
+#line 878 "agent_parser.cc"
break;
case 33:
// (maybe some sanity checking), this would be the best place
// for it.
}
-#line 919 "agent_parser.cc"
+#line 888 "agent_parser.cc"
break;
case 42:
ctx.stack_.push_back(m);
ctx.enter(ctx.AGENT);
}
-#line 935 "agent_parser.cc"
+#line 904 "agent_parser.cc"
break;
case 43:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 946 "agent_parser.cc"
+#line 915 "agent_parser.cc"
break;
case 54:
{
ctx.enter(ctx.NO_KEYWORDS);
}
-#line 954 "agent_parser.cc"
+#line 923 "agent_parser.cc"
break;
case 55:
ctx.stack_.back()->set("http-host", host);
ctx.leave();
}
-#line 964 "agent_parser.cc"
+#line 933 "agent_parser.cc"
break;
case 56:
ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("http-port", prf);
}
-#line 973 "agent_parser.cc"
+#line 942 "agent_parser.cc"
break;
case 57:
{
ctx.enter(ctx.NO_KEYWORDS);
}
-#line 981 "agent_parser.cc"
+#line 950 "agent_parser.cc"
break;
case 58:
parent->set("user-context", user_context);
ctx.leave();
}
-#line 1008 "agent_parser.cc"
+#line 977 "agent_parser.cc"
break;
case 59:
{
ctx.enter(ctx.NO_KEYWORDS);
}
-#line 1016 "agent_parser.cc"
+#line 985 "agent_parser.cc"
break;
case 60:
parent->set("user-context", user_context);
ctx.leave();
}
-#line 1045 "agent_parser.cc"
+#line 1014 "agent_parser.cc"
break;
case 61:
ctx.stack_.push_back(l);
ctx.enter(ctx.HOOKS_LIBRARIES);
}
-#line 1056 "agent_parser.cc"
+#line 1025 "agent_parser.cc"
break;
case 62:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 1065 "agent_parser.cc"
+#line 1034 "agent_parser.cc"
break;
case 67:
ctx.stack_.back()->add(m);
ctx.stack_.push_back(m);
}
-#line 1075 "agent_parser.cc"
+#line 1044 "agent_parser.cc"
break;
case 68:
{
ctx.stack_.pop_back();
}
-#line 1083 "agent_parser.cc"
+#line 1052 "agent_parser.cc"
break;
case 74:
{
ctx.enter(ctx.NO_KEYWORDS);
}
-#line 1091 "agent_parser.cc"
+#line 1060 "agent_parser.cc"
break;
case 75:
ctx.stack_.back()->set("library", lib);
ctx.leave();
}
-#line 1101 "agent_parser.cc"
+#line 1070 "agent_parser.cc"
break;
case 76:
{
ctx.enter(ctx.NO_KEYWORDS);
}
-#line 1109 "agent_parser.cc"
+#line 1078 "agent_parser.cc"
break;
case 77:
ctx.stack_.back()->set("parameters", yystack_[0].value.as < ElementPtr > ());
ctx.leave();
}
-#line 1118 "agent_parser.cc"
+#line 1087 "agent_parser.cc"
break;
case 78:
ctx.stack_.push_back(m);
ctx.enter(ctx.CONTROL_SOCKETS);
}
-#line 1129 "agent_parser.cc"
+#line 1098 "agent_parser.cc"
break;
case 79:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 1138 "agent_parser.cc"
+#line 1107 "agent_parser.cc"
break;
case 86:
ctx.stack_.push_back(m);
ctx.enter(ctx.SERVER);
}
-#line 1149 "agent_parser.cc"
+#line 1118 "agent_parser.cc"
break;
case 87:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 1158 "agent_parser.cc"
+#line 1127 "agent_parser.cc"
break;
case 88:
ctx.stack_.push_back(m);
ctx.enter(ctx.SERVER);
}
-#line 1169 "agent_parser.cc"
+#line 1138 "agent_parser.cc"
break;
case 89:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 1178 "agent_parser.cc"
+#line 1147 "agent_parser.cc"
break;
case 90:
ctx.stack_.push_back(m);
ctx.enter(ctx.SERVER);
}
-#line 1189 "agent_parser.cc"
+#line 1158 "agent_parser.cc"
break;
case 91:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 1198 "agent_parser.cc"
+#line 1167 "agent_parser.cc"
break;
case 99:
{
ctx.enter(ctx.NO_KEYWORDS);
}
-#line 1206 "agent_parser.cc"
+#line 1175 "agent_parser.cc"
break;
case 100:
ctx.stack_.back()->set("socket-name", name);
ctx.leave();
}
-#line 1216 "agent_parser.cc"
+#line 1185 "agent_parser.cc"
break;
case 101:
{
ctx.enter(ctx.SOCKET_TYPE);
}
-#line 1224 "agent_parser.cc"
+#line 1193 "agent_parser.cc"
break;
case 102:
ctx.stack_.back()->set("socket-type", yystack_[0].value.as < ElementPtr > ());
ctx.leave();
}
-#line 1233 "agent_parser.cc"
+#line 1202 "agent_parser.cc"
break;
case 103:
#line 491 "agent_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("unix", ctx.loc2pos(yystack_[0].location))); }
-#line 1239 "agent_parser.cc"
+#line 1208 "agent_parser.cc"
break;
case 104:
{
ctx.enter(ctx.NO_KEYWORDS);
}
-#line 1247 "agent_parser.cc"
+#line 1216 "agent_parser.cc"
break;
case 105:
ctx.stack_.back()->set("Dhcp4", yystack_[0].value.as < ElementPtr > ());
ctx.leave();
}
-#line 1256 "agent_parser.cc"
+#line 1225 "agent_parser.cc"
break;
case 106:
{
ctx.enter(ctx.NO_KEYWORDS);
}
-#line 1264 "agent_parser.cc"
+#line 1233 "agent_parser.cc"
break;
case 107:
ctx.stack_.back()->set("Dhcp6", yystack_[0].value.as < ElementPtr > ());
ctx.leave();
}
-#line 1273 "agent_parser.cc"
+#line 1242 "agent_parser.cc"
break;
case 108:
{
ctx.enter(ctx.NO_KEYWORDS);
}
-#line 1281 "agent_parser.cc"
+#line 1250 "agent_parser.cc"
break;
case 109:
ctx.stack_.back()->set("DhcpDdns", yystack_[0].value.as < ElementPtr > ());
ctx.leave();
}
-#line 1290 "agent_parser.cc"
+#line 1259 "agent_parser.cc"
break;
case 110:
ctx.stack_.push_back(m);
ctx.enter(ctx.LOGGING);
}
-#line 1301 "agent_parser.cc"
+#line 1270 "agent_parser.cc"
break;
case 111:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 1310 "agent_parser.cc"
+#line 1279 "agent_parser.cc"
break;
case 115:
ctx.stack_.push_back(l);
ctx.enter(ctx.LOGGERS);
}
-#line 1321 "agent_parser.cc"
+#line 1290 "agent_parser.cc"
break;
case 116:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 1330 "agent_parser.cc"
+#line 1299 "agent_parser.cc"
break;
case 119:
ctx.stack_.back()->add(l);
ctx.stack_.push_back(l);
}
-#line 1340 "agent_parser.cc"
+#line 1309 "agent_parser.cc"
break;
case 120:
{
ctx.stack_.pop_back();
}
-#line 1348 "agent_parser.cc"
+#line 1317 "agent_parser.cc"
break;
case 130:
{
ctx.enter(ctx.NO_KEYWORDS);
}
-#line 1356 "agent_parser.cc"
+#line 1325 "agent_parser.cc"
break;
case 131:
ctx.stack_.back()->set("name", name);
ctx.leave();
}
-#line 1366 "agent_parser.cc"
+#line 1335 "agent_parser.cc"
break;
case 132:
ElementPtr dl(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("debuglevel", dl);
}
-#line 1375 "agent_parser.cc"
+#line 1344 "agent_parser.cc"
break;
case 133:
{
ctx.enter(ctx.NO_KEYWORDS);
}
-#line 1383 "agent_parser.cc"
+#line 1352 "agent_parser.cc"
break;
case 134:
ctx.stack_.back()->set("severity", sev);
ctx.leave();
}
-#line 1393 "agent_parser.cc"
+#line 1362 "agent_parser.cc"
break;
case 135:
ctx.stack_.push_back(l);
ctx.enter(ctx.OUTPUT_OPTIONS);
}
-#line 1404 "agent_parser.cc"
+#line 1373 "agent_parser.cc"
break;
case 136:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 1413 "agent_parser.cc"
+#line 1382 "agent_parser.cc"
break;
case 139:
ctx.stack_.back()->add(m);
ctx.stack_.push_back(m);
}
-#line 1423 "agent_parser.cc"
+#line 1392 "agent_parser.cc"
break;
case 140:
{
ctx.stack_.pop_back();
}
-#line 1431 "agent_parser.cc"
+#line 1400 "agent_parser.cc"
break;
case 148:
{
ctx.enter(ctx.NO_KEYWORDS);
}
-#line 1439 "agent_parser.cc"
+#line 1408 "agent_parser.cc"
break;
case 149:
ctx.stack_.back()->set("output", sev);
ctx.leave();
}
-#line 1449 "agent_parser.cc"
+#line 1418 "agent_parser.cc"
break;
case 150:
ElementPtr flush(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("flush", flush);
}
-#line 1458 "agent_parser.cc"
+#line 1427 "agent_parser.cc"
break;
case 151:
ElementPtr maxsize(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("maxsize", maxsize);
}
-#line 1467 "agent_parser.cc"
+#line 1436 "agent_parser.cc"
break;
case 152:
ElementPtr maxver(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("maxver", maxver);
}
-#line 1476 "agent_parser.cc"
+#line 1445 "agent_parser.cc"
break;
case 153:
{
ctx.enter(ctx.NO_KEYWORDS);
}
-#line 1484 "agent_parser.cc"
+#line 1453 "agent_parser.cc"
break;
case 154:
ctx.stack_.back()->set("pattern", sev);
ctx.leave();
}
-#line 1494 "agent_parser.cc"
+#line 1463 "agent_parser.cc"
break;
-#line 1498 "agent_parser.cc"
+#line 1467 "agent_parser.cc"
default:
break;
YY_SYMBOL_PRINT ("-> $$ =", yylhs);
yypop_ (yylen);
yylen = 0;
- YY_STACK_PRINT ();
// Shift the result of the reduction.
yypush_ (YY_NULLPTR, YY_MOVE (yylhs));
if (!yyerrstatus_)
{
++yynerrs_;
- error (yyla.location, yysyntax_error_ (yystack_[0].state, yyla));
+ context yyctx (*this, yyla);
+ std::string msg = yysyntax_error_ (yyctx);
+ error (yyla.location, YY_MOVE (msg));
}
error, discard it. */
// Return failure if at end of input.
- if (yyla.type_get () == yyeof_)
+ if (yyla.kind () == symbol_kind::S_YYEOF)
YYABORT;
else if (!yyla.empty ())
{
this YYERROR. */
yypop_ (yylen);
yylen = 0;
+ YY_STACK_PRINT ();
goto yyerrlab1;
`-------------------------------------------------------------*/
yyerrlab1:
yyerrstatus_ = 3; // Each real token shifted decrements this.
- {
- stack_symbol_type error_token;
- for (;;)
- {
- yyn = yypact_[+yystack_[0].state];
- if (!yy_pact_value_is_default_ (yyn))
- {
- yyn += yy_error_token_;
- if (0 <= yyn && yyn <= yylast_ && yycheck_[yyn] == yy_error_token_)
- {
- yyn = yytable_[yyn];
- if (0 < yyn)
- break;
- }
- }
+ // Pop stack until we find a state that shifts the error token.
+ for (;;)
+ {
+ yyn = yypact_[+yystack_[0].state];
+ if (!yy_pact_value_is_default_ (yyn))
+ {
+ yyn += symbol_kind::S_YYerror;
+ if (0 <= yyn && yyn <= yylast_
+ && yycheck_[yyn] == symbol_kind::S_YYerror)
+ {
+ yyn = yytable_[yyn];
+ if (0 < yyn)
+ break;
+ }
+ }
- // Pop the current state because it cannot handle the error token.
- if (yystack_.size () == 1)
- YYABORT;
+ // Pop the current state because it cannot handle the error token.
+ if (yystack_.size () == 1)
+ YYABORT;
- yyerror_range[1].location = yystack_[0].location;
- yy_destroy_ ("Error: popping", yystack_[0]);
- yypop_ ();
- YY_STACK_PRINT ();
- }
+ yyerror_range[1].location = yystack_[0].location;
+ yy_destroy_ ("Error: popping", yystack_[0]);
+ yypop_ ();
+ YY_STACK_PRINT ();
+ }
+ {
+ stack_symbol_type error_token;
yyerror_range[2].location = yyla.location;
YYLLOC_DEFAULT (error_token.location, yyerror_range, 2);
/* Do not reclaim the symbols of the rule whose action triggered
this YYABORT or YYACCEPT. */
yypop_ (yylen);
+ YY_STACK_PRINT ();
while (1 < yystack_.size ())
{
yy_destroy_ ("Cleanup: popping", yystack_[0]);
error (yyexc.location, yyexc.what ());
}
- // Generate an error message.
+ /* Return YYSTR after stripping away unnecessary quotes and
+ backslashes, so that it's suitable for yyerror. The heuristic is
+ that double-quoting is unnecessary unless the string contains an
+ apostrophe, a comma, or backslash (other than backslash-backslash).
+ YYSTR is taken from yytname. */
std::string
- AgentParser::yysyntax_error_ (state_type yystate, const symbol_type& yyla) const
+ AgentParser::yytnamerr_ (const char *yystr)
{
- // Number of reported tokens (one for the "unexpected", one per
- // "expected").
- std::ptrdiff_t yycount = 0;
- // Its maximum.
- enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
- // Arguments of yyformat.
- char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
+ if (*yystr == '"')
+ {
+ std::string yyr;
+ char const *yyp = yystr;
+
+ for (;;)
+ switch (*++yyp)
+ {
+ case '\'':
+ case ',':
+ goto do_not_strip_quotes;
+
+ case '\\':
+ if (*++yyp != '\\')
+ goto do_not_strip_quotes;
+ else
+ goto append;
+
+ append:
+ default:
+ yyr += *yyp;
+ break;
+
+ case '"':
+ return yyr;
+ }
+ do_not_strip_quotes: ;
+ }
+
+ return yystr;
+ }
+ std::string
+ AgentParser::symbol_name (symbol_kind_type yysymbol)
+ {
+ return yytnamerr_ (yytname_[yysymbol]);
+ }
+
+
+
+ // AgentParser::context.
+ AgentParser::context::context (const AgentParser& yyparser, const symbol_type& yyla)
+ : yyparser_ (yyparser)
+ , yyla_ (yyla)
+ {}
+
+ int
+ AgentParser::context::expected_tokens (symbol_kind_type yyarg[], int yyargn) const
+ {
+ // Actual number of expected tokens
+ int yycount = 0;
+
+ int yyn = yypact_[+yyparser_.yystack_[0].state];
+ if (!yy_pact_value_is_default_ (yyn))
+ {
+ /* Start YYX at -YYN if negative to avoid negative indexes in
+ YYCHECK. In other words, skip the first -YYN actions for
+ this state because they are default actions. */
+ int yyxbegin = yyn < 0 ? -yyn : 0;
+ // Stay within bounds of both yycheck and yytname.
+ int yychecklim = yylast_ - yyn + 1;
+ int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
+ for (int yyx = yyxbegin; yyx < yyxend; ++yyx)
+ if (yycheck_[yyx + yyn] == yyx && yyx != symbol_kind::S_YYerror
+ && !yy_table_value_is_error_ (yytable_[yyx + yyn]))
+ {
+ if (!yyarg)
+ ++yycount;
+ else if (yycount == yyargn)
+ return 0;
+ else
+ yyarg[yycount++] = YY_CAST (symbol_kind_type, yyx);
+ }
+ }
+
+ if (yyarg && yycount == 0 && 0 < yyargn)
+ yyarg[0] = symbol_kind::S_YYEMPTY;
+ return yycount;
+ }
+
+
+
+ int
+ AgentParser::yy_syntax_error_arguments_ (const context& yyctx,
+ symbol_kind_type yyarg[], int yyargn) const
+ {
/* There are many possibilities here to consider:
- If this state is a consistent state with a default action, then
the only way this function was invoked is if the default action
one exception: it will still contain any token that will not be
accepted due to an error action in a later state.
*/
- if (!yyla.empty ())
- {
- symbol_number_type yytoken = yyla.type_get ();
- yyarg[yycount++] = yytname_[yytoken];
- int yyn = yypact_[+yystate];
- if (!yy_pact_value_is_default_ (yyn))
- {
- /* Start YYX at -YYN if negative to avoid negative indexes in
- YYCHECK. In other words, skip the first -YYN actions for
- this state because they are default actions. */
- int yyxbegin = yyn < 0 ? -yyn : 0;
- // Stay within bounds of both yycheck and yytname.
- int yychecklim = yylast_ - yyn + 1;
- int yyxend = yychecklim < yyntokens_ ? yychecklim : yyntokens_;
- for (int yyx = yyxbegin; yyx < yyxend; ++yyx)
- if (yycheck_[yyx + yyn] == yyx && yyx != yy_error_token_
- && !yy_table_value_is_error_ (yytable_[yyx + yyn]))
- {
- if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
- {
- yycount = 1;
- break;
- }
- else
- yyarg[yycount++] = yytname_[yyx];
- }
- }
+ if (!yyctx.lookahead ().empty ())
+ {
+ if (yyarg)
+ yyarg[0] = yyctx.token ();
+ int yyn = yyctx.expected_tokens (yyarg ? yyarg + 1 : yyarg, yyargn - 1);
+ return yyn + 1;
}
+ return 0;
+ }
+
+ // Generate an error message.
+ std::string
+ AgentParser::yysyntax_error_ (const context& yyctx) const
+ {
+ // Its maximum.
+ enum { YYARGS_MAX = 5 };
+ // Arguments of yyformat.
+ symbol_kind_type yyarg[YYARGS_MAX];
+ int yycount = yy_syntax_error_arguments_ (yyctx, yyarg, YYARGS_MAX);
char const* yyformat = YY_NULLPTR;
switch (yycount)
for (char const* yyp = yyformat; *yyp; ++yyp)
if (yyp[0] == '%' && yyp[1] == 's' && yyi < yycount)
{
- yyres += yytnamerr_ (yyarg[yyi++]);
+ yyres += symbol_name (yyarg[yyi++]);
++yyp;
}
else
};
-
+#if AGENT_DEBUG || 1
// YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
- // First, the terminals, then, starting at \a yyntokens_, nonterminals.
+ // First, the terminals, then, starting at \a YYNTOKENS, nonterminals.
const char*
const AgentParser::yytname_[] =
{
- "\"end of file\"", "error", "$undefined", "\",\"", "\":\"", "\"[\"",
- "\"]\"", "\"{\"", "\"}\"", "\"null\"", "\"Control-agent\"",
+ "\"end of file\"", "error", "\"invalid token\"", "\",\"", "\":\"",
+ "\"[\"", "\"]\"", "\"{\"", "\"}\"", "\"null\"", "\"Control-agent\"",
"\"http-host\"", "\"http-port\"", "\"user-context\"", "\"comment\"",
"\"control-sockets\"", "\"dhcp4\"", "\"dhcp6\"", "\"d2\"",
"\"socket-name\"", "\"socket-type\"", "\"unix\"", "\"hooks-libraries\"",
"output_entry", "$@31", "output_params_list", "output_params", "output",
"$@32", "flush", "maxsize", "maxver", "pattern", "$@33", YY_NULLPTR
};
+#endif
+
#if AGENT_DEBUG
const short
645, 650, 655, 660, 660
};
- // Print the state stack on the debug stream.
void
- AgentParser::yystack_print_ ()
+ AgentParser::yy_stack_print_ () const
{
*yycdebug_ << "Stack now";
for (stack_type::const_iterator
*yycdebug_ << '\n';
}
- // Report on the debug stream that the rule \a yyrule is going to be reduced.
void
- AgentParser::yy_reduce_print_ (int yyrule)
+ AgentParser::yy_reduce_print_ (int yyrule) const
{
int yylno = yyrline_[yyrule];
int yynrhs = yyr2_[yyrule];
#line 14 "agent_parser.yy"
} } // isc::agent
-#line 2087 "agent_parser.cc"
+#line 2134 "agent_parser.cc"
#line 668 "agent_parser.yy"
-// A Bison parser, made by GNU Bison 3.5.4.
+// A Bison parser, made by GNU Bison 3.6.2.
// Skeleton interface for Bison LALR(1) parsers in C++
// C++ LALR(1) parser skeleton written by Akim Demaille.
-// Undocumented macros, especially those whose name start with YY_,
-// are private implementation details. Do not rely on them.
+// DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual,
+// especially those whose name start with YY_ or yy_. They are
+// private implementation details that can be changed or removed.
#ifndef YY_AGENT_AGENT_PARSER_H_INCLUDED
# define YY_AGENT_AGENT_PARSER_H_INCLUDED
using namespace isc::data;
using namespace std;
-#line 59 "agent_parser.h"
+#line 60 "agent_parser.h"
# include <cassert>
# include <cstdlib> // std::abort
#line 14 "agent_parser.yy"
namespace isc { namespace agent {
-#line 202 "agent_parser.h"
+#line 203 "agent_parser.h"
new (yyas_<T> ()) T (YY_MOVE (t));
}
+#if 201103L <= YY_CPLUSPLUS
+ /// Non copyable.
+ semantic_type (const self_type&) = delete;
+ /// Non copyable.
+ self_type& operator= (const self_type&) = delete;
+#endif
+
/// Destruction, allowed only if empty.
~semantic_type () YY_NOEXCEPT
{
}
private:
- /// Prohibit blind copies.
- self_type& operator= (const self_type&);
+#if YY_CPLUSPLUS < 201103L
+ /// Non copyable.
semantic_type (const self_type&);
+ /// Non copyable.
+ self_type& operator= (const self_type&);
+#endif
/// Accessor to raw memory as \a T.
template <typename T>
location_type location;
};
- /// Tokens.
+ /// Token kinds.
struct token
{
- enum yytokentype
- {
- TOKEN_END = 0,
- TOKEN_COMMA = 258,
- TOKEN_COLON = 259,
- TOKEN_LSQUARE_BRACKET = 260,
- TOKEN_RSQUARE_BRACKET = 261,
- TOKEN_LCURLY_BRACKET = 262,
- TOKEN_RCURLY_BRACKET = 263,
- TOKEN_NULL_TYPE = 264,
- TOKEN_CONTROL_AGENT = 265,
- TOKEN_HTTP_HOST = 266,
- TOKEN_HTTP_PORT = 267,
- TOKEN_USER_CONTEXT = 268,
- TOKEN_COMMENT = 269,
- TOKEN_CONTROL_SOCKETS = 270,
- TOKEN_DHCP4_SERVER = 271,
- TOKEN_DHCP6_SERVER = 272,
- TOKEN_D2_SERVER = 273,
- TOKEN_SOCKET_NAME = 274,
- TOKEN_SOCKET_TYPE = 275,
- TOKEN_UNIX = 276,
- TOKEN_HOOKS_LIBRARIES = 277,
- TOKEN_LIBRARY = 278,
- TOKEN_PARAMETERS = 279,
- TOKEN_LOGGING = 280,
- TOKEN_LOGGERS = 281,
- TOKEN_NAME = 282,
- TOKEN_OUTPUT_OPTIONS = 283,
- TOKEN_OUTPUT = 284,
- TOKEN_DEBUGLEVEL = 285,
- TOKEN_SEVERITY = 286,
- TOKEN_FLUSH = 287,
- TOKEN_MAXSIZE = 288,
- TOKEN_MAXVER = 289,
- TOKEN_PATTERN = 290,
- TOKEN_DHCP4 = 291,
- TOKEN_DHCP6 = 292,
- TOKEN_DHCPDDNS = 293,
- TOKEN_START_JSON = 294,
- TOKEN_START_AGENT = 295,
- TOKEN_START_SUB_AGENT = 296,
- TOKEN_STRING = 297,
- TOKEN_INTEGER = 298,
- TOKEN_FLOAT = 299,
- TOKEN_BOOLEAN = 300
+ enum token_kind_type
+ {
+ TOKEN_AGENT_EMPTY = -2,
+ TOKEN_END = 0, // "end of file"
+ TOKEN_AGENT_error = 256, // error
+ TOKEN_AGENT_UNDEF = 257, // "invalid token"
+ TOKEN_COMMA = 258, // ","
+ TOKEN_COLON = 259, // ":"
+ TOKEN_LSQUARE_BRACKET = 260, // "["
+ TOKEN_RSQUARE_BRACKET = 261, // "]"
+ TOKEN_LCURLY_BRACKET = 262, // "{"
+ TOKEN_RCURLY_BRACKET = 263, // "}"
+ TOKEN_NULL_TYPE = 264, // "null"
+ TOKEN_CONTROL_AGENT = 265, // "Control-agent"
+ TOKEN_HTTP_HOST = 266, // "http-host"
+ TOKEN_HTTP_PORT = 267, // "http-port"
+ TOKEN_USER_CONTEXT = 268, // "user-context"
+ TOKEN_COMMENT = 269, // "comment"
+ TOKEN_CONTROL_SOCKETS = 270, // "control-sockets"
+ TOKEN_DHCP4_SERVER = 271, // "dhcp4"
+ TOKEN_DHCP6_SERVER = 272, // "dhcp6"
+ TOKEN_D2_SERVER = 273, // "d2"
+ TOKEN_SOCKET_NAME = 274, // "socket-name"
+ TOKEN_SOCKET_TYPE = 275, // "socket-type"
+ TOKEN_UNIX = 276, // "unix"
+ TOKEN_HOOKS_LIBRARIES = 277, // "hooks-libraries"
+ TOKEN_LIBRARY = 278, // "library"
+ TOKEN_PARAMETERS = 279, // "parameters"
+ TOKEN_LOGGING = 280, // "Logging"
+ TOKEN_LOGGERS = 281, // "loggers"
+ TOKEN_NAME = 282, // "name"
+ TOKEN_OUTPUT_OPTIONS = 283, // "output_options"
+ TOKEN_OUTPUT = 284, // "output"
+ TOKEN_DEBUGLEVEL = 285, // "debuglevel"
+ TOKEN_SEVERITY = 286, // "severity"
+ TOKEN_FLUSH = 287, // "flush"
+ TOKEN_MAXSIZE = 288, // "maxsize"
+ TOKEN_MAXVER = 289, // "maxver"
+ TOKEN_PATTERN = 290, // "pattern"
+ TOKEN_DHCP4 = 291, // "Dhcp4"
+ TOKEN_DHCP6 = 292, // "Dhcp6"
+ TOKEN_DHCPDDNS = 293, // "DhcpDdns"
+ TOKEN_START_JSON = 294, // START_JSON
+ TOKEN_START_AGENT = 295, // START_AGENT
+ TOKEN_START_SUB_AGENT = 296, // START_SUB_AGENT
+ TOKEN_STRING = 297, // "constant string"
+ TOKEN_INTEGER = 298, // "integer"
+ TOKEN_FLOAT = 299, // "floating point"
+ TOKEN_BOOLEAN = 300 // "boolean"
};
+ /// Backward compatibility alias (Bison 3.6).
+ typedef token_kind_type yytokentype;
};
- /// (External) token type, as returned by yylex.
- typedef token::yytokentype token_type;
+ /// Token kind, as returned by yylex.
+ typedef token::yytokentype token_kind_type;
- /// Symbol type: an internal symbol number.
- typedef int symbol_number_type;
+ /// Backward compatibility alias (Bison 3.6).
+ typedef token_kind_type token_type;
- /// The symbol type number to denote an empty symbol.
- enum { empty_symbol = -2 };
+ /// Symbol kinds.
+ struct symbol_kind
+ {
+ enum symbol_kind_type
+ {
+ YYNTOKENS = 46, ///< Number of tokens.
+ S_YYEMPTY = -2,
+ S_YYEOF = 0, // "end of file"
+ S_YYerror = 1, // error
+ S_YYUNDEF = 2, // "invalid token"
+ S_COMMA = 3, // ","
+ S_COLON = 4, // ":"
+ S_LSQUARE_BRACKET = 5, // "["
+ S_RSQUARE_BRACKET = 6, // "]"
+ S_LCURLY_BRACKET = 7, // "{"
+ S_RCURLY_BRACKET = 8, // "}"
+ S_NULL_TYPE = 9, // "null"
+ S_CONTROL_AGENT = 10, // "Control-agent"
+ S_HTTP_HOST = 11, // "http-host"
+ S_HTTP_PORT = 12, // "http-port"
+ S_USER_CONTEXT = 13, // "user-context"
+ S_COMMENT = 14, // "comment"
+ S_CONTROL_SOCKETS = 15, // "control-sockets"
+ S_DHCP4_SERVER = 16, // "dhcp4"
+ S_DHCP6_SERVER = 17, // "dhcp6"
+ S_D2_SERVER = 18, // "d2"
+ S_SOCKET_NAME = 19, // "socket-name"
+ S_SOCKET_TYPE = 20, // "socket-type"
+ S_UNIX = 21, // "unix"
+ S_HOOKS_LIBRARIES = 22, // "hooks-libraries"
+ S_LIBRARY = 23, // "library"
+ S_PARAMETERS = 24, // "parameters"
+ S_LOGGING = 25, // "Logging"
+ S_LOGGERS = 26, // "loggers"
+ S_NAME = 27, // "name"
+ S_OUTPUT_OPTIONS = 28, // "output_options"
+ S_OUTPUT = 29, // "output"
+ S_DEBUGLEVEL = 30, // "debuglevel"
+ S_SEVERITY = 31, // "severity"
+ S_FLUSH = 32, // "flush"
+ S_MAXSIZE = 33, // "maxsize"
+ S_MAXVER = 34, // "maxver"
+ S_PATTERN = 35, // "pattern"
+ S_DHCP4 = 36, // "Dhcp4"
+ S_DHCP6 = 37, // "Dhcp6"
+ S_DHCPDDNS = 38, // "DhcpDdns"
+ S_START_JSON = 39, // START_JSON
+ S_START_AGENT = 40, // START_AGENT
+ S_START_SUB_AGENT = 41, // START_SUB_AGENT
+ S_STRING = 42, // "constant string"
+ S_INTEGER = 43, // "integer"
+ S_FLOAT = 44, // "floating point"
+ S_BOOLEAN = 45, // "boolean"
+ S_YYACCEPT = 46, // $accept
+ S_start = 47, // start
+ S_48_1 = 48, // $@1
+ S_49_2 = 49, // $@2
+ S_50_3 = 50, // $@3
+ S_sub_agent = 51, // sub_agent
+ S_52_4 = 52, // $@4
+ S_json = 53, // json
+ S_value = 54, // value
+ S_map = 55, // map
+ S_56_5 = 56, // $@5
+ S_map_value = 57, // map_value
+ S_map_content = 58, // map_content
+ S_not_empty_map = 59, // not_empty_map
+ S_list_generic = 60, // list_generic
+ S_61_6 = 61, // $@6
+ S_list_content = 62, // list_content
+ S_not_empty_list = 63, // not_empty_list
+ S_unknown_map_entry = 64, // unknown_map_entry
+ S_agent_syntax_map = 65, // agent_syntax_map
+ S_66_7 = 66, // $@7
+ S_global_objects = 67, // global_objects
+ S_global_object = 68, // global_object
+ S_agent_object = 69, // agent_object
+ S_70_8 = 70, // $@8
+ S_global_params = 71, // global_params
+ S_global_param = 72, // global_param
+ S_http_host = 73, // http_host
+ S_74_9 = 74, // $@9
+ S_http_port = 75, // http_port
+ S_user_context = 76, // user_context
+ S_77_10 = 77, // $@10
+ S_comment = 78, // comment
+ S_79_11 = 79, // $@11
+ S_hooks_libraries = 80, // hooks_libraries
+ S_81_12 = 81, // $@12
+ S_hooks_libraries_list = 82, // hooks_libraries_list
+ S_not_empty_hooks_libraries_list = 83, // not_empty_hooks_libraries_list
+ S_hooks_library = 84, // hooks_library
+ S_85_13 = 85, // $@13
+ S_hooks_params = 86, // hooks_params
+ S_hooks_param = 87, // hooks_param
+ S_library = 88, // library
+ S_89_14 = 89, // $@14
+ S_parameters = 90, // parameters
+ S_91_15 = 91, // $@15
+ S_control_sockets = 92, // control_sockets
+ S_93_16 = 93, // $@16
+ S_control_sockets_params = 94, // control_sockets_params
+ S_control_socket = 95, // control_socket
+ S_dhcp4_server_socket = 96, // dhcp4_server_socket
+ S_97_17 = 97, // $@17
+ S_dhcp6_server_socket = 98, // dhcp6_server_socket
+ S_99_18 = 99, // $@18
+ S_d2_server_socket = 100, // d2_server_socket
+ S_101_19 = 101, // $@19
+ S_control_socket_params = 102, // control_socket_params
+ S_control_socket_param = 103, // control_socket_param
+ S_socket_name = 104, // socket_name
+ S_105_20 = 105, // $@20
+ S_socket_type = 106, // socket_type
+ S_107_21 = 107, // $@21
+ S_socket_type_value = 108, // socket_type_value
+ S_dhcp4_json_object = 109, // dhcp4_json_object
+ S_110_22 = 110, // $@22
+ S_dhcp6_json_object = 111, // dhcp6_json_object
+ S_112_23 = 112, // $@23
+ S_dhcpddns_json_object = 113, // dhcpddns_json_object
+ S_114_24 = 114, // $@24
+ S_logging_object = 115, // logging_object
+ S_116_25 = 116, // $@25
+ S_logging_params = 117, // logging_params
+ S_logging_param = 118, // logging_param
+ S_loggers = 119, // loggers
+ S_120_26 = 120, // $@26
+ S_loggers_entries = 121, // loggers_entries
+ S_logger_entry = 122, // logger_entry
+ S_123_27 = 123, // $@27
+ S_logger_params = 124, // logger_params
+ S_logger_param = 125, // logger_param
+ S_name = 126, // name
+ S_127_28 = 127, // $@28
+ S_debuglevel = 128, // debuglevel
+ S_severity = 129, // severity
+ S_130_29 = 130, // $@29
+ S_output_options_list = 131, // output_options_list
+ S_132_30 = 132, // $@30
+ S_output_options_list_content = 133, // output_options_list_content
+ S_output_entry = 134, // output_entry
+ S_135_31 = 135, // $@31
+ S_output_params_list = 136, // output_params_list
+ S_output_params = 137, // output_params
+ S_output = 138, // output
+ S_139_32 = 139, // $@32
+ S_flush = 140, // flush
+ S_maxsize = 141, // maxsize
+ S_maxver = 142, // maxver
+ S_pattern = 143, // pattern
+ S_144_33 = 144 // $@33
+ };
+ };
- /// Internal symbol number for tokens (subsumed by symbol_number_type).
- typedef signed char token_number_type;
+ /// (Internal) symbol kind.
+ typedef symbol_kind::symbol_kind_type symbol_kind_type;
+
+ /// The number of tokens.
+ static const symbol_kind_type YYNTOKENS = symbol_kind::YYNTOKENS;
/// A complete symbol.
///
- /// Expects its Base type to provide access to the symbol type
- /// via type_get ().
+ /// Expects its Base type to provide access to the symbol kind
+ /// via kind ().
///
/// Provide access to semantic value and location.
template <typename Base>
#if 201103L <= YY_CPLUSPLUS
/// Move constructor.
- basic_symbol (basic_symbol&& that);
+ basic_symbol (basic_symbol&& that)
+ : Base (std::move (that))
+ , value ()
+ , location (std::move (that.location))
+ {
+ switch (this->kind ())
+ {
+ case 54: // value
+ case 57: // map_value
+ case 108: // socket_type_value
+ value.move< ElementPtr > (std::move (that.value));
+ break;
+
+ case 45: // "boolean"
+ value.move< bool > (std::move (that.value));
+ break;
+
+ case 44: // "floating point"
+ value.move< double > (std::move (that.value));
+ break;
+
+ case 43: // "integer"
+ value.move< int64_t > (std::move (that.value));
+ break;
+
+ case 42: // "constant string"
+ value.move< std::string > (std::move (that.value));
+ break;
+
+ default:
+ break;
+ }
+
+ }
#endif
/// Copy constructor.
void clear ()
{
// User destructor.
- symbol_number_type yytype = this->type_get ();
+ symbol_kind_type yykind = this->kind ();
basic_symbol<Base>& yysym = *this;
(void) yysym;
- switch (yytype)
+ switch (yykind)
{
default:
break;
}
- // Type destructor.
-switch (yytype)
+ // Value type destructor.
+switch (yykind)
{
case 54: // value
case 57: // map_value
Base::clear ();
}
+ /// The user-facing name of this symbol.
+ std::string name () const YY_NOEXCEPT
+ {
+ return AgentParser::symbol_name (this->kind ());
+ }
+
+ /// Backward compatibility (Bison 3.6).
+ symbol_kind_type type_get () const YY_NOEXCEPT;
+
/// Whether empty.
bool empty () const YY_NOEXCEPT;
};
/// Type access provider for token (enum) based symbols.
- struct by_type
+ struct by_kind
{
/// Default constructor.
- by_type ();
+ by_kind ();
#if 201103L <= YY_CPLUSPLUS
/// Move constructor.
- by_type (by_type&& that);
+ by_kind (by_kind&& that);
#endif
/// Copy constructor.
- by_type (const by_type& that);
+ by_kind (const by_kind& that);
- /// The symbol type as needed by the constructor.
- typedef token_type kind_type;
+ /// The symbol kind as needed by the constructor.
+ typedef token_kind_type kind_type;
/// Constructor from (external) token numbers.
- by_type (kind_type t);
+ by_kind (kind_type t);
/// Record that this symbol is empty.
void clear ();
- /// Steal the symbol type from \a that.
- void move (by_type& that);
+ /// Steal the symbol kind from \a that.
+ void move (by_kind& that);
/// The (internal) type number (corresponding to \a type).
/// \a empty when empty.
- symbol_number_type type_get () const YY_NOEXCEPT;
+ symbol_kind_type kind () const YY_NOEXCEPT;
+
+ /// Backward compatibility (Bison 3.6).
+ symbol_kind_type type_get () const YY_NOEXCEPT;
- /// The symbol type.
- /// \a empty_symbol when empty.
- /// An int, not token_number_type, to be able to store empty_symbol.
- int type;
+ /// The symbol kind.
+ /// \a S_YYEMPTY when empty.
+ symbol_kind_type kind_;
};
+ /// Backward compatibility for a private implementation detail (Bison 3.6).
+ typedef by_kind by_type;
+
/// "External" symbols: returned by the scanner.
- struct symbol_type : basic_symbol<by_type>
+ struct symbol_type : basic_symbol<by_kind>
{
/// Superclass.
- typedef basic_symbol<by_type> super_type;
+ typedef basic_symbol<by_kind> super_type;
/// Empty symbol.
symbol_type () {}
symbol_type (int tok, location_type l)
: super_type(token_type (tok), std::move (l))
{
- YY_ASSERT (tok == token::TOKEN_END || tok == token::TOKEN_COMMA || tok == token::TOKEN_COLON || tok == token::TOKEN_LSQUARE_BRACKET || tok == token::TOKEN_RSQUARE_BRACKET || tok == token::TOKEN_LCURLY_BRACKET || tok == token::TOKEN_RCURLY_BRACKET || tok == token::TOKEN_NULL_TYPE || tok == token::TOKEN_CONTROL_AGENT || tok == token::TOKEN_HTTP_HOST || tok == token::TOKEN_HTTP_PORT || tok == token::TOKEN_USER_CONTEXT || tok == token::TOKEN_COMMENT || tok == token::TOKEN_CONTROL_SOCKETS || tok == token::TOKEN_DHCP4_SERVER || tok == token::TOKEN_DHCP6_SERVER || tok == token::TOKEN_D2_SERVER || tok == token::TOKEN_SOCKET_NAME || tok == token::TOKEN_SOCKET_TYPE || tok == token::TOKEN_UNIX || tok == token::TOKEN_HOOKS_LIBRARIES || tok == token::TOKEN_LIBRARY || tok == token::TOKEN_PARAMETERS || tok == token::TOKEN_LOGGING || tok == token::TOKEN_LOGGERS || tok == token::TOKEN_NAME || tok == token::TOKEN_OUTPUT_OPTIONS || tok == token::TOKEN_OUTPUT || tok == token::TOKEN_DEBUGLEVEL || tok == token::TOKEN_SEVERITY || tok == token::TOKEN_FLUSH || tok == token::TOKEN_MAXSIZE || tok == token::TOKEN_MAXVER || tok == token::TOKEN_PATTERN || tok == token::TOKEN_DHCP4 || tok == token::TOKEN_DHCP6 || tok == token::TOKEN_DHCPDDNS || tok == token::TOKEN_START_JSON || tok == token::TOKEN_START_AGENT || tok == token::TOKEN_START_SUB_AGENT);
+ YY_ASSERT (tok == token::TOKEN_END || tok == token::TOKEN_AGENT_error || tok == token::TOKEN_AGENT_UNDEF || tok == token::TOKEN_COMMA || tok == token::TOKEN_COLON || tok == token::TOKEN_LSQUARE_BRACKET || tok == token::TOKEN_RSQUARE_BRACKET || tok == token::TOKEN_LCURLY_BRACKET || tok == token::TOKEN_RCURLY_BRACKET || tok == token::TOKEN_NULL_TYPE || tok == token::TOKEN_CONTROL_AGENT || tok == token::TOKEN_HTTP_HOST || tok == token::TOKEN_HTTP_PORT || tok == token::TOKEN_USER_CONTEXT || tok == token::TOKEN_COMMENT || tok == token::TOKEN_CONTROL_SOCKETS || tok == token::TOKEN_DHCP4_SERVER || tok == token::TOKEN_DHCP6_SERVER || tok == token::TOKEN_D2_SERVER || tok == token::TOKEN_SOCKET_NAME || tok == token::TOKEN_SOCKET_TYPE || tok == token::TOKEN_UNIX || tok == token::TOKEN_HOOKS_LIBRARIES || tok == token::TOKEN_LIBRARY || tok == token::TOKEN_PARAMETERS || tok == token::TOKEN_LOGGING || tok == token::TOKEN_LOGGERS || tok == token::TOKEN_NAME || tok == token::TOKEN_OUTPUT_OPTIONS || tok == token::TOKEN_OUTPUT || tok == token::TOKEN_DEBUGLEVEL || tok == token::TOKEN_SEVERITY || tok == token::TOKEN_FLUSH || tok == token::TOKEN_MAXSIZE || tok == token::TOKEN_MAXVER || tok == token::TOKEN_PATTERN || tok == token::TOKEN_DHCP4 || tok == token::TOKEN_DHCP6 || tok == token::TOKEN_DHCPDDNS || tok == token::TOKEN_START_JSON || tok == token::TOKEN_START_AGENT || tok == token::TOKEN_START_SUB_AGENT);
}
#else
symbol_type (int tok, const location_type& l)
: super_type(token_type (tok), l)
{
- YY_ASSERT (tok == token::TOKEN_END || tok == token::TOKEN_COMMA || tok == token::TOKEN_COLON || tok == token::TOKEN_LSQUARE_BRACKET || tok == token::TOKEN_RSQUARE_BRACKET || tok == token::TOKEN_LCURLY_BRACKET || tok == token::TOKEN_RCURLY_BRACKET || tok == token::TOKEN_NULL_TYPE || tok == token::TOKEN_CONTROL_AGENT || tok == token::TOKEN_HTTP_HOST || tok == token::TOKEN_HTTP_PORT || tok == token::TOKEN_USER_CONTEXT || tok == token::TOKEN_COMMENT || tok == token::TOKEN_CONTROL_SOCKETS || tok == token::TOKEN_DHCP4_SERVER || tok == token::TOKEN_DHCP6_SERVER || tok == token::TOKEN_D2_SERVER || tok == token::TOKEN_SOCKET_NAME || tok == token::TOKEN_SOCKET_TYPE || tok == token::TOKEN_UNIX || tok == token::TOKEN_HOOKS_LIBRARIES || tok == token::TOKEN_LIBRARY || tok == token::TOKEN_PARAMETERS || tok == token::TOKEN_LOGGING || tok == token::TOKEN_LOGGERS || tok == token::TOKEN_NAME || tok == token::TOKEN_OUTPUT_OPTIONS || tok == token::TOKEN_OUTPUT || tok == token::TOKEN_DEBUGLEVEL || tok == token::TOKEN_SEVERITY || tok == token::TOKEN_FLUSH || tok == token::TOKEN_MAXSIZE || tok == token::TOKEN_MAXVER || tok == token::TOKEN_PATTERN || tok == token::TOKEN_DHCP4 || tok == token::TOKEN_DHCP6 || tok == token::TOKEN_DHCPDDNS || tok == token::TOKEN_START_JSON || tok == token::TOKEN_START_AGENT || tok == token::TOKEN_START_SUB_AGENT);
+ YY_ASSERT (tok == token::TOKEN_END || tok == token::TOKEN_AGENT_error || tok == token::TOKEN_AGENT_UNDEF || tok == token::TOKEN_COMMA || tok == token::TOKEN_COLON || tok == token::TOKEN_LSQUARE_BRACKET || tok == token::TOKEN_RSQUARE_BRACKET || tok == token::TOKEN_LCURLY_BRACKET || tok == token::TOKEN_RCURLY_BRACKET || tok == token::TOKEN_NULL_TYPE || tok == token::TOKEN_CONTROL_AGENT || tok == token::TOKEN_HTTP_HOST || tok == token::TOKEN_HTTP_PORT || tok == token::TOKEN_USER_CONTEXT || tok == token::TOKEN_COMMENT || tok == token::TOKEN_CONTROL_SOCKETS || tok == token::TOKEN_DHCP4_SERVER || tok == token::TOKEN_DHCP6_SERVER || tok == token::TOKEN_D2_SERVER || tok == token::TOKEN_SOCKET_NAME || tok == token::TOKEN_SOCKET_TYPE || tok == token::TOKEN_UNIX || tok == token::TOKEN_HOOKS_LIBRARIES || tok == token::TOKEN_LIBRARY || tok == token::TOKEN_PARAMETERS || tok == token::TOKEN_LOGGING || tok == token::TOKEN_LOGGERS || tok == token::TOKEN_NAME || tok == token::TOKEN_OUTPUT_OPTIONS || tok == token::TOKEN_OUTPUT || tok == token::TOKEN_DEBUGLEVEL || tok == token::TOKEN_SEVERITY || tok == token::TOKEN_FLUSH || tok == token::TOKEN_MAXSIZE || tok == token::TOKEN_MAXVER || tok == token::TOKEN_PATTERN || tok == token::TOKEN_DHCP4 || tok == token::TOKEN_DHCP6 || tok == token::TOKEN_DHCPDDNS || tok == token::TOKEN_START_JSON || tok == token::TOKEN_START_AGENT || tok == token::TOKEN_START_SUB_AGENT);
}
#endif
#if 201103L <= YY_CPLUSPLUS
AgentParser (isc::agent::ParserContext& ctx_yyarg);
virtual ~AgentParser ();
+#if 201103L <= YY_CPLUSPLUS
+ /// Non copyable.
+ AgentParser (const AgentParser&) = delete;
+ /// Non copyable.
+ AgentParser& operator= (const AgentParser&) = delete;
+#endif
+
/// Parse. An alias for parse ().
/// \returns 0 iff parsing succeeded.
int operator() ();
/// Report a syntax error.
void error (const syntax_error& err);
+ /// The user-facing name of the symbol whose (internal) number is
+ /// YYSYMBOL. No bounds checking.
+ static std::string symbol_name (symbol_kind_type yysymbol);
+
// Implementation of make_symbol for each symbol type.
#if 201103L <= YY_CPLUSPLUS
static
return symbol_type (token::TOKEN_END, l);
}
#endif
+#if 201103L <= YY_CPLUSPLUS
+ static
+ symbol_type
+ make_AGENT_error (location_type l)
+ {
+ return symbol_type (token::TOKEN_AGENT_error, std::move (l));
+ }
+#else
+ static
+ symbol_type
+ make_AGENT_error (const location_type& l)
+ {
+ return symbol_type (token::TOKEN_AGENT_error, l);
+ }
+#endif
+#if 201103L <= YY_CPLUSPLUS
+ static
+ symbol_type
+ make_AGENT_UNDEF (location_type l)
+ {
+ return symbol_type (token::TOKEN_AGENT_UNDEF, std::move (l));
+ }
+#else
+ static
+ symbol_type
+ make_AGENT_UNDEF (const location_type& l)
+ {
+ return symbol_type (token::TOKEN_AGENT_UNDEF, l);
+ }
+#endif
#if 201103L <= YY_CPLUSPLUS
static
symbol_type
#endif
+ class context
+ {
+ public:
+ context (const AgentParser& yyparser, const symbol_type& yyla);
+ const symbol_type& lookahead () const { return yyla_; }
+ symbol_kind_type token () const { return yyla_.kind (); }
+ const location_type& location () const { return yyla_.location; }
+
+ /// Put in YYARG at most YYARGN of the expected tokens, and return the
+ /// number of tokens stored in YYARG. If YYARG is null, return the
+ /// number of expected tokens (guaranteed to be less than YYNTOKENS).
+ int expected_tokens (symbol_kind_type yyarg[], int yyargn) const;
+
+ private:
+ const AgentParser& yyparser_;
+ const symbol_type& yyla_;
+ };
+
private:
- /// This class is not copyable.
+#if YY_CPLUSPLUS < 201103L
+ /// Non copyable.
AgentParser (const AgentParser&);
+ /// Non copyable.
AgentParser& operator= (const AgentParser&);
+#endif
+
/// Stored state numbers (used for stacks).
typedef short 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;
+ /// The arguments of the error message.
+ int yy_syntax_error_arguments_ (const context& yyctx,
+ symbol_kind_type yyarg[], int yyargn) const;
+ /// Generate an error message.
+ /// \param yyctx the context in which the error occurred.
+ virtual std::string yysyntax_error_ (const context& yyctx) const;
/// Compute post-reduction state.
/// \param yystate the current state
/// \param yysym the nonterminal to push on the stack
static const signed char yypact_ninf_;
static const signed char yytable_ninf_;
- /// Convert a scanner token number \a t to a symbol number.
- /// In theory \a t should be a token_type, but character literals
+ /// Convert a scanner token kind \a t to a symbol kind.
+ /// In theory \a t should be a token_kind_type, but character literals
/// are valid, yet not members of the token_type enum.
- static token_number_type yytranslate_ (int t);
+ static symbol_kind_type yytranslate_ (int t);
+
+ /// Convert the symbol name \a n to a form suitable for a diagnostic.
+ static std::string yytnamerr_ (const char *yystr);
+
+ /// For a symbol, its name in clear.
+ static const char* const yytname_[];
+
// Tables.
- // YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+ // YYPACTSTATE-NUM -- Index in YYTABLE of the portion describing
// STATE-NUM.
static const short yypact_[];
- // YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
+ // YYDEFACTSTATE-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].
+ // YYPGOTONTERM-NUM.
static const signed char yypgoto_[];
- // YYDEFGOTO[NTERM-NUM].
+ // YYDEFGOTONTERM-NUM.
static const short yydefgoto_[];
- // YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If
+ // YYTABLEYYPACT[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 short yytable_[];
static const short yycheck_[];
- // YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+ // YYSTOSSTATE-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.
+ // YYR1YYN -- 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.
+ // YYR2YYN -- Number of symbols on the right hand side of rule YYN.
static const signed 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 AGENT_DEBUG
- // YYRLINE[YYN] -- Source line where rule number YYN was defined.
+ // YYRLINEYYN -- Source line where rule number YYN was defined.
static const short yyrline_[];
/// Report on the debug stream that the rule \a r is going to be reduced.
- virtual void yy_reduce_print_ (int r);
+ virtual void yy_reduce_print_ (int r) const;
/// Print the state stack on the debug stream.
- virtual void yystack_print_ ();
+ virtual void yy_stack_print_ () const;
/// Debugging level.
int yydebug_;
/// Debug stream.
std::ostream* yycdebug_;
- /// \brief Display a symbol type, value and location.
+ /// \brief Display a symbol kind, value and location.
/// \param yyo The output stream.
/// \param yysym The symbol.
template <typename Base>
/// Default constructor.
by_state () YY_NOEXCEPT;
- /// The symbol type as needed by the constructor.
+ /// The symbol kind as needed by the constructor.
typedef state_type kind_type;
/// Constructor.
/// Record that this symbol is empty.
void clear () YY_NOEXCEPT;
- /// Steal the symbol type from \a that.
+ /// Steal the symbol kind 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 YY_NOEXCEPT;
+ /// The symbol kind (corresponding to \a state).
+ /// \a S_YYEMPTY when empty.
+ symbol_kind_type kind () const YY_NOEXCEPT;
/// The state number used to denote an empty symbol.
/// We use the initial state, as it does not have a value.
{
public:
// Hide our reversed order.
- typedef typename S::reverse_iterator iterator;
- typedef typename S::const_reverse_iterator const_iterator;
+ typedef typename S::iterator iterator;
+ typedef typename S::const_iterator const_iterator;
typedef typename S::size_type size_type;
typedef typename std::ptrdiff_t index_type;
: seq_ (n)
{}
+#if 201103L <= YY_CPLUSPLUS
+ /// Non copyable.
+ stack (const stack&) = delete;
+ /// Non copyable.
+ stack& operator= (const stack&) = delete;
+#endif
+
/// Random access.
///
/// Index 0 returns the topmost element.
return index_type (seq_.size ());
}
- std::ptrdiff_t
- ssize () const YY_NOEXCEPT
- {
- return std::ptrdiff_t (size ());
- }
-
/// Iterator on top of the stack (going downwards).
const_iterator
begin () const YY_NOEXCEPT
{
- return seq_.rbegin ();
+ return seq_.begin ();
}
/// Bottom of the stack.
const_iterator
end () const YY_NOEXCEPT
{
- return seq_.rend ();
+ return seq_.end ();
}
/// Present a slice of the top of a stack.
};
private:
+#if YY_CPLUSPLUS < 201103L
+ /// Non copyable.
stack (const stack&);
+ /// Non copyable.
stack& operator= (const stack&);
+#endif
/// The wrapped container.
S seq_;
};
/// Pop \a n symbols from the stack.
void yypop_ (int n = 1);
- /// Some specific tokens.
- static const token_number_type yy_error_token_ = 1;
- static const token_number_type yy_undef_token_ = 2;
-
/// Constants.
enum
{
- yyeof_ = 0,
yylast_ = 202, ///< Last index in yytable_.
yynnts_ = 99, ///< Number of nonterminal symbols.
- yyfinal_ = 8, ///< Termination state number.
- yyntokens_ = 46 ///< Number of tokens.
+ yyfinal_ = 8 ///< Termination state number.
};
// User arguments.
isc::agent::ParserContext& ctx;
+
};
inline
- AgentParser::token_number_type
+ AgentParser::symbol_kind_type
AgentParser::yytranslate_ (int t)
{
// YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to
// TOKEN-NUM as returned by yylex.
static
- const token_number_type
+ const signed char
translate_table[] =
{
0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
const int user_token_number_max_ = 300;
if (t <= 0)
- return yyeof_;
+ return symbol_kind::S_YYEOF;
else if (t <= user_token_number_max_)
- return translate_table[t];
+ return YY_CAST (symbol_kind_type, translate_table[t]);
else
- return yy_undef_token_;
+ return symbol_kind::S_YYUNDEF;
}
// basic_symbol.
-#if 201103L <= YY_CPLUSPLUS
- template <typename Base>
- AgentParser::basic_symbol<Base>::basic_symbol (basic_symbol&& that)
- : Base (std::move (that))
- , value ()
- , location (std::move (that.location))
- {
- switch (this->type_get ())
- {
- case 54: // value
- case 57: // map_value
- case 108: // socket_type_value
- value.move< ElementPtr > (std::move (that.value));
- break;
-
- case 45: // "boolean"
- value.move< bool > (std::move (that.value));
- break;
-
- case 44: // "floating point"
- value.move< double > (std::move (that.value));
- break;
-
- case 43: // "integer"
- value.move< int64_t > (std::move (that.value));
- break;
-
- case 42: // "constant string"
- value.move< std::string > (std::move (that.value));
- break;
-
- default:
- break;
- }
-
- }
-#endif
-
template <typename Base>
AgentParser::basic_symbol<Base>::basic_symbol (const basic_symbol& that)
: Base (that)
, value ()
, location (that.location)
{
- switch (this->type_get ())
+ switch (this->kind ())
{
case 54: // value
case 57: // map_value
+ template <typename Base>
+ AgentParser::symbol_kind_type
+ AgentParser::basic_symbol<Base>::type_get () const YY_NOEXCEPT
+ {
+ return this->kind ();
+ }
+
template <typename Base>
bool
AgentParser::basic_symbol<Base>::empty () const YY_NOEXCEPT
{
- return Base::type_get () == empty_symbol;
+ return this->kind () == symbol_kind::S_YYEMPTY;
}
template <typename Base>
AgentParser::basic_symbol<Base>::move (basic_symbol& s)
{
super_type::move (s);
- switch (this->type_get ())
+ switch (this->kind ())
{
case 54: // value
case 57: // map_value
location = YY_MOVE (s.location);
}
- // by_type.
+ // by_kind.
inline
- AgentParser::by_type::by_type ()
- : type (empty_symbol)
+ AgentParser::by_kind::by_kind ()
+ : kind_ (symbol_kind::S_YYEMPTY)
{}
#if 201103L <= YY_CPLUSPLUS
inline
- AgentParser::by_type::by_type (by_type&& that)
- : type (that.type)
+ AgentParser::by_kind::by_kind (by_kind&& that)
+ : kind_ (that.kind_)
{
that.clear ();
}
#endif
inline
- AgentParser::by_type::by_type (const by_type& that)
- : type (that.type)
+ AgentParser::by_kind::by_kind (const by_kind& that)
+ : kind_ (that.kind_)
{}
inline
- AgentParser::by_type::by_type (token_type t)
- : type (yytranslate_ (t))
+ AgentParser::by_kind::by_kind (token_kind_type t)
+ : kind_ (yytranslate_ (t))
{}
inline
void
- AgentParser::by_type::clear ()
+ AgentParser::by_kind::clear ()
{
- type = empty_symbol;
+ kind_ = symbol_kind::S_YYEMPTY;
}
inline
void
- AgentParser::by_type::move (by_type& that)
+ AgentParser::by_kind::move (by_kind& that)
{
- type = that.type;
+ kind_ = that.kind_;
that.clear ();
}
inline
- int
- AgentParser::by_type::type_get () const YY_NOEXCEPT
+ AgentParser::symbol_kind_type
+ AgentParser::by_kind::kind () const YY_NOEXCEPT
+ {
+ return kind_;
+ }
+
+ inline
+ AgentParser::symbol_kind_type
+ AgentParser::by_kind::type_get () const YY_NOEXCEPT
{
- return type;
+ return this->kind ();
}
#line 14 "agent_parser.yy"
} } // isc::agent
-#line 2048 "agent_parser.h"
+#line 2307 "agent_parser.h"
-// Generated 202004241256
-// A Bison parser, made by GNU Bison 3.5.4.
+// Generated 202005190718
+// A Bison parser, made by GNU Bison 3.6.2.
// Locations for Bison parsers in C++
-// Generated 202004241256
-// A Bison parser, made by GNU Bison 3.5.4.
+// Generated 202005190718
+// A Bison parser, made by GNU Bison 3.6.2.
// Starting with Bison 3.2, this file is useless: the structure it
// used to define is now defined in "location.hh".
-// Generated 202004241256
-// A Bison parser, made by GNU Bison 3.5.4.
+// Generated 202005190718
+// A Bison parser, made by GNU Bison 3.6.2.
// Starting with Bison 3.2, this file is useless: the structure it
// used to define is now defined with the parser itself.
-// A Bison parser, made by GNU Bison 3.5.4.
+// A Bison parser, made by GNU Bison 3.6.2.
// Skeleton implementation for Bison LALR(1) parsers in C++
// This special exception was added by the Free Software Foundation in
// version 2.2 of Bison.
-// Undocumented macros, especially those whose name start with YY_,
-// are private implementation details. Do not rely on them.
+// DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual,
+// especially those whose name start with YY_ or yy_. They are
+// private implementation details that can be changed or removed.
// Take the name prefix into account.
#include <d2/parser_context.h>
-#line 51 "d2_parser.cc"
+#line 52 "d2_parser.cc"
#ifndef YY_
# endif
#endif
+
// Whether we are compiled with exception support.
#ifndef YY_EXCEPTIONS
# if defined __GNUC__ && !defined __EXCEPTIONS
# define YY_STACK_PRINT() \
do { \
if (yydebug_) \
- yystack_print_ (); \
+ yy_stack_print_ (); \
} while (false)
#else // !D2_PARSER_DEBUG
#line 14 "d2_parser.yy"
namespace isc { namespace d2 {
-#line 143 "d2_parser.cc"
-
-
- /* Return YYSTR after stripping away unnecessary quotes and
- backslashes, so that it's suitable for yyerror. The heuristic is
- that double-quoting is unnecessary unless the string contains an
- apostrophe, a comma, or backslash (other than backslash-backslash).
- YYSTR is taken from yytname. */
- std::string
- D2Parser::yytnamerr_ (const char *yystr)
- {
- if (*yystr == '"')
- {
- std::string yyr;
- char const *yyp = yystr;
-
- for (;;)
- switch (*++yyp)
- {
- case '\'':
- case ',':
- goto do_not_strip_quotes;
-
- case '\\':
- if (*++yyp != '\\')
- goto do_not_strip_quotes;
- else
- goto append;
-
- append:
- default:
- yyr += *yyp;
- break;
-
- case '"':
- return yyr;
- }
- do_not_strip_quotes: ;
- }
-
- return yystr;
- }
-
+#line 145 "d2_parser.cc"
/// Build a parser object.
D2Parser::D2Parser (isc::d2::D2ParserContext& ctx_yyarg)
{}
/*---------------.
- | Symbol types. |
+ | symbol kinds. |
`---------------*/
: state (s)
{}
- D2Parser::symbol_number_type
- D2Parser::by_state::type_get () const YY_NOEXCEPT
+ D2Parser::symbol_kind_type
+ D2Parser::by_state::kind () const YY_NOEXCEPT
{
if (state == empty_state)
- return empty_symbol;
+ return symbol_kind::S_YYEMPTY;
else
- return yystos_[+state];
+ return YY_CAST (symbol_kind_type, yystos_[+state]);
}
D2Parser::stack_symbol_type::stack_symbol_type ()
D2Parser::stack_symbol_type::stack_symbol_type (YY_RVREF (stack_symbol_type) that)
: super_type (YY_MOVE (that.state), YY_MOVE (that.location))
{
- switch (that.type_get ())
+ switch (that.kind ())
{
case 72: // value
case 76: // map_value
D2Parser::stack_symbol_type::stack_symbol_type (state_type s, YY_MOVE_REF (symbol_type) that)
: super_type (s, YY_MOVE (that.location))
{
- switch (that.type_get ())
+ switch (that.kind ())
{
case 72: // value
case 76: // map_value
}
// that is emptied.
- that.type = empty_symbol;
+ that.kind_ = symbol_kind::S_YYEMPTY;
}
#if YY_CPLUSPLUS < 201103L
D2Parser::stack_symbol_type::operator= (const stack_symbol_type& that)
{
state = that.state;
- switch (that.type_get ())
+ switch (that.kind ())
{
case 72: // value
case 76: // map_value
D2Parser::stack_symbol_type::operator= (stack_symbol_type& that)
{
state = that.state;
- switch (that.type_get ())
+ switch (that.kind ())
{
case 72: // value
case 76: // map_value
#if D2_PARSER_DEBUG
template <typename Base>
void
- D2Parser::yy_print_ (std::ostream& yyo,
- const basic_symbol<Base>& yysym) const
+ D2Parser::yy_print_ (std::ostream& yyo, const basic_symbol<Base>& yysym) const
{
std::ostream& yyoutput = yyo;
YYUSE (yyoutput);
- symbol_number_type yytype = yysym.type_get ();
-#if defined __GNUC__ && ! defined __clang__ && ! defined __ICC && __GNUC__ * 100 + __GNUC_MINOR__ <= 408
- // Avoid a (spurious) G++ 4.8 warning about "array subscript is
- // below array bounds".
if (yysym.empty ())
- std::abort ();
-#endif
- yyo << (yytype < yyntokens_ ? "token" : "nterm")
- << ' ' << yytname_[yytype] << " ("
- << yysym.location << ": ";
- switch (yytype)
+ yyo << "empty symbol";
+ else
+ {
+ symbol_kind_type yykind = yysym.kind ();
+ yyo << (yykind < YYNTOKENS ? "token" : "nterm")
+ << ' ' << yysym.name () << " ("
+ << yysym.location << ": ";
+ switch (yykind)
{
case 57: // "constant string"
#line 116 "d2_parser.yy"
{ yyoutput << yysym.value.template as < std::string > (); }
-#line 427 "d2_parser.cc"
+#line 384 "d2_parser.cc"
break;
case 58: // "integer"
#line 116 "d2_parser.yy"
{ yyoutput << yysym.value.template as < int64_t > (); }
-#line 433 "d2_parser.cc"
+#line 390 "d2_parser.cc"
break;
case 59: // "floating point"
#line 116 "d2_parser.yy"
{ yyoutput << yysym.value.template as < double > (); }
-#line 439 "d2_parser.cc"
+#line 396 "d2_parser.cc"
break;
case 60: // "boolean"
#line 116 "d2_parser.yy"
{ yyoutput << yysym.value.template as < bool > (); }
-#line 445 "d2_parser.cc"
+#line 402 "d2_parser.cc"
break;
case 72: // value
#line 116 "d2_parser.yy"
{ yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 451 "d2_parser.cc"
+#line 408 "d2_parser.cc"
break;
case 76: // map_value
#line 116 "d2_parser.yy"
{ yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 457 "d2_parser.cc"
+#line 414 "d2_parser.cc"
break;
case 100: // ncr_protocol_value
#line 116 "d2_parser.yy"
{ yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 463 "d2_parser.cc"
+#line 420 "d2_parser.cc"
break;
default:
break;
}
- yyo << ')';
+ yyo << ')';
+ }
}
#endif
D2Parser::state_type
D2Parser::yy_lr_goto_state_ (state_type yystate, int yysym)
{
- int yyr = yypgoto_[yysym - yyntokens_] + yystate;
+ int yyr = yypgoto_[yysym - YYNTOKENS] + yystate;
if (0 <= yyr && yyr <= yylast_ && yycheck_[yyr] == yystate)
return yytable_[yyr];
else
- return yydefgoto_[yysym - yyntokens_];
+ return yydefgoto_[yysym - YYNTOKENS];
}
bool
`-----------------------------------------------*/
yynewstate:
YYCDEBUG << "Entering state " << int (yystack_[0].state) << '\n';
+ YY_STACK_PRINT ();
// Accept?
if (yystack_[0].state == yyfinal_)
// Read a lookahead token.
if (yyla.empty ())
{
- YYCDEBUG << "Reading a token: ";
+ YYCDEBUG << "Reading a token\n";
#if YY_EXCEPTIONS
try
#endif // YY_EXCEPTIONS
}
YY_SYMBOL_PRINT ("Next token is", yyla);
+ if (yyla.kind () == symbol_kind::S_YYerror)
+ {
+ // The scanner already issued an error message, process directly
+ // to error recovery. But do not keep the error token as
+ // lookahead, it is too special and may lead us to an endless
+ // loop in error recovery. */
+ yyla.kind_ = symbol_kind::S_YYUNDEF;
+ goto yyerrlab1;
+ }
+
/* If the proper action on seeing token YYLA.TYPE is to reduce or
to detect an error, take that action. */
- yyn += yyla.type_get ();
- if (yyn < 0 || yylast_ < yyn || yycheck_[yyn] != yyla.type_get ())
+ yyn += yyla.kind ();
+ if (yyn < 0 || yylast_ < yyn || yycheck_[yyn] != yyla.kind ())
{
goto yydefault;
}
case 2:
#line 125 "d2_parser.yy"
{ ctx.ctx_ = ctx.NO_KEYWORD; }
-#line 726 "d2_parser.cc"
+#line 695 "d2_parser.cc"
break;
case 4:
#line 126 "d2_parser.yy"
{ ctx.ctx_ = ctx.CONFIG; }
-#line 732 "d2_parser.cc"
+#line 701 "d2_parser.cc"
break;
case 6:
#line 127 "d2_parser.yy"
{ ctx.ctx_ = ctx.DHCPDDNS; }
-#line 738 "d2_parser.cc"
+#line 707 "d2_parser.cc"
break;
case 8:
#line 128 "d2_parser.yy"
{ ctx.ctx_ = ctx.TSIG_KEY; }
-#line 744 "d2_parser.cc"
+#line 713 "d2_parser.cc"
break;
case 10:
#line 129 "d2_parser.yy"
{ ctx.ctx_ = ctx.TSIG_KEYS; }
-#line 750 "d2_parser.cc"
+#line 719 "d2_parser.cc"
break;
case 12:
#line 130 "d2_parser.yy"
{ ctx.ctx_ = ctx.DDNS_DOMAIN; }
-#line 756 "d2_parser.cc"
+#line 725 "d2_parser.cc"
break;
case 14:
#line 131 "d2_parser.yy"
{ ctx.ctx_ = ctx.DDNS_DOMAINS; }
-#line 762 "d2_parser.cc"
+#line 731 "d2_parser.cc"
break;
case 16:
#line 132 "d2_parser.yy"
{ ctx.ctx_ = ctx.DNS_SERVERS; }
-#line 768 "d2_parser.cc"
+#line 737 "d2_parser.cc"
break;
case 18:
#line 133 "d2_parser.yy"
{ ctx.ctx_ = ctx.DNS_SERVERS; }
-#line 774 "d2_parser.cc"
+#line 743 "d2_parser.cc"
break;
case 20:
#line 141 "d2_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); }
-#line 780 "d2_parser.cc"
+#line 749 "d2_parser.cc"
break;
case 21:
#line 142 "d2_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location))); }
-#line 786 "d2_parser.cc"
+#line 755 "d2_parser.cc"
break;
case 22:
#line 143 "d2_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); }
-#line 792 "d2_parser.cc"
+#line 761 "d2_parser.cc"
break;
case 23:
#line 144 "d2_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); }
-#line 798 "d2_parser.cc"
+#line 767 "d2_parser.cc"
break;
case 24:
#line 145 "d2_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new NullElement(ctx.loc2pos(yystack_[0].location))); }
-#line 804 "d2_parser.cc"
+#line 773 "d2_parser.cc"
break;
case 25:
#line 146 "d2_parser.yy"
{ yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
-#line 810 "d2_parser.cc"
+#line 779 "d2_parser.cc"
break;
case 26:
#line 147 "d2_parser.yy"
{ yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
-#line 816 "d2_parser.cc"
+#line 785 "d2_parser.cc"
break;
case 27:
// Push back the JSON value on the stack
ctx.stack_.push_back(yystack_[0].value.as < ElementPtr > ());
}
-#line 825 "d2_parser.cc"
+#line 794 "d2_parser.cc"
break;
case 28:
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(m);
}
-#line 836 "d2_parser.cc"
+#line 805 "d2_parser.cc"
break;
case 29:
// (maybe some sanity checking), this would be the best place
// for it.
}
-#line 846 "d2_parser.cc"
+#line 815 "d2_parser.cc"
break;
case 30:
#line 166 "d2_parser.yy"
{ yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
-#line 852 "d2_parser.cc"
+#line 821 "d2_parser.cc"
break;
case 33:
// map containing a single entry
ctx.stack_.back()->set(yystack_[2].value.as < std::string > (), yystack_[0].value.as < ElementPtr > ());
}
-#line 861 "d2_parser.cc"
+#line 830 "d2_parser.cc"
break;
case 34:
// comma and string:value
ctx.stack_.back()->set(yystack_[2].value.as < std::string > (), yystack_[0].value.as < ElementPtr > ());
}
-#line 871 "d2_parser.cc"
+#line 840 "d2_parser.cc"
break;
case 35:
ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(l);
}
-#line 880 "d2_parser.cc"
+#line 849 "d2_parser.cc"
break;
case 36:
{
// list parsing complete. Put any sanity checking here
}
-#line 888 "d2_parser.cc"
+#line 857 "d2_parser.cc"
break;
case 39:
// List consisting of a single element.
ctx.stack_.back()->add(yystack_[0].value.as < ElementPtr > ());
}
-#line 897 "d2_parser.cc"
+#line 866 "d2_parser.cc"
break;
case 40:
// List ending with , and a value.
ctx.stack_.back()->add(yystack_[0].value.as < ElementPtr > ());
}
-#line 906 "d2_parser.cc"
+#line 875 "d2_parser.cc"
break;
case 41:
error(yystack_[1].location,
"got unexpected keyword \"" + keyword + "\" in " + where + " map.");
}
-#line 917 "d2_parser.cc"
+#line 886 "d2_parser.cc"
break;
case 42:
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(m);
}
-#line 928 "d2_parser.cc"
+#line 897 "d2_parser.cc"
break;
case 43:
// (maybe some sanity checking), this would be the best place
// for it.
}
-#line 938 "d2_parser.cc"
+#line 907 "d2_parser.cc"
break;
case 52:
ctx.stack_.push_back(m);
ctx.enter(ctx.DHCPDDNS);
}
-#line 949 "d2_parser.cc"
+#line 918 "d2_parser.cc"
break;
case 53:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 958 "d2_parser.cc"
+#line 927 "d2_parser.cc"
break;
case 54:
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(m);
}
-#line 968 "d2_parser.cc"
+#line 937 "d2_parser.cc"
break;
case 55:
{
// parsing completed
}
-#line 976 "d2_parser.cc"
+#line 945 "d2_parser.cc"
break;
case 71:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 984 "d2_parser.cc"
+#line 953 "d2_parser.cc"
break;
case 72:
ctx.stack_.back()->set("ip-address", s);
ctx.leave();
}
-#line 994 "d2_parser.cc"
+#line 963 "d2_parser.cc"
break;
case 73:
ElementPtr i(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("port", i);
}
-#line 1006 "d2_parser.cc"
+#line 975 "d2_parser.cc"
break;
case 74:
ctx.stack_.back()->set("dns-server-timeout", i);
}
}
-#line 1019 "d2_parser.cc"
+#line 988 "d2_parser.cc"
break;
case 75:
{
ctx.enter(ctx.NCR_PROTOCOL);
}
-#line 1027 "d2_parser.cc"
+#line 996 "d2_parser.cc"
break;
case 76:
ctx.stack_.back()->set("ncr-protocol", yystack_[0].value.as < ElementPtr > ());
ctx.leave();
}
-#line 1036 "d2_parser.cc"
+#line 1005 "d2_parser.cc"
break;
case 77:
#line 318 "d2_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("UDP", ctx.loc2pos(yystack_[0].location))); }
-#line 1042 "d2_parser.cc"
+#line 1011 "d2_parser.cc"
break;
case 78:
#line 319 "d2_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("TCP", ctx.loc2pos(yystack_[0].location))); }
-#line 1048 "d2_parser.cc"
+#line 1017 "d2_parser.cc"
break;
case 79:
{
ctx.enter(ctx.NCR_FORMAT);
}
-#line 1056 "d2_parser.cc"
+#line 1025 "d2_parser.cc"
break;
case 80:
ctx.stack_.back()->set("ncr-format", json);
ctx.leave();
}
-#line 1066 "d2_parser.cc"
+#line 1035 "d2_parser.cc"
break;
case 81:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 1074 "d2_parser.cc"
+#line 1043 "d2_parser.cc"
break;
case 82:
parent->set("user-context", user_context);
ctx.leave();
}
-#line 1101 "d2_parser.cc"
+#line 1070 "d2_parser.cc"
break;
case 83:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 1109 "d2_parser.cc"
+#line 1078 "d2_parser.cc"
break;
case 84:
parent->set("user-context", user_context);
ctx.leave();
}
-#line 1138 "d2_parser.cc"
+#line 1107 "d2_parser.cc"
break;
case 85:
ctx.stack_.push_back(m);
ctx.enter(ctx.FORWARD_DDNS);
}
-#line 1149 "d2_parser.cc"
+#line 1118 "d2_parser.cc"
break;
case 86:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 1158 "d2_parser.cc"
+#line 1127 "d2_parser.cc"
break;
case 87:
ctx.stack_.push_back(m);
ctx.enter(ctx.REVERSE_DDNS);
}
-#line 1169 "d2_parser.cc"
+#line 1138 "d2_parser.cc"
break;
case 88:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 1178 "d2_parser.cc"
+#line 1147 "d2_parser.cc"
break;
case 95:
ctx.stack_.push_back(l);
ctx.enter(ctx.DDNS_DOMAINS);
}
-#line 1189 "d2_parser.cc"
+#line 1158 "d2_parser.cc"
break;
case 96:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 1198 "d2_parser.cc"
+#line 1167 "d2_parser.cc"
break;
case 97:
ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(l);
}
-#line 1207 "d2_parser.cc"
+#line 1176 "d2_parser.cc"
break;
case 98:
{
// parsing completed
}
-#line 1215 "d2_parser.cc"
+#line 1184 "d2_parser.cc"
break;
case 103:
ctx.stack_.back()->add(m);
ctx.stack_.push_back(m);
}
-#line 1225 "d2_parser.cc"
+#line 1194 "d2_parser.cc"
break;
case 104:
{
ctx.stack_.pop_back();
}
-#line 1233 "d2_parser.cc"
+#line 1202 "d2_parser.cc"
break;
case 105:
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(m);
}
-#line 1242 "d2_parser.cc"
+#line 1211 "d2_parser.cc"
break;
case 106:
{
// parsing completed
}
-#line 1250 "d2_parser.cc"
+#line 1219 "d2_parser.cc"
break;
case 115:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 1258 "d2_parser.cc"
+#line 1227 "d2_parser.cc"
break;
case 116:
ctx.stack_.back()->set("name", name);
ctx.leave();
}
-#line 1272 "d2_parser.cc"
+#line 1241 "d2_parser.cc"
break;
case 117:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 1280 "d2_parser.cc"
+#line 1249 "d2_parser.cc"
break;
case 118:
ctx.stack_.back()->set("key-name", name);
ctx.leave();
}
-#line 1291 "d2_parser.cc"
+#line 1260 "d2_parser.cc"
break;
case 119:
ctx.stack_.push_back(l);
ctx.enter(ctx.DNS_SERVERS);
}
-#line 1302 "d2_parser.cc"
+#line 1271 "d2_parser.cc"
break;
case 120:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 1311 "d2_parser.cc"
+#line 1280 "d2_parser.cc"
break;
case 121:
ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(l);
}
-#line 1320 "d2_parser.cc"
+#line 1289 "d2_parser.cc"
break;
case 122:
{
// parsing completed
}
-#line 1328 "d2_parser.cc"
+#line 1297 "d2_parser.cc"
break;
case 125:
ctx.stack_.back()->add(m);
ctx.stack_.push_back(m);
}
-#line 1338 "d2_parser.cc"
+#line 1307 "d2_parser.cc"
break;
case 126:
{
ctx.stack_.pop_back();
}
-#line 1346 "d2_parser.cc"
+#line 1315 "d2_parser.cc"
break;
case 127:
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(m);
}
-#line 1355 "d2_parser.cc"
+#line 1324 "d2_parser.cc"
break;
case 128:
{
// parsing completed
}
-#line 1363 "d2_parser.cc"
+#line 1332 "d2_parser.cc"
break;
case 137:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 1371 "d2_parser.cc"
+#line 1340 "d2_parser.cc"
break;
case 138:
ctx.stack_.back()->set("hostname", name);
ctx.leave();
}
-#line 1385 "d2_parser.cc"
+#line 1354 "d2_parser.cc"
break;
case 139:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 1393 "d2_parser.cc"
+#line 1362 "d2_parser.cc"
break;
case 140:
ctx.stack_.back()->set("ip-address", s);
ctx.leave();
}
-#line 1403 "d2_parser.cc"
+#line 1372 "d2_parser.cc"
break;
case 141:
ElementPtr i(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("port", i);
}
-#line 1415 "d2_parser.cc"
+#line 1384 "d2_parser.cc"
break;
case 142:
ctx.stack_.push_back(l);
ctx.enter(ctx.TSIG_KEYS);
}
-#line 1426 "d2_parser.cc"
+#line 1395 "d2_parser.cc"
break;
case 143:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 1435 "d2_parser.cc"
+#line 1404 "d2_parser.cc"
break;
case 144:
ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(l);
}
-#line 1444 "d2_parser.cc"
+#line 1413 "d2_parser.cc"
break;
case 145:
{
// parsing completed
}
-#line 1452 "d2_parser.cc"
+#line 1421 "d2_parser.cc"
break;
case 150:
ctx.stack_.back()->add(m);
ctx.stack_.push_back(m);
}
-#line 1462 "d2_parser.cc"
+#line 1431 "d2_parser.cc"
break;
case 151:
{
ctx.stack_.pop_back();
}
-#line 1470 "d2_parser.cc"
+#line 1439 "d2_parser.cc"
break;
case 152:
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(m);
}
-#line 1480 "d2_parser.cc"
+#line 1449 "d2_parser.cc"
break;
case 153:
{
// parsing completed
}
-#line 1488 "d2_parser.cc"
+#line 1457 "d2_parser.cc"
break;
case 163:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 1496 "d2_parser.cc"
+#line 1465 "d2_parser.cc"
break;
case 164:
ctx.stack_.back()->set("name", name);
ctx.leave();
}
-#line 1510 "d2_parser.cc"
+#line 1479 "d2_parser.cc"
break;
case 165:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 1518 "d2_parser.cc"
+#line 1487 "d2_parser.cc"
break;
case 166:
ctx.stack_.back()->set("algorithm", elem);
ctx.leave();
}
-#line 1531 "d2_parser.cc"
+#line 1500 "d2_parser.cc"
break;
case 167:
ElementPtr elem(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("digest-bits", elem);
}
-#line 1543 "d2_parser.cc"
+#line 1512 "d2_parser.cc"
break;
case 168:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 1551 "d2_parser.cc"
+#line 1520 "d2_parser.cc"
break;
case 169:
ctx.stack_.back()->set("secret", elem);
ctx.leave();
}
-#line 1564 "d2_parser.cc"
+#line 1533 "d2_parser.cc"
break;
case 170:
ctx.stack_.push_back(m);
ctx.enter(ctx.CONTROL_SOCKET);
}
-#line 1575 "d2_parser.cc"
+#line 1544 "d2_parser.cc"
break;
case 171:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 1584 "d2_parser.cc"
+#line 1553 "d2_parser.cc"
break;
case 179:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 1592 "d2_parser.cc"
+#line 1561 "d2_parser.cc"
break;
case 180:
ctx.stack_.back()->set("socket-type", stype);
ctx.leave();
}
-#line 1602 "d2_parser.cc"
+#line 1571 "d2_parser.cc"
break;
case 181:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 1610 "d2_parser.cc"
+#line 1579 "d2_parser.cc"
break;
case 182:
ctx.stack_.back()->set("socket-name", name);
ctx.leave();
}
-#line 1620 "d2_parser.cc"
+#line 1589 "d2_parser.cc"
break;
case 183:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 1628 "d2_parser.cc"
+#line 1597 "d2_parser.cc"
break;
case 184:
ctx.stack_.back()->set("Dhcp6", yystack_[0].value.as < ElementPtr > ());
ctx.leave();
}
-#line 1637 "d2_parser.cc"
+#line 1606 "d2_parser.cc"
break;
case 185:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 1645 "d2_parser.cc"
+#line 1614 "d2_parser.cc"
break;
case 186:
ctx.stack_.back()->set("Dhcp4", yystack_[0].value.as < ElementPtr > ());
ctx.leave();
}
-#line 1654 "d2_parser.cc"
+#line 1623 "d2_parser.cc"
break;
case 187:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 1662 "d2_parser.cc"
+#line 1631 "d2_parser.cc"
break;
case 188:
ctx.stack_.back()->set("Control-agent", yystack_[0].value.as < ElementPtr > ());
ctx.leave();
}
-#line 1671 "d2_parser.cc"
+#line 1640 "d2_parser.cc"
break;
case 189:
ctx.stack_.push_back(m);
ctx.enter(ctx.LOGGING);
}
-#line 1682 "d2_parser.cc"
+#line 1651 "d2_parser.cc"
break;
case 190:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 1691 "d2_parser.cc"
+#line 1660 "d2_parser.cc"
break;
case 194:
ctx.stack_.push_back(l);
ctx.enter(ctx.LOGGERS);
}
-#line 1702 "d2_parser.cc"
+#line 1671 "d2_parser.cc"
break;
case 195:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 1711 "d2_parser.cc"
+#line 1680 "d2_parser.cc"
break;
case 198:
ctx.stack_.back()->add(l);
ctx.stack_.push_back(l);
}
-#line 1721 "d2_parser.cc"
+#line 1690 "d2_parser.cc"
break;
case 199:
{
ctx.stack_.pop_back();
}
-#line 1729 "d2_parser.cc"
+#line 1698 "d2_parser.cc"
break;
case 209:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 1737 "d2_parser.cc"
+#line 1706 "d2_parser.cc"
break;
case 210:
ctx.stack_.back()->set("name", name);
ctx.leave();
}
-#line 1747 "d2_parser.cc"
+#line 1716 "d2_parser.cc"
break;
case 211:
ElementPtr dl(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("debuglevel", dl);
}
-#line 1756 "d2_parser.cc"
+#line 1725 "d2_parser.cc"
break;
case 212:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 1764 "d2_parser.cc"
+#line 1733 "d2_parser.cc"
break;
case 213:
ctx.stack_.back()->set("severity", sev);
ctx.leave();
}
-#line 1774 "d2_parser.cc"
+#line 1743 "d2_parser.cc"
break;
case 214:
ctx.stack_.push_back(l);
ctx.enter(ctx.OUTPUT_OPTIONS);
}
-#line 1785 "d2_parser.cc"
+#line 1754 "d2_parser.cc"
break;
case 215:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 1794 "d2_parser.cc"
+#line 1763 "d2_parser.cc"
break;
case 218:
ctx.stack_.back()->add(m);
ctx.stack_.push_back(m);
}
-#line 1804 "d2_parser.cc"
+#line 1773 "d2_parser.cc"
break;
case 219:
{
ctx.stack_.pop_back();
}
-#line 1812 "d2_parser.cc"
+#line 1781 "d2_parser.cc"
break;
case 227:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 1820 "d2_parser.cc"
+#line 1789 "d2_parser.cc"
break;
case 228:
ctx.stack_.back()->set("output", sev);
ctx.leave();
}
-#line 1830 "d2_parser.cc"
+#line 1799 "d2_parser.cc"
break;
case 229:
ElementPtr flush(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("flush", flush);
}
-#line 1839 "d2_parser.cc"
+#line 1808 "d2_parser.cc"
break;
case 230:
ElementPtr maxsize(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("maxsize", maxsize);
}
-#line 1848 "d2_parser.cc"
+#line 1817 "d2_parser.cc"
break;
case 231:
ElementPtr maxver(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("maxver", maxver);
}
-#line 1857 "d2_parser.cc"
+#line 1826 "d2_parser.cc"
break;
case 232:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 1865 "d2_parser.cc"
+#line 1834 "d2_parser.cc"
break;
case 233:
ctx.stack_.back()->set("pattern", sev);
ctx.leave();
}
-#line 1875 "d2_parser.cc"
+#line 1844 "d2_parser.cc"
break;
-#line 1879 "d2_parser.cc"
+#line 1848 "d2_parser.cc"
default:
break;
YY_SYMBOL_PRINT ("-> $$ =", yylhs);
yypop_ (yylen);
yylen = 0;
- YY_STACK_PRINT ();
// Shift the result of the reduction.
yypush_ (YY_NULLPTR, YY_MOVE (yylhs));
if (!yyerrstatus_)
{
++yynerrs_;
- error (yyla.location, yysyntax_error_ (yystack_[0].state, yyla));
+ context yyctx (*this, yyla);
+ std::string msg = yysyntax_error_ (yyctx);
+ error (yyla.location, YY_MOVE (msg));
}
error, discard it. */
// Return failure if at end of input.
- if (yyla.type_get () == yyeof_)
+ if (yyla.kind () == symbol_kind::S_YYEOF)
YYABORT;
else if (!yyla.empty ())
{
this YYERROR. */
yypop_ (yylen);
yylen = 0;
+ YY_STACK_PRINT ();
goto yyerrlab1;
`-------------------------------------------------------------*/
yyerrlab1:
yyerrstatus_ = 3; // Each real token shifted decrements this.
- {
- stack_symbol_type error_token;
- for (;;)
- {
- yyn = yypact_[+yystack_[0].state];
- if (!yy_pact_value_is_default_ (yyn))
- {
- yyn += yy_error_token_;
- if (0 <= yyn && yyn <= yylast_ && yycheck_[yyn] == yy_error_token_)
- {
- yyn = yytable_[yyn];
- if (0 < yyn)
- break;
- }
- }
+ // Pop stack until we find a state that shifts the error token.
+ for (;;)
+ {
+ yyn = yypact_[+yystack_[0].state];
+ if (!yy_pact_value_is_default_ (yyn))
+ {
+ yyn += symbol_kind::S_YYerror;
+ if (0 <= yyn && yyn <= yylast_
+ && yycheck_[yyn] == symbol_kind::S_YYerror)
+ {
+ yyn = yytable_[yyn];
+ if (0 < yyn)
+ break;
+ }
+ }
- // Pop the current state because it cannot handle the error token.
- if (yystack_.size () == 1)
- YYABORT;
+ // Pop the current state because it cannot handle the error token.
+ if (yystack_.size () == 1)
+ YYABORT;
- yyerror_range[1].location = yystack_[0].location;
- yy_destroy_ ("Error: popping", yystack_[0]);
- yypop_ ();
- YY_STACK_PRINT ();
- }
+ yyerror_range[1].location = yystack_[0].location;
+ yy_destroy_ ("Error: popping", yystack_[0]);
+ yypop_ ();
+ YY_STACK_PRINT ();
+ }
+ {
+ stack_symbol_type error_token;
yyerror_range[2].location = yyla.location;
YYLLOC_DEFAULT (error_token.location, yyerror_range, 2);
/* Do not reclaim the symbols of the rule whose action triggered
this YYABORT or YYACCEPT. */
yypop_ (yylen);
+ YY_STACK_PRINT ();
while (1 < yystack_.size ())
{
yy_destroy_ ("Cleanup: popping", yystack_[0]);
error (yyexc.location, yyexc.what ());
}
- // Generate an error message.
+ /* Return YYSTR after stripping away unnecessary quotes and
+ backslashes, so that it's suitable for yyerror. The heuristic is
+ that double-quoting is unnecessary unless the string contains an
+ apostrophe, a comma, or backslash (other than backslash-backslash).
+ YYSTR is taken from yytname. */
std::string
- D2Parser::yysyntax_error_ (state_type yystate, const symbol_type& yyla) const
+ D2Parser::yytnamerr_ (const char *yystr)
{
- // Number of reported tokens (one for the "unexpected", one per
- // "expected").
- std::ptrdiff_t yycount = 0;
- // Its maximum.
- enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
- // Arguments of yyformat.
- char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
+ if (*yystr == '"')
+ {
+ std::string yyr;
+ char const *yyp = yystr;
+
+ for (;;)
+ switch (*++yyp)
+ {
+ case '\'':
+ case ',':
+ goto do_not_strip_quotes;
+
+ case '\\':
+ if (*++yyp != '\\')
+ goto do_not_strip_quotes;
+ else
+ goto append;
+
+ append:
+ default:
+ yyr += *yyp;
+ break;
+
+ case '"':
+ return yyr;
+ }
+ do_not_strip_quotes: ;
+ }
+
+ return yystr;
+ }
+
+ std::string
+ D2Parser::symbol_name (symbol_kind_type yysymbol)
+ {
+ return yytnamerr_ (yytname_[yysymbol]);
+ }
+
+
+
+ // D2Parser::context.
+ D2Parser::context::context (const D2Parser& yyparser, const symbol_type& yyla)
+ : yyparser_ (yyparser)
+ , yyla_ (yyla)
+ {}
+
+ int
+ D2Parser::context::expected_tokens (symbol_kind_type yyarg[], int yyargn) const
+ {
+ // Actual number of expected tokens
+ int yycount = 0;
+
+ int yyn = yypact_[+yyparser_.yystack_[0].state];
+ if (!yy_pact_value_is_default_ (yyn))
+ {
+ /* Start YYX at -YYN if negative to avoid negative indexes in
+ YYCHECK. In other words, skip the first -YYN actions for
+ this state because they are default actions. */
+ int yyxbegin = yyn < 0 ? -yyn : 0;
+ // Stay within bounds of both yycheck and yytname.
+ int yychecklim = yylast_ - yyn + 1;
+ int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
+ for (int yyx = yyxbegin; yyx < yyxend; ++yyx)
+ if (yycheck_[yyx + yyn] == yyx && yyx != symbol_kind::S_YYerror
+ && !yy_table_value_is_error_ (yytable_[yyx + yyn]))
+ {
+ if (!yyarg)
+ ++yycount;
+ else if (yycount == yyargn)
+ return 0;
+ else
+ yyarg[yycount++] = YY_CAST (symbol_kind_type, yyx);
+ }
+ }
+
+ if (yyarg && yycount == 0 && 0 < yyargn)
+ yyarg[0] = symbol_kind::S_YYEMPTY;
+ return yycount;
+ }
+
+
+ int
+ D2Parser::yy_syntax_error_arguments_ (const context& yyctx,
+ symbol_kind_type yyarg[], int yyargn) const
+ {
/* There are many possibilities here to consider:
- If this state is a consistent state with a default action, then
the only way this function was invoked is if the default action
one exception: it will still contain any token that will not be
accepted due to an error action in a later state.
*/
- if (!yyla.empty ())
- {
- symbol_number_type yytoken = yyla.type_get ();
- yyarg[yycount++] = yytname_[yytoken];
- int yyn = yypact_[+yystate];
- if (!yy_pact_value_is_default_ (yyn))
- {
- /* Start YYX at -YYN if negative to avoid negative indexes in
- YYCHECK. In other words, skip the first -YYN actions for
- this state because they are default actions. */
- int yyxbegin = yyn < 0 ? -yyn : 0;
- // Stay within bounds of both yycheck and yytname.
- int yychecklim = yylast_ - yyn + 1;
- int yyxend = yychecklim < yyntokens_ ? yychecklim : yyntokens_;
- for (int yyx = yyxbegin; yyx < yyxend; ++yyx)
- if (yycheck_[yyx + yyn] == yyx && yyx != yy_error_token_
- && !yy_table_value_is_error_ (yytable_[yyx + yyn]))
- {
- if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
- {
- yycount = 1;
- break;
- }
- else
- yyarg[yycount++] = yytname_[yyx];
- }
- }
+ if (!yyctx.lookahead ().empty ())
+ {
+ if (yyarg)
+ yyarg[0] = yyctx.token ();
+ int yyn = yyctx.expected_tokens (yyarg ? yyarg + 1 : yyarg, yyargn - 1);
+ return yyn + 1;
}
+ return 0;
+ }
+
+ // Generate an error message.
+ std::string
+ D2Parser::yysyntax_error_ (const context& yyctx) const
+ {
+ // Its maximum.
+ enum { YYARGS_MAX = 5 };
+ // Arguments of yyformat.
+ symbol_kind_type yyarg[YYARGS_MAX];
+ int yycount = yy_syntax_error_arguments_ (yyctx, yyarg, YYARGS_MAX);
char const* yyformat = YY_NULLPTR;
switch (yycount)
for (char const* yyp = yyformat; *yyp; ++yyp)
if (yyp[0] == '%' && yyp[1] == 's' && yyi < yycount)
{
- yyres += yytnamerr_ (yyarg[yyi++]);
+ yyres += symbol_name (yyarg[yyi++]);
++yyp;
}
else
};
-
+#if D2_PARSER_DEBUG || 1
// YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
- // First, the terminals, then, starting at \a yyntokens_, nonterminals.
+ // First, the terminals, then, starting at \a YYNTOKENS, nonterminals.
const char*
const D2Parser::yytname_[] =
{
- "\"end of file\"", "error", "$undefined", "\",\"", "\":\"", "\"[\"",
- "\"]\"", "\"{\"", "\"}\"", "\"null\"", "\"Dhcp6\"", "\"Dhcp4\"",
+ "\"end of file\"", "error", "\"invalid token\"", "\",\"", "\":\"",
+ "\"[\"", "\"]\"", "\"{\"", "\"}\"", "\"null\"", "\"Dhcp6\"", "\"Dhcp4\"",
"\"Control-agent\"", "\"DhcpDdns\"", "\"ip-address\"", "\"port\"",
"\"dns-server-timeout\"", "\"ncr-protocol\"", "\"UDP\"", "\"TCP\"",
"\"ncr-format\"", "\"JSON\"", "\"user-context\"", "\"comment\"",
"output_params_list", "output_params", "output", "$@54", "flush",
"maxsize", "maxver", "pattern", "$@55", YY_NULLPTR
};
+#endif
+
#if D2_PARSER_DEBUG
const short
868, 873, 878, 878
};
- // Print the state stack on the debug stream.
void
- D2Parser::yystack_print_ ()
+ D2Parser::yy_stack_print_ () const
{
*yycdebug_ << "Stack now";
for (stack_type::const_iterator
*yycdebug_ << '\n';
}
- // Report on the debug stream that the rule \a yyrule is going to be reduced.
void
- D2Parser::yy_reduce_print_ (int yyrule)
+ D2Parser::yy_reduce_print_ (int yyrule) const
{
int yylno = yyrline_[yyrule];
int yynrhs = yyr2_[yyrule];
#line 14 "d2_parser.yy"
} } // isc::d2
-#line 2574 "d2_parser.cc"
+#line 2621 "d2_parser.cc"
#line 886 "d2_parser.yy"
-// A Bison parser, made by GNU Bison 3.5.4.
+// A Bison parser, made by GNU Bison 3.6.2.
// Skeleton interface for Bison LALR(1) parsers in C++
// C++ LALR(1) parser skeleton written by Akim Demaille.
-// Undocumented macros, especially those whose name start with YY_,
-// are private implementation details. Do not rely on them.
+// DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual,
+// especially those whose name start with YY_ or yy_. They are
+// private implementation details that can be changed or removed.
#ifndef YY_D2_PARSER_D2_PARSER_H_INCLUDED
# define YY_D2_PARSER_D2_PARSER_H_INCLUDED
using namespace isc::data;
using namespace std;
-#line 60 "d2_parser.h"
+#line 61 "d2_parser.h"
# include <cassert>
# include <cstdlib> // std::abort
#line 14 "d2_parser.yy"
namespace isc { namespace d2 {
-#line 203 "d2_parser.h"
+#line 204 "d2_parser.h"
new (yyas_<T> ()) T (YY_MOVE (t));
}
+#if 201103L <= YY_CPLUSPLUS
+ /// Non copyable.
+ semantic_type (const self_type&) = delete;
+ /// Non copyable.
+ self_type& operator= (const self_type&) = delete;
+#endif
+
/// Destruction, allowed only if empty.
~semantic_type () YY_NOEXCEPT
{
}
private:
- /// Prohibit blind copies.
- self_type& operator= (const self_type&);
+#if YY_CPLUSPLUS < 201103L
+ /// Non copyable.
semantic_type (const self_type&);
+ /// Non copyable.
+ self_type& operator= (const self_type&);
+#endif
/// Accessor to raw memory as \a T.
template <typename T>
location_type location;
};
- /// Tokens.
+ /// Token kinds.
struct token
{
- enum yytokentype
- {
- TOKEN_END = 0,
- TOKEN_COMMA = 258,
- TOKEN_COLON = 259,
- TOKEN_LSQUARE_BRACKET = 260,
- TOKEN_RSQUARE_BRACKET = 261,
- TOKEN_LCURLY_BRACKET = 262,
- TOKEN_RCURLY_BRACKET = 263,
- TOKEN_NULL_TYPE = 264,
- TOKEN_DHCP6 = 265,
- TOKEN_DHCP4 = 266,
- TOKEN_CONTROL_AGENT = 267,
- TOKEN_DHCPDDNS = 268,
- TOKEN_IP_ADDRESS = 269,
- TOKEN_PORT = 270,
- TOKEN_DNS_SERVER_TIMEOUT = 271,
- TOKEN_NCR_PROTOCOL = 272,
- TOKEN_UDP = 273,
- TOKEN_TCP = 274,
- TOKEN_NCR_FORMAT = 275,
- TOKEN_JSON = 276,
- TOKEN_USER_CONTEXT = 277,
- TOKEN_COMMENT = 278,
- TOKEN_FORWARD_DDNS = 279,
- TOKEN_REVERSE_DDNS = 280,
- TOKEN_DDNS_DOMAINS = 281,
- TOKEN_KEY_NAME = 282,
- TOKEN_DNS_SERVERS = 283,
- TOKEN_HOSTNAME = 284,
- TOKEN_TSIG_KEYS = 285,
- TOKEN_ALGORITHM = 286,
- TOKEN_DIGEST_BITS = 287,
- TOKEN_SECRET = 288,
- 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_PATTERN = 302,
- TOKEN_TOPLEVEL_JSON = 303,
- TOKEN_TOPLEVEL_DHCPDDNS = 304,
- TOKEN_SUB_DHCPDDNS = 305,
- TOKEN_SUB_TSIG_KEY = 306,
- TOKEN_SUB_TSIG_KEYS = 307,
- TOKEN_SUB_DDNS_DOMAIN = 308,
- TOKEN_SUB_DDNS_DOMAINS = 309,
- TOKEN_SUB_DNS_SERVER = 310,
- TOKEN_SUB_DNS_SERVERS = 311,
- TOKEN_STRING = 312,
- TOKEN_INTEGER = 313,
- TOKEN_FLOAT = 314,
- TOKEN_BOOLEAN = 315
+ enum token_kind_type
+ {
+ TOKEN_D2_PARSER_EMPTY = -2,
+ TOKEN_END = 0, // "end of file"
+ TOKEN_D2_PARSER_error = 256, // error
+ TOKEN_D2_PARSER_UNDEF = 257, // "invalid token"
+ TOKEN_COMMA = 258, // ","
+ TOKEN_COLON = 259, // ":"
+ TOKEN_LSQUARE_BRACKET = 260, // "["
+ TOKEN_RSQUARE_BRACKET = 261, // "]"
+ TOKEN_LCURLY_BRACKET = 262, // "{"
+ TOKEN_RCURLY_BRACKET = 263, // "}"
+ TOKEN_NULL_TYPE = 264, // "null"
+ TOKEN_DHCP6 = 265, // "Dhcp6"
+ TOKEN_DHCP4 = 266, // "Dhcp4"
+ TOKEN_CONTROL_AGENT = 267, // "Control-agent"
+ TOKEN_DHCPDDNS = 268, // "DhcpDdns"
+ TOKEN_IP_ADDRESS = 269, // "ip-address"
+ TOKEN_PORT = 270, // "port"
+ TOKEN_DNS_SERVER_TIMEOUT = 271, // "dns-server-timeout"
+ TOKEN_NCR_PROTOCOL = 272, // "ncr-protocol"
+ TOKEN_UDP = 273, // "UDP"
+ TOKEN_TCP = 274, // "TCP"
+ TOKEN_NCR_FORMAT = 275, // "ncr-format"
+ TOKEN_JSON = 276, // "JSON"
+ TOKEN_USER_CONTEXT = 277, // "user-context"
+ TOKEN_COMMENT = 278, // "comment"
+ TOKEN_FORWARD_DDNS = 279, // "forward-ddns"
+ TOKEN_REVERSE_DDNS = 280, // "reverse-ddns"
+ TOKEN_DDNS_DOMAINS = 281, // "ddns-domains"
+ TOKEN_KEY_NAME = 282, // "key-name"
+ TOKEN_DNS_SERVERS = 283, // "dns-servers"
+ TOKEN_HOSTNAME = 284, // "hostname"
+ TOKEN_TSIG_KEYS = 285, // "tsig-keys"
+ TOKEN_ALGORITHM = 286, // "algorithm"
+ TOKEN_DIGEST_BITS = 287, // "digest-bits"
+ TOKEN_SECRET = 288, // "secret"
+ TOKEN_CONTROL_SOCKET = 289, // "control-socket"
+ TOKEN_SOCKET_TYPE = 290, // "socket-type"
+ TOKEN_SOCKET_NAME = 291, // "socket-name"
+ TOKEN_LOGGING = 292, // "Logging"
+ TOKEN_LOGGERS = 293, // "loggers"
+ TOKEN_NAME = 294, // "name"
+ TOKEN_OUTPUT_OPTIONS = 295, // "output_options"
+ TOKEN_OUTPUT = 296, // "output"
+ TOKEN_DEBUGLEVEL = 297, // "debuglevel"
+ TOKEN_SEVERITY = 298, // "severity"
+ TOKEN_FLUSH = 299, // "flush"
+ TOKEN_MAXSIZE = 300, // "maxsize"
+ TOKEN_MAXVER = 301, // "maxver"
+ TOKEN_PATTERN = 302, // "pattern"
+ TOKEN_TOPLEVEL_JSON = 303, // TOPLEVEL_JSON
+ TOKEN_TOPLEVEL_DHCPDDNS = 304, // TOPLEVEL_DHCPDDNS
+ TOKEN_SUB_DHCPDDNS = 305, // SUB_DHCPDDNS
+ TOKEN_SUB_TSIG_KEY = 306, // SUB_TSIG_KEY
+ TOKEN_SUB_TSIG_KEYS = 307, // SUB_TSIG_KEYS
+ TOKEN_SUB_DDNS_DOMAIN = 308, // SUB_DDNS_DOMAIN
+ TOKEN_SUB_DDNS_DOMAINS = 309, // SUB_DDNS_DOMAINS
+ TOKEN_SUB_DNS_SERVER = 310, // SUB_DNS_SERVER
+ TOKEN_SUB_DNS_SERVERS = 311, // SUB_DNS_SERVERS
+ TOKEN_STRING = 312, // "constant string"
+ TOKEN_INTEGER = 313, // "integer"
+ TOKEN_FLOAT = 314, // "floating point"
+ TOKEN_BOOLEAN = 315 // "boolean"
};
+ /// Backward compatibility alias (Bison 3.6).
+ typedef token_kind_type yytokentype;
};
- /// (External) token type, as returned by yylex.
- typedef token::yytokentype token_type;
+ /// Token kind, as returned by yylex.
+ typedef token::yytokentype token_kind_type;
- /// Symbol type: an internal symbol number.
- typedef int symbol_number_type;
+ /// Backward compatibility alias (Bison 3.6).
+ typedef token_kind_type token_type;
- /// The symbol type number to denote an empty symbol.
- enum { empty_symbol = -2 };
+ /// Symbol kinds.
+ struct symbol_kind
+ {
+ enum symbol_kind_type
+ {
+ YYNTOKENS = 61, ///< Number of tokens.
+ S_YYEMPTY = -2,
+ S_YYEOF = 0, // "end of file"
+ S_YYerror = 1, // error
+ S_YYUNDEF = 2, // "invalid token"
+ S_COMMA = 3, // ","
+ S_COLON = 4, // ":"
+ S_LSQUARE_BRACKET = 5, // "["
+ S_RSQUARE_BRACKET = 6, // "]"
+ S_LCURLY_BRACKET = 7, // "{"
+ S_RCURLY_BRACKET = 8, // "}"
+ S_NULL_TYPE = 9, // "null"
+ S_DHCP6 = 10, // "Dhcp6"
+ S_DHCP4 = 11, // "Dhcp4"
+ S_CONTROL_AGENT = 12, // "Control-agent"
+ S_DHCPDDNS = 13, // "DhcpDdns"
+ S_IP_ADDRESS = 14, // "ip-address"
+ S_PORT = 15, // "port"
+ S_DNS_SERVER_TIMEOUT = 16, // "dns-server-timeout"
+ S_NCR_PROTOCOL = 17, // "ncr-protocol"
+ S_UDP = 18, // "UDP"
+ S_TCP = 19, // "TCP"
+ S_NCR_FORMAT = 20, // "ncr-format"
+ S_JSON = 21, // "JSON"
+ S_USER_CONTEXT = 22, // "user-context"
+ S_COMMENT = 23, // "comment"
+ S_FORWARD_DDNS = 24, // "forward-ddns"
+ S_REVERSE_DDNS = 25, // "reverse-ddns"
+ S_DDNS_DOMAINS = 26, // "ddns-domains"
+ S_KEY_NAME = 27, // "key-name"
+ S_DNS_SERVERS = 28, // "dns-servers"
+ S_HOSTNAME = 29, // "hostname"
+ S_TSIG_KEYS = 30, // "tsig-keys"
+ S_ALGORITHM = 31, // "algorithm"
+ S_DIGEST_BITS = 32, // "digest-bits"
+ S_SECRET = 33, // "secret"
+ S_CONTROL_SOCKET = 34, // "control-socket"
+ S_SOCKET_TYPE = 35, // "socket-type"
+ S_SOCKET_NAME = 36, // "socket-name"
+ S_LOGGING = 37, // "Logging"
+ S_LOGGERS = 38, // "loggers"
+ S_NAME = 39, // "name"
+ S_OUTPUT_OPTIONS = 40, // "output_options"
+ S_OUTPUT = 41, // "output"
+ S_DEBUGLEVEL = 42, // "debuglevel"
+ S_SEVERITY = 43, // "severity"
+ S_FLUSH = 44, // "flush"
+ S_MAXSIZE = 45, // "maxsize"
+ S_MAXVER = 46, // "maxver"
+ S_PATTERN = 47, // "pattern"
+ S_TOPLEVEL_JSON = 48, // TOPLEVEL_JSON
+ S_TOPLEVEL_DHCPDDNS = 49, // TOPLEVEL_DHCPDDNS
+ S_SUB_DHCPDDNS = 50, // SUB_DHCPDDNS
+ S_SUB_TSIG_KEY = 51, // SUB_TSIG_KEY
+ S_SUB_TSIG_KEYS = 52, // SUB_TSIG_KEYS
+ S_SUB_DDNS_DOMAIN = 53, // SUB_DDNS_DOMAIN
+ S_SUB_DDNS_DOMAINS = 54, // SUB_DDNS_DOMAINS
+ S_SUB_DNS_SERVER = 55, // SUB_DNS_SERVER
+ S_SUB_DNS_SERVERS = 56, // SUB_DNS_SERVERS
+ S_STRING = 57, // "constant string"
+ S_INTEGER = 58, // "integer"
+ S_FLOAT = 59, // "floating point"
+ S_BOOLEAN = 60, // "boolean"
+ S_YYACCEPT = 61, // $accept
+ S_start = 62, // start
+ S_63_1 = 63, // $@1
+ S_64_2 = 64, // $@2
+ S_65_3 = 65, // $@3
+ S_66_4 = 66, // $@4
+ S_67_5 = 67, // $@5
+ S_68_6 = 68, // $@6
+ S_69_7 = 69, // $@7
+ S_70_8 = 70, // $@8
+ S_71_9 = 71, // $@9
+ S_value = 72, // value
+ S_sub_json = 73, // sub_json
+ S_map2 = 74, // map2
+ S_75_10 = 75, // $@10
+ S_map_value = 76, // map_value
+ S_map_content = 77, // map_content
+ S_not_empty_map = 78, // not_empty_map
+ S_list_generic = 79, // list_generic
+ S_80_11 = 80, // $@11
+ S_list_content = 81, // list_content
+ S_not_empty_list = 82, // not_empty_list
+ S_unknown_map_entry = 83, // unknown_map_entry
+ S_syntax_map = 84, // syntax_map
+ S_85_12 = 85, // $@12
+ S_global_objects = 86, // global_objects
+ S_global_object = 87, // global_object
+ S_dhcpddns_object = 88, // dhcpddns_object
+ S_89_13 = 89, // $@13
+ S_sub_dhcpddns = 90, // sub_dhcpddns
+ S_91_14 = 91, // $@14
+ S_dhcpddns_params = 92, // dhcpddns_params
+ S_dhcpddns_param = 93, // dhcpddns_param
+ S_ip_address = 94, // ip_address
+ S_95_15 = 95, // $@15
+ S_port = 96, // port
+ S_dns_server_timeout = 97, // dns_server_timeout
+ S_ncr_protocol = 98, // ncr_protocol
+ S_99_16 = 99, // $@16
+ S_ncr_protocol_value = 100, // ncr_protocol_value
+ S_ncr_format = 101, // ncr_format
+ S_102_17 = 102, // $@17
+ S_user_context = 103, // user_context
+ S_104_18 = 104, // $@18
+ S_comment = 105, // comment
+ S_106_19 = 106, // $@19
+ S_forward_ddns = 107, // forward_ddns
+ S_108_20 = 108, // $@20
+ S_reverse_ddns = 109, // reverse_ddns
+ S_110_21 = 110, // $@21
+ S_ddns_mgr_params = 111, // ddns_mgr_params
+ S_not_empty_ddns_mgr_params = 112, // not_empty_ddns_mgr_params
+ S_ddns_mgr_param = 113, // ddns_mgr_param
+ S_ddns_domains = 114, // ddns_domains
+ S_115_22 = 115, // $@22
+ S_sub_ddns_domains = 116, // sub_ddns_domains
+ S_117_23 = 117, // $@23
+ S_ddns_domain_list = 118, // ddns_domain_list
+ S_not_empty_ddns_domain_list = 119, // not_empty_ddns_domain_list
+ S_ddns_domain = 120, // ddns_domain
+ S_121_24 = 121, // $@24
+ S_sub_ddns_domain = 122, // sub_ddns_domain
+ S_123_25 = 123, // $@25
+ S_ddns_domain_params = 124, // ddns_domain_params
+ S_ddns_domain_param = 125, // ddns_domain_param
+ S_ddns_domain_name = 126, // ddns_domain_name
+ S_127_26 = 127, // $@26
+ S_ddns_domain_key_name = 128, // ddns_domain_key_name
+ S_129_27 = 129, // $@27
+ S_dns_servers = 130, // dns_servers
+ S_131_28 = 131, // $@28
+ S_sub_dns_servers = 132, // sub_dns_servers
+ S_133_29 = 133, // $@29
+ S_dns_server_list = 134, // dns_server_list
+ S_dns_server = 135, // dns_server
+ S_136_30 = 136, // $@30
+ S_sub_dns_server = 137, // sub_dns_server
+ S_138_31 = 138, // $@31
+ S_dns_server_params = 139, // dns_server_params
+ S_dns_server_param = 140, // dns_server_param
+ S_dns_server_hostname = 141, // dns_server_hostname
+ S_142_32 = 142, // $@32
+ S_dns_server_ip_address = 143, // dns_server_ip_address
+ S_144_33 = 144, // $@33
+ S_dns_server_port = 145, // dns_server_port
+ S_tsig_keys = 146, // tsig_keys
+ S_147_34 = 147, // $@34
+ S_sub_tsig_keys = 148, // sub_tsig_keys
+ S_149_35 = 149, // $@35
+ S_tsig_keys_list = 150, // tsig_keys_list
+ S_not_empty_tsig_keys_list = 151, // not_empty_tsig_keys_list
+ S_tsig_key = 152, // tsig_key
+ S_153_36 = 153, // $@36
+ S_sub_tsig_key = 154, // sub_tsig_key
+ S_155_37 = 155, // $@37
+ S_tsig_key_params = 156, // tsig_key_params
+ S_tsig_key_param = 157, // tsig_key_param
+ S_tsig_key_name = 158, // tsig_key_name
+ S_159_38 = 159, // $@38
+ S_tsig_key_algorithm = 160, // tsig_key_algorithm
+ S_161_39 = 161, // $@39
+ S_tsig_key_digest_bits = 162, // tsig_key_digest_bits
+ S_tsig_key_secret = 163, // tsig_key_secret
+ S_164_40 = 164, // $@40
+ S_control_socket = 165, // control_socket
+ S_166_41 = 166, // $@41
+ S_control_socket_params = 167, // control_socket_params
+ S_control_socket_param = 168, // control_socket_param
+ S_control_socket_type = 169, // control_socket_type
+ S_170_42 = 170, // $@42
+ S_control_socket_name = 171, // control_socket_name
+ S_172_43 = 172, // $@43
+ S_dhcp6_json_object = 173, // dhcp6_json_object
+ S_174_44 = 174, // $@44
+ S_dhcp4_json_object = 175, // dhcp4_json_object
+ S_176_45 = 176, // $@45
+ S_control_agent_json_object = 177, // control_agent_json_object
+ S_178_46 = 178, // $@46
+ S_logging_object = 179, // logging_object
+ S_180_47 = 180, // $@47
+ S_logging_params = 181, // logging_params
+ S_logging_param = 182, // logging_param
+ S_loggers = 183, // loggers
+ S_184_48 = 184, // $@48
+ S_loggers_entries = 185, // loggers_entries
+ S_logger_entry = 186, // logger_entry
+ S_187_49 = 187, // $@49
+ S_logger_params = 188, // logger_params
+ S_logger_param = 189, // logger_param
+ S_name = 190, // name
+ S_191_50 = 191, // $@50
+ S_debuglevel = 192, // debuglevel
+ S_severity = 193, // severity
+ S_194_51 = 194, // $@51
+ S_output_options_list = 195, // output_options_list
+ S_196_52 = 196, // $@52
+ S_output_options_list_content = 197, // output_options_list_content
+ S_output_entry = 198, // output_entry
+ S_199_53 = 199, // $@53
+ S_output_params_list = 200, // output_params_list
+ S_output_params = 201, // output_params
+ S_output = 202, // output
+ S_203_54 = 203, // $@54
+ S_flush = 204, // flush
+ S_maxsize = 205, // maxsize
+ S_maxver = 206, // maxver
+ S_pattern = 207, // pattern
+ S_208_55 = 208 // $@55
+ };
+ };
- /// Internal symbol number for tokens (subsumed by symbol_number_type).
- typedef signed char token_number_type;
+ /// (Internal) symbol kind.
+ typedef symbol_kind::symbol_kind_type symbol_kind_type;
+
+ /// The number of tokens.
+ static const symbol_kind_type YYNTOKENS = symbol_kind::YYNTOKENS;
/// A complete symbol.
///
- /// Expects its Base type to provide access to the symbol type
- /// via type_get ().
+ /// Expects its Base type to provide access to the symbol kind
+ /// via kind ().
///
/// Provide access to semantic value and location.
template <typename Base>
#if 201103L <= YY_CPLUSPLUS
/// Move constructor.
- basic_symbol (basic_symbol&& that);
+ basic_symbol (basic_symbol&& that)
+ : Base (std::move (that))
+ , value ()
+ , location (std::move (that.location))
+ {
+ switch (this->kind ())
+ {
+ case 72: // value
+ case 76: // map_value
+ case 100: // ncr_protocol_value
+ value.move< ElementPtr > (std::move (that.value));
+ break;
+
+ case 60: // "boolean"
+ value.move< bool > (std::move (that.value));
+ break;
+
+ case 59: // "floating point"
+ value.move< double > (std::move (that.value));
+ break;
+
+ case 58: // "integer"
+ value.move< int64_t > (std::move (that.value));
+ break;
+
+ case 57: // "constant string"
+ value.move< std::string > (std::move (that.value));
+ break;
+
+ default:
+ break;
+ }
+
+ }
#endif
/// Copy constructor.
void clear ()
{
// User destructor.
- symbol_number_type yytype = this->type_get ();
+ symbol_kind_type yykind = this->kind ();
basic_symbol<Base>& yysym = *this;
(void) yysym;
- switch (yytype)
+ switch (yykind)
{
default:
break;
}
- // Type destructor.
-switch (yytype)
+ // Value type destructor.
+switch (yykind)
{
case 72: // value
case 76: // map_value
Base::clear ();
}
+ /// The user-facing name of this symbol.
+ std::string name () const YY_NOEXCEPT
+ {
+ return D2Parser::symbol_name (this->kind ());
+ }
+
+ /// Backward compatibility (Bison 3.6).
+ symbol_kind_type type_get () const YY_NOEXCEPT;
+
/// Whether empty.
bool empty () const YY_NOEXCEPT;
};
/// Type access provider for token (enum) based symbols.
- struct by_type
+ struct by_kind
{
/// Default constructor.
- by_type ();
+ by_kind ();
#if 201103L <= YY_CPLUSPLUS
/// Move constructor.
- by_type (by_type&& that);
+ by_kind (by_kind&& that);
#endif
/// Copy constructor.
- by_type (const by_type& that);
+ by_kind (const by_kind& that);
- /// The symbol type as needed by the constructor.
- typedef token_type kind_type;
+ /// The symbol kind as needed by the constructor.
+ typedef token_kind_type kind_type;
/// Constructor from (external) token numbers.
- by_type (kind_type t);
+ by_kind (kind_type t);
/// Record that this symbol is empty.
void clear ();
- /// Steal the symbol type from \a that.
- void move (by_type& that);
+ /// Steal the symbol kind from \a that.
+ void move (by_kind& that);
/// The (internal) type number (corresponding to \a type).
/// \a empty when empty.
- symbol_number_type type_get () const YY_NOEXCEPT;
+ symbol_kind_type kind () const YY_NOEXCEPT;
+
+ /// Backward compatibility (Bison 3.6).
+ symbol_kind_type type_get () const YY_NOEXCEPT;
- /// The symbol type.
- /// \a empty_symbol when empty.
- /// An int, not token_number_type, to be able to store empty_symbol.
- int type;
+ /// The symbol kind.
+ /// \a S_YYEMPTY when empty.
+ symbol_kind_type kind_;
};
+ /// Backward compatibility for a private implementation detail (Bison 3.6).
+ typedef by_kind by_type;
+
/// "External" symbols: returned by the scanner.
- struct symbol_type : basic_symbol<by_type>
+ struct symbol_type : basic_symbol<by_kind>
{
/// Superclass.
- typedef basic_symbol<by_type> super_type;
+ typedef basic_symbol<by_kind> super_type;
/// Empty symbol.
symbol_type () {}
symbol_type (int tok, location_type l)
: super_type(token_type (tok), std::move (l))
{
- YY_ASSERT (tok == token::TOKEN_END || tok == token::TOKEN_COMMA || tok == token::TOKEN_COLON || tok == token::TOKEN_LSQUARE_BRACKET || tok == token::TOKEN_RSQUARE_BRACKET || tok == token::TOKEN_LCURLY_BRACKET || tok == token::TOKEN_RCURLY_BRACKET || tok == token::TOKEN_NULL_TYPE || tok == token::TOKEN_DHCP6 || tok == token::TOKEN_DHCP4 || tok == token::TOKEN_CONTROL_AGENT || tok == token::TOKEN_DHCPDDNS || tok == token::TOKEN_IP_ADDRESS || tok == token::TOKEN_PORT || tok == token::TOKEN_DNS_SERVER_TIMEOUT || tok == token::TOKEN_NCR_PROTOCOL || tok == token::TOKEN_UDP || tok == token::TOKEN_TCP || tok == token::TOKEN_NCR_FORMAT || tok == token::TOKEN_JSON || tok == token::TOKEN_USER_CONTEXT || tok == token::TOKEN_COMMENT || tok == token::TOKEN_FORWARD_DDNS || tok == token::TOKEN_REVERSE_DDNS || tok == token::TOKEN_DDNS_DOMAINS || tok == token::TOKEN_KEY_NAME || tok == token::TOKEN_DNS_SERVERS || tok == token::TOKEN_HOSTNAME || tok == token::TOKEN_TSIG_KEYS || tok == token::TOKEN_ALGORITHM || tok == token::TOKEN_DIGEST_BITS || tok == token::TOKEN_SECRET || tok == token::TOKEN_CONTROL_SOCKET || tok == token::TOKEN_SOCKET_TYPE || tok == token::TOKEN_SOCKET_NAME || tok == token::TOKEN_LOGGING || tok == token::TOKEN_LOGGERS || tok == token::TOKEN_NAME || tok == token::TOKEN_OUTPUT_OPTIONS || tok == token::TOKEN_OUTPUT || tok == token::TOKEN_DEBUGLEVEL || tok == token::TOKEN_SEVERITY || tok == token::TOKEN_FLUSH || tok == token::TOKEN_MAXSIZE || tok == token::TOKEN_MAXVER || tok == token::TOKEN_PATTERN || tok == token::TOKEN_TOPLEVEL_JSON || tok == token::TOKEN_TOPLEVEL_DHCPDDNS || tok == token::TOKEN_SUB_DHCPDDNS || tok == token::TOKEN_SUB_TSIG_KEY || tok == token::TOKEN_SUB_TSIG_KEYS || tok == token::TOKEN_SUB_DDNS_DOMAIN || tok == token::TOKEN_SUB_DDNS_DOMAINS || tok == token::TOKEN_SUB_DNS_SERVER || tok == token::TOKEN_SUB_DNS_SERVERS);
+ YY_ASSERT (tok == token::TOKEN_END || tok == token::TOKEN_D2_PARSER_error || tok == token::TOKEN_D2_PARSER_UNDEF || tok == token::TOKEN_COMMA || tok == token::TOKEN_COLON || tok == token::TOKEN_LSQUARE_BRACKET || tok == token::TOKEN_RSQUARE_BRACKET || tok == token::TOKEN_LCURLY_BRACKET || tok == token::TOKEN_RCURLY_BRACKET || tok == token::TOKEN_NULL_TYPE || tok == token::TOKEN_DHCP6 || tok == token::TOKEN_DHCP4 || tok == token::TOKEN_CONTROL_AGENT || tok == token::TOKEN_DHCPDDNS || tok == token::TOKEN_IP_ADDRESS || tok == token::TOKEN_PORT || tok == token::TOKEN_DNS_SERVER_TIMEOUT || tok == token::TOKEN_NCR_PROTOCOL || tok == token::TOKEN_UDP || tok == token::TOKEN_TCP || tok == token::TOKEN_NCR_FORMAT || tok == token::TOKEN_JSON || tok == token::TOKEN_USER_CONTEXT || tok == token::TOKEN_COMMENT || tok == token::TOKEN_FORWARD_DDNS || tok == token::TOKEN_REVERSE_DDNS || tok == token::TOKEN_DDNS_DOMAINS || tok == token::TOKEN_KEY_NAME || tok == token::TOKEN_DNS_SERVERS || tok == token::TOKEN_HOSTNAME || tok == token::TOKEN_TSIG_KEYS || tok == token::TOKEN_ALGORITHM || tok == token::TOKEN_DIGEST_BITS || tok == token::TOKEN_SECRET || tok == token::TOKEN_CONTROL_SOCKET || tok == token::TOKEN_SOCKET_TYPE || tok == token::TOKEN_SOCKET_NAME || tok == token::TOKEN_LOGGING || tok == token::TOKEN_LOGGERS || tok == token::TOKEN_NAME || tok == token::TOKEN_OUTPUT_OPTIONS || tok == token::TOKEN_OUTPUT || tok == token::TOKEN_DEBUGLEVEL || tok == token::TOKEN_SEVERITY || tok == token::TOKEN_FLUSH || tok == token::TOKEN_MAXSIZE || tok == token::TOKEN_MAXVER || tok == token::TOKEN_PATTERN || tok == token::TOKEN_TOPLEVEL_JSON || tok == token::TOKEN_TOPLEVEL_DHCPDDNS || tok == token::TOKEN_SUB_DHCPDDNS || tok == token::TOKEN_SUB_TSIG_KEY || tok == token::TOKEN_SUB_TSIG_KEYS || tok == token::TOKEN_SUB_DDNS_DOMAIN || tok == token::TOKEN_SUB_DDNS_DOMAINS || tok == token::TOKEN_SUB_DNS_SERVER || tok == token::TOKEN_SUB_DNS_SERVERS);
}
#else
symbol_type (int tok, const location_type& l)
: super_type(token_type (tok), l)
{
- YY_ASSERT (tok == token::TOKEN_END || tok == token::TOKEN_COMMA || tok == token::TOKEN_COLON || tok == token::TOKEN_LSQUARE_BRACKET || tok == token::TOKEN_RSQUARE_BRACKET || tok == token::TOKEN_LCURLY_BRACKET || tok == token::TOKEN_RCURLY_BRACKET || tok == token::TOKEN_NULL_TYPE || tok == token::TOKEN_DHCP6 || tok == token::TOKEN_DHCP4 || tok == token::TOKEN_CONTROL_AGENT || tok == token::TOKEN_DHCPDDNS || tok == token::TOKEN_IP_ADDRESS || tok == token::TOKEN_PORT || tok == token::TOKEN_DNS_SERVER_TIMEOUT || tok == token::TOKEN_NCR_PROTOCOL || tok == token::TOKEN_UDP || tok == token::TOKEN_TCP || tok == token::TOKEN_NCR_FORMAT || tok == token::TOKEN_JSON || tok == token::TOKEN_USER_CONTEXT || tok == token::TOKEN_COMMENT || tok == token::TOKEN_FORWARD_DDNS || tok == token::TOKEN_REVERSE_DDNS || tok == token::TOKEN_DDNS_DOMAINS || tok == token::TOKEN_KEY_NAME || tok == token::TOKEN_DNS_SERVERS || tok == token::TOKEN_HOSTNAME || tok == token::TOKEN_TSIG_KEYS || tok == token::TOKEN_ALGORITHM || tok == token::TOKEN_DIGEST_BITS || tok == token::TOKEN_SECRET || tok == token::TOKEN_CONTROL_SOCKET || tok == token::TOKEN_SOCKET_TYPE || tok == token::TOKEN_SOCKET_NAME || tok == token::TOKEN_LOGGING || tok == token::TOKEN_LOGGERS || tok == token::TOKEN_NAME || tok == token::TOKEN_OUTPUT_OPTIONS || tok == token::TOKEN_OUTPUT || tok == token::TOKEN_DEBUGLEVEL || tok == token::TOKEN_SEVERITY || tok == token::TOKEN_FLUSH || tok == token::TOKEN_MAXSIZE || tok == token::TOKEN_MAXVER || tok == token::TOKEN_PATTERN || tok == token::TOKEN_TOPLEVEL_JSON || tok == token::TOKEN_TOPLEVEL_DHCPDDNS || tok == token::TOKEN_SUB_DHCPDDNS || tok == token::TOKEN_SUB_TSIG_KEY || tok == token::TOKEN_SUB_TSIG_KEYS || tok == token::TOKEN_SUB_DDNS_DOMAIN || tok == token::TOKEN_SUB_DDNS_DOMAINS || tok == token::TOKEN_SUB_DNS_SERVER || tok == token::TOKEN_SUB_DNS_SERVERS);
+ YY_ASSERT (tok == token::TOKEN_END || tok == token::TOKEN_D2_PARSER_error || tok == token::TOKEN_D2_PARSER_UNDEF || tok == token::TOKEN_COMMA || tok == token::TOKEN_COLON || tok == token::TOKEN_LSQUARE_BRACKET || tok == token::TOKEN_RSQUARE_BRACKET || tok == token::TOKEN_LCURLY_BRACKET || tok == token::TOKEN_RCURLY_BRACKET || tok == token::TOKEN_NULL_TYPE || tok == token::TOKEN_DHCP6 || tok == token::TOKEN_DHCP4 || tok == token::TOKEN_CONTROL_AGENT || tok == token::TOKEN_DHCPDDNS || tok == token::TOKEN_IP_ADDRESS || tok == token::TOKEN_PORT || tok == token::TOKEN_DNS_SERVER_TIMEOUT || tok == token::TOKEN_NCR_PROTOCOL || tok == token::TOKEN_UDP || tok == token::TOKEN_TCP || tok == token::TOKEN_NCR_FORMAT || tok == token::TOKEN_JSON || tok == token::TOKEN_USER_CONTEXT || tok == token::TOKEN_COMMENT || tok == token::TOKEN_FORWARD_DDNS || tok == token::TOKEN_REVERSE_DDNS || tok == token::TOKEN_DDNS_DOMAINS || tok == token::TOKEN_KEY_NAME || tok == token::TOKEN_DNS_SERVERS || tok == token::TOKEN_HOSTNAME || tok == token::TOKEN_TSIG_KEYS || tok == token::TOKEN_ALGORITHM || tok == token::TOKEN_DIGEST_BITS || tok == token::TOKEN_SECRET || tok == token::TOKEN_CONTROL_SOCKET || tok == token::TOKEN_SOCKET_TYPE || tok == token::TOKEN_SOCKET_NAME || tok == token::TOKEN_LOGGING || tok == token::TOKEN_LOGGERS || tok == token::TOKEN_NAME || tok == token::TOKEN_OUTPUT_OPTIONS || tok == token::TOKEN_OUTPUT || tok == token::TOKEN_DEBUGLEVEL || tok == token::TOKEN_SEVERITY || tok == token::TOKEN_FLUSH || tok == token::TOKEN_MAXSIZE || tok == token::TOKEN_MAXVER || tok == token::TOKEN_PATTERN || tok == token::TOKEN_TOPLEVEL_JSON || tok == token::TOKEN_TOPLEVEL_DHCPDDNS || tok == token::TOKEN_SUB_DHCPDDNS || tok == token::TOKEN_SUB_TSIG_KEY || tok == token::TOKEN_SUB_TSIG_KEYS || tok == token::TOKEN_SUB_DDNS_DOMAIN || tok == token::TOKEN_SUB_DDNS_DOMAINS || tok == token::TOKEN_SUB_DNS_SERVER || tok == token::TOKEN_SUB_DNS_SERVERS);
}
#endif
#if 201103L <= YY_CPLUSPLUS
D2Parser (isc::d2::D2ParserContext& ctx_yyarg);
virtual ~D2Parser ();
+#if 201103L <= YY_CPLUSPLUS
+ /// Non copyable.
+ D2Parser (const D2Parser&) = delete;
+ /// Non copyable.
+ D2Parser& operator= (const D2Parser&) = delete;
+#endif
+
/// Parse. An alias for parse ().
/// \returns 0 iff parsing succeeded.
int operator() ();
/// Report a syntax error.
void error (const syntax_error& err);
+ /// The user-facing name of the symbol whose (internal) number is
+ /// YYSYMBOL. No bounds checking.
+ static std::string symbol_name (symbol_kind_type yysymbol);
+
// Implementation of make_symbol for each symbol type.
#if 201103L <= YY_CPLUSPLUS
static
return symbol_type (token::TOKEN_END, l);
}
#endif
+#if 201103L <= YY_CPLUSPLUS
+ static
+ symbol_type
+ make_D2_PARSER_error (location_type l)
+ {
+ return symbol_type (token::TOKEN_D2_PARSER_error, std::move (l));
+ }
+#else
+ static
+ symbol_type
+ make_D2_PARSER_error (const location_type& l)
+ {
+ return symbol_type (token::TOKEN_D2_PARSER_error, l);
+ }
+#endif
+#if 201103L <= YY_CPLUSPLUS
+ static
+ symbol_type
+ make_D2_PARSER_UNDEF (location_type l)
+ {
+ return symbol_type (token::TOKEN_D2_PARSER_UNDEF, std::move (l));
+ }
+#else
+ static
+ symbol_type
+ make_D2_PARSER_UNDEF (const location_type& l)
+ {
+ return symbol_type (token::TOKEN_D2_PARSER_UNDEF, l);
+ }
+#endif
#if 201103L <= YY_CPLUSPLUS
static
symbol_type
#endif
+ class context
+ {
+ public:
+ context (const D2Parser& yyparser, const symbol_type& yyla);
+ const symbol_type& lookahead () const { return yyla_; }
+ symbol_kind_type token () const { return yyla_.kind (); }
+ const location_type& location () const { return yyla_.location; }
+
+ /// Put in YYARG at most YYARGN of the expected tokens, and return the
+ /// number of tokens stored in YYARG. If YYARG is null, return the
+ /// number of expected tokens (guaranteed to be less than YYNTOKENS).
+ int expected_tokens (symbol_kind_type yyarg[], int yyargn) const;
+
+ private:
+ const D2Parser& yyparser_;
+ const symbol_type& yyla_;
+ };
+
private:
- /// This class is not copyable.
+#if YY_CPLUSPLUS < 201103L
+ /// Non copyable.
D2Parser (const D2Parser&);
+ /// Non copyable.
D2Parser& operator= (const D2Parser&);
+#endif
+
/// Stored state numbers (used for stacks).
typedef short 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;
+ /// The arguments of the error message.
+ int yy_syntax_error_arguments_ (const context& yyctx,
+ symbol_kind_type yyarg[], int yyargn) const;
+ /// Generate an error message.
+ /// \param yyctx the context in which the error occurred.
+ virtual std::string yysyntax_error_ (const context& yyctx) const;
/// Compute post-reduction state.
/// \param yystate the current state
/// \param yysym the nonterminal to push on the stack
static const short yypact_ninf_;
static const signed char yytable_ninf_;
- /// Convert a scanner token number \a t to a symbol number.
- /// In theory \a t should be a token_type, but character literals
+ /// Convert a scanner token kind \a t to a symbol kind.
+ /// In theory \a t should be a token_kind_type, but character literals
/// are valid, yet not members of the token_type enum.
- static token_number_type yytranslate_ (int t);
+ static symbol_kind_type yytranslate_ (int t);
+
+ /// Convert the symbol name \a n to a form suitable for a diagnostic.
+ static std::string yytnamerr_ (const char *yystr);
+
+ /// For a symbol, its name in clear.
+ static const char* const yytname_[];
+
// Tables.
- // YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+ // YYPACTSTATE-NUM -- Index in YYTABLE of the portion describing
// STATE-NUM.
static const short yypact_[];
- // YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
+ // YYDEFACTSTATE-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].
+ // YYPGOTONTERM-NUM.
static const short yypgoto_[];
- // YYDEFGOTO[NTERM-NUM].
+ // YYDEFGOTONTERM-NUM.
static const short yydefgoto_[];
- // YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If
+ // YYTABLEYYPACT[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 short yytable_[];
static const short yycheck_[];
- // YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+ // YYSTOSSTATE-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.
+ // YYR1YYN -- 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.
+ // YYR2YYN -- Number of symbols on the right hand side of rule YYN.
static const signed 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.
+ // YYRLINEYYN -- Source line where rule number YYN was defined.
static const short yyrline_[];
/// Report on the debug stream that the rule \a r is going to be reduced.
- virtual void yy_reduce_print_ (int r);
+ virtual void yy_reduce_print_ (int r) const;
/// Print the state stack on the debug stream.
- virtual void yystack_print_ ();
+ virtual void yy_stack_print_ () const;
/// Debugging level.
int yydebug_;
/// Debug stream.
std::ostream* yycdebug_;
- /// \brief Display a symbol type, value and location.
+ /// \brief Display a symbol kind, value and location.
/// \param yyo The output stream.
/// \param yysym The symbol.
template <typename Base>
/// Default constructor.
by_state () YY_NOEXCEPT;
- /// The symbol type as needed by the constructor.
+ /// The symbol kind as needed by the constructor.
typedef state_type kind_type;
/// Constructor.
/// Record that this symbol is empty.
void clear () YY_NOEXCEPT;
- /// Steal the symbol type from \a that.
+ /// Steal the symbol kind 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 YY_NOEXCEPT;
+ /// The symbol kind (corresponding to \a state).
+ /// \a S_YYEMPTY when empty.
+ symbol_kind_type kind () const YY_NOEXCEPT;
/// The state number used to denote an empty symbol.
/// We use the initial state, as it does not have a value.
{
public:
// Hide our reversed order.
- typedef typename S::reverse_iterator iterator;
- typedef typename S::const_reverse_iterator const_iterator;
+ typedef typename S::iterator iterator;
+ typedef typename S::const_iterator const_iterator;
typedef typename S::size_type size_type;
typedef typename std::ptrdiff_t index_type;
: seq_ (n)
{}
+#if 201103L <= YY_CPLUSPLUS
+ /// Non copyable.
+ stack (const stack&) = delete;
+ /// Non copyable.
+ stack& operator= (const stack&) = delete;
+#endif
+
/// Random access.
///
/// Index 0 returns the topmost element.
return index_type (seq_.size ());
}
- std::ptrdiff_t
- ssize () const YY_NOEXCEPT
- {
- return std::ptrdiff_t (size ());
- }
-
/// Iterator on top of the stack (going downwards).
const_iterator
begin () const YY_NOEXCEPT
{
- return seq_.rbegin ();
+ return seq_.begin ();
}
/// Bottom of the stack.
const_iterator
end () const YY_NOEXCEPT
{
- return seq_.rend ();
+ return seq_.end ();
}
/// Present a slice of the top of a stack.
};
private:
+#if YY_CPLUSPLUS < 201103L
+ /// Non copyable.
stack (const stack&);
+ /// Non copyable.
stack& operator= (const stack&);
+#endif
/// The wrapped container.
S seq_;
};
/// Pop \a n symbols from the stack.
void yypop_ (int n = 1);
- /// Some specific tokens.
- static const token_number_type yy_error_token_ = 1;
- static const token_number_type yy_undef_token_ = 2;
-
/// Constants.
enum
{
- yyeof_ = 0,
yylast_ = 304, ///< Last index in yytable_.
yynnts_ = 148, ///< Number of nonterminal symbols.
- yyfinal_ = 20, ///< Termination state number.
- yyntokens_ = 61 ///< Number of tokens.
+ yyfinal_ = 20 ///< Termination state number.
};
// User arguments.
isc::d2::D2ParserContext& ctx;
+
};
inline
- D2Parser::token_number_type
+ D2Parser::symbol_kind_type
D2Parser::yytranslate_ (int t)
{
// YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to
// TOKEN-NUM as returned by yylex.
static
- const token_number_type
+ const signed char
translate_table[] =
{
0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
const int user_token_number_max_ = 315;
if (t <= 0)
- return yyeof_;
+ return symbol_kind::S_YYEOF;
else if (t <= user_token_number_max_)
- return translate_table[t];
+ return YY_CAST (symbol_kind_type, translate_table[t]);
else
- return yy_undef_token_;
+ return symbol_kind::S_YYUNDEF;
}
// basic_symbol.
-#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 72: // value
- case 76: // map_value
- case 100: // ncr_protocol_value
- value.move< ElementPtr > (std::move (that.value));
- break;
-
- case 60: // "boolean"
- value.move< bool > (std::move (that.value));
- break;
-
- case 59: // "floating point"
- value.move< double > (std::move (that.value));
- break;
-
- case 58: // "integer"
- value.move< int64_t > (std::move (that.value));
- break;
-
- case 57: // "constant string"
- value.move< std::string > (std::move (that.value));
- break;
-
- default:
- break;
- }
-
- }
-#endif
-
template <typename Base>
D2Parser::basic_symbol<Base>::basic_symbol (const basic_symbol& that)
: Base (that)
, value ()
, location (that.location)
{
- switch (this->type_get ())
+ switch (this->kind ())
{
case 72: // value
case 76: // map_value
+ template <typename Base>
+ D2Parser::symbol_kind_type
+ D2Parser::basic_symbol<Base>::type_get () const YY_NOEXCEPT
+ {
+ return this->kind ();
+ }
+
template <typename Base>
bool
D2Parser::basic_symbol<Base>::empty () const YY_NOEXCEPT
{
- return Base::type_get () == empty_symbol;
+ return this->kind () == symbol_kind::S_YYEMPTY;
}
template <typename Base>
D2Parser::basic_symbol<Base>::move (basic_symbol& s)
{
super_type::move (s);
- switch (this->type_get ())
+ switch (this->kind ())
{
case 72: // value
case 76: // map_value
location = YY_MOVE (s.location);
}
- // by_type.
+ // by_kind.
inline
- D2Parser::by_type::by_type ()
- : type (empty_symbol)
+ D2Parser::by_kind::by_kind ()
+ : kind_ (symbol_kind::S_YYEMPTY)
{}
#if 201103L <= YY_CPLUSPLUS
inline
- D2Parser::by_type::by_type (by_type&& that)
- : type (that.type)
+ D2Parser::by_kind::by_kind (by_kind&& that)
+ : kind_ (that.kind_)
{
that.clear ();
}
#endif
inline
- D2Parser::by_type::by_type (const by_type& that)
- : type (that.type)
+ D2Parser::by_kind::by_kind (const by_kind& that)
+ : kind_ (that.kind_)
{}
inline
- D2Parser::by_type::by_type (token_type t)
- : type (yytranslate_ (t))
+ D2Parser::by_kind::by_kind (token_kind_type t)
+ : kind_ (yytranslate_ (t))
{}
inline
void
- D2Parser::by_type::clear ()
+ D2Parser::by_kind::clear ()
{
- type = empty_symbol;
+ kind_ = symbol_kind::S_YYEMPTY;
}
inline
void
- D2Parser::by_type::move (by_type& that)
+ D2Parser::by_kind::move (by_kind& that)
{
- type = that.type;
+ kind_ = that.kind_;
that.clear ();
}
inline
- int
- D2Parser::by_type::type_get () const YY_NOEXCEPT
+ D2Parser::symbol_kind_type
+ D2Parser::by_kind::kind () const YY_NOEXCEPT
+ {
+ return kind_;
+ }
+
+ inline
+ D2Parser::symbol_kind_type
+ D2Parser::by_kind::type_get () const YY_NOEXCEPT
{
- return type;
+ return this->kind ();
}
#line 14 "d2_parser.yy"
} } // isc::d2
-#line 2290 "d2_parser.h"
+#line 2613 "d2_parser.h"
-// Generated 202004241256
-// A Bison parser, made by GNU Bison 3.5.4.
+// Generated 202005190718
+// A Bison parser, made by GNU Bison 3.6.2.
// Locations for Bison parsers in C++
-// Generated 202004241256
-// A Bison parser, made by GNU Bison 3.5.4.
+// Generated 202005190718
+// A Bison parser, made by GNU Bison 3.6.2.
// Starting with Bison 3.2, this file is useless: the structure it
// used to define is now defined in "location.hh".
-// Generated 202004241256
-// A Bison parser, made by GNU Bison 3.5.4.
+// Generated 202005190718
+// A Bison parser, made by GNU Bison 3.6.2.
// Starting with Bison 3.2, this file is useless: the structure it
// used to define is now defined with the parser itself.
-// A Bison parser, made by GNU Bison 3.5.4.
+// A Bison parser, made by GNU Bison 3.6.2.
// Skeleton implementation for Bison LALR(1) parsers in C++
// This special exception was added by the Free Software Foundation in
// version 2.2 of Bison.
-// Undocumented macros, especially those whose name start with YY_,
-// are private implementation details. Do not rely on them.
+// DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual,
+// especially those whose name start with YY_ or yy_. They are
+// private implementation details that can be changed or removed.
// Take the name prefix into account.
#include <dhcp4/parser_context.h>
-#line 51 "dhcp4_parser.cc"
+#line 52 "dhcp4_parser.cc"
#ifndef YY_
# endif
#endif
+
// Whether we are compiled with exception support.
#ifndef YY_EXCEPTIONS
# if defined __GNUC__ && !defined __EXCEPTIONS
# define YY_STACK_PRINT() \
do { \
if (yydebug_) \
- yystack_print_ (); \
+ yy_stack_print_ (); \
} while (false)
#else // !PARSER4_DEBUG
#line 14 "dhcp4_parser.yy"
namespace isc { namespace dhcp {
-#line 143 "dhcp4_parser.cc"
-
-
- /* Return YYSTR after stripping away unnecessary quotes and
- backslashes, so that it's suitable for yyerror. The heuristic is
- that double-quoting is unnecessary unless the string contains an
- apostrophe, a comma, or backslash (other than backslash-backslash).
- YYSTR is taken from yytname. */
- std::string
- Dhcp4Parser::yytnamerr_ (const char *yystr)
- {
- if (*yystr == '"')
- {
- std::string yyr;
- char const *yyp = yystr;
-
- for (;;)
- switch (*++yyp)
- {
- case '\'':
- case ',':
- goto do_not_strip_quotes;
-
- case '\\':
- if (*++yyp != '\\')
- goto do_not_strip_quotes;
- else
- goto append;
-
- append:
- default:
- yyr += *yyp;
- break;
-
- case '"':
- return yyr;
- }
- do_not_strip_quotes: ;
- }
-
- return yystr;
- }
-
+#line 145 "dhcp4_parser.cc"
/// Build a parser object.
Dhcp4Parser::Dhcp4Parser (isc::dhcp::Parser4Context& ctx_yyarg)
{}
/*---------------.
- | Symbol types. |
+ | symbol kinds. |
`---------------*/
: state (s)
{}
- Dhcp4Parser::symbol_number_type
- Dhcp4Parser::by_state::type_get () const YY_NOEXCEPT
+ Dhcp4Parser::symbol_kind_type
+ Dhcp4Parser::by_state::kind () const YY_NOEXCEPT
{
if (state == empty_state)
- return empty_symbol;
+ return symbol_kind::S_YYEMPTY;
else
- return yystos_[+state];
+ return YY_CAST (symbol_kind_type, yystos_[+state]);
}
Dhcp4Parser::stack_symbol_type::stack_symbol_type ()
Dhcp4Parser::stack_symbol_type::stack_symbol_type (YY_RVREF (stack_symbol_type) that)
: super_type (YY_MOVE (that.state), YY_MOVE (that.location))
{
- switch (that.type_get ())
+ switch (that.kind ())
{
case 211: // value
case 215: // map_value
Dhcp4Parser::stack_symbol_type::stack_symbol_type (state_type s, YY_MOVE_REF (symbol_type) that)
: super_type (s, YY_MOVE (that.location))
{
- switch (that.type_get ())
+ switch (that.kind ())
{
case 211: // value
case 215: // map_value
}
// that is emptied.
- that.type = empty_symbol;
+ that.kind_ = symbol_kind::S_YYEMPTY;
}
#if YY_CPLUSPLUS < 201103L
Dhcp4Parser::stack_symbol_type::operator= (const stack_symbol_type& that)
{
state = that.state;
- switch (that.type_get ())
+ switch (that.kind ())
{
case 211: // value
case 215: // map_value
Dhcp4Parser::stack_symbol_type::operator= (stack_symbol_type& that)
{
state = that.state;
- switch (that.type_get ())
+ switch (that.kind ())
{
case 211: // value
case 215: // map_value
#if PARSER4_DEBUG
template <typename Base>
void
- Dhcp4Parser::yy_print_ (std::ostream& yyo,
- const basic_symbol<Base>& yysym) const
+ Dhcp4Parser::yy_print_ (std::ostream& yyo, const basic_symbol<Base>& yysym) const
{
std::ostream& yyoutput = yyo;
YYUSE (yyoutput);
- symbol_number_type yytype = yysym.type_get ();
-#if defined __GNUC__ && ! defined __clang__ && ! defined __ICC && __GNUC__ * 100 + __GNUC_MINOR__ <= 408
- // Avoid a (spurious) G++ 4.8 warning about "array subscript is
- // below array bounds".
if (yysym.empty ())
- std::abort ();
-#endif
- yyo << (yytype < yyntokens_ ? "token" : "nterm")
- << ' ' << yytname_[yytype] << " ("
- << yysym.location << ": ";
- switch (yytype)
+ yyo << "empty symbol";
+ else
+ {
+ symbol_kind_type yykind = yysym.kind ();
+ yyo << (yykind < YYNTOKENS ? "token" : "nterm")
+ << ' ' << yysym.name () << " ("
+ << yysym.location << ": ";
+ switch (yykind)
{
case 191: // "constant string"
#line 274 "dhcp4_parser.yy"
{ yyoutput << yysym.value.template as < std::string > (); }
-#line 447 "dhcp4_parser.cc"
+#line 404 "dhcp4_parser.cc"
break;
case 192: // "integer"
#line 274 "dhcp4_parser.yy"
{ yyoutput << yysym.value.template as < int64_t > (); }
-#line 453 "dhcp4_parser.cc"
+#line 410 "dhcp4_parser.cc"
break;
case 193: // "floating point"
#line 274 "dhcp4_parser.yy"
{ yyoutput << yysym.value.template as < double > (); }
-#line 459 "dhcp4_parser.cc"
+#line 416 "dhcp4_parser.cc"
break;
case 194: // "boolean"
#line 274 "dhcp4_parser.yy"
{ yyoutput << yysym.value.template as < bool > (); }
-#line 465 "dhcp4_parser.cc"
+#line 422 "dhcp4_parser.cc"
break;
case 211: // value
#line 274 "dhcp4_parser.yy"
{ yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 471 "dhcp4_parser.cc"
+#line 428 "dhcp4_parser.cc"
break;
case 215: // map_value
#line 274 "dhcp4_parser.yy"
{ yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 477 "dhcp4_parser.cc"
+#line 434 "dhcp4_parser.cc"
break;
case 256: // ddns_replace_client_name_value
#line 274 "dhcp4_parser.yy"
{ yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 483 "dhcp4_parser.cc"
+#line 440 "dhcp4_parser.cc"
break;
case 278: // socket_type
#line 274 "dhcp4_parser.yy"
{ yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 489 "dhcp4_parser.cc"
+#line 446 "dhcp4_parser.cc"
break;
case 281: // outbound_interface_value
#line 274 "dhcp4_parser.yy"
{ yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 495 "dhcp4_parser.cc"
+#line 452 "dhcp4_parser.cc"
break;
case 303: // db_type
#line 274 "dhcp4_parser.yy"
{ yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 501 "dhcp4_parser.cc"
+#line 458 "dhcp4_parser.cc"
break;
case 397: // hr_mode
#line 274 "dhcp4_parser.yy"
{ yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 507 "dhcp4_parser.cc"
+#line 464 "dhcp4_parser.cc"
break;
case 552: // ncr_protocol_value
#line 274 "dhcp4_parser.yy"
{ yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 513 "dhcp4_parser.cc"
+#line 470 "dhcp4_parser.cc"
break;
default:
break;
}
- yyo << ')';
+ yyo << ')';
+ }
}
#endif
Dhcp4Parser::state_type
Dhcp4Parser::yy_lr_goto_state_ (state_type yystate, int yysym)
{
- int yyr = yypgoto_[yysym - yyntokens_] + yystate;
+ int yyr = yypgoto_[yysym - YYNTOKENS] + yystate;
if (0 <= yyr && yyr <= yylast_ && yycheck_[yyr] == yystate)
return yytable_[yyr];
else
- return yydefgoto_[yysym - yyntokens_];
+ return yydefgoto_[yysym - YYNTOKENS];
}
bool
`-----------------------------------------------*/
yynewstate:
YYCDEBUG << "Entering state " << int (yystack_[0].state) << '\n';
+ YY_STACK_PRINT ();
// Accept?
if (yystack_[0].state == yyfinal_)
// Read a lookahead token.
if (yyla.empty ())
{
- YYCDEBUG << "Reading a token: ";
+ YYCDEBUG << "Reading a token\n";
#if YY_EXCEPTIONS
try
#endif // YY_EXCEPTIONS
}
YY_SYMBOL_PRINT ("Next token is", yyla);
+ if (yyla.kind () == symbol_kind::S_YYerror)
+ {
+ // The scanner already issued an error message, process directly
+ // to error recovery. But do not keep the error token as
+ // lookahead, it is too special and may lead us to an endless
+ // loop in error recovery. */
+ yyla.kind_ = symbol_kind::S_YYUNDEF;
+ goto yyerrlab1;
+ }
+
/* If the proper action on seeing token YYLA.TYPE is to reduce or
to detect an error, take that action. */
- yyn += yyla.type_get ();
- if (yyn < 0 || yylast_ < yyn || yycheck_[yyn] != yyla.type_get ())
+ yyn += yyla.kind ();
+ if (yyn < 0 || yylast_ < yyn || yycheck_[yyn] != yyla.kind ())
{
goto yydefault;
}
case 2:
#line 283 "dhcp4_parser.yy"
{ ctx.ctx_ = ctx.NO_KEYWORD; }
-#line 781 "dhcp4_parser.cc"
+#line 750 "dhcp4_parser.cc"
break;
case 4:
#line 284 "dhcp4_parser.yy"
{ ctx.ctx_ = ctx.CONFIG; }
-#line 787 "dhcp4_parser.cc"
+#line 756 "dhcp4_parser.cc"
break;
case 6:
#line 285 "dhcp4_parser.yy"
{ ctx.ctx_ = ctx.DHCP4; }
-#line 793 "dhcp4_parser.cc"
+#line 762 "dhcp4_parser.cc"
break;
case 8:
#line 286 "dhcp4_parser.yy"
{ ctx.ctx_ = ctx.INTERFACES_CONFIG; }
-#line 799 "dhcp4_parser.cc"
+#line 768 "dhcp4_parser.cc"
break;
case 10:
#line 287 "dhcp4_parser.yy"
{ ctx.ctx_ = ctx.SUBNET4; }
-#line 805 "dhcp4_parser.cc"
+#line 774 "dhcp4_parser.cc"
break;
case 12:
#line 288 "dhcp4_parser.yy"
{ ctx.ctx_ = ctx.POOLS; }
-#line 811 "dhcp4_parser.cc"
+#line 780 "dhcp4_parser.cc"
break;
case 14:
#line 289 "dhcp4_parser.yy"
{ ctx.ctx_ = ctx.RESERVATIONS; }
-#line 817 "dhcp4_parser.cc"
+#line 786 "dhcp4_parser.cc"
break;
case 16:
#line 290 "dhcp4_parser.yy"
{ ctx.ctx_ = ctx.DHCP4; }
-#line 823 "dhcp4_parser.cc"
+#line 792 "dhcp4_parser.cc"
break;
case 18:
#line 291 "dhcp4_parser.yy"
{ ctx.ctx_ = ctx.OPTION_DEF; }
-#line 829 "dhcp4_parser.cc"
+#line 798 "dhcp4_parser.cc"
break;
case 20:
#line 292 "dhcp4_parser.yy"
{ ctx.ctx_ = ctx.OPTION_DATA; }
-#line 835 "dhcp4_parser.cc"
+#line 804 "dhcp4_parser.cc"
break;
case 22:
#line 293 "dhcp4_parser.yy"
{ ctx.ctx_ = ctx.HOOKS_LIBRARIES; }
-#line 841 "dhcp4_parser.cc"
+#line 810 "dhcp4_parser.cc"
break;
case 24:
#line 294 "dhcp4_parser.yy"
{ ctx.ctx_ = ctx.DHCP_DDNS; }
-#line 847 "dhcp4_parser.cc"
+#line 816 "dhcp4_parser.cc"
break;
case 26:
#line 295 "dhcp4_parser.yy"
{ ctx.ctx_ = ctx.LOGGING; }
-#line 853 "dhcp4_parser.cc"
+#line 822 "dhcp4_parser.cc"
break;
case 28:
#line 296 "dhcp4_parser.yy"
{ ctx.ctx_ = ctx.CONFIG_CONTROL; }
-#line 859 "dhcp4_parser.cc"
+#line 828 "dhcp4_parser.cc"
break;
case 30:
#line 304 "dhcp4_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); }
-#line 865 "dhcp4_parser.cc"
+#line 834 "dhcp4_parser.cc"
break;
case 31:
#line 305 "dhcp4_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location))); }
-#line 871 "dhcp4_parser.cc"
+#line 840 "dhcp4_parser.cc"
break;
case 32:
#line 306 "dhcp4_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); }
-#line 877 "dhcp4_parser.cc"
+#line 846 "dhcp4_parser.cc"
break;
case 33:
#line 307 "dhcp4_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); }
-#line 883 "dhcp4_parser.cc"
+#line 852 "dhcp4_parser.cc"
break;
case 34:
#line 308 "dhcp4_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new NullElement(ctx.loc2pos(yystack_[0].location))); }
-#line 889 "dhcp4_parser.cc"
+#line 858 "dhcp4_parser.cc"
break;
case 35:
#line 309 "dhcp4_parser.yy"
{ yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
-#line 895 "dhcp4_parser.cc"
+#line 864 "dhcp4_parser.cc"
break;
case 36:
#line 310 "dhcp4_parser.yy"
{ yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
-#line 901 "dhcp4_parser.cc"
+#line 870 "dhcp4_parser.cc"
break;
case 37:
// Push back the JSON value on the stack
ctx.stack_.push_back(yystack_[0].value.as < ElementPtr > ());
}
-#line 910 "dhcp4_parser.cc"
+#line 879 "dhcp4_parser.cc"
break;
case 38:
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(m);
}
-#line 921 "dhcp4_parser.cc"
+#line 890 "dhcp4_parser.cc"
break;
case 39:
// (maybe some sanity checking), this would be the best place
// for it.
}
-#line 931 "dhcp4_parser.cc"
+#line 900 "dhcp4_parser.cc"
break;
case 40:
#line 329 "dhcp4_parser.yy"
{ yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
-#line 937 "dhcp4_parser.cc"
+#line 906 "dhcp4_parser.cc"
break;
case 43:
// map containing a single entry
ctx.stack_.back()->set(yystack_[2].value.as < std::string > (), yystack_[0].value.as < ElementPtr > ());
}
-#line 946 "dhcp4_parser.cc"
+#line 915 "dhcp4_parser.cc"
break;
case 44:
// comma and string:value
ctx.stack_.back()->set(yystack_[2].value.as < std::string > (), yystack_[0].value.as < ElementPtr > ());
}
-#line 956 "dhcp4_parser.cc"
+#line 925 "dhcp4_parser.cc"
break;
case 45:
ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(l);
}
-#line 965 "dhcp4_parser.cc"
+#line 934 "dhcp4_parser.cc"
break;
case 46:
{
// list parsing complete. Put any sanity checking here
}
-#line 973 "dhcp4_parser.cc"
+#line 942 "dhcp4_parser.cc"
break;
case 49:
// List consisting of a single element.
ctx.stack_.back()->add(yystack_[0].value.as < ElementPtr > ());
}
-#line 982 "dhcp4_parser.cc"
+#line 951 "dhcp4_parser.cc"
break;
case 50:
// List ending with , and a value.
ctx.stack_.back()->add(yystack_[0].value.as < ElementPtr > ());
}
-#line 991 "dhcp4_parser.cc"
+#line 960 "dhcp4_parser.cc"
break;
case 51:
{
// List parsing about to start
}
-#line 999 "dhcp4_parser.cc"
+#line 968 "dhcp4_parser.cc"
break;
case 52:
// list parsing complete. Put any sanity checking here
//ctx.stack_.pop_back();
}
-#line 1008 "dhcp4_parser.cc"
+#line 977 "dhcp4_parser.cc"
break;
case 55:
ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(s);
}
-#line 1017 "dhcp4_parser.cc"
+#line 986 "dhcp4_parser.cc"
break;
case 56:
ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(s);
}
-#line 1026 "dhcp4_parser.cc"
+#line 995 "dhcp4_parser.cc"
break;
case 57:
error(yystack_[1].location,
"got unexpected keyword \"" + keyword + "\" in " + where + " map.");
}
-#line 1037 "dhcp4_parser.cc"
+#line 1006 "dhcp4_parser.cc"
break;
case 58:
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(m);
}
-#line 1048 "dhcp4_parser.cc"
+#line 1017 "dhcp4_parser.cc"
break;
case 59:
// Dhcp4 is required
ctx.require("Dhcp4", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
}
-#line 1061 "dhcp4_parser.cc"
+#line 1030 "dhcp4_parser.cc"
break;
case 68:
ctx.stack_.push_back(m);
ctx.enter(ctx.DHCP4);
}
-#line 1074 "dhcp4_parser.cc"
+#line 1043 "dhcp4_parser.cc"
break;
case 69:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 1084 "dhcp4_parser.cc"
+#line 1053 "dhcp4_parser.cc"
break;
case 70:
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(m);
}
-#line 1094 "dhcp4_parser.cc"
+#line 1063 "dhcp4_parser.cc"
break;
case 71:
// No global parameter is required
// parsing completed
}
-#line 1103 "dhcp4_parser.cc"
+#line 1072 "dhcp4_parser.cc"
break;
case 126:
ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("valid-lifetime", prf);
}
-#line 1112 "dhcp4_parser.cc"
+#line 1081 "dhcp4_parser.cc"
break;
case 127:
ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("min-valid-lifetime", prf);
}
-#line 1121 "dhcp4_parser.cc"
+#line 1090 "dhcp4_parser.cc"
break;
case 128:
ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("max-valid-lifetime", prf);
}
-#line 1130 "dhcp4_parser.cc"
+#line 1099 "dhcp4_parser.cc"
break;
case 129:
ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("renew-timer", prf);
}
-#line 1139 "dhcp4_parser.cc"
+#line 1108 "dhcp4_parser.cc"
break;
case 130:
ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("rebind-timer", prf);
}
-#line 1148 "dhcp4_parser.cc"
+#line 1117 "dhcp4_parser.cc"
break;
case 131:
ElementPtr ctt(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("calculate-tee-times", ctt);
}
-#line 1157 "dhcp4_parser.cc"
+#line 1126 "dhcp4_parser.cc"
break;
case 132:
ElementPtr t1(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("t1-percent", t1);
}
-#line 1166 "dhcp4_parser.cc"
+#line 1135 "dhcp4_parser.cc"
break;
case 133:
ElementPtr t2(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("t2-percent", t2);
}
-#line 1175 "dhcp4_parser.cc"
+#line 1144 "dhcp4_parser.cc"
break;
case 134:
ElementPtr dpp(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("decline-probation-period", dpp);
}
-#line 1184 "dhcp4_parser.cc"
+#line 1153 "dhcp4_parser.cc"
break;
case 135:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 1192 "dhcp4_parser.cc"
+#line 1161 "dhcp4_parser.cc"
break;
case 136:
ctx.stack_.back()->set("server-tag", stag);
ctx.leave();
}
-#line 1202 "dhcp4_parser.cc"
+#line 1171 "dhcp4_parser.cc"
break;
case 137:
ElementPtr echo(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("echo-client-id", echo);
}
-#line 1211 "dhcp4_parser.cc"
+#line 1180 "dhcp4_parser.cc"
break;
case 138:
ElementPtr match(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("match-client-id", match);
}
-#line 1220 "dhcp4_parser.cc"
+#line 1189 "dhcp4_parser.cc"
break;
case 139:
ElementPtr prf(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("authoritative", prf);
}
-#line 1229 "dhcp4_parser.cc"
+#line 1198 "dhcp4_parser.cc"
break;
case 140:
ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("ddns-send-updates", b);
}
-#line 1238 "dhcp4_parser.cc"
+#line 1207 "dhcp4_parser.cc"
break;
case 141:
ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("ddns-override-no-update", b);
}
-#line 1247 "dhcp4_parser.cc"
+#line 1216 "dhcp4_parser.cc"
break;
case 142:
ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("ddns-override-client-update", b);
}
-#line 1256 "dhcp4_parser.cc"
+#line 1225 "dhcp4_parser.cc"
break;
case 143:
{
ctx.enter(ctx.REPLACE_CLIENT_NAME);
}
-#line 1264 "dhcp4_parser.cc"
+#line 1233 "dhcp4_parser.cc"
break;
case 144:
ctx.stack_.back()->set("ddns-replace-client-name", yystack_[0].value.as < ElementPtr > ());
ctx.leave();
}
-#line 1273 "dhcp4_parser.cc"
+#line 1242 "dhcp4_parser.cc"
break;
case 145:
{
yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("when-present", ctx.loc2pos(yystack_[0].location)));
}
-#line 1281 "dhcp4_parser.cc"
+#line 1250 "dhcp4_parser.cc"
break;
case 146:
{
yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("never", ctx.loc2pos(yystack_[0].location)));
}
-#line 1289 "dhcp4_parser.cc"
+#line 1258 "dhcp4_parser.cc"
break;
case 147:
{
yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("always", ctx.loc2pos(yystack_[0].location)));
}
-#line 1297 "dhcp4_parser.cc"
+#line 1266 "dhcp4_parser.cc"
break;
case 148:
{
yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("when-not-present", ctx.loc2pos(yystack_[0].location)));
}
-#line 1305 "dhcp4_parser.cc"
+#line 1274 "dhcp4_parser.cc"
break;
case 149:
error(yystack_[0].location, "boolean values for the replace-client-name are "
"no longer supported");
}
-#line 1314 "dhcp4_parser.cc"
+#line 1283 "dhcp4_parser.cc"
break;
case 150:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 1322 "dhcp4_parser.cc"
+#line 1291 "dhcp4_parser.cc"
break;
case 151:
ctx.stack_.back()->set("ddns-generated-prefix", s);
ctx.leave();
}
-#line 1332 "dhcp4_parser.cc"
+#line 1301 "dhcp4_parser.cc"
break;
case 152:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 1340 "dhcp4_parser.cc"
+#line 1309 "dhcp4_parser.cc"
break;
case 153:
ctx.stack_.back()->set("ddns-qualifying-suffix", s);
ctx.leave();
}
-#line 1350 "dhcp4_parser.cc"
+#line 1319 "dhcp4_parser.cc"
break;
case 154:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 1358 "dhcp4_parser.cc"
+#line 1327 "dhcp4_parser.cc"
break;
case 155:
ctx.stack_.back()->set("hostname-char-set", s);
ctx.leave();
}
-#line 1368 "dhcp4_parser.cc"
+#line 1337 "dhcp4_parser.cc"
break;
case 156:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 1376 "dhcp4_parser.cc"
+#line 1345 "dhcp4_parser.cc"
break;
case 157:
ctx.stack_.back()->set("hostname-char-replacement", s);
ctx.leave();
}
-#line 1386 "dhcp4_parser.cc"
+#line 1355 "dhcp4_parser.cc"
break;
case 158:
ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("store-extended-info", b);
}
-#line 1395 "dhcp4_parser.cc"
+#line 1364 "dhcp4_parser.cc"
break;
case 159:
ElementPtr count(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("statistic-default-sample-count", count);
}
-#line 1404 "dhcp4_parser.cc"
+#line 1373 "dhcp4_parser.cc"
break;
case 160:
ElementPtr age(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("statistic-default-sample-age", age);
}
-#line 1413 "dhcp4_parser.cc"
+#line 1382 "dhcp4_parser.cc"
break;
case 161:
ctx.stack_.push_back(i);
ctx.enter(ctx.INTERFACES_CONFIG);
}
-#line 1424 "dhcp4_parser.cc"
+#line 1393 "dhcp4_parser.cc"
break;
case 162:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 1434 "dhcp4_parser.cc"
+#line 1403 "dhcp4_parser.cc"
break;
case 172:
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(m);
}
-#line 1444 "dhcp4_parser.cc"
+#line 1413 "dhcp4_parser.cc"
break;
case 173:
// No interfaces config param is required
// parsing completed
}
-#line 1453 "dhcp4_parser.cc"
+#line 1422 "dhcp4_parser.cc"
break;
case 174:
ctx.stack_.push_back(l);
ctx.enter(ctx.NO_KEYWORD);
}
-#line 1464 "dhcp4_parser.cc"
+#line 1433 "dhcp4_parser.cc"
break;
case 175:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 1473 "dhcp4_parser.cc"
+#line 1442 "dhcp4_parser.cc"
break;
case 176:
{
ctx.enter(ctx.DHCP_SOCKET_TYPE);
}
-#line 1481 "dhcp4_parser.cc"
+#line 1450 "dhcp4_parser.cc"
break;
case 177:
ctx.stack_.back()->set("dhcp-socket-type", yystack_[0].value.as < ElementPtr > ());
ctx.leave();
}
-#line 1490 "dhcp4_parser.cc"
+#line 1459 "dhcp4_parser.cc"
break;
case 178:
#line 724 "dhcp4_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("raw", ctx.loc2pos(yystack_[0].location))); }
-#line 1496 "dhcp4_parser.cc"
+#line 1465 "dhcp4_parser.cc"
break;
case 179:
#line 725 "dhcp4_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("udp", ctx.loc2pos(yystack_[0].location))); }
-#line 1502 "dhcp4_parser.cc"
+#line 1471 "dhcp4_parser.cc"
break;
case 180:
{
ctx.enter(ctx.OUTBOUND_INTERFACE);
}
-#line 1510 "dhcp4_parser.cc"
+#line 1479 "dhcp4_parser.cc"
break;
case 181:
ctx.stack_.back()->set("outbound-interface", yystack_[0].value.as < ElementPtr > ());
ctx.leave();
}
-#line 1519 "dhcp4_parser.cc"
+#line 1488 "dhcp4_parser.cc"
break;
case 182:
{
yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("same-as-inbound", ctx.loc2pos(yystack_[0].location)));
}
-#line 1527 "dhcp4_parser.cc"
+#line 1496 "dhcp4_parser.cc"
break;
case 183:
{
yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("use-routing", ctx.loc2pos(yystack_[0].location)));
}
-#line 1535 "dhcp4_parser.cc"
+#line 1504 "dhcp4_parser.cc"
break;
case 184:
ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("re-detect", b);
}
-#line 1544 "dhcp4_parser.cc"
+#line 1513 "dhcp4_parser.cc"
break;
case 185:
ctx.stack_.push_back(i);
ctx.enter(ctx.LEASE_DATABASE);
}
-#line 1555 "dhcp4_parser.cc"
+#line 1524 "dhcp4_parser.cc"
break;
case 186:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 1566 "dhcp4_parser.cc"
+#line 1535 "dhcp4_parser.cc"
break;
case 187:
ctx.stack_.push_back(m);
ctx.enter(ctx.SANITY_CHECKS);
}
-#line 1577 "dhcp4_parser.cc"
+#line 1546 "dhcp4_parser.cc"
break;
case 188:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 1586 "dhcp4_parser.cc"
+#line 1555 "dhcp4_parser.cc"
break;
case 192:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 1594 "dhcp4_parser.cc"
+#line 1563 "dhcp4_parser.cc"
break;
case 193:
", supported values are: none, warn, fix, fix-del, del");
}
}
-#line 1614 "dhcp4_parser.cc"
+#line 1583 "dhcp4_parser.cc"
break;
case 194:
ctx.stack_.push_back(i);
ctx.enter(ctx.HOSTS_DATABASE);
}
-#line 1625 "dhcp4_parser.cc"
+#line 1594 "dhcp4_parser.cc"
break;
case 195:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 1636 "dhcp4_parser.cc"
+#line 1605 "dhcp4_parser.cc"
break;
case 196:
ctx.stack_.push_back(l);
ctx.enter(ctx.HOSTS_DATABASE);
}
-#line 1647 "dhcp4_parser.cc"
+#line 1616 "dhcp4_parser.cc"
break;
case 197:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 1656 "dhcp4_parser.cc"
+#line 1625 "dhcp4_parser.cc"
break;
case 202:
ctx.stack_.back()->add(m);
ctx.stack_.push_back(m);
}
-#line 1666 "dhcp4_parser.cc"
+#line 1635 "dhcp4_parser.cc"
break;
case 203:
ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
ctx.stack_.pop_back();
}
-#line 1676 "dhcp4_parser.cc"
+#line 1645 "dhcp4_parser.cc"
break;
case 227:
{
ctx.enter(ctx.DATABASE_TYPE);
}
-#line 1684 "dhcp4_parser.cc"
+#line 1653 "dhcp4_parser.cc"
break;
case 228:
ctx.stack_.back()->set("type", yystack_[0].value.as < ElementPtr > ());
ctx.leave();
}
-#line 1693 "dhcp4_parser.cc"
+#line 1662 "dhcp4_parser.cc"
break;
case 229:
#line 866 "dhcp4_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("memfile", ctx.loc2pos(yystack_[0].location))); }
-#line 1699 "dhcp4_parser.cc"
+#line 1668 "dhcp4_parser.cc"
break;
case 230:
#line 867 "dhcp4_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("mysql", ctx.loc2pos(yystack_[0].location))); }
-#line 1705 "dhcp4_parser.cc"
+#line 1674 "dhcp4_parser.cc"
break;
case 231:
#line 868 "dhcp4_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("postgresql", ctx.loc2pos(yystack_[0].location))); }
-#line 1711 "dhcp4_parser.cc"
+#line 1680 "dhcp4_parser.cc"
break;
case 232:
#line 869 "dhcp4_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("cql", ctx.loc2pos(yystack_[0].location))); }
-#line 1717 "dhcp4_parser.cc"
+#line 1686 "dhcp4_parser.cc"
break;
case 233:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 1725 "dhcp4_parser.cc"
+#line 1694 "dhcp4_parser.cc"
break;
case 234:
ctx.stack_.back()->set("user", user);
ctx.leave();
}
-#line 1735 "dhcp4_parser.cc"
+#line 1704 "dhcp4_parser.cc"
break;
case 235:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 1743 "dhcp4_parser.cc"
+#line 1712 "dhcp4_parser.cc"
break;
case 236:
ctx.stack_.back()->set("password", pwd);
ctx.leave();
}
-#line 1753 "dhcp4_parser.cc"
+#line 1722 "dhcp4_parser.cc"
break;
case 237:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 1761 "dhcp4_parser.cc"
+#line 1730 "dhcp4_parser.cc"
break;
case 238:
ctx.stack_.back()->set("host", h);
ctx.leave();
}
-#line 1771 "dhcp4_parser.cc"
+#line 1740 "dhcp4_parser.cc"
break;
case 239:
ElementPtr p(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("port", p);
}
-#line 1780 "dhcp4_parser.cc"
+#line 1749 "dhcp4_parser.cc"
break;
case 240:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 1788 "dhcp4_parser.cc"
+#line 1757 "dhcp4_parser.cc"
break;
case 241:
ctx.stack_.back()->set("name", name);
ctx.leave();
}
-#line 1798 "dhcp4_parser.cc"
+#line 1767 "dhcp4_parser.cc"
break;
case 242:
ElementPtr n(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("persist", n);
}
-#line 1807 "dhcp4_parser.cc"
+#line 1776 "dhcp4_parser.cc"
break;
case 243:
ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("lfc-interval", n);
}
-#line 1816 "dhcp4_parser.cc"
+#line 1785 "dhcp4_parser.cc"
break;
case 244:
ElementPtr n(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("readonly", n);
}
-#line 1825 "dhcp4_parser.cc"
+#line 1794 "dhcp4_parser.cc"
break;
case 245:
ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("connect-timeout", n);
}
-#line 1834 "dhcp4_parser.cc"
+#line 1803 "dhcp4_parser.cc"
break;
case 246:
ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("request-timeout", n);
}
-#line 1843 "dhcp4_parser.cc"
+#line 1812 "dhcp4_parser.cc"
break;
case 247:
ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("tcp-keepalive", n);
}
-#line 1852 "dhcp4_parser.cc"
+#line 1821 "dhcp4_parser.cc"
break;
case 248:
ElementPtr n(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("tcp-nodelay", n);
}
-#line 1861 "dhcp4_parser.cc"
+#line 1830 "dhcp4_parser.cc"
break;
case 249:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 1869 "dhcp4_parser.cc"
+#line 1838 "dhcp4_parser.cc"
break;
case 250:
ctx.stack_.back()->set("contact-points", cp);
ctx.leave();
}
-#line 1879 "dhcp4_parser.cc"
+#line 1848 "dhcp4_parser.cc"
break;
case 251:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 1887 "dhcp4_parser.cc"
+#line 1856 "dhcp4_parser.cc"
break;
case 252:
ctx.stack_.back()->set("keyspace", ks);
ctx.leave();
}
-#line 1897 "dhcp4_parser.cc"
+#line 1866 "dhcp4_parser.cc"
break;
case 253:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 1905 "dhcp4_parser.cc"
+#line 1874 "dhcp4_parser.cc"
break;
case 254:
ctx.stack_.back()->set("consistency", c);
ctx.leave();
}
-#line 1915 "dhcp4_parser.cc"
+#line 1884 "dhcp4_parser.cc"
break;
case 255:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 1923 "dhcp4_parser.cc"
+#line 1892 "dhcp4_parser.cc"
break;
case 256:
ctx.stack_.back()->set("serial-consistency", c);
ctx.leave();
}
-#line 1933 "dhcp4_parser.cc"
+#line 1902 "dhcp4_parser.cc"
break;
case 257:
ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("max-reconnect-tries", n);
}
-#line 1942 "dhcp4_parser.cc"
+#line 1911 "dhcp4_parser.cc"
break;
case 258:
ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("reconnect-wait-time", n);
}
-#line 1951 "dhcp4_parser.cc"
+#line 1920 "dhcp4_parser.cc"
break;
case 259:
ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("max-row-errors", n);
}
-#line 1960 "dhcp4_parser.cc"
+#line 1929 "dhcp4_parser.cc"
break;
case 260:
ctx.stack_.push_back(l);
ctx.enter(ctx.HOST_RESERVATION_IDENTIFIERS);
}
-#line 1971 "dhcp4_parser.cc"
+#line 1940 "dhcp4_parser.cc"
break;
case 261:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 1980 "dhcp4_parser.cc"
+#line 1949 "dhcp4_parser.cc"
break;
case 269:
ElementPtr duid(new StringElement("duid", ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(duid);
}
-#line 1989 "dhcp4_parser.cc"
+#line 1958 "dhcp4_parser.cc"
break;
case 270:
ElementPtr hwaddr(new StringElement("hw-address", ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(hwaddr);
}
-#line 1998 "dhcp4_parser.cc"
+#line 1967 "dhcp4_parser.cc"
break;
case 271:
ElementPtr circuit(new StringElement("circuit-id", ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(circuit);
}
-#line 2007 "dhcp4_parser.cc"
+#line 1976 "dhcp4_parser.cc"
break;
case 272:
ElementPtr client(new StringElement("client-id", ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(client);
}
-#line 2016 "dhcp4_parser.cc"
+#line 1985 "dhcp4_parser.cc"
break;
case 273:
ElementPtr flex_id(new StringElement("flex-id", ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(flex_id);
}
-#line 2025 "dhcp4_parser.cc"
+#line 1994 "dhcp4_parser.cc"
break;
case 274:
ctx.stack_.push_back(mt);
ctx.enter(ctx.DHCP_MULTI_THREADING);
}
-#line 2036 "dhcp4_parser.cc"
+#line 2005 "dhcp4_parser.cc"
break;
case 275:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 2047 "dhcp4_parser.cc"
+#line 2016 "dhcp4_parser.cc"
break;
case 284:
ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("enable-multi-threading", b);
}
-#line 2056 "dhcp4_parser.cc"
+#line 2025 "dhcp4_parser.cc"
break;
case 285:
ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("thread-pool-size", prf);
}
-#line 2065 "dhcp4_parser.cc"
+#line 2034 "dhcp4_parser.cc"
break;
case 286:
ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("packet-queue-size", prf);
}
-#line 2074 "dhcp4_parser.cc"
+#line 2043 "dhcp4_parser.cc"
break;
case 287:
ctx.stack_.push_back(l);
ctx.enter(ctx.HOOKS_LIBRARIES);
}
-#line 2085 "dhcp4_parser.cc"
+#line 2054 "dhcp4_parser.cc"
break;
case 288:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 2094 "dhcp4_parser.cc"
+#line 2063 "dhcp4_parser.cc"
break;
case 293:
ctx.stack_.back()->add(m);
ctx.stack_.push_back(m);
}
-#line 2104 "dhcp4_parser.cc"
+#line 2073 "dhcp4_parser.cc"
break;
case 294:
ctx.require("library", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
ctx.stack_.pop_back();
}
-#line 2114 "dhcp4_parser.cc"
+#line 2083 "dhcp4_parser.cc"
break;
case 295:
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(m);
}
-#line 2124 "dhcp4_parser.cc"
+#line 2093 "dhcp4_parser.cc"
break;
case 296:
ctx.require("library", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
// parsing completed
}
-#line 2134 "dhcp4_parser.cc"
+#line 2103 "dhcp4_parser.cc"
break;
case 302:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 2142 "dhcp4_parser.cc"
+#line 2111 "dhcp4_parser.cc"
break;
case 303:
ctx.stack_.back()->set("library", lib);
ctx.leave();
}
-#line 2152 "dhcp4_parser.cc"
+#line 2121 "dhcp4_parser.cc"
break;
case 304:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 2160 "dhcp4_parser.cc"
+#line 2129 "dhcp4_parser.cc"
break;
case 305:
ctx.stack_.back()->set("parameters", yystack_[0].value.as < ElementPtr > ());
ctx.leave();
}
-#line 2169 "dhcp4_parser.cc"
+#line 2138 "dhcp4_parser.cc"
break;
case 306:
ctx.stack_.push_back(m);
ctx.enter(ctx.EXPIRED_LEASES_PROCESSING);
}
-#line 2180 "dhcp4_parser.cc"
+#line 2149 "dhcp4_parser.cc"
break;
case 307:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 2190 "dhcp4_parser.cc"
+#line 2159 "dhcp4_parser.cc"
break;
case 316:
ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("reclaim-timer-wait-time", value);
}
-#line 2199 "dhcp4_parser.cc"
+#line 2168 "dhcp4_parser.cc"
break;
case 317:
ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("flush-reclaimed-timer-wait-time", value);
}
-#line 2208 "dhcp4_parser.cc"
+#line 2177 "dhcp4_parser.cc"
break;
case 318:
ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("hold-reclaimed-time", value);
}
-#line 2217 "dhcp4_parser.cc"
+#line 2186 "dhcp4_parser.cc"
break;
case 319:
ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("max-reclaim-leases", value);
}
-#line 2226 "dhcp4_parser.cc"
+#line 2195 "dhcp4_parser.cc"
break;
case 320:
ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("max-reclaim-time", value);
}
-#line 2235 "dhcp4_parser.cc"
+#line 2204 "dhcp4_parser.cc"
break;
case 321:
ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("unwarned-reclaim-cycles", value);
}
-#line 2244 "dhcp4_parser.cc"
+#line 2213 "dhcp4_parser.cc"
break;
case 322:
ctx.stack_.push_back(l);
ctx.enter(ctx.SUBNET4);
}
-#line 2255 "dhcp4_parser.cc"
+#line 2224 "dhcp4_parser.cc"
break;
case 323:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 2264 "dhcp4_parser.cc"
+#line 2233 "dhcp4_parser.cc"
break;
case 328:
ctx.stack_.back()->add(m);
ctx.stack_.push_back(m);
}
-#line 2274 "dhcp4_parser.cc"
+#line 2243 "dhcp4_parser.cc"
break;
case 329:
ctx.require("subnet", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
ctx.stack_.pop_back();
}
-#line 2300 "dhcp4_parser.cc"
+#line 2269 "dhcp4_parser.cc"
break;
case 330:
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(m);
}
-#line 2310 "dhcp4_parser.cc"
+#line 2279 "dhcp4_parser.cc"
break;
case 331:
ctx.require("subnet", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
// parsing completed
}
-#line 2320 "dhcp4_parser.cc"
+#line 2289 "dhcp4_parser.cc"
break;
case 372:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 2328 "dhcp4_parser.cc"
+#line 2297 "dhcp4_parser.cc"
break;
case 373:
ctx.stack_.back()->set("subnet", subnet);
ctx.leave();
}
-#line 2338 "dhcp4_parser.cc"
+#line 2307 "dhcp4_parser.cc"
break;
case 374:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 2346 "dhcp4_parser.cc"
+#line 2315 "dhcp4_parser.cc"
break;
case 375:
ctx.stack_.back()->set("4o6-interface", iface);
ctx.leave();
}
-#line 2356 "dhcp4_parser.cc"
+#line 2325 "dhcp4_parser.cc"
break;
case 376:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 2364 "dhcp4_parser.cc"
+#line 2333 "dhcp4_parser.cc"
break;
case 377:
ctx.stack_.back()->set("4o6-interface-id", iface);
ctx.leave();
}
-#line 2374 "dhcp4_parser.cc"
+#line 2343 "dhcp4_parser.cc"
break;
case 378:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 2382 "dhcp4_parser.cc"
+#line 2351 "dhcp4_parser.cc"
break;
case 379:
ctx.stack_.back()->set("4o6-subnet", iface);
ctx.leave();
}
-#line 2392 "dhcp4_parser.cc"
+#line 2361 "dhcp4_parser.cc"
break;
case 380:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 2400 "dhcp4_parser.cc"
+#line 2369 "dhcp4_parser.cc"
break;
case 381:
ctx.stack_.back()->set("interface", iface);
ctx.leave();
}
-#line 2410 "dhcp4_parser.cc"
+#line 2379 "dhcp4_parser.cc"
break;
case 382:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 2418 "dhcp4_parser.cc"
+#line 2387 "dhcp4_parser.cc"
break;
case 383:
ctx.stack_.back()->set("client-class", cls);
ctx.leave();
}
-#line 2428 "dhcp4_parser.cc"
+#line 2397 "dhcp4_parser.cc"
break;
case 384:
ctx.stack_.push_back(c);
ctx.enter(ctx.NO_KEYWORD);
}
-#line 2439 "dhcp4_parser.cc"
+#line 2408 "dhcp4_parser.cc"
break;
case 385:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 2448 "dhcp4_parser.cc"
+#line 2417 "dhcp4_parser.cc"
break;
case 386:
{
ctx.enter(ctx.RESERVATION_MODE);
}
-#line 2456 "dhcp4_parser.cc"
+#line 2425 "dhcp4_parser.cc"
break;
case 387:
ctx.stack_.back()->set("reservation-mode", yystack_[0].value.as < ElementPtr > ());
ctx.leave();
}
-#line 2465 "dhcp4_parser.cc"
+#line 2434 "dhcp4_parser.cc"
break;
case 388:
#line 1370 "dhcp4_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("disabled", ctx.loc2pos(yystack_[0].location))); }
-#line 2471 "dhcp4_parser.cc"
+#line 2440 "dhcp4_parser.cc"
break;
case 389:
#line 1371 "dhcp4_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("out-of-pool", ctx.loc2pos(yystack_[0].location))); }
-#line 2477 "dhcp4_parser.cc"
+#line 2446 "dhcp4_parser.cc"
break;
case 390:
#line 1372 "dhcp4_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("global", ctx.loc2pos(yystack_[0].location))); }
-#line 2483 "dhcp4_parser.cc"
+#line 2452 "dhcp4_parser.cc"
break;
case 391:
#line 1373 "dhcp4_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("all", ctx.loc2pos(yystack_[0].location))); }
-#line 2489 "dhcp4_parser.cc"
+#line 2458 "dhcp4_parser.cc"
break;
case 392:
ElementPtr id(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("id", id);
}
-#line 2498 "dhcp4_parser.cc"
+#line 2467 "dhcp4_parser.cc"
break;
case 393:
ctx.stack_.push_back(l);
ctx.enter(ctx.SHARED_NETWORK);
}
-#line 2509 "dhcp4_parser.cc"
+#line 2478 "dhcp4_parser.cc"
break;
case 394:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 2518 "dhcp4_parser.cc"
+#line 2487 "dhcp4_parser.cc"
break;
case 399:
ctx.stack_.back()->add(m);
ctx.stack_.push_back(m);
}
-#line 2528 "dhcp4_parser.cc"
+#line 2497 "dhcp4_parser.cc"
break;
case 400:
{
ctx.stack_.pop_back();
}
-#line 2536 "dhcp4_parser.cc"
+#line 2505 "dhcp4_parser.cc"
break;
case 436:
ctx.stack_.push_back(l);
ctx.enter(ctx.OPTION_DEF);
}
-#line 2547 "dhcp4_parser.cc"
+#line 2516 "dhcp4_parser.cc"
break;
case 437:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 2556 "dhcp4_parser.cc"
+#line 2525 "dhcp4_parser.cc"
break;
case 438:
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(m);
}
-#line 2565 "dhcp4_parser.cc"
+#line 2534 "dhcp4_parser.cc"
break;
case 439:
{
// parsing completed
}
-#line 2573 "dhcp4_parser.cc"
+#line 2542 "dhcp4_parser.cc"
break;
case 444:
ctx.stack_.back()->add(m);
ctx.stack_.push_back(m);
}
-#line 2583 "dhcp4_parser.cc"
+#line 2552 "dhcp4_parser.cc"
break;
case 445:
ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
ctx.stack_.pop_back();
}
-#line 2595 "dhcp4_parser.cc"
+#line 2564 "dhcp4_parser.cc"
break;
case 446:
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(m);
}
-#line 2605 "dhcp4_parser.cc"
+#line 2574 "dhcp4_parser.cc"
break;
case 447:
ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
// parsing completed
}
-#line 2617 "dhcp4_parser.cc"
+#line 2586 "dhcp4_parser.cc"
break;
case 463:
ElementPtr code(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("code", code);
}
-#line 2626 "dhcp4_parser.cc"
+#line 2595 "dhcp4_parser.cc"
break;
case 465:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 2634 "dhcp4_parser.cc"
+#line 2603 "dhcp4_parser.cc"
break;
case 466:
ctx.stack_.back()->set("type", prf);
ctx.leave();
}
-#line 2644 "dhcp4_parser.cc"
+#line 2613 "dhcp4_parser.cc"
break;
case 467:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 2652 "dhcp4_parser.cc"
+#line 2621 "dhcp4_parser.cc"
break;
case 468:
ctx.stack_.back()->set("record-types", rtypes);
ctx.leave();
}
-#line 2662 "dhcp4_parser.cc"
+#line 2631 "dhcp4_parser.cc"
break;
case 469:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 2670 "dhcp4_parser.cc"
+#line 2639 "dhcp4_parser.cc"
break;
case 470:
ctx.stack_.back()->set("space", space);
ctx.leave();
}
-#line 2680 "dhcp4_parser.cc"
+#line 2649 "dhcp4_parser.cc"
break;
case 472:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 2688 "dhcp4_parser.cc"
+#line 2657 "dhcp4_parser.cc"
break;
case 473:
ctx.stack_.back()->set("encapsulate", encap);
ctx.leave();
}
-#line 2698 "dhcp4_parser.cc"
+#line 2667 "dhcp4_parser.cc"
break;
case 474:
ElementPtr array(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("array", array);
}
-#line 2707 "dhcp4_parser.cc"
+#line 2676 "dhcp4_parser.cc"
break;
case 475:
ctx.stack_.push_back(l);
ctx.enter(ctx.OPTION_DATA);
}
-#line 2718 "dhcp4_parser.cc"
+#line 2687 "dhcp4_parser.cc"
break;
case 476:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 2727 "dhcp4_parser.cc"
+#line 2696 "dhcp4_parser.cc"
break;
case 481:
ctx.stack_.back()->add(m);
ctx.stack_.push_back(m);
}
-#line 2737 "dhcp4_parser.cc"
+#line 2706 "dhcp4_parser.cc"
break;
case 482:
/// @todo: the code or name parameters are required.
ctx.stack_.pop_back();
}
-#line 2746 "dhcp4_parser.cc"
+#line 2715 "dhcp4_parser.cc"
break;
case 483:
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(m);
}
-#line 2756 "dhcp4_parser.cc"
+#line 2725 "dhcp4_parser.cc"
break;
case 484:
/// @todo: the code or name parameters are required.
// parsing completed
}
-#line 2765 "dhcp4_parser.cc"
+#line 2734 "dhcp4_parser.cc"
break;
case 499:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 2773 "dhcp4_parser.cc"
+#line 2742 "dhcp4_parser.cc"
break;
case 500:
ctx.stack_.back()->set("data", data);
ctx.leave();
}
-#line 2783 "dhcp4_parser.cc"
+#line 2752 "dhcp4_parser.cc"
break;
case 503:
ElementPtr space(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("csv-format", space);
}
-#line 2792 "dhcp4_parser.cc"
+#line 2761 "dhcp4_parser.cc"
break;
case 504:
ElementPtr persist(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("always-send", persist);
}
-#line 2801 "dhcp4_parser.cc"
+#line 2770 "dhcp4_parser.cc"
break;
case 505:
ctx.stack_.push_back(l);
ctx.enter(ctx.POOLS);
}
-#line 2812 "dhcp4_parser.cc"
+#line 2781 "dhcp4_parser.cc"
break;
case 506:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 2821 "dhcp4_parser.cc"
+#line 2790 "dhcp4_parser.cc"
break;
case 511:
ctx.stack_.back()->add(m);
ctx.stack_.push_back(m);
}
-#line 2831 "dhcp4_parser.cc"
+#line 2800 "dhcp4_parser.cc"
break;
case 512:
ctx.require("pool", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
ctx.stack_.pop_back();
}
-#line 2841 "dhcp4_parser.cc"
+#line 2810 "dhcp4_parser.cc"
break;
case 513:
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(m);
}
-#line 2851 "dhcp4_parser.cc"
+#line 2820 "dhcp4_parser.cc"
break;
case 514:
ctx.require("pool", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
// parsing completed
}
-#line 2861 "dhcp4_parser.cc"
+#line 2830 "dhcp4_parser.cc"
break;
case 524:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 2869 "dhcp4_parser.cc"
+#line 2838 "dhcp4_parser.cc"
break;
case 525:
ctx.stack_.back()->set("pool", pool);
ctx.leave();
}
-#line 2879 "dhcp4_parser.cc"
+#line 2848 "dhcp4_parser.cc"
break;
case 526:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 2887 "dhcp4_parser.cc"
+#line 2856 "dhcp4_parser.cc"
break;
case 527:
parent->set("user-context", user_context);
ctx.leave();
}
-#line 2914 "dhcp4_parser.cc"
+#line 2883 "dhcp4_parser.cc"
break;
case 528:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 2922 "dhcp4_parser.cc"
+#line 2891 "dhcp4_parser.cc"
break;
case 529:
parent->set("user-context", user_context);
ctx.leave();
}
-#line 2951 "dhcp4_parser.cc"
+#line 2920 "dhcp4_parser.cc"
break;
case 530:
ctx.stack_.push_back(l);
ctx.enter(ctx.RESERVATIONS);
}
-#line 2962 "dhcp4_parser.cc"
+#line 2931 "dhcp4_parser.cc"
break;
case 531:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 2971 "dhcp4_parser.cc"
+#line 2940 "dhcp4_parser.cc"
break;
case 536:
ctx.stack_.back()->add(m);
ctx.stack_.push_back(m);
}
-#line 2981 "dhcp4_parser.cc"
+#line 2950 "dhcp4_parser.cc"
break;
case 537:
/// @todo: an identifier parameter is required.
ctx.stack_.pop_back();
}
-#line 2990 "dhcp4_parser.cc"
+#line 2959 "dhcp4_parser.cc"
break;
case 538:
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(m);
}
-#line 3000 "dhcp4_parser.cc"
+#line 2969 "dhcp4_parser.cc"
break;
case 539:
/// @todo: an identifier parameter is required.
// parsing completed
}
-#line 3009 "dhcp4_parser.cc"
+#line 2978 "dhcp4_parser.cc"
break;
case 559:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3017 "dhcp4_parser.cc"
+#line 2986 "dhcp4_parser.cc"
break;
case 560:
ctx.stack_.back()->set("next-server", next_server);
ctx.leave();
}
-#line 3027 "dhcp4_parser.cc"
+#line 2996 "dhcp4_parser.cc"
break;
case 561:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3035 "dhcp4_parser.cc"
+#line 3004 "dhcp4_parser.cc"
break;
case 562:
ctx.stack_.back()->set("server-hostname", srv);
ctx.leave();
}
-#line 3045 "dhcp4_parser.cc"
+#line 3014 "dhcp4_parser.cc"
break;
case 563:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3053 "dhcp4_parser.cc"
+#line 3022 "dhcp4_parser.cc"
break;
case 564:
ctx.stack_.back()->set("boot-file-name", bootfile);
ctx.leave();
}
-#line 3063 "dhcp4_parser.cc"
+#line 3032 "dhcp4_parser.cc"
break;
case 565:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3071 "dhcp4_parser.cc"
+#line 3040 "dhcp4_parser.cc"
break;
case 566:
ctx.stack_.back()->set("ip-address", addr);
ctx.leave();
}
-#line 3081 "dhcp4_parser.cc"
+#line 3050 "dhcp4_parser.cc"
break;
case 567:
ctx.stack_.push_back(l);
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3092 "dhcp4_parser.cc"
+#line 3061 "dhcp4_parser.cc"
break;
case 568:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 3101 "dhcp4_parser.cc"
+#line 3070 "dhcp4_parser.cc"
break;
case 569:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3109 "dhcp4_parser.cc"
+#line 3078 "dhcp4_parser.cc"
break;
case 570:
ctx.stack_.back()->set("duid", d);
ctx.leave();
}
-#line 3119 "dhcp4_parser.cc"
+#line 3088 "dhcp4_parser.cc"
break;
case 571:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3127 "dhcp4_parser.cc"
+#line 3096 "dhcp4_parser.cc"
break;
case 572:
ctx.stack_.back()->set("hw-address", hw);
ctx.leave();
}
-#line 3137 "dhcp4_parser.cc"
+#line 3106 "dhcp4_parser.cc"
break;
case 573:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3145 "dhcp4_parser.cc"
+#line 3114 "dhcp4_parser.cc"
break;
case 574:
ctx.stack_.back()->set("client-id", hw);
ctx.leave();
}
-#line 3155 "dhcp4_parser.cc"
+#line 3124 "dhcp4_parser.cc"
break;
case 575:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3163 "dhcp4_parser.cc"
+#line 3132 "dhcp4_parser.cc"
break;
case 576:
ctx.stack_.back()->set("circuit-id", hw);
ctx.leave();
}
-#line 3173 "dhcp4_parser.cc"
+#line 3142 "dhcp4_parser.cc"
break;
case 577:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3181 "dhcp4_parser.cc"
+#line 3150 "dhcp4_parser.cc"
break;
case 578:
ctx.stack_.back()->set("flex-id", hw);
ctx.leave();
}
-#line 3191 "dhcp4_parser.cc"
+#line 3160 "dhcp4_parser.cc"
break;
case 579:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3199 "dhcp4_parser.cc"
+#line 3168 "dhcp4_parser.cc"
break;
case 580:
ctx.stack_.back()->set("hostname", host);
ctx.leave();
}
-#line 3209 "dhcp4_parser.cc"
+#line 3178 "dhcp4_parser.cc"
break;
case 581:
ctx.stack_.push_back(c);
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3220 "dhcp4_parser.cc"
+#line 3189 "dhcp4_parser.cc"
break;
case 582:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 3229 "dhcp4_parser.cc"
+#line 3198 "dhcp4_parser.cc"
break;
case 583:
ctx.stack_.push_back(m);
ctx.enter(ctx.RELAY);
}
-#line 3240 "dhcp4_parser.cc"
+#line 3209 "dhcp4_parser.cc"
break;
case 584:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 3249 "dhcp4_parser.cc"
+#line 3218 "dhcp4_parser.cc"
break;
case 587:
ctx.stack_.push_back(l);
ctx.enter(ctx.CLIENT_CLASSES);
}
-#line 3260 "dhcp4_parser.cc"
+#line 3229 "dhcp4_parser.cc"
break;
case 588:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 3269 "dhcp4_parser.cc"
+#line 3238 "dhcp4_parser.cc"
break;
case 591:
ctx.stack_.back()->add(m);
ctx.stack_.push_back(m);
}
-#line 3279 "dhcp4_parser.cc"
+#line 3248 "dhcp4_parser.cc"
break;
case 592:
ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
ctx.stack_.pop_back();
}
-#line 3289 "dhcp4_parser.cc"
+#line 3258 "dhcp4_parser.cc"
break;
case 609:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3297 "dhcp4_parser.cc"
+#line 3266 "dhcp4_parser.cc"
break;
case 610:
ctx.stack_.back()->set("test", test);
ctx.leave();
}
-#line 3307 "dhcp4_parser.cc"
+#line 3276 "dhcp4_parser.cc"
break;
case 611:
ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("only-if-required", b);
}
-#line 3316 "dhcp4_parser.cc"
+#line 3285 "dhcp4_parser.cc"
break;
case 612:
ElementPtr time(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("dhcp4o6-port", time);
}
-#line 3325 "dhcp4_parser.cc"
+#line 3294 "dhcp4_parser.cc"
break;
case 613:
ctx.stack_.push_back(m);
ctx.enter(ctx.CONTROL_SOCKET);
}
-#line 3336 "dhcp4_parser.cc"
+#line 3305 "dhcp4_parser.cc"
break;
case 614:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 3345 "dhcp4_parser.cc"
+#line 3314 "dhcp4_parser.cc"
break;
case 622:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3353 "dhcp4_parser.cc"
+#line 3322 "dhcp4_parser.cc"
break;
case 623:
ctx.stack_.back()->set("socket-type", stype);
ctx.leave();
}
-#line 3363 "dhcp4_parser.cc"
+#line 3332 "dhcp4_parser.cc"
break;
case 624:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3371 "dhcp4_parser.cc"
+#line 3340 "dhcp4_parser.cc"
break;
case 625:
ctx.stack_.back()->set("socket-name", name);
ctx.leave();
}
-#line 3381 "dhcp4_parser.cc"
+#line 3350 "dhcp4_parser.cc"
break;
case 626:
ctx.stack_.push_back(qc);
ctx.enter(ctx.DHCP_QUEUE_CONTROL);
}
-#line 3392 "dhcp4_parser.cc"
+#line 3361 "dhcp4_parser.cc"
break;
case 627:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 3403 "dhcp4_parser.cc"
+#line 3372 "dhcp4_parser.cc"
break;
case 636:
ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("enable-queue", b);
}
-#line 3412 "dhcp4_parser.cc"
+#line 3381 "dhcp4_parser.cc"
break;
case 637:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3420 "dhcp4_parser.cc"
+#line 3389 "dhcp4_parser.cc"
break;
case 638:
ctx.stack_.back()->set("queue-type", qt);
ctx.leave();
}
-#line 3430 "dhcp4_parser.cc"
+#line 3399 "dhcp4_parser.cc"
break;
case 639:
ElementPtr c(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("capacity", c);
}
-#line 3439 "dhcp4_parser.cc"
+#line 3408 "dhcp4_parser.cc"
break;
case 640:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3447 "dhcp4_parser.cc"
+#line 3416 "dhcp4_parser.cc"
break;
case 641:
ctx.stack_.back()->set(yystack_[3].value.as < std::string > (), yystack_[0].value.as < ElementPtr > ());
ctx.leave();
}
-#line 3456 "dhcp4_parser.cc"
+#line 3425 "dhcp4_parser.cc"
break;
case 642:
ctx.stack_.push_back(m);
ctx.enter(ctx.DHCP_DDNS);
}
-#line 3467 "dhcp4_parser.cc"
+#line 3436 "dhcp4_parser.cc"
break;
case 643:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 3478 "dhcp4_parser.cc"
+#line 3447 "dhcp4_parser.cc"
break;
case 644:
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(m);
}
-#line 3488 "dhcp4_parser.cc"
+#line 3457 "dhcp4_parser.cc"
break;
case 645:
ctx.require("enable-updates", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
// parsing completed
}
-#line 3498 "dhcp4_parser.cc"
+#line 3467 "dhcp4_parser.cc"
break;
case 666:
ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("enable-updates", b);
}
-#line 3507 "dhcp4_parser.cc"
+#line 3476 "dhcp4_parser.cc"
break;
case 667:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3515 "dhcp4_parser.cc"
+#line 3484 "dhcp4_parser.cc"
break;
case 668:
ctx.stack_.back()->set("server-ip", s);
ctx.leave();
}
-#line 3525 "dhcp4_parser.cc"
+#line 3494 "dhcp4_parser.cc"
break;
case 669:
ElementPtr i(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("server-port", i);
}
-#line 3534 "dhcp4_parser.cc"
+#line 3503 "dhcp4_parser.cc"
break;
case 670:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3542 "dhcp4_parser.cc"
+#line 3511 "dhcp4_parser.cc"
break;
case 671:
ctx.stack_.back()->set("sender-ip", s);
ctx.leave();
}
-#line 3552 "dhcp4_parser.cc"
+#line 3521 "dhcp4_parser.cc"
break;
case 672:
ElementPtr i(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("sender-port", i);
}
-#line 3561 "dhcp4_parser.cc"
+#line 3530 "dhcp4_parser.cc"
break;
case 673:
ElementPtr i(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("max-queue-size", i);
}
-#line 3570 "dhcp4_parser.cc"
+#line 3539 "dhcp4_parser.cc"
break;
case 674:
{
ctx.enter(ctx.NCR_PROTOCOL);
}
-#line 3578 "dhcp4_parser.cc"
+#line 3547 "dhcp4_parser.cc"
break;
case 675:
ctx.stack_.back()->set("ncr-protocol", yystack_[0].value.as < ElementPtr > ());
ctx.leave();
}
-#line 3587 "dhcp4_parser.cc"
+#line 3556 "dhcp4_parser.cc"
break;
case 676:
#line 2233 "dhcp4_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("UDP", ctx.loc2pos(yystack_[0].location))); }
-#line 3593 "dhcp4_parser.cc"
+#line 3562 "dhcp4_parser.cc"
break;
case 677:
#line 2234 "dhcp4_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("TCP", ctx.loc2pos(yystack_[0].location))); }
-#line 3599 "dhcp4_parser.cc"
+#line 3568 "dhcp4_parser.cc"
break;
case 678:
{
ctx.enter(ctx.NCR_FORMAT);
}
-#line 3607 "dhcp4_parser.cc"
+#line 3576 "dhcp4_parser.cc"
break;
case 679:
ctx.stack_.back()->set("ncr-format", json);
ctx.leave();
}
-#line 3617 "dhcp4_parser.cc"
+#line 3586 "dhcp4_parser.cc"
break;
case 680:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3625 "dhcp4_parser.cc"
+#line 3594 "dhcp4_parser.cc"
break;
case 681:
ctx.stack_.back()->set("qualifying-suffix", s);
ctx.leave();
}
-#line 3635 "dhcp4_parser.cc"
+#line 3604 "dhcp4_parser.cc"
break;
case 682:
ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("override-no-update", b);
}
-#line 3644 "dhcp4_parser.cc"
+#line 3613 "dhcp4_parser.cc"
break;
case 683:
ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("override-client-update", b);
}
-#line 3653 "dhcp4_parser.cc"
+#line 3622 "dhcp4_parser.cc"
break;
case 684:
{
ctx.enter(ctx.REPLACE_CLIENT_NAME);
}
-#line 3661 "dhcp4_parser.cc"
+#line 3630 "dhcp4_parser.cc"
break;
case 685:
ctx.stack_.back()->set("replace-client-name", yystack_[0].value.as < ElementPtr > ());
ctx.leave();
}
-#line 3670 "dhcp4_parser.cc"
+#line 3639 "dhcp4_parser.cc"
break;
case 686:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3678 "dhcp4_parser.cc"
+#line 3647 "dhcp4_parser.cc"
break;
case 687:
ctx.stack_.back()->set("generated-prefix", s);
ctx.leave();
}
-#line 3688 "dhcp4_parser.cc"
+#line 3657 "dhcp4_parser.cc"
break;
case 688:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3696 "dhcp4_parser.cc"
+#line 3665 "dhcp4_parser.cc"
break;
case 689:
ctx.stack_.back()->set("hostname-char-set", s);
ctx.leave();
}
-#line 3706 "dhcp4_parser.cc"
+#line 3675 "dhcp4_parser.cc"
break;
case 690:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3714 "dhcp4_parser.cc"
+#line 3683 "dhcp4_parser.cc"
break;
case 691:
ctx.stack_.back()->set("hostname-char-replacement", s);
ctx.leave();
}
-#line 3724 "dhcp4_parser.cc"
+#line 3693 "dhcp4_parser.cc"
break;
case 692:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3732 "dhcp4_parser.cc"
+#line 3701 "dhcp4_parser.cc"
break;
case 693:
ctx.stack_.back()->set("Dhcp6", yystack_[0].value.as < ElementPtr > ());
ctx.leave();
}
-#line 3741 "dhcp4_parser.cc"
+#line 3710 "dhcp4_parser.cc"
break;
case 694:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3749 "dhcp4_parser.cc"
+#line 3718 "dhcp4_parser.cc"
break;
case 695:
ctx.stack_.back()->set("DhcpDdns", yystack_[0].value.as < ElementPtr > ());
ctx.leave();
}
-#line 3758 "dhcp4_parser.cc"
+#line 3727 "dhcp4_parser.cc"
break;
case 696:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3766 "dhcp4_parser.cc"
+#line 3735 "dhcp4_parser.cc"
break;
case 697:
ctx.stack_.back()->set("Control-agent", yystack_[0].value.as < ElementPtr > ());
ctx.leave();
}
-#line 3775 "dhcp4_parser.cc"
+#line 3744 "dhcp4_parser.cc"
break;
case 698:
ctx.stack_.push_back(i);
ctx.enter(ctx.CONFIG_CONTROL);
}
-#line 3786 "dhcp4_parser.cc"
+#line 3755 "dhcp4_parser.cc"
break;
case 699:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 3796 "dhcp4_parser.cc"
+#line 3765 "dhcp4_parser.cc"
break;
case 700:
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(m);
}
-#line 3806 "dhcp4_parser.cc"
+#line 3775 "dhcp4_parser.cc"
break;
case 701:
// No config_control params are required
// parsing completed
}
-#line 3815 "dhcp4_parser.cc"
+#line 3784 "dhcp4_parser.cc"
break;
case 706:
ctx.stack_.push_back(l);
ctx.enter(ctx.CONFIG_DATABASE);
}
-#line 3826 "dhcp4_parser.cc"
+#line 3795 "dhcp4_parser.cc"
break;
case 707:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 3835 "dhcp4_parser.cc"
+#line 3804 "dhcp4_parser.cc"
break;
case 708:
ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("config-fetch-wait-time", value);
}
-#line 3844 "dhcp4_parser.cc"
+#line 3813 "dhcp4_parser.cc"
break;
case 709:
ctx.stack_.push_back(m);
ctx.enter(ctx.LOGGING);
}
-#line 3855 "dhcp4_parser.cc"
+#line 3824 "dhcp4_parser.cc"
break;
case 710:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 3864 "dhcp4_parser.cc"
+#line 3833 "dhcp4_parser.cc"
break;
case 711:
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(m);
}
-#line 3874 "dhcp4_parser.cc"
+#line 3843 "dhcp4_parser.cc"
break;
case 712:
{
// parsing completed
}
-#line 3882 "dhcp4_parser.cc"
+#line 3851 "dhcp4_parser.cc"
break;
case 716:
ctx.stack_.push_back(l);
ctx.enter(ctx.LOGGERS);
}
-#line 3893 "dhcp4_parser.cc"
+#line 3862 "dhcp4_parser.cc"
break;
case 717:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 3902 "dhcp4_parser.cc"
+#line 3871 "dhcp4_parser.cc"
break;
case 720:
ctx.stack_.back()->add(l);
ctx.stack_.push_back(l);
}
-#line 3912 "dhcp4_parser.cc"
+#line 3881 "dhcp4_parser.cc"
break;
case 721:
{
ctx.stack_.pop_back();
}
-#line 3920 "dhcp4_parser.cc"
+#line 3889 "dhcp4_parser.cc"
break;
case 731:
ElementPtr dl(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("debuglevel", dl);
}
-#line 3929 "dhcp4_parser.cc"
+#line 3898 "dhcp4_parser.cc"
break;
case 732:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3937 "dhcp4_parser.cc"
+#line 3906 "dhcp4_parser.cc"
break;
case 733:
ctx.stack_.back()->set("severity", sev);
ctx.leave();
}
-#line 3947 "dhcp4_parser.cc"
+#line 3916 "dhcp4_parser.cc"
break;
case 734:
ctx.stack_.push_back(l);
ctx.enter(ctx.OUTPUT_OPTIONS);
}
-#line 3958 "dhcp4_parser.cc"
+#line 3927 "dhcp4_parser.cc"
break;
case 735:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 3967 "dhcp4_parser.cc"
+#line 3936 "dhcp4_parser.cc"
break;
case 738:
ctx.stack_.back()->add(m);
ctx.stack_.push_back(m);
}
-#line 3977 "dhcp4_parser.cc"
+#line 3946 "dhcp4_parser.cc"
break;
case 739:
{
ctx.stack_.pop_back();
}
-#line 3985 "dhcp4_parser.cc"
+#line 3954 "dhcp4_parser.cc"
break;
case 747:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3993 "dhcp4_parser.cc"
+#line 3962 "dhcp4_parser.cc"
break;
case 748:
ctx.stack_.back()->set("output", sev);
ctx.leave();
}
-#line 4003 "dhcp4_parser.cc"
+#line 3972 "dhcp4_parser.cc"
break;
case 749:
ElementPtr flush(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("flush", flush);
}
-#line 4012 "dhcp4_parser.cc"
+#line 3981 "dhcp4_parser.cc"
break;
case 750:
ElementPtr maxsize(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("maxsize", maxsize);
}
-#line 4021 "dhcp4_parser.cc"
+#line 3990 "dhcp4_parser.cc"
break;
case 751:
ElementPtr maxver(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("maxver", maxver);
}
-#line 4030 "dhcp4_parser.cc"
+#line 3999 "dhcp4_parser.cc"
break;
case 752:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 4038 "dhcp4_parser.cc"
+#line 4007 "dhcp4_parser.cc"
break;
case 753:
ctx.stack_.back()->set("pattern", sev);
ctx.leave();
}
-#line 4048 "dhcp4_parser.cc"
+#line 4017 "dhcp4_parser.cc"
break;
-#line 4052 "dhcp4_parser.cc"
+#line 4021 "dhcp4_parser.cc"
default:
break;
YY_SYMBOL_PRINT ("-> $$ =", yylhs);
yypop_ (yylen);
yylen = 0;
- YY_STACK_PRINT ();
// Shift the result of the reduction.
yypush_ (YY_NULLPTR, YY_MOVE (yylhs));
if (!yyerrstatus_)
{
++yynerrs_;
- error (yyla.location, yysyntax_error_ (yystack_[0].state, yyla));
+ context yyctx (*this, yyla);
+ std::string msg = yysyntax_error_ (yyctx);
+ error (yyla.location, YY_MOVE (msg));
}
error, discard it. */
// Return failure if at end of input.
- if (yyla.type_get () == yyeof_)
+ if (yyla.kind () == symbol_kind::S_YYEOF)
YYABORT;
else if (!yyla.empty ())
{
this YYERROR. */
yypop_ (yylen);
yylen = 0;
+ YY_STACK_PRINT ();
goto yyerrlab1;
`-------------------------------------------------------------*/
yyerrlab1:
yyerrstatus_ = 3; // Each real token shifted decrements this.
- {
- stack_symbol_type error_token;
- for (;;)
- {
- yyn = yypact_[+yystack_[0].state];
- if (!yy_pact_value_is_default_ (yyn))
- {
- yyn += yy_error_token_;
- if (0 <= yyn && yyn <= yylast_ && yycheck_[yyn] == yy_error_token_)
- {
- yyn = yytable_[yyn];
- if (0 < yyn)
- break;
- }
- }
+ // Pop stack until we find a state that shifts the error token.
+ for (;;)
+ {
+ yyn = yypact_[+yystack_[0].state];
+ if (!yy_pact_value_is_default_ (yyn))
+ {
+ yyn += symbol_kind::S_YYerror;
+ if (0 <= yyn && yyn <= yylast_
+ && yycheck_[yyn] == symbol_kind::S_YYerror)
+ {
+ yyn = yytable_[yyn];
+ if (0 < yyn)
+ break;
+ }
+ }
- // Pop the current state because it cannot handle the error token.
- if (yystack_.size () == 1)
- YYABORT;
+ // Pop the current state because it cannot handle the error token.
+ if (yystack_.size () == 1)
+ YYABORT;
- yyerror_range[1].location = yystack_[0].location;
- yy_destroy_ ("Error: popping", yystack_[0]);
- yypop_ ();
- YY_STACK_PRINT ();
- }
+ yyerror_range[1].location = yystack_[0].location;
+ yy_destroy_ ("Error: popping", yystack_[0]);
+ yypop_ ();
+ YY_STACK_PRINT ();
+ }
+ {
+ stack_symbol_type error_token;
yyerror_range[2].location = yyla.location;
YYLLOC_DEFAULT (error_token.location, yyerror_range, 2);
/* Do not reclaim the symbols of the rule whose action triggered
this YYABORT or YYACCEPT. */
yypop_ (yylen);
+ YY_STACK_PRINT ();
while (1 < yystack_.size ())
{
yy_destroy_ ("Cleanup: popping", yystack_[0]);
error (yyexc.location, yyexc.what ());
}
- // Generate an error message.
+ /* Return YYSTR after stripping away unnecessary quotes and
+ backslashes, so that it's suitable for yyerror. The heuristic is
+ that double-quoting is unnecessary unless the string contains an
+ apostrophe, a comma, or backslash (other than backslash-backslash).
+ YYSTR is taken from yytname. */
std::string
- Dhcp4Parser::yysyntax_error_ (state_type yystate, const symbol_type& yyla) const
+ Dhcp4Parser::yytnamerr_ (const char *yystr)
{
- // Number of reported tokens (one for the "unexpected", one per
- // "expected").
- std::ptrdiff_t yycount = 0;
- // Its maximum.
- enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
- // Arguments of yyformat.
- char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
+ if (*yystr == '"')
+ {
+ std::string yyr;
+ char const *yyp = yystr;
+ for (;;)
+ switch (*++yyp)
+ {
+ case '\'':
+ case ',':
+ goto do_not_strip_quotes;
+
+ case '\\':
+ if (*++yyp != '\\')
+ goto do_not_strip_quotes;
+ else
+ goto append;
+
+ append:
+ default:
+ yyr += *yyp;
+ break;
+
+ case '"':
+ return yyr;
+ }
+ do_not_strip_quotes: ;
+ }
+
+ return yystr;
+ }
+
+ std::string
+ Dhcp4Parser::symbol_name (symbol_kind_type yysymbol)
+ {
+ return yytnamerr_ (yytname_[yysymbol]);
+ }
+
+
+
+ // Dhcp4Parser::context.
+ Dhcp4Parser::context::context (const Dhcp4Parser& yyparser, const symbol_type& yyla)
+ : yyparser_ (yyparser)
+ , yyla_ (yyla)
+ {}
+
+ int
+ Dhcp4Parser::context::expected_tokens (symbol_kind_type yyarg[], int yyargn) const
+ {
+ // Actual number of expected tokens
+ int yycount = 0;
+
+ int yyn = yypact_[+yyparser_.yystack_[0].state];
+ if (!yy_pact_value_is_default_ (yyn))
+ {
+ /* Start YYX at -YYN if negative to avoid negative indexes in
+ YYCHECK. In other words, skip the first -YYN actions for
+ this state because they are default actions. */
+ int yyxbegin = yyn < 0 ? -yyn : 0;
+ // Stay within bounds of both yycheck and yytname.
+ int yychecklim = yylast_ - yyn + 1;
+ int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
+ for (int yyx = yyxbegin; yyx < yyxend; ++yyx)
+ if (yycheck_[yyx + yyn] == yyx && yyx != symbol_kind::S_YYerror
+ && !yy_table_value_is_error_ (yytable_[yyx + yyn]))
+ {
+ if (!yyarg)
+ ++yycount;
+ else if (yycount == yyargn)
+ return 0;
+ else
+ yyarg[yycount++] = YY_CAST (symbol_kind_type, yyx);
+ }
+ }
+
+ if (yyarg && yycount == 0 && 0 < yyargn)
+ yyarg[0] = symbol_kind::S_YYEMPTY;
+ return yycount;
+ }
+
+
+
+ int
+ Dhcp4Parser::yy_syntax_error_arguments_ (const context& yyctx,
+ symbol_kind_type yyarg[], int yyargn) const
+ {
/* There are many possibilities here to consider:
- If this state is a consistent state with a default action, then
the only way this function was invoked is if the default action
one exception: it will still contain any token that will not be
accepted due to an error action in a later state.
*/
- if (!yyla.empty ())
- {
- symbol_number_type yytoken = yyla.type_get ();
- yyarg[yycount++] = yytname_[yytoken];
- int yyn = yypact_[+yystate];
- if (!yy_pact_value_is_default_ (yyn))
- {
- /* Start YYX at -YYN if negative to avoid negative indexes in
- YYCHECK. In other words, skip the first -YYN actions for
- this state because they are default actions. */
- int yyxbegin = yyn < 0 ? -yyn : 0;
- // Stay within bounds of both yycheck and yytname.
- int yychecklim = yylast_ - yyn + 1;
- int yyxend = yychecklim < yyntokens_ ? yychecklim : yyntokens_;
- for (int yyx = yyxbegin; yyx < yyxend; ++yyx)
- if (yycheck_[yyx + yyn] == yyx && yyx != yy_error_token_
- && !yy_table_value_is_error_ (yytable_[yyx + yyn]))
- {
- if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
- {
- yycount = 1;
- break;
- }
- else
- yyarg[yycount++] = yytname_[yyx];
- }
- }
+ if (!yyctx.lookahead ().empty ())
+ {
+ if (yyarg)
+ yyarg[0] = yyctx.token ();
+ int yyn = yyctx.expected_tokens (yyarg ? yyarg + 1 : yyarg, yyargn - 1);
+ return yyn + 1;
}
+ return 0;
+ }
+
+ // Generate an error message.
+ std::string
+ Dhcp4Parser::yysyntax_error_ (const context& yyctx) const
+ {
+ // Its maximum.
+ enum { YYARGS_MAX = 5 };
+ // Arguments of yyformat.
+ symbol_kind_type yyarg[YYARGS_MAX];
+ int yycount = yy_syntax_error_arguments_ (yyctx, yyarg, YYARGS_MAX);
char const* yyformat = YY_NULLPTR;
switch (yycount)
for (char const* yyp = yyformat; *yyp; ++yyp)
if (yyp[0] == '%' && yyp[1] == 's' && yyi < yycount)
{
- yyres += yytnamerr_ (yyarg[yyi++]);
+ yyres += symbol_name (yyarg[yyi++]);
++yyp;
}
else
};
-
+#if PARSER4_DEBUG || 1
// YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
- // First, the terminals, then, starting at \a yyntokens_, nonterminals.
+ // First, the terminals, then, starting at \a YYNTOKENS, nonterminals.
const char*
const Dhcp4Parser::yytname_[] =
{
- "\"end of file\"", "error", "$undefined", "\",\"", "\":\"", "\"[\"",
- "\"]\"", "\"{\"", "\"}\"", "\"null\"", "\"Dhcp4\"", "\"config-control\"",
- "\"config-databases\"", "\"config-fetch-wait-time\"",
- "\"interfaces-config\"", "\"interfaces\"", "\"dhcp-socket-type\"",
- "\"raw\"", "\"udp\"", "\"outbound-interface\"", "\"same-as-inbound\"",
- "\"use-routing\"", "\"re-detect\"", "\"sanity-checks\"",
- "\"lease-checks\"", "\"echo-client-id\"", "\"match-client-id\"",
- "\"authoritative\"", "\"next-server\"", "\"server-hostname\"",
- "\"boot-file-name\"", "\"lease-database\"", "\"hosts-database\"",
- "\"hosts-databases\"", "\"type\"", "\"memfile\"", "\"mysql\"",
- "\"postgresql\"", "\"cql\"", "\"user\"", "\"password\"", "\"host\"",
- "\"port\"", "\"persist\"", "\"lfc-interval\"", "\"readonly\"",
- "\"connect-timeout\"", "\"contact-points\"", "\"keyspace\"",
- "\"consistency\"", "\"serial-consistency\"", "\"max-reconnect-tries\"",
- "\"reconnect-wait-time\"", "\"request-timeout\"", "\"tcp-keepalive\"",
- "\"tcp-nodelay\"", "\"max-row-errors\"", "\"valid-lifetime\"",
- "\"min-valid-lifetime\"", "\"max-valid-lifetime\"", "\"renew-timer\"",
- "\"rebind-timer\"", "\"calculate-tee-times\"", "\"t1-percent\"",
- "\"t2-percent\"", "\"decline-probation-period\"", "\"server-tag\"",
+ "\"end of file\"", "error", "\"invalid token\"", "\",\"", "\":\"",
+ "\"[\"", "\"]\"", "\"{\"", "\"}\"", "\"null\"", "\"Dhcp4\"",
+ "\"config-control\"", "\"config-databases\"",
+ "\"config-fetch-wait-time\"", "\"interfaces-config\"", "\"interfaces\"",
+ "\"dhcp-socket-type\"", "\"raw\"", "\"udp\"", "\"outbound-interface\"",
+ "\"same-as-inbound\"", "\"use-routing\"", "\"re-detect\"",
+ "\"sanity-checks\"", "\"lease-checks\"", "\"echo-client-id\"",
+ "\"match-client-id\"", "\"authoritative\"", "\"next-server\"",
+ "\"server-hostname\"", "\"boot-file-name\"", "\"lease-database\"",
+ "\"hosts-database\"", "\"hosts-databases\"", "\"type\"", "\"memfile\"",
+ "\"mysql\"", "\"postgresql\"", "\"cql\"", "\"user\"", "\"password\"",
+ "\"host\"", "\"port\"", "\"persist\"", "\"lfc-interval\"",
+ "\"readonly\"", "\"connect-timeout\"", "\"contact-points\"",
+ "\"keyspace\"", "\"consistency\"", "\"serial-consistency\"",
+ "\"max-reconnect-tries\"", "\"reconnect-wait-time\"",
+ "\"request-timeout\"", "\"tcp-keepalive\"", "\"tcp-nodelay\"",
+ "\"max-row-errors\"", "\"valid-lifetime\"", "\"min-valid-lifetime\"",
+ "\"max-valid-lifetime\"", "\"renew-timer\"", "\"rebind-timer\"",
+ "\"calculate-tee-times\"", "\"t1-percent\"", "\"t2-percent\"",
+ "\"decline-probation-period\"", "\"server-tag\"",
"\"statistic-default-sample-count\"", "\"statistic-default-sample-age\"",
"\"ddns-send-updates\"", "\"ddns-override-no-update\"",
"\"ddns-override-client-update\"", "\"ddns-replace-client-name\"",
"output_params_list", "output_params", "output", "$@135", "flush",
"maxsize", "maxver", "pattern", "$@136", YY_NULLPTR
};
+#endif
+
#if PARSER4_DEBUG
const short
2504, 2509, 2514, 2514
};
- // Print the state stack on the debug stream.
void
- Dhcp4Parser::yystack_print_ ()
+ Dhcp4Parser::yy_stack_print_ () const
{
*yycdebug_ << "Stack now";
for (stack_type::const_iterator
*yycdebug_ << '\n';
}
- // Report on the debug stream that the rule \a yyrule is going to be reduced.
void
- Dhcp4Parser::yy_reduce_print_ (int yyrule)
+ Dhcp4Parser::yy_reduce_print_ (int yyrule) const
{
int yylno = yyrline_[yyrule];
int yynrhs = yyr2_[yyrule];
#line 14 "dhcp4_parser.yy"
} } // isc::dhcp
-#line 5525 "dhcp4_parser.cc"
+#line 5573 "dhcp4_parser.cc"
#line 2522 "dhcp4_parser.yy"
-// A Bison parser, made by GNU Bison 3.5.4.
+// A Bison parser, made by GNU Bison 3.6.2.
// Skeleton interface for Bison LALR(1) parsers in C++
// C++ LALR(1) parser skeleton written by Akim Demaille.
-// Undocumented macros, especially those whose name start with YY_,
-// are private implementation details. Do not rely on them.
+// DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual,
+// especially those whose name start with YY_ or yy_. They are
+// private implementation details that can be changed or removed.
#ifndef YY_PARSER4_DHCP4_PARSER_H_INCLUDED
# define YY_PARSER4_DHCP4_PARSER_H_INCLUDED
using namespace isc::data;
using namespace std;
-#line 60 "dhcp4_parser.h"
+#line 61 "dhcp4_parser.h"
# include <cassert>
# include <cstdlib> // std::abort
#line 14 "dhcp4_parser.yy"
namespace isc { namespace dhcp {
-#line 203 "dhcp4_parser.h"
+#line 204 "dhcp4_parser.h"
new (yyas_<T> ()) T (YY_MOVE (t));
}
+#if 201103L <= YY_CPLUSPLUS
+ /// Non copyable.
+ semantic_type (const self_type&) = delete;
+ /// Non copyable.
+ self_type& operator= (const self_type&) = delete;
+#endif
+
/// Destruction, allowed only if empty.
~semantic_type () YY_NOEXCEPT
{
}
private:
- /// Prohibit blind copies.
- self_type& operator= (const self_type&);
+#if YY_CPLUSPLUS < 201103L
+ /// Non copyable.
semantic_type (const self_type&);
+ /// Non copyable.
+ self_type& operator= (const self_type&);
+#endif
/// Accessor to raw memory as \a T.
template <typename T>
location_type location;
};
- /// Tokens.
+ /// Token kinds.
struct token
{
- enum yytokentype
- {
- TOKEN_END = 0,
- TOKEN_COMMA = 258,
- TOKEN_COLON = 259,
- TOKEN_LSQUARE_BRACKET = 260,
- TOKEN_RSQUARE_BRACKET = 261,
- TOKEN_LCURLY_BRACKET = 262,
- TOKEN_RCURLY_BRACKET = 263,
- TOKEN_NULL_TYPE = 264,
- TOKEN_DHCP4 = 265,
- TOKEN_CONFIG_CONTROL = 266,
- TOKEN_CONFIG_DATABASES = 267,
- TOKEN_CONFIG_FETCH_WAIT_TIME = 268,
- TOKEN_INTERFACES_CONFIG = 269,
- TOKEN_INTERFACES = 270,
- TOKEN_DHCP_SOCKET_TYPE = 271,
- TOKEN_RAW = 272,
- TOKEN_UDP = 273,
- TOKEN_OUTBOUND_INTERFACE = 274,
- TOKEN_SAME_AS_INBOUND = 275,
- TOKEN_USE_ROUTING = 276,
- TOKEN_RE_DETECT = 277,
- TOKEN_SANITY_CHECKS = 278,
- TOKEN_LEASE_CHECKS = 279,
- TOKEN_ECHO_CLIENT_ID = 280,
- TOKEN_MATCH_CLIENT_ID = 281,
- TOKEN_AUTHORITATIVE = 282,
- TOKEN_NEXT_SERVER = 283,
- TOKEN_SERVER_HOSTNAME = 284,
- TOKEN_BOOT_FILE_NAME = 285,
- TOKEN_LEASE_DATABASE = 286,
- TOKEN_HOSTS_DATABASE = 287,
- TOKEN_HOSTS_DATABASES = 288,
- TOKEN_TYPE = 289,
- TOKEN_MEMFILE = 290,
- TOKEN_MYSQL = 291,
- TOKEN_POSTGRESQL = 292,
- TOKEN_CQL = 293,
- TOKEN_USER = 294,
- TOKEN_PASSWORD = 295,
- TOKEN_HOST = 296,
- TOKEN_PORT = 297,
- TOKEN_PERSIST = 298,
- TOKEN_LFC_INTERVAL = 299,
- TOKEN_READONLY = 300,
- TOKEN_CONNECT_TIMEOUT = 301,
- TOKEN_CONTACT_POINTS = 302,
- TOKEN_KEYSPACE = 303,
- TOKEN_CONSISTENCY = 304,
- TOKEN_SERIAL_CONSISTENCY = 305,
- TOKEN_MAX_RECONNECT_TRIES = 306,
- TOKEN_RECONNECT_WAIT_TIME = 307,
- TOKEN_REQUEST_TIMEOUT = 308,
- TOKEN_TCP_KEEPALIVE = 309,
- TOKEN_TCP_NODELAY = 310,
- TOKEN_MAX_ROW_ERRORS = 311,
- TOKEN_VALID_LIFETIME = 312,
- TOKEN_MIN_VALID_LIFETIME = 313,
- TOKEN_MAX_VALID_LIFETIME = 314,
- TOKEN_RENEW_TIMER = 315,
- TOKEN_REBIND_TIMER = 316,
- TOKEN_CALCULATE_TEE_TIMES = 317,
- TOKEN_T1_PERCENT = 318,
- TOKEN_T2_PERCENT = 319,
- TOKEN_DECLINE_PROBATION_PERIOD = 320,
- TOKEN_SERVER_TAG = 321,
- TOKEN_STATISTIC_DEFAULT_SAMPLE_COUNT = 322,
- TOKEN_STATISTIC_DEFAULT_SAMPLE_AGE = 323,
- TOKEN_DDNS_SEND_UPDATES = 324,
- TOKEN_DDNS_OVERRIDE_NO_UPDATE = 325,
- TOKEN_DDNS_OVERRIDE_CLIENT_UPDATE = 326,
- TOKEN_DDNS_REPLACE_CLIENT_NAME = 327,
- TOKEN_DDNS_GENERATED_PREFIX = 328,
- TOKEN_DDNS_QUALIFYING_SUFFIX = 329,
- TOKEN_STORE_EXTENDED_INFO = 330,
- TOKEN_SUBNET4 = 331,
- TOKEN_SUBNET_4O6_INTERFACE = 332,
- TOKEN_SUBNET_4O6_INTERFACE_ID = 333,
- TOKEN_SUBNET_4O6_SUBNET = 334,
- TOKEN_OPTION_DEF = 335,
- TOKEN_OPTION_DATA = 336,
- TOKEN_NAME = 337,
- TOKEN_DATA = 338,
- TOKEN_CODE = 339,
- TOKEN_SPACE = 340,
- TOKEN_CSV_FORMAT = 341,
- TOKEN_ALWAYS_SEND = 342,
- TOKEN_RECORD_TYPES = 343,
- TOKEN_ENCAPSULATE = 344,
- TOKEN_ARRAY = 345,
- TOKEN_SHARED_NETWORKS = 346,
- TOKEN_POOLS = 347,
- TOKEN_POOL = 348,
- TOKEN_USER_CONTEXT = 349,
- TOKEN_COMMENT = 350,
- TOKEN_SUBNET = 351,
- TOKEN_INTERFACE = 352,
- TOKEN_ID = 353,
- TOKEN_RESERVATION_MODE = 354,
- TOKEN_DISABLED = 355,
- TOKEN_OUT_OF_POOL = 356,
- TOKEN_GLOBAL = 357,
- TOKEN_ALL = 358,
- TOKEN_HOST_RESERVATION_IDENTIFIERS = 359,
- TOKEN_CLIENT_CLASSES = 360,
- TOKEN_REQUIRE_CLIENT_CLASSES = 361,
- TOKEN_TEST = 362,
- TOKEN_ONLY_IF_REQUIRED = 363,
- TOKEN_CLIENT_CLASS = 364,
- TOKEN_RESERVATIONS = 365,
- TOKEN_DUID = 366,
- TOKEN_HW_ADDRESS = 367,
- TOKEN_CIRCUIT_ID = 368,
- TOKEN_CLIENT_ID = 369,
- TOKEN_HOSTNAME = 370,
- TOKEN_FLEX_ID = 371,
- TOKEN_RELAY = 372,
- TOKEN_IP_ADDRESS = 373,
- TOKEN_IP_ADDRESSES = 374,
- TOKEN_HOOKS_LIBRARIES = 375,
- TOKEN_LIBRARY = 376,
- TOKEN_PARAMETERS = 377,
- TOKEN_EXPIRED_LEASES_PROCESSING = 378,
- TOKEN_RECLAIM_TIMER_WAIT_TIME = 379,
- TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME = 380,
- TOKEN_HOLD_RECLAIMED_TIME = 381,
- TOKEN_MAX_RECLAIM_LEASES = 382,
- TOKEN_MAX_RECLAIM_TIME = 383,
- TOKEN_UNWARNED_RECLAIM_CYCLES = 384,
- TOKEN_DHCP4O6_PORT = 385,
- TOKEN_DHCP_MULTI_THREADING = 386,
- TOKEN_ENABLE_MULTI_THREADING = 387,
- TOKEN_THREAD_POOL_SIZE = 388,
- TOKEN_PACKET_QUEUE_SIZE = 389,
- TOKEN_CONTROL_SOCKET = 390,
- TOKEN_SOCKET_TYPE = 391,
- TOKEN_SOCKET_NAME = 392,
- TOKEN_DHCP_QUEUE_CONTROL = 393,
- TOKEN_ENABLE_QUEUE = 394,
- TOKEN_QUEUE_TYPE = 395,
- TOKEN_CAPACITY = 396,
- TOKEN_DHCP_DDNS = 397,
- TOKEN_ENABLE_UPDATES = 398,
- TOKEN_QUALIFYING_SUFFIX = 399,
- TOKEN_SERVER_IP = 400,
- TOKEN_SERVER_PORT = 401,
- TOKEN_SENDER_IP = 402,
- TOKEN_SENDER_PORT = 403,
- TOKEN_MAX_QUEUE_SIZE = 404,
- TOKEN_NCR_PROTOCOL = 405,
- TOKEN_NCR_FORMAT = 406,
- TOKEN_OVERRIDE_NO_UPDATE = 407,
- TOKEN_OVERRIDE_CLIENT_UPDATE = 408,
- TOKEN_REPLACE_CLIENT_NAME = 409,
- TOKEN_GENERATED_PREFIX = 410,
- TOKEN_TCP = 411,
- TOKEN_JSON = 412,
- TOKEN_WHEN_PRESENT = 413,
- TOKEN_NEVER = 414,
- TOKEN_ALWAYS = 415,
- TOKEN_WHEN_NOT_PRESENT = 416,
- TOKEN_HOSTNAME_CHAR_SET = 417,
- TOKEN_HOSTNAME_CHAR_REPLACEMENT = 418,
- TOKEN_LOGGING = 419,
- TOKEN_LOGGERS = 420,
- TOKEN_OUTPUT_OPTIONS = 421,
- TOKEN_OUTPUT = 422,
- TOKEN_DEBUGLEVEL = 423,
- TOKEN_SEVERITY = 424,
- TOKEN_FLUSH = 425,
- TOKEN_MAXSIZE = 426,
- TOKEN_MAXVER = 427,
- TOKEN_PATTERN = 428,
- TOKEN_DHCP6 = 429,
- TOKEN_DHCPDDNS = 430,
- TOKEN_CONTROL_AGENT = 431,
- TOKEN_TOPLEVEL_JSON = 432,
- TOKEN_TOPLEVEL_DHCP4 = 433,
- TOKEN_SUB_DHCP4 = 434,
- TOKEN_SUB_INTERFACES4 = 435,
- TOKEN_SUB_SUBNET4 = 436,
- TOKEN_SUB_POOL4 = 437,
- TOKEN_SUB_RESERVATION = 438,
- TOKEN_SUB_OPTION_DEFS = 439,
- TOKEN_SUB_OPTION_DEF = 440,
- TOKEN_SUB_OPTION_DATA = 441,
- TOKEN_SUB_HOOKS_LIBRARY = 442,
- TOKEN_SUB_DHCP_DDNS = 443,
- TOKEN_SUB_LOGGING = 444,
- TOKEN_SUB_CONFIG_CONTROL = 445,
- TOKEN_STRING = 446,
- TOKEN_INTEGER = 447,
- TOKEN_FLOAT = 448,
- TOKEN_BOOLEAN = 449
+ enum token_kind_type
+ {
+ TOKEN_PARSER4_EMPTY = -2,
+ TOKEN_END = 0, // "end of file"
+ TOKEN_PARSER4_error = 256, // error
+ TOKEN_PARSER4_UNDEF = 257, // "invalid token"
+ TOKEN_COMMA = 258, // ","
+ TOKEN_COLON = 259, // ":"
+ TOKEN_LSQUARE_BRACKET = 260, // "["
+ TOKEN_RSQUARE_BRACKET = 261, // "]"
+ TOKEN_LCURLY_BRACKET = 262, // "{"
+ TOKEN_RCURLY_BRACKET = 263, // "}"
+ TOKEN_NULL_TYPE = 264, // "null"
+ TOKEN_DHCP4 = 265, // "Dhcp4"
+ TOKEN_CONFIG_CONTROL = 266, // "config-control"
+ TOKEN_CONFIG_DATABASES = 267, // "config-databases"
+ TOKEN_CONFIG_FETCH_WAIT_TIME = 268, // "config-fetch-wait-time"
+ TOKEN_INTERFACES_CONFIG = 269, // "interfaces-config"
+ TOKEN_INTERFACES = 270, // "interfaces"
+ TOKEN_DHCP_SOCKET_TYPE = 271, // "dhcp-socket-type"
+ TOKEN_RAW = 272, // "raw"
+ TOKEN_UDP = 273, // "udp"
+ TOKEN_OUTBOUND_INTERFACE = 274, // "outbound-interface"
+ TOKEN_SAME_AS_INBOUND = 275, // "same-as-inbound"
+ TOKEN_USE_ROUTING = 276, // "use-routing"
+ TOKEN_RE_DETECT = 277, // "re-detect"
+ TOKEN_SANITY_CHECKS = 278, // "sanity-checks"
+ TOKEN_LEASE_CHECKS = 279, // "lease-checks"
+ TOKEN_ECHO_CLIENT_ID = 280, // "echo-client-id"
+ TOKEN_MATCH_CLIENT_ID = 281, // "match-client-id"
+ TOKEN_AUTHORITATIVE = 282, // "authoritative"
+ TOKEN_NEXT_SERVER = 283, // "next-server"
+ TOKEN_SERVER_HOSTNAME = 284, // "server-hostname"
+ TOKEN_BOOT_FILE_NAME = 285, // "boot-file-name"
+ TOKEN_LEASE_DATABASE = 286, // "lease-database"
+ TOKEN_HOSTS_DATABASE = 287, // "hosts-database"
+ TOKEN_HOSTS_DATABASES = 288, // "hosts-databases"
+ TOKEN_TYPE = 289, // "type"
+ TOKEN_MEMFILE = 290, // "memfile"
+ TOKEN_MYSQL = 291, // "mysql"
+ TOKEN_POSTGRESQL = 292, // "postgresql"
+ TOKEN_CQL = 293, // "cql"
+ TOKEN_USER = 294, // "user"
+ TOKEN_PASSWORD = 295, // "password"
+ TOKEN_HOST = 296, // "host"
+ TOKEN_PORT = 297, // "port"
+ TOKEN_PERSIST = 298, // "persist"
+ TOKEN_LFC_INTERVAL = 299, // "lfc-interval"
+ TOKEN_READONLY = 300, // "readonly"
+ TOKEN_CONNECT_TIMEOUT = 301, // "connect-timeout"
+ TOKEN_CONTACT_POINTS = 302, // "contact-points"
+ TOKEN_KEYSPACE = 303, // "keyspace"
+ TOKEN_CONSISTENCY = 304, // "consistency"
+ TOKEN_SERIAL_CONSISTENCY = 305, // "serial-consistency"
+ TOKEN_MAX_RECONNECT_TRIES = 306, // "max-reconnect-tries"
+ TOKEN_RECONNECT_WAIT_TIME = 307, // "reconnect-wait-time"
+ TOKEN_REQUEST_TIMEOUT = 308, // "request-timeout"
+ TOKEN_TCP_KEEPALIVE = 309, // "tcp-keepalive"
+ TOKEN_TCP_NODELAY = 310, // "tcp-nodelay"
+ TOKEN_MAX_ROW_ERRORS = 311, // "max-row-errors"
+ TOKEN_VALID_LIFETIME = 312, // "valid-lifetime"
+ TOKEN_MIN_VALID_LIFETIME = 313, // "min-valid-lifetime"
+ TOKEN_MAX_VALID_LIFETIME = 314, // "max-valid-lifetime"
+ TOKEN_RENEW_TIMER = 315, // "renew-timer"
+ TOKEN_REBIND_TIMER = 316, // "rebind-timer"
+ TOKEN_CALCULATE_TEE_TIMES = 317, // "calculate-tee-times"
+ TOKEN_T1_PERCENT = 318, // "t1-percent"
+ TOKEN_T2_PERCENT = 319, // "t2-percent"
+ TOKEN_DECLINE_PROBATION_PERIOD = 320, // "decline-probation-period"
+ TOKEN_SERVER_TAG = 321, // "server-tag"
+ TOKEN_STATISTIC_DEFAULT_SAMPLE_COUNT = 322, // "statistic-default-sample-count"
+ TOKEN_STATISTIC_DEFAULT_SAMPLE_AGE = 323, // "statistic-default-sample-age"
+ TOKEN_DDNS_SEND_UPDATES = 324, // "ddns-send-updates"
+ TOKEN_DDNS_OVERRIDE_NO_UPDATE = 325, // "ddns-override-no-update"
+ TOKEN_DDNS_OVERRIDE_CLIENT_UPDATE = 326, // "ddns-override-client-update"
+ TOKEN_DDNS_REPLACE_CLIENT_NAME = 327, // "ddns-replace-client-name"
+ TOKEN_DDNS_GENERATED_PREFIX = 328, // "ddns-generated-prefix"
+ TOKEN_DDNS_QUALIFYING_SUFFIX = 329, // "ddns-qualifying-suffix"
+ TOKEN_STORE_EXTENDED_INFO = 330, // "store-extended-info"
+ TOKEN_SUBNET4 = 331, // "subnet4"
+ TOKEN_SUBNET_4O6_INTERFACE = 332, // "4o6-interface"
+ TOKEN_SUBNET_4O6_INTERFACE_ID = 333, // "4o6-interface-id"
+ TOKEN_SUBNET_4O6_SUBNET = 334, // "4o6-subnet"
+ TOKEN_OPTION_DEF = 335, // "option-def"
+ TOKEN_OPTION_DATA = 336, // "option-data"
+ TOKEN_NAME = 337, // "name"
+ TOKEN_DATA = 338, // "data"
+ TOKEN_CODE = 339, // "code"
+ TOKEN_SPACE = 340, // "space"
+ TOKEN_CSV_FORMAT = 341, // "csv-format"
+ TOKEN_ALWAYS_SEND = 342, // "always-send"
+ TOKEN_RECORD_TYPES = 343, // "record-types"
+ TOKEN_ENCAPSULATE = 344, // "encapsulate"
+ TOKEN_ARRAY = 345, // "array"
+ TOKEN_SHARED_NETWORKS = 346, // "shared-networks"
+ TOKEN_POOLS = 347, // "pools"
+ TOKEN_POOL = 348, // "pool"
+ TOKEN_USER_CONTEXT = 349, // "user-context"
+ TOKEN_COMMENT = 350, // "comment"
+ TOKEN_SUBNET = 351, // "subnet"
+ TOKEN_INTERFACE = 352, // "interface"
+ TOKEN_ID = 353, // "id"
+ TOKEN_RESERVATION_MODE = 354, // "reservation-mode"
+ TOKEN_DISABLED = 355, // "disabled"
+ TOKEN_OUT_OF_POOL = 356, // "out-of-pool"
+ TOKEN_GLOBAL = 357, // "global"
+ TOKEN_ALL = 358, // "all"
+ TOKEN_HOST_RESERVATION_IDENTIFIERS = 359, // "host-reservation-identifiers"
+ TOKEN_CLIENT_CLASSES = 360, // "client-classes"
+ TOKEN_REQUIRE_CLIENT_CLASSES = 361, // "require-client-classes"
+ TOKEN_TEST = 362, // "test"
+ TOKEN_ONLY_IF_REQUIRED = 363, // "only-if-required"
+ TOKEN_CLIENT_CLASS = 364, // "client-class"
+ TOKEN_RESERVATIONS = 365, // "reservations"
+ TOKEN_DUID = 366, // "duid"
+ TOKEN_HW_ADDRESS = 367, // "hw-address"
+ TOKEN_CIRCUIT_ID = 368, // "circuit-id"
+ TOKEN_CLIENT_ID = 369, // "client-id"
+ TOKEN_HOSTNAME = 370, // "hostname"
+ TOKEN_FLEX_ID = 371, // "flex-id"
+ TOKEN_RELAY = 372, // "relay"
+ TOKEN_IP_ADDRESS = 373, // "ip-address"
+ TOKEN_IP_ADDRESSES = 374, // "ip-addresses"
+ TOKEN_HOOKS_LIBRARIES = 375, // "hooks-libraries"
+ TOKEN_LIBRARY = 376, // "library"
+ TOKEN_PARAMETERS = 377, // "parameters"
+ TOKEN_EXPIRED_LEASES_PROCESSING = 378, // "expired-leases-processing"
+ TOKEN_RECLAIM_TIMER_WAIT_TIME = 379, // "reclaim-timer-wait-time"
+ TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME = 380, // "flush-reclaimed-timer-wait-time"
+ TOKEN_HOLD_RECLAIMED_TIME = 381, // "hold-reclaimed-time"
+ TOKEN_MAX_RECLAIM_LEASES = 382, // "max-reclaim-leases"
+ TOKEN_MAX_RECLAIM_TIME = 383, // "max-reclaim-time"
+ TOKEN_UNWARNED_RECLAIM_CYCLES = 384, // "unwarned-reclaim-cycles"
+ TOKEN_DHCP4O6_PORT = 385, // "dhcp4o6-port"
+ TOKEN_DHCP_MULTI_THREADING = 386, // "multi-threading"
+ TOKEN_ENABLE_MULTI_THREADING = 387, // "enable-multi-threading"
+ TOKEN_THREAD_POOL_SIZE = 388, // "thread-pool-size"
+ TOKEN_PACKET_QUEUE_SIZE = 389, // "packet-queue-size"
+ TOKEN_CONTROL_SOCKET = 390, // "control-socket"
+ TOKEN_SOCKET_TYPE = 391, // "socket-type"
+ TOKEN_SOCKET_NAME = 392, // "socket-name"
+ TOKEN_DHCP_QUEUE_CONTROL = 393, // "dhcp-queue-control"
+ TOKEN_ENABLE_QUEUE = 394, // "enable-queue"
+ TOKEN_QUEUE_TYPE = 395, // "queue-type"
+ TOKEN_CAPACITY = 396, // "capacity"
+ TOKEN_DHCP_DDNS = 397, // "dhcp-ddns"
+ TOKEN_ENABLE_UPDATES = 398, // "enable-updates"
+ TOKEN_QUALIFYING_SUFFIX = 399, // "qualifying-suffix"
+ TOKEN_SERVER_IP = 400, // "server-ip"
+ TOKEN_SERVER_PORT = 401, // "server-port"
+ TOKEN_SENDER_IP = 402, // "sender-ip"
+ TOKEN_SENDER_PORT = 403, // "sender-port"
+ TOKEN_MAX_QUEUE_SIZE = 404, // "max-queue-size"
+ TOKEN_NCR_PROTOCOL = 405, // "ncr-protocol"
+ TOKEN_NCR_FORMAT = 406, // "ncr-format"
+ TOKEN_OVERRIDE_NO_UPDATE = 407, // "override-no-update"
+ TOKEN_OVERRIDE_CLIENT_UPDATE = 408, // "override-client-update"
+ TOKEN_REPLACE_CLIENT_NAME = 409, // "replace-client-name"
+ TOKEN_GENERATED_PREFIX = 410, // "generated-prefix"
+ TOKEN_TCP = 411, // "tcp"
+ TOKEN_JSON = 412, // "JSON"
+ TOKEN_WHEN_PRESENT = 413, // "when-present"
+ TOKEN_NEVER = 414, // "never"
+ TOKEN_ALWAYS = 415, // "always"
+ TOKEN_WHEN_NOT_PRESENT = 416, // "when-not-present"
+ TOKEN_HOSTNAME_CHAR_SET = 417, // "hostname-char-set"
+ TOKEN_HOSTNAME_CHAR_REPLACEMENT = 418, // "hostname-char-replacement"
+ TOKEN_LOGGING = 419, // "Logging"
+ TOKEN_LOGGERS = 420, // "loggers"
+ TOKEN_OUTPUT_OPTIONS = 421, // "output_options"
+ TOKEN_OUTPUT = 422, // "output"
+ TOKEN_DEBUGLEVEL = 423, // "debuglevel"
+ TOKEN_SEVERITY = 424, // "severity"
+ TOKEN_FLUSH = 425, // "flush"
+ TOKEN_MAXSIZE = 426, // "maxsize"
+ TOKEN_MAXVER = 427, // "maxver"
+ TOKEN_PATTERN = 428, // "pattern"
+ TOKEN_DHCP6 = 429, // "Dhcp6"
+ TOKEN_DHCPDDNS = 430, // "DhcpDdns"
+ TOKEN_CONTROL_AGENT = 431, // "Control-agent"
+ TOKEN_TOPLEVEL_JSON = 432, // TOPLEVEL_JSON
+ TOKEN_TOPLEVEL_DHCP4 = 433, // TOPLEVEL_DHCP4
+ TOKEN_SUB_DHCP4 = 434, // SUB_DHCP4
+ TOKEN_SUB_INTERFACES4 = 435, // SUB_INTERFACES4
+ TOKEN_SUB_SUBNET4 = 436, // SUB_SUBNET4
+ TOKEN_SUB_POOL4 = 437, // SUB_POOL4
+ TOKEN_SUB_RESERVATION = 438, // SUB_RESERVATION
+ TOKEN_SUB_OPTION_DEFS = 439, // SUB_OPTION_DEFS
+ TOKEN_SUB_OPTION_DEF = 440, // SUB_OPTION_DEF
+ TOKEN_SUB_OPTION_DATA = 441, // SUB_OPTION_DATA
+ TOKEN_SUB_HOOKS_LIBRARY = 442, // SUB_HOOKS_LIBRARY
+ TOKEN_SUB_DHCP_DDNS = 443, // SUB_DHCP_DDNS
+ TOKEN_SUB_LOGGING = 444, // SUB_LOGGING
+ TOKEN_SUB_CONFIG_CONTROL = 445, // SUB_CONFIG_CONTROL
+ TOKEN_STRING = 446, // "constant string"
+ TOKEN_INTEGER = 447, // "integer"
+ TOKEN_FLOAT = 448, // "floating point"
+ TOKEN_BOOLEAN = 449 // "boolean"
};
+ /// Backward compatibility alias (Bison 3.6).
+ typedef token_kind_type yytokentype;
};
- /// (External) token type, as returned by yylex.
- typedef token::yytokentype token_type;
+ /// Token kind, as returned by yylex.
+ typedef token::yytokentype token_kind_type;
+
+ /// Backward compatibility alias (Bison 3.6).
+ typedef token_kind_type token_type;
- /// Symbol type: an internal symbol number.
- typedef int symbol_number_type;
+ /// Symbol kinds.
+ struct symbol_kind
+ {
+ enum symbol_kind_type
+ {
+ YYNTOKENS = 195, ///< Number of tokens.
+ S_YYEMPTY = -2,
+ S_YYEOF = 0, // "end of file"
+ S_YYerror = 1, // error
+ S_YYUNDEF = 2, // "invalid token"
+ S_COMMA = 3, // ","
+ S_COLON = 4, // ":"
+ S_LSQUARE_BRACKET = 5, // "["
+ S_RSQUARE_BRACKET = 6, // "]"
+ S_LCURLY_BRACKET = 7, // "{"
+ S_RCURLY_BRACKET = 8, // "}"
+ S_NULL_TYPE = 9, // "null"
+ S_DHCP4 = 10, // "Dhcp4"
+ S_CONFIG_CONTROL = 11, // "config-control"
+ S_CONFIG_DATABASES = 12, // "config-databases"
+ S_CONFIG_FETCH_WAIT_TIME = 13, // "config-fetch-wait-time"
+ S_INTERFACES_CONFIG = 14, // "interfaces-config"
+ S_INTERFACES = 15, // "interfaces"
+ S_DHCP_SOCKET_TYPE = 16, // "dhcp-socket-type"
+ S_RAW = 17, // "raw"
+ S_UDP = 18, // "udp"
+ S_OUTBOUND_INTERFACE = 19, // "outbound-interface"
+ S_SAME_AS_INBOUND = 20, // "same-as-inbound"
+ S_USE_ROUTING = 21, // "use-routing"
+ S_RE_DETECT = 22, // "re-detect"
+ S_SANITY_CHECKS = 23, // "sanity-checks"
+ S_LEASE_CHECKS = 24, // "lease-checks"
+ S_ECHO_CLIENT_ID = 25, // "echo-client-id"
+ S_MATCH_CLIENT_ID = 26, // "match-client-id"
+ S_AUTHORITATIVE = 27, // "authoritative"
+ S_NEXT_SERVER = 28, // "next-server"
+ S_SERVER_HOSTNAME = 29, // "server-hostname"
+ S_BOOT_FILE_NAME = 30, // "boot-file-name"
+ S_LEASE_DATABASE = 31, // "lease-database"
+ S_HOSTS_DATABASE = 32, // "hosts-database"
+ S_HOSTS_DATABASES = 33, // "hosts-databases"
+ S_TYPE = 34, // "type"
+ S_MEMFILE = 35, // "memfile"
+ S_MYSQL = 36, // "mysql"
+ S_POSTGRESQL = 37, // "postgresql"
+ S_CQL = 38, // "cql"
+ S_USER = 39, // "user"
+ S_PASSWORD = 40, // "password"
+ S_HOST = 41, // "host"
+ S_PORT = 42, // "port"
+ S_PERSIST = 43, // "persist"
+ S_LFC_INTERVAL = 44, // "lfc-interval"
+ S_READONLY = 45, // "readonly"
+ S_CONNECT_TIMEOUT = 46, // "connect-timeout"
+ S_CONTACT_POINTS = 47, // "contact-points"
+ S_KEYSPACE = 48, // "keyspace"
+ S_CONSISTENCY = 49, // "consistency"
+ S_SERIAL_CONSISTENCY = 50, // "serial-consistency"
+ S_MAX_RECONNECT_TRIES = 51, // "max-reconnect-tries"
+ S_RECONNECT_WAIT_TIME = 52, // "reconnect-wait-time"
+ S_REQUEST_TIMEOUT = 53, // "request-timeout"
+ S_TCP_KEEPALIVE = 54, // "tcp-keepalive"
+ S_TCP_NODELAY = 55, // "tcp-nodelay"
+ S_MAX_ROW_ERRORS = 56, // "max-row-errors"
+ S_VALID_LIFETIME = 57, // "valid-lifetime"
+ S_MIN_VALID_LIFETIME = 58, // "min-valid-lifetime"
+ S_MAX_VALID_LIFETIME = 59, // "max-valid-lifetime"
+ S_RENEW_TIMER = 60, // "renew-timer"
+ S_REBIND_TIMER = 61, // "rebind-timer"
+ S_CALCULATE_TEE_TIMES = 62, // "calculate-tee-times"
+ S_T1_PERCENT = 63, // "t1-percent"
+ S_T2_PERCENT = 64, // "t2-percent"
+ S_DECLINE_PROBATION_PERIOD = 65, // "decline-probation-period"
+ S_SERVER_TAG = 66, // "server-tag"
+ S_STATISTIC_DEFAULT_SAMPLE_COUNT = 67, // "statistic-default-sample-count"
+ S_STATISTIC_DEFAULT_SAMPLE_AGE = 68, // "statistic-default-sample-age"
+ S_DDNS_SEND_UPDATES = 69, // "ddns-send-updates"
+ S_DDNS_OVERRIDE_NO_UPDATE = 70, // "ddns-override-no-update"
+ S_DDNS_OVERRIDE_CLIENT_UPDATE = 71, // "ddns-override-client-update"
+ S_DDNS_REPLACE_CLIENT_NAME = 72, // "ddns-replace-client-name"
+ S_DDNS_GENERATED_PREFIX = 73, // "ddns-generated-prefix"
+ S_DDNS_QUALIFYING_SUFFIX = 74, // "ddns-qualifying-suffix"
+ S_STORE_EXTENDED_INFO = 75, // "store-extended-info"
+ S_SUBNET4 = 76, // "subnet4"
+ S_SUBNET_4O6_INTERFACE = 77, // "4o6-interface"
+ S_SUBNET_4O6_INTERFACE_ID = 78, // "4o6-interface-id"
+ S_SUBNET_4O6_SUBNET = 79, // "4o6-subnet"
+ S_OPTION_DEF = 80, // "option-def"
+ S_OPTION_DATA = 81, // "option-data"
+ S_NAME = 82, // "name"
+ S_DATA = 83, // "data"
+ S_CODE = 84, // "code"
+ S_SPACE = 85, // "space"
+ S_CSV_FORMAT = 86, // "csv-format"
+ S_ALWAYS_SEND = 87, // "always-send"
+ S_RECORD_TYPES = 88, // "record-types"
+ S_ENCAPSULATE = 89, // "encapsulate"
+ S_ARRAY = 90, // "array"
+ S_SHARED_NETWORKS = 91, // "shared-networks"
+ S_POOLS = 92, // "pools"
+ S_POOL = 93, // "pool"
+ S_USER_CONTEXT = 94, // "user-context"
+ S_COMMENT = 95, // "comment"
+ S_SUBNET = 96, // "subnet"
+ S_INTERFACE = 97, // "interface"
+ S_ID = 98, // "id"
+ S_RESERVATION_MODE = 99, // "reservation-mode"
+ S_DISABLED = 100, // "disabled"
+ S_OUT_OF_POOL = 101, // "out-of-pool"
+ S_GLOBAL = 102, // "global"
+ S_ALL = 103, // "all"
+ S_HOST_RESERVATION_IDENTIFIERS = 104, // "host-reservation-identifiers"
+ S_CLIENT_CLASSES = 105, // "client-classes"
+ S_REQUIRE_CLIENT_CLASSES = 106, // "require-client-classes"
+ S_TEST = 107, // "test"
+ S_ONLY_IF_REQUIRED = 108, // "only-if-required"
+ S_CLIENT_CLASS = 109, // "client-class"
+ S_RESERVATIONS = 110, // "reservations"
+ S_DUID = 111, // "duid"
+ S_HW_ADDRESS = 112, // "hw-address"
+ S_CIRCUIT_ID = 113, // "circuit-id"
+ S_CLIENT_ID = 114, // "client-id"
+ S_HOSTNAME = 115, // "hostname"
+ S_FLEX_ID = 116, // "flex-id"
+ S_RELAY = 117, // "relay"
+ S_IP_ADDRESS = 118, // "ip-address"
+ S_IP_ADDRESSES = 119, // "ip-addresses"
+ S_HOOKS_LIBRARIES = 120, // "hooks-libraries"
+ S_LIBRARY = 121, // "library"
+ S_PARAMETERS = 122, // "parameters"
+ S_EXPIRED_LEASES_PROCESSING = 123, // "expired-leases-processing"
+ S_RECLAIM_TIMER_WAIT_TIME = 124, // "reclaim-timer-wait-time"
+ S_FLUSH_RECLAIMED_TIMER_WAIT_TIME = 125, // "flush-reclaimed-timer-wait-time"
+ S_HOLD_RECLAIMED_TIME = 126, // "hold-reclaimed-time"
+ S_MAX_RECLAIM_LEASES = 127, // "max-reclaim-leases"
+ S_MAX_RECLAIM_TIME = 128, // "max-reclaim-time"
+ S_UNWARNED_RECLAIM_CYCLES = 129, // "unwarned-reclaim-cycles"
+ S_DHCP4O6_PORT = 130, // "dhcp4o6-port"
+ S_DHCP_MULTI_THREADING = 131, // "multi-threading"
+ S_ENABLE_MULTI_THREADING = 132, // "enable-multi-threading"
+ S_THREAD_POOL_SIZE = 133, // "thread-pool-size"
+ S_PACKET_QUEUE_SIZE = 134, // "packet-queue-size"
+ S_CONTROL_SOCKET = 135, // "control-socket"
+ S_SOCKET_TYPE = 136, // "socket-type"
+ S_SOCKET_NAME = 137, // "socket-name"
+ S_DHCP_QUEUE_CONTROL = 138, // "dhcp-queue-control"
+ S_ENABLE_QUEUE = 139, // "enable-queue"
+ S_QUEUE_TYPE = 140, // "queue-type"
+ S_CAPACITY = 141, // "capacity"
+ S_DHCP_DDNS = 142, // "dhcp-ddns"
+ S_ENABLE_UPDATES = 143, // "enable-updates"
+ S_QUALIFYING_SUFFIX = 144, // "qualifying-suffix"
+ S_SERVER_IP = 145, // "server-ip"
+ S_SERVER_PORT = 146, // "server-port"
+ S_SENDER_IP = 147, // "sender-ip"
+ S_SENDER_PORT = 148, // "sender-port"
+ S_MAX_QUEUE_SIZE = 149, // "max-queue-size"
+ S_NCR_PROTOCOL = 150, // "ncr-protocol"
+ S_NCR_FORMAT = 151, // "ncr-format"
+ S_OVERRIDE_NO_UPDATE = 152, // "override-no-update"
+ S_OVERRIDE_CLIENT_UPDATE = 153, // "override-client-update"
+ S_REPLACE_CLIENT_NAME = 154, // "replace-client-name"
+ S_GENERATED_PREFIX = 155, // "generated-prefix"
+ S_TCP = 156, // "tcp"
+ S_JSON = 157, // "JSON"
+ S_WHEN_PRESENT = 158, // "when-present"
+ S_NEVER = 159, // "never"
+ S_ALWAYS = 160, // "always"
+ S_WHEN_NOT_PRESENT = 161, // "when-not-present"
+ S_HOSTNAME_CHAR_SET = 162, // "hostname-char-set"
+ S_HOSTNAME_CHAR_REPLACEMENT = 163, // "hostname-char-replacement"
+ S_LOGGING = 164, // "Logging"
+ S_LOGGERS = 165, // "loggers"
+ S_OUTPUT_OPTIONS = 166, // "output_options"
+ S_OUTPUT = 167, // "output"
+ S_DEBUGLEVEL = 168, // "debuglevel"
+ S_SEVERITY = 169, // "severity"
+ S_FLUSH = 170, // "flush"
+ S_MAXSIZE = 171, // "maxsize"
+ S_MAXVER = 172, // "maxver"
+ S_PATTERN = 173, // "pattern"
+ S_DHCP6 = 174, // "Dhcp6"
+ S_DHCPDDNS = 175, // "DhcpDdns"
+ S_CONTROL_AGENT = 176, // "Control-agent"
+ S_TOPLEVEL_JSON = 177, // TOPLEVEL_JSON
+ S_TOPLEVEL_DHCP4 = 178, // TOPLEVEL_DHCP4
+ S_SUB_DHCP4 = 179, // SUB_DHCP4
+ S_SUB_INTERFACES4 = 180, // SUB_INTERFACES4
+ S_SUB_SUBNET4 = 181, // SUB_SUBNET4
+ S_SUB_POOL4 = 182, // SUB_POOL4
+ S_SUB_RESERVATION = 183, // SUB_RESERVATION
+ S_SUB_OPTION_DEFS = 184, // SUB_OPTION_DEFS
+ S_SUB_OPTION_DEF = 185, // SUB_OPTION_DEF
+ S_SUB_OPTION_DATA = 186, // SUB_OPTION_DATA
+ S_SUB_HOOKS_LIBRARY = 187, // SUB_HOOKS_LIBRARY
+ S_SUB_DHCP_DDNS = 188, // SUB_DHCP_DDNS
+ S_SUB_LOGGING = 189, // SUB_LOGGING
+ S_SUB_CONFIG_CONTROL = 190, // SUB_CONFIG_CONTROL
+ S_STRING = 191, // "constant string"
+ S_INTEGER = 192, // "integer"
+ S_FLOAT = 193, // "floating point"
+ S_BOOLEAN = 194, // "boolean"
+ S_YYACCEPT = 195, // $accept
+ S_start = 196, // start
+ S_197_1 = 197, // $@1
+ S_198_2 = 198, // $@2
+ S_199_3 = 199, // $@3
+ S_200_4 = 200, // $@4
+ S_201_5 = 201, // $@5
+ S_202_6 = 202, // $@6
+ S_203_7 = 203, // $@7
+ S_204_8 = 204, // $@8
+ S_205_9 = 205, // $@9
+ S_206_10 = 206, // $@10
+ S_207_11 = 207, // $@11
+ S_208_12 = 208, // $@12
+ S_209_13 = 209, // $@13
+ S_210_14 = 210, // $@14
+ S_value = 211, // value
+ S_sub_json = 212, // sub_json
+ S_map2 = 213, // map2
+ S_214_15 = 214, // $@15
+ S_map_value = 215, // map_value
+ S_map_content = 216, // map_content
+ S_not_empty_map = 217, // not_empty_map
+ S_list_generic = 218, // list_generic
+ S_219_16 = 219, // $@16
+ S_list_content = 220, // list_content
+ S_not_empty_list = 221, // not_empty_list
+ S_list_strings = 222, // list_strings
+ S_223_17 = 223, // $@17
+ S_list_strings_content = 224, // list_strings_content
+ S_not_empty_list_strings = 225, // not_empty_list_strings
+ S_unknown_map_entry = 226, // unknown_map_entry
+ S_syntax_map = 227, // syntax_map
+ S_228_18 = 228, // $@18
+ S_global_objects = 229, // global_objects
+ S_global_object = 230, // global_object
+ S_dhcp4_object = 231, // dhcp4_object
+ S_232_19 = 232, // $@19
+ S_sub_dhcp4 = 233, // sub_dhcp4
+ S_234_20 = 234, // $@20
+ S_global_params = 235, // global_params
+ S_global_param = 236, // global_param
+ S_valid_lifetime = 237, // valid_lifetime
+ S_min_valid_lifetime = 238, // min_valid_lifetime
+ S_max_valid_lifetime = 239, // max_valid_lifetime
+ S_renew_timer = 240, // renew_timer
+ S_rebind_timer = 241, // rebind_timer
+ S_calculate_tee_times = 242, // calculate_tee_times
+ S_t1_percent = 243, // t1_percent
+ S_t2_percent = 244, // t2_percent
+ S_decline_probation_period = 245, // decline_probation_period
+ S_server_tag = 246, // server_tag
+ S_247_21 = 247, // $@21
+ S_echo_client_id = 248, // echo_client_id
+ S_match_client_id = 249, // match_client_id
+ S_authoritative = 250, // authoritative
+ S_ddns_send_updates = 251, // ddns_send_updates
+ S_ddns_override_no_update = 252, // ddns_override_no_update
+ S_ddns_override_client_update = 253, // ddns_override_client_update
+ S_ddns_replace_client_name = 254, // ddns_replace_client_name
+ S_255_22 = 255, // $@22
+ S_ddns_replace_client_name_value = 256, // ddns_replace_client_name_value
+ S_ddns_generated_prefix = 257, // ddns_generated_prefix
+ S_258_23 = 258, // $@23
+ S_ddns_qualifying_suffix = 259, // ddns_qualifying_suffix
+ S_260_24 = 260, // $@24
+ S_hostname_char_set = 261, // hostname_char_set
+ S_262_25 = 262, // $@25
+ S_hostname_char_replacement = 263, // hostname_char_replacement
+ S_264_26 = 264, // $@26
+ S_store_extended_info = 265, // store_extended_info
+ S_statistic_default_sample_count = 266, // statistic_default_sample_count
+ S_statistic_default_sample_age = 267, // statistic_default_sample_age
+ S_interfaces_config = 268, // interfaces_config
+ S_269_27 = 269, // $@27
+ S_interfaces_config_params = 270, // interfaces_config_params
+ S_interfaces_config_param = 271, // interfaces_config_param
+ S_sub_interfaces4 = 272, // sub_interfaces4
+ S_273_28 = 273, // $@28
+ S_interfaces_list = 274, // interfaces_list
+ S_275_29 = 275, // $@29
+ S_dhcp_socket_type = 276, // dhcp_socket_type
+ S_277_30 = 277, // $@30
+ S_socket_type = 278, // socket_type
+ S_outbound_interface = 279, // outbound_interface
+ S_280_31 = 280, // $@31
+ S_outbound_interface_value = 281, // outbound_interface_value
+ S_re_detect = 282, // re_detect
+ S_lease_database = 283, // lease_database
+ S_284_32 = 284, // $@32
+ S_sanity_checks = 285, // sanity_checks
+ S_286_33 = 286, // $@33
+ S_sanity_checks_params = 287, // sanity_checks_params
+ S_sanity_checks_param = 288, // sanity_checks_param
+ S_lease_checks = 289, // lease_checks
+ S_290_34 = 290, // $@34
+ S_hosts_database = 291, // hosts_database
+ S_292_35 = 292, // $@35
+ S_hosts_databases = 293, // hosts_databases
+ S_294_36 = 294, // $@36
+ S_database_list = 295, // database_list
+ S_not_empty_database_list = 296, // not_empty_database_list
+ S_database = 297, // database
+ S_298_37 = 298, // $@37
+ S_database_map_params = 299, // database_map_params
+ S_database_map_param = 300, // database_map_param
+ S_database_type = 301, // database_type
+ S_302_38 = 302, // $@38
+ S_db_type = 303, // db_type
+ S_user = 304, // user
+ S_305_39 = 305, // $@39
+ S_password = 306, // password
+ S_307_40 = 307, // $@40
+ S_host = 308, // host
+ S_309_41 = 309, // $@41
+ S_port = 310, // port
+ S_name = 311, // name
+ S_312_42 = 312, // $@42
+ S_persist = 313, // persist
+ S_lfc_interval = 314, // lfc_interval
+ S_readonly = 315, // readonly
+ S_connect_timeout = 316, // connect_timeout
+ S_request_timeout = 317, // request_timeout
+ S_tcp_keepalive = 318, // tcp_keepalive
+ S_tcp_nodelay = 319, // tcp_nodelay
+ S_contact_points = 320, // contact_points
+ S_321_43 = 321, // $@43
+ S_keyspace = 322, // keyspace
+ S_323_44 = 323, // $@44
+ S_consistency = 324, // consistency
+ S_325_45 = 325, // $@45
+ S_serial_consistency = 326, // serial_consistency
+ S_327_46 = 327, // $@46
+ S_max_reconnect_tries = 328, // max_reconnect_tries
+ S_reconnect_wait_time = 329, // reconnect_wait_time
+ S_max_row_errors = 330, // max_row_errors
+ S_host_reservation_identifiers = 331, // host_reservation_identifiers
+ S_332_47 = 332, // $@47
+ S_host_reservation_identifiers_list = 333, // host_reservation_identifiers_list
+ S_host_reservation_identifier = 334, // host_reservation_identifier
+ S_duid_id = 335, // duid_id
+ S_hw_address_id = 336, // hw_address_id
+ S_circuit_id = 337, // circuit_id
+ S_client_id = 338, // client_id
+ S_flex_id = 339, // flex_id
+ S_dhcp_multi_threading = 340, // dhcp_multi_threading
+ S_341_48 = 341, // $@48
+ S_multi_threading_params = 342, // multi_threading_params
+ S_multi_threading_param = 343, // multi_threading_param
+ S_enable_multi_threading = 344, // enable_multi_threading
+ S_thread_pool_size = 345, // thread_pool_size
+ S_packet_queue_size = 346, // packet_queue_size
+ S_hooks_libraries = 347, // hooks_libraries
+ S_348_49 = 348, // $@49
+ S_hooks_libraries_list = 349, // hooks_libraries_list
+ S_not_empty_hooks_libraries_list = 350, // not_empty_hooks_libraries_list
+ S_hooks_library = 351, // hooks_library
+ S_352_50 = 352, // $@50
+ S_sub_hooks_library = 353, // sub_hooks_library
+ S_354_51 = 354, // $@51
+ S_hooks_params = 355, // hooks_params
+ S_hooks_param = 356, // hooks_param
+ S_library = 357, // library
+ S_358_52 = 358, // $@52
+ S_parameters = 359, // parameters
+ S_360_53 = 360, // $@53
+ S_expired_leases_processing = 361, // expired_leases_processing
+ S_362_54 = 362, // $@54
+ S_expired_leases_params = 363, // expired_leases_params
+ S_expired_leases_param = 364, // expired_leases_param
+ S_reclaim_timer_wait_time = 365, // reclaim_timer_wait_time
+ S_flush_reclaimed_timer_wait_time = 366, // flush_reclaimed_timer_wait_time
+ S_hold_reclaimed_time = 367, // hold_reclaimed_time
+ S_max_reclaim_leases = 368, // max_reclaim_leases
+ S_max_reclaim_time = 369, // max_reclaim_time
+ S_unwarned_reclaim_cycles = 370, // unwarned_reclaim_cycles
+ S_subnet4_list = 371, // subnet4_list
+ S_372_55 = 372, // $@55
+ S_subnet4_list_content = 373, // subnet4_list_content
+ S_not_empty_subnet4_list = 374, // not_empty_subnet4_list
+ S_subnet4 = 375, // subnet4
+ S_376_56 = 376, // $@56
+ S_sub_subnet4 = 377, // sub_subnet4
+ S_378_57 = 378, // $@57
+ S_subnet4_params = 379, // subnet4_params
+ S_subnet4_param = 380, // subnet4_param
+ S_subnet = 381, // subnet
+ S_382_58 = 382, // $@58
+ S_subnet_4o6_interface = 383, // subnet_4o6_interface
+ S_384_59 = 384, // $@59
+ S_subnet_4o6_interface_id = 385, // subnet_4o6_interface_id
+ S_386_60 = 386, // $@60
+ S_subnet_4o6_subnet = 387, // subnet_4o6_subnet
+ S_388_61 = 388, // $@61
+ S_interface = 389, // interface
+ S_390_62 = 390, // $@62
+ S_client_class = 391, // client_class
+ S_392_63 = 392, // $@63
+ S_require_client_classes = 393, // require_client_classes
+ S_394_64 = 394, // $@64
+ S_reservation_mode = 395, // reservation_mode
+ S_396_65 = 396, // $@65
+ S_hr_mode = 397, // hr_mode
+ S_id = 398, // id
+ S_shared_networks = 399, // shared_networks
+ S_400_66 = 400, // $@66
+ S_shared_networks_content = 401, // shared_networks_content
+ S_shared_networks_list = 402, // shared_networks_list
+ S_shared_network = 403, // shared_network
+ S_404_67 = 404, // $@67
+ S_shared_network_params = 405, // shared_network_params
+ S_shared_network_param = 406, // shared_network_param
+ S_option_def_list = 407, // option_def_list
+ S_408_68 = 408, // $@68
+ S_sub_option_def_list = 409, // sub_option_def_list
+ S_410_69 = 410, // $@69
+ S_option_def_list_content = 411, // option_def_list_content
+ S_not_empty_option_def_list = 412, // not_empty_option_def_list
+ S_option_def_entry = 413, // option_def_entry
+ S_414_70 = 414, // $@70
+ S_sub_option_def = 415, // sub_option_def
+ S_416_71 = 416, // $@71
+ S_option_def_params = 417, // option_def_params
+ S_not_empty_option_def_params = 418, // not_empty_option_def_params
+ S_option_def_param = 419, // option_def_param
+ S_option_def_name = 420, // option_def_name
+ S_code = 421, // code
+ S_option_def_code = 422, // option_def_code
+ S_option_def_type = 423, // option_def_type
+ S_424_72 = 424, // $@72
+ S_option_def_record_types = 425, // option_def_record_types
+ S_426_73 = 426, // $@73
+ S_space = 427, // space
+ S_428_74 = 428, // $@74
+ S_option_def_space = 429, // option_def_space
+ S_option_def_encapsulate = 430, // option_def_encapsulate
+ S_431_75 = 431, // $@75
+ S_option_def_array = 432, // option_def_array
+ S_option_data_list = 433, // option_data_list
+ S_434_76 = 434, // $@76
+ S_option_data_list_content = 435, // option_data_list_content
+ S_not_empty_option_data_list = 436, // not_empty_option_data_list
+ S_option_data_entry = 437, // option_data_entry
+ S_438_77 = 438, // $@77
+ S_sub_option_data = 439, // sub_option_data
+ S_440_78 = 440, // $@78
+ S_option_data_params = 441, // option_data_params
+ S_not_empty_option_data_params = 442, // not_empty_option_data_params
+ S_option_data_param = 443, // option_data_param
+ S_option_data_name = 444, // option_data_name
+ S_option_data_data = 445, // option_data_data
+ S_446_79 = 446, // $@79
+ S_option_data_code = 447, // option_data_code
+ S_option_data_space = 448, // option_data_space
+ S_option_data_csv_format = 449, // option_data_csv_format
+ S_option_data_always_send = 450, // option_data_always_send
+ S_pools_list = 451, // pools_list
+ S_452_80 = 452, // $@80
+ S_pools_list_content = 453, // pools_list_content
+ S_not_empty_pools_list = 454, // not_empty_pools_list
+ S_pool_list_entry = 455, // pool_list_entry
+ S_456_81 = 456, // $@81
+ S_sub_pool4 = 457, // sub_pool4
+ S_458_82 = 458, // $@82
+ S_pool_params = 459, // pool_params
+ S_pool_param = 460, // pool_param
+ S_pool_entry = 461, // pool_entry
+ S_462_83 = 462, // $@83
+ S_user_context = 463, // user_context
+ S_464_84 = 464, // $@84
+ S_comment = 465, // comment
+ S_466_85 = 466, // $@85
+ S_reservations = 467, // reservations
+ S_468_86 = 468, // $@86
+ S_reservations_list = 469, // reservations_list
+ S_not_empty_reservations_list = 470, // not_empty_reservations_list
+ S_reservation = 471, // reservation
+ S_472_87 = 472, // $@87
+ S_sub_reservation = 473, // sub_reservation
+ S_474_88 = 474, // $@88
+ S_reservation_params = 475, // reservation_params
+ S_not_empty_reservation_params = 476, // not_empty_reservation_params
+ S_reservation_param = 477, // reservation_param
+ S_next_server = 478, // next_server
+ S_479_89 = 479, // $@89
+ S_server_hostname = 480, // server_hostname
+ S_481_90 = 481, // $@90
+ S_boot_file_name = 482, // boot_file_name
+ S_483_91 = 483, // $@91
+ S_ip_address = 484, // ip_address
+ S_485_92 = 485, // $@92
+ S_ip_addresses = 486, // ip_addresses
+ S_487_93 = 487, // $@93
+ S_duid = 488, // duid
+ S_489_94 = 489, // $@94
+ S_hw_address = 490, // hw_address
+ S_491_95 = 491, // $@95
+ S_client_id_value = 492, // client_id_value
+ S_493_96 = 493, // $@96
+ S_circuit_id_value = 494, // circuit_id_value
+ S_495_97 = 495, // $@97
+ S_flex_id_value = 496, // flex_id_value
+ S_497_98 = 497, // $@98
+ S_hostname = 498, // hostname
+ S_499_99 = 499, // $@99
+ S_reservation_client_classes = 500, // reservation_client_classes
+ S_501_100 = 501, // $@100
+ S_relay = 502, // relay
+ S_503_101 = 503, // $@101
+ S_relay_map = 504, // relay_map
+ S_client_classes = 505, // client_classes
+ S_506_102 = 506, // $@102
+ S_client_classes_list = 507, // client_classes_list
+ S_client_class_entry = 508, // client_class_entry
+ S_509_103 = 509, // $@103
+ S_client_class_params = 510, // client_class_params
+ S_not_empty_client_class_params = 511, // not_empty_client_class_params
+ S_client_class_param = 512, // client_class_param
+ S_client_class_name = 513, // client_class_name
+ S_client_class_test = 514, // client_class_test
+ S_515_104 = 515, // $@104
+ S_only_if_required = 516, // only_if_required
+ S_dhcp4o6_port = 517, // dhcp4o6_port
+ S_control_socket = 518, // control_socket
+ S_519_105 = 519, // $@105
+ S_control_socket_params = 520, // control_socket_params
+ S_control_socket_param = 521, // control_socket_param
+ S_control_socket_type = 522, // control_socket_type
+ S_523_106 = 523, // $@106
+ S_control_socket_name = 524, // control_socket_name
+ S_525_107 = 525, // $@107
+ S_dhcp_queue_control = 526, // dhcp_queue_control
+ S_527_108 = 527, // $@108
+ S_queue_control_params = 528, // queue_control_params
+ S_queue_control_param = 529, // queue_control_param
+ S_enable_queue = 530, // enable_queue
+ S_queue_type = 531, // queue_type
+ S_532_109 = 532, // $@109
+ S_capacity = 533, // capacity
+ S_arbitrary_map_entry = 534, // arbitrary_map_entry
+ S_535_110 = 535, // $@110
+ S_dhcp_ddns = 536, // dhcp_ddns
+ S_537_111 = 537, // $@111
+ S_sub_dhcp_ddns = 538, // sub_dhcp_ddns
+ S_539_112 = 539, // $@112
+ S_dhcp_ddns_params = 540, // dhcp_ddns_params
+ S_dhcp_ddns_param = 541, // dhcp_ddns_param
+ S_enable_updates = 542, // enable_updates
+ S_server_ip = 543, // server_ip
+ S_544_113 = 544, // $@113
+ S_server_port = 545, // server_port
+ S_sender_ip = 546, // sender_ip
+ S_547_114 = 547, // $@114
+ S_sender_port = 548, // sender_port
+ S_max_queue_size = 549, // max_queue_size
+ S_ncr_protocol = 550, // ncr_protocol
+ S_551_115 = 551, // $@115
+ S_ncr_protocol_value = 552, // ncr_protocol_value
+ S_ncr_format = 553, // ncr_format
+ S_554_116 = 554, // $@116
+ S_dep_qualifying_suffix = 555, // dep_qualifying_suffix
+ S_556_117 = 556, // $@117
+ S_dep_override_no_update = 557, // dep_override_no_update
+ S_dep_override_client_update = 558, // dep_override_client_update
+ S_dep_replace_client_name = 559, // dep_replace_client_name
+ S_560_118 = 560, // $@118
+ S_dep_generated_prefix = 561, // dep_generated_prefix
+ S_562_119 = 562, // $@119
+ S_dep_hostname_char_set = 563, // dep_hostname_char_set
+ S_564_120 = 564, // $@120
+ S_dep_hostname_char_replacement = 565, // dep_hostname_char_replacement
+ S_566_121 = 566, // $@121
+ S_dhcp6_json_object = 567, // dhcp6_json_object
+ S_568_122 = 568, // $@122
+ S_dhcpddns_json_object = 569, // dhcpddns_json_object
+ S_570_123 = 570, // $@123
+ S_control_agent_json_object = 571, // control_agent_json_object
+ S_572_124 = 572, // $@124
+ S_config_control = 573, // config_control
+ S_574_125 = 574, // $@125
+ S_sub_config_control = 575, // sub_config_control
+ S_576_126 = 576, // $@126
+ S_config_control_params = 577, // config_control_params
+ S_config_control_param = 578, // config_control_param
+ S_config_databases = 579, // config_databases
+ S_580_127 = 580, // $@127
+ S_config_fetch_wait_time = 581, // config_fetch_wait_time
+ S_logging_object = 582, // logging_object
+ S_583_128 = 583, // $@128
+ S_sub_logging = 584, // sub_logging
+ S_585_129 = 585, // $@129
+ S_logging_params = 586, // logging_params
+ S_logging_param = 587, // logging_param
+ S_loggers = 588, // loggers
+ S_589_130 = 589, // $@130
+ S_loggers_entries = 590, // loggers_entries
+ S_logger_entry = 591, // logger_entry
+ S_592_131 = 592, // $@131
+ S_logger_params = 593, // logger_params
+ S_logger_param = 594, // logger_param
+ S_debuglevel = 595, // debuglevel
+ S_severity = 596, // severity
+ S_597_132 = 597, // $@132
+ S_output_options_list = 598, // output_options_list
+ S_599_133 = 599, // $@133
+ S_output_options_list_content = 600, // output_options_list_content
+ S_output_entry = 601, // output_entry
+ S_602_134 = 602, // $@134
+ S_output_params_list = 603, // output_params_list
+ S_output_params = 604, // output_params
+ S_output = 605, // output
+ S_606_135 = 606, // $@135
+ S_flush = 607, // flush
+ S_maxsize = 608, // maxsize
+ S_maxver = 609, // maxver
+ S_pattern = 610, // pattern
+ S_611_136 = 611 // $@136
+ };
+ };
- /// The symbol type number to denote an empty symbol.
- enum { empty_symbol = -2 };
+ /// (Internal) symbol kind.
+ typedef symbol_kind::symbol_kind_type symbol_kind_type;
- /// Internal symbol number for tokens (subsumed by symbol_number_type).
- typedef unsigned char token_number_type;
+ /// The number of tokens.
+ static const symbol_kind_type YYNTOKENS = symbol_kind::YYNTOKENS;
/// A complete symbol.
///
- /// Expects its Base type to provide access to the symbol type
- /// via type_get ().
+ /// Expects its Base type to provide access to the symbol kind
+ /// via kind ().
///
/// Provide access to semantic value and location.
template <typename Base>
#if 201103L <= YY_CPLUSPLUS
/// Move constructor.
- basic_symbol (basic_symbol&& that);
+ basic_symbol (basic_symbol&& that)
+ : Base (std::move (that))
+ , value ()
+ , location (std::move (that.location))
+ {
+ switch (this->kind ())
+ {
+ case 211: // value
+ case 215: // map_value
+ case 256: // ddns_replace_client_name_value
+ case 278: // socket_type
+ case 281: // outbound_interface_value
+ case 303: // db_type
+ case 397: // hr_mode
+ case 552: // ncr_protocol_value
+ value.move< ElementPtr > (std::move (that.value));
+ break;
+
+ case 194: // "boolean"
+ value.move< bool > (std::move (that.value));
+ break;
+
+ case 193: // "floating point"
+ value.move< double > (std::move (that.value));
+ break;
+
+ case 192: // "integer"
+ value.move< int64_t > (std::move (that.value));
+ break;
+
+ case 191: // "constant string"
+ value.move< std::string > (std::move (that.value));
+ break;
+
+ default:
+ break;
+ }
+
+ }
#endif
/// Copy constructor.
void clear ()
{
// User destructor.
- symbol_number_type yytype = this->type_get ();
+ symbol_kind_type yykind = this->kind ();
basic_symbol<Base>& yysym = *this;
(void) yysym;
- switch (yytype)
+ switch (yykind)
{
default:
break;
}
- // Type destructor.
-switch (yytype)
+ // Value type destructor.
+switch (yykind)
{
case 211: // value
case 215: // map_value
Base::clear ();
}
+ /// The user-facing name of this symbol.
+ std::string name () const YY_NOEXCEPT
+ {
+ return Dhcp4Parser::symbol_name (this->kind ());
+ }
+
+ /// Backward compatibility (Bison 3.6).
+ symbol_kind_type type_get () const YY_NOEXCEPT;
+
/// Whether empty.
bool empty () const YY_NOEXCEPT;
};
/// Type access provider for token (enum) based symbols.
- struct by_type
+ struct by_kind
{
/// Default constructor.
- by_type ();
+ by_kind ();
#if 201103L <= YY_CPLUSPLUS
/// Move constructor.
- by_type (by_type&& that);
+ by_kind (by_kind&& that);
#endif
/// Copy constructor.
- by_type (const by_type& that);
+ by_kind (const by_kind& that);
- /// The symbol type as needed by the constructor.
- typedef token_type kind_type;
+ /// The symbol kind as needed by the constructor.
+ typedef token_kind_type kind_type;
/// Constructor from (external) token numbers.
- by_type (kind_type t);
+ by_kind (kind_type t);
/// Record that this symbol is empty.
void clear ();
- /// Steal the symbol type from \a that.
- void move (by_type& that);
+ /// Steal the symbol kind from \a that.
+ void move (by_kind& that);
/// The (internal) type number (corresponding to \a type).
/// \a empty when empty.
- symbol_number_type type_get () const YY_NOEXCEPT;
+ symbol_kind_type kind () const YY_NOEXCEPT;
+
+ /// Backward compatibility (Bison 3.6).
+ symbol_kind_type type_get () const YY_NOEXCEPT;
- /// The symbol type.
- /// \a empty_symbol when empty.
- /// An int, not token_number_type, to be able to store empty_symbol.
- int type;
+ /// The symbol kind.
+ /// \a S_YYEMPTY when empty.
+ symbol_kind_type kind_;
};
+ /// Backward compatibility for a private implementation detail (Bison 3.6).
+ typedef by_kind by_type;
+
/// "External" symbols: returned by the scanner.
- struct symbol_type : basic_symbol<by_type>
+ struct symbol_type : basic_symbol<by_kind>
{
/// Superclass.
- typedef basic_symbol<by_type> super_type;
+ typedef basic_symbol<by_kind> super_type;
/// Empty symbol.
symbol_type () {}
symbol_type (int tok, location_type l)
: super_type(token_type (tok), std::move (l))
{
- YY_ASSERT (tok == token::TOKEN_END || tok == token::TOKEN_COMMA || tok == token::TOKEN_COLON || tok == token::TOKEN_LSQUARE_BRACKET || tok == token::TOKEN_RSQUARE_BRACKET || tok == token::TOKEN_LCURLY_BRACKET || tok == token::TOKEN_RCURLY_BRACKET || tok == token::TOKEN_NULL_TYPE || tok == token::TOKEN_DHCP4 || tok == token::TOKEN_CONFIG_CONTROL || tok == token::TOKEN_CONFIG_DATABASES || tok == token::TOKEN_CONFIG_FETCH_WAIT_TIME || tok == token::TOKEN_INTERFACES_CONFIG || tok == token::TOKEN_INTERFACES || tok == token::TOKEN_DHCP_SOCKET_TYPE || tok == token::TOKEN_RAW || tok == token::TOKEN_UDP || tok == token::TOKEN_OUTBOUND_INTERFACE || tok == token::TOKEN_SAME_AS_INBOUND || tok == token::TOKEN_USE_ROUTING || tok == token::TOKEN_RE_DETECT || tok == token::TOKEN_SANITY_CHECKS || tok == token::TOKEN_LEASE_CHECKS || tok == token::TOKEN_ECHO_CLIENT_ID || tok == token::TOKEN_MATCH_CLIENT_ID || tok == token::TOKEN_AUTHORITATIVE || tok == token::TOKEN_NEXT_SERVER || tok == token::TOKEN_SERVER_HOSTNAME || tok == token::TOKEN_BOOT_FILE_NAME || tok == token::TOKEN_LEASE_DATABASE || tok == token::TOKEN_HOSTS_DATABASE || tok == token::TOKEN_HOSTS_DATABASES || tok == token::TOKEN_TYPE || tok == token::TOKEN_MEMFILE || tok == token::TOKEN_MYSQL || tok == token::TOKEN_POSTGRESQL || tok == token::TOKEN_CQL || tok == token::TOKEN_USER || tok == token::TOKEN_PASSWORD || tok == token::TOKEN_HOST || tok == token::TOKEN_PORT || tok == token::TOKEN_PERSIST || tok == token::TOKEN_LFC_INTERVAL || tok == token::TOKEN_READONLY || tok == token::TOKEN_CONNECT_TIMEOUT || tok == token::TOKEN_CONTACT_POINTS || tok == token::TOKEN_KEYSPACE || tok == token::TOKEN_CONSISTENCY || tok == token::TOKEN_SERIAL_CONSISTENCY || tok == token::TOKEN_MAX_RECONNECT_TRIES || tok == token::TOKEN_RECONNECT_WAIT_TIME || tok == token::TOKEN_REQUEST_TIMEOUT || tok == token::TOKEN_TCP_KEEPALIVE || tok == token::TOKEN_TCP_NODELAY || tok == token::TOKEN_MAX_ROW_ERRORS || tok == token::TOKEN_VALID_LIFETIME || tok == token::TOKEN_MIN_VALID_LIFETIME || tok == token::TOKEN_MAX_VALID_LIFETIME || tok == token::TOKEN_RENEW_TIMER || tok == token::TOKEN_REBIND_TIMER || tok == token::TOKEN_CALCULATE_TEE_TIMES || tok == token::TOKEN_T1_PERCENT || tok == token::TOKEN_T2_PERCENT || tok == token::TOKEN_DECLINE_PROBATION_PERIOD || tok == token::TOKEN_SERVER_TAG || tok == token::TOKEN_STATISTIC_DEFAULT_SAMPLE_COUNT || tok == token::TOKEN_STATISTIC_DEFAULT_SAMPLE_AGE || tok == token::TOKEN_DDNS_SEND_UPDATES || tok == token::TOKEN_DDNS_OVERRIDE_NO_UPDATE || tok == token::TOKEN_DDNS_OVERRIDE_CLIENT_UPDATE || tok == token::TOKEN_DDNS_REPLACE_CLIENT_NAME || tok == token::TOKEN_DDNS_GENERATED_PREFIX || tok == token::TOKEN_DDNS_QUALIFYING_SUFFIX || tok == token::TOKEN_STORE_EXTENDED_INFO || tok == token::TOKEN_SUBNET4 || tok == token::TOKEN_SUBNET_4O6_INTERFACE || tok == token::TOKEN_SUBNET_4O6_INTERFACE_ID || tok == token::TOKEN_SUBNET_4O6_SUBNET || tok == token::TOKEN_OPTION_DEF || tok == token::TOKEN_OPTION_DATA || tok == token::TOKEN_NAME || tok == token::TOKEN_DATA || tok == token::TOKEN_CODE || tok == token::TOKEN_SPACE || tok == token::TOKEN_CSV_FORMAT || tok == token::TOKEN_ALWAYS_SEND || tok == token::TOKEN_RECORD_TYPES || tok == token::TOKEN_ENCAPSULATE || tok == token::TOKEN_ARRAY || tok == token::TOKEN_SHARED_NETWORKS || tok == token::TOKEN_POOLS || tok == token::TOKEN_POOL || tok == token::TOKEN_USER_CONTEXT || tok == token::TOKEN_COMMENT || tok == token::TOKEN_SUBNET || tok == token::TOKEN_INTERFACE || tok == token::TOKEN_ID || tok == token::TOKEN_RESERVATION_MODE || tok == token::TOKEN_DISABLED || tok == token::TOKEN_OUT_OF_POOL || tok == token::TOKEN_GLOBAL || tok == token::TOKEN_ALL || tok == token::TOKEN_HOST_RESERVATION_IDENTIFIERS || tok == token::TOKEN_CLIENT_CLASSES || tok == token::TOKEN_REQUIRE_CLIENT_CLASSES || tok == token::TOKEN_TEST || tok == token::TOKEN_ONLY_IF_REQUIRED || tok == token::TOKEN_CLIENT_CLASS || tok == token::TOKEN_RESERVATIONS || tok == token::TOKEN_DUID || tok == token::TOKEN_HW_ADDRESS || tok == token::TOKEN_CIRCUIT_ID || tok == token::TOKEN_CLIENT_ID || tok == token::TOKEN_HOSTNAME || tok == token::TOKEN_FLEX_ID || tok == token::TOKEN_RELAY || tok == token::TOKEN_IP_ADDRESS || tok == token::TOKEN_IP_ADDRESSES || tok == token::TOKEN_HOOKS_LIBRARIES || tok == token::TOKEN_LIBRARY || tok == token::TOKEN_PARAMETERS || tok == token::TOKEN_EXPIRED_LEASES_PROCESSING || tok == token::TOKEN_RECLAIM_TIMER_WAIT_TIME || tok == token::TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME || tok == token::TOKEN_HOLD_RECLAIMED_TIME || tok == token::TOKEN_MAX_RECLAIM_LEASES || tok == token::TOKEN_MAX_RECLAIM_TIME || tok == token::TOKEN_UNWARNED_RECLAIM_CYCLES || tok == token::TOKEN_DHCP4O6_PORT || tok == token::TOKEN_DHCP_MULTI_THREADING || tok == token::TOKEN_ENABLE_MULTI_THREADING || tok == token::TOKEN_THREAD_POOL_SIZE || tok == token::TOKEN_PACKET_QUEUE_SIZE || tok == token::TOKEN_CONTROL_SOCKET || tok == token::TOKEN_SOCKET_TYPE || tok == token::TOKEN_SOCKET_NAME || tok == token::TOKEN_DHCP_QUEUE_CONTROL || tok == token::TOKEN_ENABLE_QUEUE || tok == token::TOKEN_QUEUE_TYPE || tok == token::TOKEN_CAPACITY || tok == token::TOKEN_DHCP_DDNS || tok == token::TOKEN_ENABLE_UPDATES || tok == token::TOKEN_QUALIFYING_SUFFIX || tok == token::TOKEN_SERVER_IP || tok == token::TOKEN_SERVER_PORT || tok == token::TOKEN_SENDER_IP || tok == token::TOKEN_SENDER_PORT || tok == token::TOKEN_MAX_QUEUE_SIZE || tok == token::TOKEN_NCR_PROTOCOL || tok == token::TOKEN_NCR_FORMAT || tok == token::TOKEN_OVERRIDE_NO_UPDATE || tok == token::TOKEN_OVERRIDE_CLIENT_UPDATE || tok == token::TOKEN_REPLACE_CLIENT_NAME || tok == token::TOKEN_GENERATED_PREFIX || tok == token::TOKEN_TCP || tok == token::TOKEN_JSON || tok == token::TOKEN_WHEN_PRESENT || tok == token::TOKEN_NEVER || tok == token::TOKEN_ALWAYS || tok == token::TOKEN_WHEN_NOT_PRESENT || tok == token::TOKEN_HOSTNAME_CHAR_SET || tok == token::TOKEN_HOSTNAME_CHAR_REPLACEMENT || tok == token::TOKEN_LOGGING || tok == token::TOKEN_LOGGERS || tok == token::TOKEN_OUTPUT_OPTIONS || tok == token::TOKEN_OUTPUT || tok == token::TOKEN_DEBUGLEVEL || tok == token::TOKEN_SEVERITY || tok == token::TOKEN_FLUSH || tok == token::TOKEN_MAXSIZE || tok == token::TOKEN_MAXVER || tok == token::TOKEN_PATTERN || tok == token::TOKEN_DHCP6 || tok == token::TOKEN_DHCPDDNS || tok == token::TOKEN_CONTROL_AGENT || tok == token::TOKEN_TOPLEVEL_JSON || tok == token::TOKEN_TOPLEVEL_DHCP4 || tok == token::TOKEN_SUB_DHCP4 || tok == token::TOKEN_SUB_INTERFACES4 || tok == token::TOKEN_SUB_SUBNET4 || tok == token::TOKEN_SUB_POOL4 || tok == token::TOKEN_SUB_RESERVATION || tok == token::TOKEN_SUB_OPTION_DEFS || tok == token::TOKEN_SUB_OPTION_DEF || tok == token::TOKEN_SUB_OPTION_DATA || tok == token::TOKEN_SUB_HOOKS_LIBRARY || tok == token::TOKEN_SUB_DHCP_DDNS || tok == token::TOKEN_SUB_LOGGING || tok == token::TOKEN_SUB_CONFIG_CONTROL);
+ YY_ASSERT (tok == token::TOKEN_END || tok == token::TOKEN_PARSER4_error || tok == token::TOKEN_PARSER4_UNDEF || tok == token::TOKEN_COMMA || tok == token::TOKEN_COLON || tok == token::TOKEN_LSQUARE_BRACKET || tok == token::TOKEN_RSQUARE_BRACKET || tok == token::TOKEN_LCURLY_BRACKET || tok == token::TOKEN_RCURLY_BRACKET || tok == token::TOKEN_NULL_TYPE || tok == token::TOKEN_DHCP4 || tok == token::TOKEN_CONFIG_CONTROL || tok == token::TOKEN_CONFIG_DATABASES || tok == token::TOKEN_CONFIG_FETCH_WAIT_TIME || tok == token::TOKEN_INTERFACES_CONFIG || tok == token::TOKEN_INTERFACES || tok == token::TOKEN_DHCP_SOCKET_TYPE || tok == token::TOKEN_RAW || tok == token::TOKEN_UDP || tok == token::TOKEN_OUTBOUND_INTERFACE || tok == token::TOKEN_SAME_AS_INBOUND || tok == token::TOKEN_USE_ROUTING || tok == token::TOKEN_RE_DETECT || tok == token::TOKEN_SANITY_CHECKS || tok == token::TOKEN_LEASE_CHECKS || tok == token::TOKEN_ECHO_CLIENT_ID || tok == token::TOKEN_MATCH_CLIENT_ID || tok == token::TOKEN_AUTHORITATIVE || tok == token::TOKEN_NEXT_SERVER || tok == token::TOKEN_SERVER_HOSTNAME || tok == token::TOKEN_BOOT_FILE_NAME || tok == token::TOKEN_LEASE_DATABASE || tok == token::TOKEN_HOSTS_DATABASE || tok == token::TOKEN_HOSTS_DATABASES || tok == token::TOKEN_TYPE || tok == token::TOKEN_MEMFILE || tok == token::TOKEN_MYSQL || tok == token::TOKEN_POSTGRESQL || tok == token::TOKEN_CQL || tok == token::TOKEN_USER || tok == token::TOKEN_PASSWORD || tok == token::TOKEN_HOST || tok == token::TOKEN_PORT || tok == token::TOKEN_PERSIST || tok == token::TOKEN_LFC_INTERVAL || tok == token::TOKEN_READONLY || tok == token::TOKEN_CONNECT_TIMEOUT || tok == token::TOKEN_CONTACT_POINTS || tok == token::TOKEN_KEYSPACE || tok == token::TOKEN_CONSISTENCY || tok == token::TOKEN_SERIAL_CONSISTENCY || tok == token::TOKEN_MAX_RECONNECT_TRIES || tok == token::TOKEN_RECONNECT_WAIT_TIME || tok == token::TOKEN_REQUEST_TIMEOUT || tok == token::TOKEN_TCP_KEEPALIVE || tok == token::TOKEN_TCP_NODELAY || tok == token::TOKEN_MAX_ROW_ERRORS || tok == token::TOKEN_VALID_LIFETIME || tok == token::TOKEN_MIN_VALID_LIFETIME || tok == token::TOKEN_MAX_VALID_LIFETIME || tok == token::TOKEN_RENEW_TIMER || tok == token::TOKEN_REBIND_TIMER || tok == token::TOKEN_CALCULATE_TEE_TIMES || tok == token::TOKEN_T1_PERCENT || tok == token::TOKEN_T2_PERCENT || tok == token::TOKEN_DECLINE_PROBATION_PERIOD || tok == token::TOKEN_SERVER_TAG || tok == token::TOKEN_STATISTIC_DEFAULT_SAMPLE_COUNT || tok == token::TOKEN_STATISTIC_DEFAULT_SAMPLE_AGE || tok == token::TOKEN_DDNS_SEND_UPDATES || tok == token::TOKEN_DDNS_OVERRIDE_NO_UPDATE || tok == token::TOKEN_DDNS_OVERRIDE_CLIENT_UPDATE || tok == token::TOKEN_DDNS_REPLACE_CLIENT_NAME || tok == token::TOKEN_DDNS_GENERATED_PREFIX || tok == token::TOKEN_DDNS_QUALIFYING_SUFFIX || tok == token::TOKEN_STORE_EXTENDED_INFO || tok == token::TOKEN_SUBNET4 || tok == token::TOKEN_SUBNET_4O6_INTERFACE || tok == token::TOKEN_SUBNET_4O6_INTERFACE_ID || tok == token::TOKEN_SUBNET_4O6_SUBNET || tok == token::TOKEN_OPTION_DEF || tok == token::TOKEN_OPTION_DATA || tok == token::TOKEN_NAME || tok == token::TOKEN_DATA || tok == token::TOKEN_CODE || tok == token::TOKEN_SPACE || tok == token::TOKEN_CSV_FORMAT || tok == token::TOKEN_ALWAYS_SEND || tok == token::TOKEN_RECORD_TYPES || tok == token::TOKEN_ENCAPSULATE || tok == token::TOKEN_ARRAY || tok == token::TOKEN_SHARED_NETWORKS || tok == token::TOKEN_POOLS || tok == token::TOKEN_POOL || tok == token::TOKEN_USER_CONTEXT || tok == token::TOKEN_COMMENT || tok == token::TOKEN_SUBNET || tok == token::TOKEN_INTERFACE || tok == token::TOKEN_ID || tok == token::TOKEN_RESERVATION_MODE || tok == token::TOKEN_DISABLED || tok == token::TOKEN_OUT_OF_POOL || tok == token::TOKEN_GLOBAL || tok == token::TOKEN_ALL || tok == token::TOKEN_HOST_RESERVATION_IDENTIFIERS || tok == token::TOKEN_CLIENT_CLASSES || tok == token::TOKEN_REQUIRE_CLIENT_CLASSES || tok == token::TOKEN_TEST || tok == token::TOKEN_ONLY_IF_REQUIRED || tok == token::TOKEN_CLIENT_CLASS || tok == token::TOKEN_RESERVATIONS || tok == token::TOKEN_DUID || tok == token::TOKEN_HW_ADDRESS || tok == token::TOKEN_CIRCUIT_ID || tok == token::TOKEN_CLIENT_ID || tok == token::TOKEN_HOSTNAME || tok == token::TOKEN_FLEX_ID || tok == token::TOKEN_RELAY || tok == token::TOKEN_IP_ADDRESS || tok == token::TOKEN_IP_ADDRESSES || tok == token::TOKEN_HOOKS_LIBRARIES || tok == token::TOKEN_LIBRARY || tok == token::TOKEN_PARAMETERS || tok == token::TOKEN_EXPIRED_LEASES_PROCESSING || tok == token::TOKEN_RECLAIM_TIMER_WAIT_TIME || tok == token::TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME || tok == token::TOKEN_HOLD_RECLAIMED_TIME || tok == token::TOKEN_MAX_RECLAIM_LEASES || tok == token::TOKEN_MAX_RECLAIM_TIME || tok == token::TOKEN_UNWARNED_RECLAIM_CYCLES || tok == token::TOKEN_DHCP4O6_PORT || tok == token::TOKEN_DHCP_MULTI_THREADING || tok == token::TOKEN_ENABLE_MULTI_THREADING || tok == token::TOKEN_THREAD_POOL_SIZE || tok == token::TOKEN_PACKET_QUEUE_SIZE || tok == token::TOKEN_CONTROL_SOCKET || tok == token::TOKEN_SOCKET_TYPE || tok == token::TOKEN_SOCKET_NAME || tok == token::TOKEN_DHCP_QUEUE_CONTROL || tok == token::TOKEN_ENABLE_QUEUE || tok == token::TOKEN_QUEUE_TYPE || tok == token::TOKEN_CAPACITY || tok == token::TOKEN_DHCP_DDNS || tok == token::TOKEN_ENABLE_UPDATES || tok == token::TOKEN_QUALIFYING_SUFFIX || tok == token::TOKEN_SERVER_IP || tok == token::TOKEN_SERVER_PORT || tok == token::TOKEN_SENDER_IP || tok == token::TOKEN_SENDER_PORT || tok == token::TOKEN_MAX_QUEUE_SIZE || tok == token::TOKEN_NCR_PROTOCOL || tok == token::TOKEN_NCR_FORMAT || tok == token::TOKEN_OVERRIDE_NO_UPDATE || tok == token::TOKEN_OVERRIDE_CLIENT_UPDATE || tok == token::TOKEN_REPLACE_CLIENT_NAME || tok == token::TOKEN_GENERATED_PREFIX || tok == token::TOKEN_TCP || tok == token::TOKEN_JSON || tok == token::TOKEN_WHEN_PRESENT || tok == token::TOKEN_NEVER || tok == token::TOKEN_ALWAYS || tok == token::TOKEN_WHEN_NOT_PRESENT || tok == token::TOKEN_HOSTNAME_CHAR_SET || tok == token::TOKEN_HOSTNAME_CHAR_REPLACEMENT || tok == token::TOKEN_LOGGING || tok == token::TOKEN_LOGGERS || tok == token::TOKEN_OUTPUT_OPTIONS || tok == token::TOKEN_OUTPUT || tok == token::TOKEN_DEBUGLEVEL || tok == token::TOKEN_SEVERITY || tok == token::TOKEN_FLUSH || tok == token::TOKEN_MAXSIZE || tok == token::TOKEN_MAXVER || tok == token::TOKEN_PATTERN || tok == token::TOKEN_DHCP6 || tok == token::TOKEN_DHCPDDNS || tok == token::TOKEN_CONTROL_AGENT || tok == token::TOKEN_TOPLEVEL_JSON || tok == token::TOKEN_TOPLEVEL_DHCP4 || tok == token::TOKEN_SUB_DHCP4 || tok == token::TOKEN_SUB_INTERFACES4 || tok == token::TOKEN_SUB_SUBNET4 || tok == token::TOKEN_SUB_POOL4 || tok == token::TOKEN_SUB_RESERVATION || tok == token::TOKEN_SUB_OPTION_DEFS || tok == token::TOKEN_SUB_OPTION_DEF || tok == token::TOKEN_SUB_OPTION_DATA || tok == token::TOKEN_SUB_HOOKS_LIBRARY || tok == token::TOKEN_SUB_DHCP_DDNS || tok == token::TOKEN_SUB_LOGGING || tok == token::TOKEN_SUB_CONFIG_CONTROL);
}
#else
symbol_type (int tok, const location_type& l)
: super_type(token_type (tok), l)
{
- YY_ASSERT (tok == token::TOKEN_END || tok == token::TOKEN_COMMA || tok == token::TOKEN_COLON || tok == token::TOKEN_LSQUARE_BRACKET || tok == token::TOKEN_RSQUARE_BRACKET || tok == token::TOKEN_LCURLY_BRACKET || tok == token::TOKEN_RCURLY_BRACKET || tok == token::TOKEN_NULL_TYPE || tok == token::TOKEN_DHCP4 || tok == token::TOKEN_CONFIG_CONTROL || tok == token::TOKEN_CONFIG_DATABASES || tok == token::TOKEN_CONFIG_FETCH_WAIT_TIME || tok == token::TOKEN_INTERFACES_CONFIG || tok == token::TOKEN_INTERFACES || tok == token::TOKEN_DHCP_SOCKET_TYPE || tok == token::TOKEN_RAW || tok == token::TOKEN_UDP || tok == token::TOKEN_OUTBOUND_INTERFACE || tok == token::TOKEN_SAME_AS_INBOUND || tok == token::TOKEN_USE_ROUTING || tok == token::TOKEN_RE_DETECT || tok == token::TOKEN_SANITY_CHECKS || tok == token::TOKEN_LEASE_CHECKS || tok == token::TOKEN_ECHO_CLIENT_ID || tok == token::TOKEN_MATCH_CLIENT_ID || tok == token::TOKEN_AUTHORITATIVE || tok == token::TOKEN_NEXT_SERVER || tok == token::TOKEN_SERVER_HOSTNAME || tok == token::TOKEN_BOOT_FILE_NAME || tok == token::TOKEN_LEASE_DATABASE || tok == token::TOKEN_HOSTS_DATABASE || tok == token::TOKEN_HOSTS_DATABASES || tok == token::TOKEN_TYPE || tok == token::TOKEN_MEMFILE || tok == token::TOKEN_MYSQL || tok == token::TOKEN_POSTGRESQL || tok == token::TOKEN_CQL || tok == token::TOKEN_USER || tok == token::TOKEN_PASSWORD || tok == token::TOKEN_HOST || tok == token::TOKEN_PORT || tok == token::TOKEN_PERSIST || tok == token::TOKEN_LFC_INTERVAL || tok == token::TOKEN_READONLY || tok == token::TOKEN_CONNECT_TIMEOUT || tok == token::TOKEN_CONTACT_POINTS || tok == token::TOKEN_KEYSPACE || tok == token::TOKEN_CONSISTENCY || tok == token::TOKEN_SERIAL_CONSISTENCY || tok == token::TOKEN_MAX_RECONNECT_TRIES || tok == token::TOKEN_RECONNECT_WAIT_TIME || tok == token::TOKEN_REQUEST_TIMEOUT || tok == token::TOKEN_TCP_KEEPALIVE || tok == token::TOKEN_TCP_NODELAY || tok == token::TOKEN_MAX_ROW_ERRORS || tok == token::TOKEN_VALID_LIFETIME || tok == token::TOKEN_MIN_VALID_LIFETIME || tok == token::TOKEN_MAX_VALID_LIFETIME || tok == token::TOKEN_RENEW_TIMER || tok == token::TOKEN_REBIND_TIMER || tok == token::TOKEN_CALCULATE_TEE_TIMES || tok == token::TOKEN_T1_PERCENT || tok == token::TOKEN_T2_PERCENT || tok == token::TOKEN_DECLINE_PROBATION_PERIOD || tok == token::TOKEN_SERVER_TAG || tok == token::TOKEN_STATISTIC_DEFAULT_SAMPLE_COUNT || tok == token::TOKEN_STATISTIC_DEFAULT_SAMPLE_AGE || tok == token::TOKEN_DDNS_SEND_UPDATES || tok == token::TOKEN_DDNS_OVERRIDE_NO_UPDATE || tok == token::TOKEN_DDNS_OVERRIDE_CLIENT_UPDATE || tok == token::TOKEN_DDNS_REPLACE_CLIENT_NAME || tok == token::TOKEN_DDNS_GENERATED_PREFIX || tok == token::TOKEN_DDNS_QUALIFYING_SUFFIX || tok == token::TOKEN_STORE_EXTENDED_INFO || tok == token::TOKEN_SUBNET4 || tok == token::TOKEN_SUBNET_4O6_INTERFACE || tok == token::TOKEN_SUBNET_4O6_INTERFACE_ID || tok == token::TOKEN_SUBNET_4O6_SUBNET || tok == token::TOKEN_OPTION_DEF || tok == token::TOKEN_OPTION_DATA || tok == token::TOKEN_NAME || tok == token::TOKEN_DATA || tok == token::TOKEN_CODE || tok == token::TOKEN_SPACE || tok == token::TOKEN_CSV_FORMAT || tok == token::TOKEN_ALWAYS_SEND || tok == token::TOKEN_RECORD_TYPES || tok == token::TOKEN_ENCAPSULATE || tok == token::TOKEN_ARRAY || tok == token::TOKEN_SHARED_NETWORKS || tok == token::TOKEN_POOLS || tok == token::TOKEN_POOL || tok == token::TOKEN_USER_CONTEXT || tok == token::TOKEN_COMMENT || tok == token::TOKEN_SUBNET || tok == token::TOKEN_INTERFACE || tok == token::TOKEN_ID || tok == token::TOKEN_RESERVATION_MODE || tok == token::TOKEN_DISABLED || tok == token::TOKEN_OUT_OF_POOL || tok == token::TOKEN_GLOBAL || tok == token::TOKEN_ALL || tok == token::TOKEN_HOST_RESERVATION_IDENTIFIERS || tok == token::TOKEN_CLIENT_CLASSES || tok == token::TOKEN_REQUIRE_CLIENT_CLASSES || tok == token::TOKEN_TEST || tok == token::TOKEN_ONLY_IF_REQUIRED || tok == token::TOKEN_CLIENT_CLASS || tok == token::TOKEN_RESERVATIONS || tok == token::TOKEN_DUID || tok == token::TOKEN_HW_ADDRESS || tok == token::TOKEN_CIRCUIT_ID || tok == token::TOKEN_CLIENT_ID || tok == token::TOKEN_HOSTNAME || tok == token::TOKEN_FLEX_ID || tok == token::TOKEN_RELAY || tok == token::TOKEN_IP_ADDRESS || tok == token::TOKEN_IP_ADDRESSES || tok == token::TOKEN_HOOKS_LIBRARIES || tok == token::TOKEN_LIBRARY || tok == token::TOKEN_PARAMETERS || tok == token::TOKEN_EXPIRED_LEASES_PROCESSING || tok == token::TOKEN_RECLAIM_TIMER_WAIT_TIME || tok == token::TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME || tok == token::TOKEN_HOLD_RECLAIMED_TIME || tok == token::TOKEN_MAX_RECLAIM_LEASES || tok == token::TOKEN_MAX_RECLAIM_TIME || tok == token::TOKEN_UNWARNED_RECLAIM_CYCLES || tok == token::TOKEN_DHCP4O6_PORT || tok == token::TOKEN_DHCP_MULTI_THREADING || tok == token::TOKEN_ENABLE_MULTI_THREADING || tok == token::TOKEN_THREAD_POOL_SIZE || tok == token::TOKEN_PACKET_QUEUE_SIZE || tok == token::TOKEN_CONTROL_SOCKET || tok == token::TOKEN_SOCKET_TYPE || tok == token::TOKEN_SOCKET_NAME || tok == token::TOKEN_DHCP_QUEUE_CONTROL || tok == token::TOKEN_ENABLE_QUEUE || tok == token::TOKEN_QUEUE_TYPE || tok == token::TOKEN_CAPACITY || tok == token::TOKEN_DHCP_DDNS || tok == token::TOKEN_ENABLE_UPDATES || tok == token::TOKEN_QUALIFYING_SUFFIX || tok == token::TOKEN_SERVER_IP || tok == token::TOKEN_SERVER_PORT || tok == token::TOKEN_SENDER_IP || tok == token::TOKEN_SENDER_PORT || tok == token::TOKEN_MAX_QUEUE_SIZE || tok == token::TOKEN_NCR_PROTOCOL || tok == token::TOKEN_NCR_FORMAT || tok == token::TOKEN_OVERRIDE_NO_UPDATE || tok == token::TOKEN_OVERRIDE_CLIENT_UPDATE || tok == token::TOKEN_REPLACE_CLIENT_NAME || tok == token::TOKEN_GENERATED_PREFIX || tok == token::TOKEN_TCP || tok == token::TOKEN_JSON || tok == token::TOKEN_WHEN_PRESENT || tok == token::TOKEN_NEVER || tok == token::TOKEN_ALWAYS || tok == token::TOKEN_WHEN_NOT_PRESENT || tok == token::TOKEN_HOSTNAME_CHAR_SET || tok == token::TOKEN_HOSTNAME_CHAR_REPLACEMENT || tok == token::TOKEN_LOGGING || tok == token::TOKEN_LOGGERS || tok == token::TOKEN_OUTPUT_OPTIONS || tok == token::TOKEN_OUTPUT || tok == token::TOKEN_DEBUGLEVEL || tok == token::TOKEN_SEVERITY || tok == token::TOKEN_FLUSH || tok == token::TOKEN_MAXSIZE || tok == token::TOKEN_MAXVER || tok == token::TOKEN_PATTERN || tok == token::TOKEN_DHCP6 || tok == token::TOKEN_DHCPDDNS || tok == token::TOKEN_CONTROL_AGENT || tok == token::TOKEN_TOPLEVEL_JSON || tok == token::TOKEN_TOPLEVEL_DHCP4 || tok == token::TOKEN_SUB_DHCP4 || tok == token::TOKEN_SUB_INTERFACES4 || tok == token::TOKEN_SUB_SUBNET4 || tok == token::TOKEN_SUB_POOL4 || tok == token::TOKEN_SUB_RESERVATION || tok == token::TOKEN_SUB_OPTION_DEFS || tok == token::TOKEN_SUB_OPTION_DEF || tok == token::TOKEN_SUB_OPTION_DATA || tok == token::TOKEN_SUB_HOOKS_LIBRARY || tok == token::TOKEN_SUB_DHCP_DDNS || tok == token::TOKEN_SUB_LOGGING || tok == token::TOKEN_SUB_CONFIG_CONTROL);
+ YY_ASSERT (tok == token::TOKEN_END || tok == token::TOKEN_PARSER4_error || tok == token::TOKEN_PARSER4_UNDEF || tok == token::TOKEN_COMMA || tok == token::TOKEN_COLON || tok == token::TOKEN_LSQUARE_BRACKET || tok == token::TOKEN_RSQUARE_BRACKET || tok == token::TOKEN_LCURLY_BRACKET || tok == token::TOKEN_RCURLY_BRACKET || tok == token::TOKEN_NULL_TYPE || tok == token::TOKEN_DHCP4 || tok == token::TOKEN_CONFIG_CONTROL || tok == token::TOKEN_CONFIG_DATABASES || tok == token::TOKEN_CONFIG_FETCH_WAIT_TIME || tok == token::TOKEN_INTERFACES_CONFIG || tok == token::TOKEN_INTERFACES || tok == token::TOKEN_DHCP_SOCKET_TYPE || tok == token::TOKEN_RAW || tok == token::TOKEN_UDP || tok == token::TOKEN_OUTBOUND_INTERFACE || tok == token::TOKEN_SAME_AS_INBOUND || tok == token::TOKEN_USE_ROUTING || tok == token::TOKEN_RE_DETECT || tok == token::TOKEN_SANITY_CHECKS || tok == token::TOKEN_LEASE_CHECKS || tok == token::TOKEN_ECHO_CLIENT_ID || tok == token::TOKEN_MATCH_CLIENT_ID || tok == token::TOKEN_AUTHORITATIVE || tok == token::TOKEN_NEXT_SERVER || tok == token::TOKEN_SERVER_HOSTNAME || tok == token::TOKEN_BOOT_FILE_NAME || tok == token::TOKEN_LEASE_DATABASE || tok == token::TOKEN_HOSTS_DATABASE || tok == token::TOKEN_HOSTS_DATABASES || tok == token::TOKEN_TYPE || tok == token::TOKEN_MEMFILE || tok == token::TOKEN_MYSQL || tok == token::TOKEN_POSTGRESQL || tok == token::TOKEN_CQL || tok == token::TOKEN_USER || tok == token::TOKEN_PASSWORD || tok == token::TOKEN_HOST || tok == token::TOKEN_PORT || tok == token::TOKEN_PERSIST || tok == token::TOKEN_LFC_INTERVAL || tok == token::TOKEN_READONLY || tok == token::TOKEN_CONNECT_TIMEOUT || tok == token::TOKEN_CONTACT_POINTS || tok == token::TOKEN_KEYSPACE || tok == token::TOKEN_CONSISTENCY || tok == token::TOKEN_SERIAL_CONSISTENCY || tok == token::TOKEN_MAX_RECONNECT_TRIES || tok == token::TOKEN_RECONNECT_WAIT_TIME || tok == token::TOKEN_REQUEST_TIMEOUT || tok == token::TOKEN_TCP_KEEPALIVE || tok == token::TOKEN_TCP_NODELAY || tok == token::TOKEN_MAX_ROW_ERRORS || tok == token::TOKEN_VALID_LIFETIME || tok == token::TOKEN_MIN_VALID_LIFETIME || tok == token::TOKEN_MAX_VALID_LIFETIME || tok == token::TOKEN_RENEW_TIMER || tok == token::TOKEN_REBIND_TIMER || tok == token::TOKEN_CALCULATE_TEE_TIMES || tok == token::TOKEN_T1_PERCENT || tok == token::TOKEN_T2_PERCENT || tok == token::TOKEN_DECLINE_PROBATION_PERIOD || tok == token::TOKEN_SERVER_TAG || tok == token::TOKEN_STATISTIC_DEFAULT_SAMPLE_COUNT || tok == token::TOKEN_STATISTIC_DEFAULT_SAMPLE_AGE || tok == token::TOKEN_DDNS_SEND_UPDATES || tok == token::TOKEN_DDNS_OVERRIDE_NO_UPDATE || tok == token::TOKEN_DDNS_OVERRIDE_CLIENT_UPDATE || tok == token::TOKEN_DDNS_REPLACE_CLIENT_NAME || tok == token::TOKEN_DDNS_GENERATED_PREFIX || tok == token::TOKEN_DDNS_QUALIFYING_SUFFIX || tok == token::TOKEN_STORE_EXTENDED_INFO || tok == token::TOKEN_SUBNET4 || tok == token::TOKEN_SUBNET_4O6_INTERFACE || tok == token::TOKEN_SUBNET_4O6_INTERFACE_ID || tok == token::TOKEN_SUBNET_4O6_SUBNET || tok == token::TOKEN_OPTION_DEF || tok == token::TOKEN_OPTION_DATA || tok == token::TOKEN_NAME || tok == token::TOKEN_DATA || tok == token::TOKEN_CODE || tok == token::TOKEN_SPACE || tok == token::TOKEN_CSV_FORMAT || tok == token::TOKEN_ALWAYS_SEND || tok == token::TOKEN_RECORD_TYPES || tok == token::TOKEN_ENCAPSULATE || tok == token::TOKEN_ARRAY || tok == token::TOKEN_SHARED_NETWORKS || tok == token::TOKEN_POOLS || tok == token::TOKEN_POOL || tok == token::TOKEN_USER_CONTEXT || tok == token::TOKEN_COMMENT || tok == token::TOKEN_SUBNET || tok == token::TOKEN_INTERFACE || tok == token::TOKEN_ID || tok == token::TOKEN_RESERVATION_MODE || tok == token::TOKEN_DISABLED || tok == token::TOKEN_OUT_OF_POOL || tok == token::TOKEN_GLOBAL || tok == token::TOKEN_ALL || tok == token::TOKEN_HOST_RESERVATION_IDENTIFIERS || tok == token::TOKEN_CLIENT_CLASSES || tok == token::TOKEN_REQUIRE_CLIENT_CLASSES || tok == token::TOKEN_TEST || tok == token::TOKEN_ONLY_IF_REQUIRED || tok == token::TOKEN_CLIENT_CLASS || tok == token::TOKEN_RESERVATIONS || tok == token::TOKEN_DUID || tok == token::TOKEN_HW_ADDRESS || tok == token::TOKEN_CIRCUIT_ID || tok == token::TOKEN_CLIENT_ID || tok == token::TOKEN_HOSTNAME || tok == token::TOKEN_FLEX_ID || tok == token::TOKEN_RELAY || tok == token::TOKEN_IP_ADDRESS || tok == token::TOKEN_IP_ADDRESSES || tok == token::TOKEN_HOOKS_LIBRARIES || tok == token::TOKEN_LIBRARY || tok == token::TOKEN_PARAMETERS || tok == token::TOKEN_EXPIRED_LEASES_PROCESSING || tok == token::TOKEN_RECLAIM_TIMER_WAIT_TIME || tok == token::TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME || tok == token::TOKEN_HOLD_RECLAIMED_TIME || tok == token::TOKEN_MAX_RECLAIM_LEASES || tok == token::TOKEN_MAX_RECLAIM_TIME || tok == token::TOKEN_UNWARNED_RECLAIM_CYCLES || tok == token::TOKEN_DHCP4O6_PORT || tok == token::TOKEN_DHCP_MULTI_THREADING || tok == token::TOKEN_ENABLE_MULTI_THREADING || tok == token::TOKEN_THREAD_POOL_SIZE || tok == token::TOKEN_PACKET_QUEUE_SIZE || tok == token::TOKEN_CONTROL_SOCKET || tok == token::TOKEN_SOCKET_TYPE || tok == token::TOKEN_SOCKET_NAME || tok == token::TOKEN_DHCP_QUEUE_CONTROL || tok == token::TOKEN_ENABLE_QUEUE || tok == token::TOKEN_QUEUE_TYPE || tok == token::TOKEN_CAPACITY || tok == token::TOKEN_DHCP_DDNS || tok == token::TOKEN_ENABLE_UPDATES || tok == token::TOKEN_QUALIFYING_SUFFIX || tok == token::TOKEN_SERVER_IP || tok == token::TOKEN_SERVER_PORT || tok == token::TOKEN_SENDER_IP || tok == token::TOKEN_SENDER_PORT || tok == token::TOKEN_MAX_QUEUE_SIZE || tok == token::TOKEN_NCR_PROTOCOL || tok == token::TOKEN_NCR_FORMAT || tok == token::TOKEN_OVERRIDE_NO_UPDATE || tok == token::TOKEN_OVERRIDE_CLIENT_UPDATE || tok == token::TOKEN_REPLACE_CLIENT_NAME || tok == token::TOKEN_GENERATED_PREFIX || tok == token::TOKEN_TCP || tok == token::TOKEN_JSON || tok == token::TOKEN_WHEN_PRESENT || tok == token::TOKEN_NEVER || tok == token::TOKEN_ALWAYS || tok == token::TOKEN_WHEN_NOT_PRESENT || tok == token::TOKEN_HOSTNAME_CHAR_SET || tok == token::TOKEN_HOSTNAME_CHAR_REPLACEMENT || tok == token::TOKEN_LOGGING || tok == token::TOKEN_LOGGERS || tok == token::TOKEN_OUTPUT_OPTIONS || tok == token::TOKEN_OUTPUT || tok == token::TOKEN_DEBUGLEVEL || tok == token::TOKEN_SEVERITY || tok == token::TOKEN_FLUSH || tok == token::TOKEN_MAXSIZE || tok == token::TOKEN_MAXVER || tok == token::TOKEN_PATTERN || tok == token::TOKEN_DHCP6 || tok == token::TOKEN_DHCPDDNS || tok == token::TOKEN_CONTROL_AGENT || tok == token::TOKEN_TOPLEVEL_JSON || tok == token::TOKEN_TOPLEVEL_DHCP4 || tok == token::TOKEN_SUB_DHCP4 || tok == token::TOKEN_SUB_INTERFACES4 || tok == token::TOKEN_SUB_SUBNET4 || tok == token::TOKEN_SUB_POOL4 || tok == token::TOKEN_SUB_RESERVATION || tok == token::TOKEN_SUB_OPTION_DEFS || tok == token::TOKEN_SUB_OPTION_DEF || tok == token::TOKEN_SUB_OPTION_DATA || tok == token::TOKEN_SUB_HOOKS_LIBRARY || tok == token::TOKEN_SUB_DHCP_DDNS || tok == token::TOKEN_SUB_LOGGING || tok == token::TOKEN_SUB_CONFIG_CONTROL);
}
#endif
#if 201103L <= YY_CPLUSPLUS
Dhcp4Parser (isc::dhcp::Parser4Context& ctx_yyarg);
virtual ~Dhcp4Parser ();
+#if 201103L <= YY_CPLUSPLUS
+ /// Non copyable.
+ Dhcp4Parser (const Dhcp4Parser&) = delete;
+ /// Non copyable.
+ Dhcp4Parser& operator= (const Dhcp4Parser&) = delete;
+#endif
+
/// Parse. An alias for parse ().
/// \returns 0 iff parsing succeeded.
int operator() ();
/// Report a syntax error.
void error (const syntax_error& err);
+ /// The user-facing name of the symbol whose (internal) number is
+ /// YYSYMBOL. No bounds checking.
+ static std::string symbol_name (symbol_kind_type yysymbol);
+
// Implementation of make_symbol for each symbol type.
#if 201103L <= YY_CPLUSPLUS
static
return symbol_type (token::TOKEN_END, l);
}
#endif
+#if 201103L <= YY_CPLUSPLUS
+ static
+ symbol_type
+ make_PARSER4_error (location_type l)
+ {
+ return symbol_type (token::TOKEN_PARSER4_error, std::move (l));
+ }
+#else
+ static
+ symbol_type
+ make_PARSER4_error (const location_type& l)
+ {
+ return symbol_type (token::TOKEN_PARSER4_error, l);
+ }
+#endif
+#if 201103L <= YY_CPLUSPLUS
+ static
+ symbol_type
+ make_PARSER4_UNDEF (location_type l)
+ {
+ return symbol_type (token::TOKEN_PARSER4_UNDEF, std::move (l));
+ }
+#else
+ static
+ symbol_type
+ make_PARSER4_UNDEF (const location_type& l)
+ {
+ return symbol_type (token::TOKEN_PARSER4_UNDEF, l);
+ }
+#endif
#if 201103L <= YY_CPLUSPLUS
static
symbol_type
#endif
+ class context
+ {
+ public:
+ context (const Dhcp4Parser& yyparser, const symbol_type& yyla);
+ const symbol_type& lookahead () const { return yyla_; }
+ symbol_kind_type token () const { return yyla_.kind (); }
+ const location_type& location () const { return yyla_.location; }
+
+ /// Put in YYARG at most YYARGN of the expected tokens, and return the
+ /// number of tokens stored in YYARG. If YYARG is null, return the
+ /// number of expected tokens (guaranteed to be less than YYNTOKENS).
+ int expected_tokens (symbol_kind_type yyarg[], int yyargn) const;
+
+ private:
+ const Dhcp4Parser& yyparser_;
+ const symbol_type& yyla_;
+ };
+
private:
- /// This class is not copyable.
+#if YY_CPLUSPLUS < 201103L
+ /// Non copyable.
Dhcp4Parser (const Dhcp4Parser&);
+ /// Non copyable.
Dhcp4Parser& operator= (const Dhcp4Parser&);
+#endif
+
/// Stored state numbers (used for stacks).
typedef short 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;
+ /// The arguments of the error message.
+ int yy_syntax_error_arguments_ (const context& yyctx,
+ symbol_kind_type yyarg[], int yyargn) const;
+ /// Generate an error message.
+ /// \param yyctx the context in which the error occurred.
+ virtual std::string yysyntax_error_ (const context& yyctx) const;
/// Compute post-reduction state.
/// \param yystate the current state
/// \param yysym the nonterminal to push on the stack
static const short yypact_ninf_;
static const signed char yytable_ninf_;
- /// Convert a scanner token number \a t to a symbol number.
- /// In theory \a t should be a token_type, but character literals
+ /// Convert a scanner token kind \a t to a symbol kind.
+ /// In theory \a t should be a token_kind_type, but character literals
/// are valid, yet not members of the token_type enum.
- static token_number_type yytranslate_ (int t);
+ static symbol_kind_type yytranslate_ (int t);
+
+ /// Convert the symbol name \a n to a form suitable for a diagnostic.
+ static std::string yytnamerr_ (const char *yystr);
+
+ /// For a symbol, its name in clear.
+ static const char* const yytname_[];
+
// Tables.
- // YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+ // YYPACTSTATE-NUM -- Index in YYTABLE of the portion describing
// STATE-NUM.
static const short yypact_[];
- // YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
+ // YYDEFACTSTATE-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 short yydefact_[];
- // YYPGOTO[NTERM-NUM].
+ // YYPGOTONTERM-NUM.
static const short yypgoto_[];
- // YYDEFGOTO[NTERM-NUM].
+ // YYDEFGOTONTERM-NUM.
static const short yydefgoto_[];
- // YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If
+ // YYTABLEYYPACT[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 short yytable_[];
static const short yycheck_[];
- // YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+ // YYSTOSSTATE-NUM -- The (internal number of the) accessing
// symbol of state STATE-NUM.
static const short yystos_[];
- // YYR1[YYN] -- Symbol number of symbol that rule YYN derives.
+ // YYR1YYN -- Symbol number of symbol that rule YYN derives.
static const short yyr1_[];
- // YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.
+ // YYR2YYN -- Number of symbols on the right hand side of rule YYN.
static const signed 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 PARSER4_DEBUG
- // YYRLINE[YYN] -- Source line where rule number YYN was defined.
+ // YYRLINEYYN -- Source line where rule number YYN was defined.
static const short yyrline_[];
/// Report on the debug stream that the rule \a r is going to be reduced.
- virtual void yy_reduce_print_ (int r);
+ virtual void yy_reduce_print_ (int r) const;
/// Print the state stack on the debug stream.
- virtual void yystack_print_ ();
+ virtual void yy_stack_print_ () const;
/// Debugging level.
int yydebug_;
/// Debug stream.
std::ostream* yycdebug_;
- /// \brief Display a symbol type, value and location.
+ /// \brief Display a symbol kind, value and location.
/// \param yyo The output stream.
/// \param yysym The symbol.
template <typename Base>
/// Default constructor.
by_state () YY_NOEXCEPT;
- /// The symbol type as needed by the constructor.
+ /// The symbol kind as needed by the constructor.
typedef state_type kind_type;
/// Constructor.
/// Record that this symbol is empty.
void clear () YY_NOEXCEPT;
- /// Steal the symbol type from \a that.
+ /// Steal the symbol kind 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 YY_NOEXCEPT;
+ /// The symbol kind (corresponding to \a state).
+ /// \a S_YYEMPTY when empty.
+ symbol_kind_type kind () const YY_NOEXCEPT;
/// The state number used to denote an empty symbol.
/// We use the initial state, as it does not have a value.
{
public:
// Hide our reversed order.
- typedef typename S::reverse_iterator iterator;
- typedef typename S::const_reverse_iterator const_iterator;
+ typedef typename S::iterator iterator;
+ typedef typename S::const_iterator const_iterator;
typedef typename S::size_type size_type;
typedef typename std::ptrdiff_t index_type;
: seq_ (n)
{}
+#if 201103L <= YY_CPLUSPLUS
+ /// Non copyable.
+ stack (const stack&) = delete;
+ /// Non copyable.
+ stack& operator= (const stack&) = delete;
+#endif
+
/// Random access.
///
/// Index 0 returns the topmost element.
return index_type (seq_.size ());
}
- std::ptrdiff_t
- ssize () const YY_NOEXCEPT
- {
- return std::ptrdiff_t (size ());
- }
-
/// Iterator on top of the stack (going downwards).
const_iterator
begin () const YY_NOEXCEPT
{
- return seq_.rbegin ();
+ return seq_.begin ();
}
/// Bottom of the stack.
const_iterator
end () const YY_NOEXCEPT
{
- return seq_.rend ();
+ return seq_.end ();
}
/// Present a slice of the top of a stack.
};
private:
+#if YY_CPLUSPLUS < 201103L
+ /// Non copyable.
stack (const stack&);
+ /// Non copyable.
stack& operator= (const stack&);
+#endif
/// The wrapped container.
S seq_;
};
/// Pop \a n symbols from the stack.
void yypop_ (int n = 1);
- /// Some specific tokens.
- static const token_number_type yy_error_token_ = 1;
- static const token_number_type yy_undef_token_ = 2;
-
/// Constants.
enum
{
- yyeof_ = 0,
yylast_ = 1357, ///< Last index in yytable_.
yynnts_ = 417, ///< Number of nonterminal symbols.
- yyfinal_ = 30, ///< Termination state number.
- yyntokens_ = 195 ///< Number of tokens.
+ yyfinal_ = 30 ///< Termination state number.
};
// User arguments.
isc::dhcp::Parser4Context& ctx;
+
};
inline
- Dhcp4Parser::token_number_type
+ Dhcp4Parser::symbol_kind_type
Dhcp4Parser::yytranslate_ (int t)
{
// YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to
// TOKEN-NUM as returned by yylex.
static
- const token_number_type
+ const unsigned char
translate_table[] =
{
0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
const int user_token_number_max_ = 449;
if (t <= 0)
- return yyeof_;
+ return symbol_kind::S_YYEOF;
else if (t <= user_token_number_max_)
- return translate_table[t];
+ return YY_CAST (symbol_kind_type, translate_table[t]);
else
- return yy_undef_token_;
+ return symbol_kind::S_YYUNDEF;
}
// basic_symbol.
-#if 201103L <= YY_CPLUSPLUS
- template <typename Base>
- Dhcp4Parser::basic_symbol<Base>::basic_symbol (basic_symbol&& that)
- : Base (std::move (that))
- , value ()
- , location (std::move (that.location))
- {
- switch (this->type_get ())
- {
- case 211: // value
- case 215: // map_value
- case 256: // ddns_replace_client_name_value
- case 278: // socket_type
- case 281: // outbound_interface_value
- case 303: // db_type
- case 397: // hr_mode
- case 552: // ncr_protocol_value
- value.move< ElementPtr > (std::move (that.value));
- break;
-
- case 194: // "boolean"
- value.move< bool > (std::move (that.value));
- break;
-
- case 193: // "floating point"
- value.move< double > (std::move (that.value));
- break;
-
- case 192: // "integer"
- value.move< int64_t > (std::move (that.value));
- break;
-
- case 191: // "constant string"
- value.move< std::string > (std::move (that.value));
- break;
-
- default:
- break;
- }
-
- }
-#endif
-
template <typename Base>
Dhcp4Parser::basic_symbol<Base>::basic_symbol (const basic_symbol& that)
: Base (that)
, value ()
, location (that.location)
{
- switch (this->type_get ())
+ switch (this->kind ())
{
case 211: // value
case 215: // map_value
+ template <typename Base>
+ Dhcp4Parser::symbol_kind_type
+ Dhcp4Parser::basic_symbol<Base>::type_get () const YY_NOEXCEPT
+ {
+ return this->kind ();
+ }
+
template <typename Base>
bool
Dhcp4Parser::basic_symbol<Base>::empty () const YY_NOEXCEPT
{
- return Base::type_get () == empty_symbol;
+ return this->kind () == symbol_kind::S_YYEMPTY;
}
template <typename Base>
Dhcp4Parser::basic_symbol<Base>::move (basic_symbol& s)
{
super_type::move (s);
- switch (this->type_get ())
+ switch (this->kind ())
{
case 211: // value
case 215: // map_value
location = YY_MOVE (s.location);
}
- // by_type.
+ // by_kind.
inline
- Dhcp4Parser::by_type::by_type ()
- : type (empty_symbol)
+ Dhcp4Parser::by_kind::by_kind ()
+ : kind_ (symbol_kind::S_YYEMPTY)
{}
#if 201103L <= YY_CPLUSPLUS
inline
- Dhcp4Parser::by_type::by_type (by_type&& that)
- : type (that.type)
+ Dhcp4Parser::by_kind::by_kind (by_kind&& that)
+ : kind_ (that.kind_)
{
that.clear ();
}
#endif
inline
- Dhcp4Parser::by_type::by_type (const by_type& that)
- : type (that.type)
+ Dhcp4Parser::by_kind::by_kind (const by_kind& that)
+ : kind_ (that.kind_)
{}
inline
- Dhcp4Parser::by_type::by_type (token_type t)
- : type (yytranslate_ (t))
+ Dhcp4Parser::by_kind::by_kind (token_kind_type t)
+ : kind_ (yytranslate_ (t))
{}
inline
void
- Dhcp4Parser::by_type::clear ()
+ Dhcp4Parser::by_kind::clear ()
{
- type = empty_symbol;
+ kind_ = symbol_kind::S_YYEMPTY;
}
inline
void
- Dhcp4Parser::by_type::move (by_type& that)
+ Dhcp4Parser::by_kind::move (by_kind& that)
{
- type = that.type;
+ kind_ = that.kind_;
that.clear ();
}
inline
- int
- Dhcp4Parser::by_type::type_get () const YY_NOEXCEPT
+ Dhcp4Parser::symbol_kind_type
+ Dhcp4Parser::by_kind::kind () const YY_NOEXCEPT
+ {
+ return kind_;
+ }
+
+ inline
+ Dhcp4Parser::symbol_kind_type
+ Dhcp4Parser::by_kind::type_get () const YY_NOEXCEPT
{
- return type;
+ return this->kind ();
}
#line 14 "dhcp4_parser.yy"
} } // isc::dhcp
-#line 4472 "dhcp4_parser.h"
+#line 5198 "dhcp4_parser.h"
-// Generated 202004241255
-// A Bison parser, made by GNU Bison 3.5.4.
+// Generated 202005190717
+// A Bison parser, made by GNU Bison 3.6.2.
// Locations for Bison parsers in C++
-// Generated 202004241255
-// A Bison parser, made by GNU Bison 3.5.4.
+// Generated 202005190717
+// A Bison parser, made by GNU Bison 3.6.2.
// Starting with Bison 3.2, this file is useless: the structure it
// used to define is now defined in "location.hh".
-// Generated 202004241255
-// A Bison parser, made by GNU Bison 3.5.4.
+// Generated 202005190717
+// A Bison parser, made by GNU Bison 3.6.2.
// Starting with Bison 3.2, this file is useless: the structure it
// used to define is now defined with the parser itself.
-// A Bison parser, made by GNU Bison 3.5.4.
+// A Bison parser, made by GNU Bison 3.6.2.
// Skeleton implementation for Bison LALR(1) parsers in C++
// This special exception was added by the Free Software Foundation in
// version 2.2 of Bison.
-// Undocumented macros, especially those whose name start with YY_,
-// are private implementation details. Do not rely on them.
+// DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual,
+// especially those whose name start with YY_ or yy_. They are
+// private implementation details that can be changed or removed.
// Take the name prefix into account.
#include <dhcp6/parser_context.h>
-#line 51 "dhcp6_parser.cc"
+#line 52 "dhcp6_parser.cc"
#ifndef YY_
# endif
#endif
+
// Whether we are compiled with exception support.
#ifndef YY_EXCEPTIONS
# if defined __GNUC__ && !defined __EXCEPTIONS
# define YY_STACK_PRINT() \
do { \
if (yydebug_) \
- yystack_print_ (); \
+ yy_stack_print_ (); \
} while (false)
#else // !PARSER6_DEBUG
#line 14 "dhcp6_parser.yy"
namespace isc { namespace dhcp {
-#line 143 "dhcp6_parser.cc"
-
-
- /* Return YYSTR after stripping away unnecessary quotes and
- backslashes, so that it's suitable for yyerror. The heuristic is
- that double-quoting is unnecessary unless the string contains an
- apostrophe, a comma, or backslash (other than backslash-backslash).
- YYSTR is taken from yytname. */
- std::string
- Dhcp6Parser::yytnamerr_ (const char *yystr)
- {
- if (*yystr == '"')
- {
- std::string yyr;
- char const *yyp = yystr;
-
- for (;;)
- switch (*++yyp)
- {
- case '\'':
- case ',':
- goto do_not_strip_quotes;
-
- case '\\':
- if (*++yyp != '\\')
- goto do_not_strip_quotes;
- else
- goto append;
-
- append:
- default:
- yyr += *yyp;
- break;
-
- case '"':
- return yyr;
- }
- do_not_strip_quotes: ;
- }
-
- return yystr;
- }
-
+#line 145 "dhcp6_parser.cc"
/// Build a parser object.
Dhcp6Parser::Dhcp6Parser (isc::dhcp::Parser6Context& ctx_yyarg)
{}
/*---------------.
- | Symbol types. |
+ | symbol kinds. |
`---------------*/
: state (s)
{}
- Dhcp6Parser::symbol_number_type
- Dhcp6Parser::by_state::type_get () const YY_NOEXCEPT
+ Dhcp6Parser::symbol_kind_type
+ Dhcp6Parser::by_state::kind () const YY_NOEXCEPT
{
if (state == empty_state)
- return empty_symbol;
+ return symbol_kind::S_YYEMPTY;
else
- return yystos_[+state];
+ return YY_CAST (symbol_kind_type, yystos_[+state]);
}
Dhcp6Parser::stack_symbol_type::stack_symbol_type ()
Dhcp6Parser::stack_symbol_type::stack_symbol_type (YY_RVREF (stack_symbol_type) that)
: super_type (YY_MOVE (that.state), YY_MOVE (that.location))
{
- switch (that.type_get ())
+ switch (that.kind ())
{
case 220: // value
case 224: // map_value
Dhcp6Parser::stack_symbol_type::stack_symbol_type (state_type s, YY_MOVE_REF (symbol_type) that)
: super_type (s, YY_MOVE (that.location))
{
- switch (that.type_get ())
+ switch (that.kind ())
{
case 220: // value
case 224: // map_value
}
// that is emptied.
- that.type = empty_symbol;
+ that.kind_ = symbol_kind::S_YYEMPTY;
}
#if YY_CPLUSPLUS < 201103L
Dhcp6Parser::stack_symbol_type::operator= (const stack_symbol_type& that)
{
state = that.state;
- switch (that.type_get ())
+ switch (that.kind ())
{
case 220: // value
case 224: // map_value
Dhcp6Parser::stack_symbol_type::operator= (stack_symbol_type& that)
{
state = that.state;
- switch (that.type_get ())
+ switch (that.kind ())
{
case 220: // value
case 224: // map_value
#if PARSER6_DEBUG
template <typename Base>
void
- Dhcp6Parser::yy_print_ (std::ostream& yyo,
- const basic_symbol<Base>& yysym) const
+ Dhcp6Parser::yy_print_ (std::ostream& yyo, const basic_symbol<Base>& yysym) const
{
std::ostream& yyoutput = yyo;
YYUSE (yyoutput);
- symbol_number_type yytype = yysym.type_get ();
-#if defined __GNUC__ && ! defined __clang__ && ! defined __ICC && __GNUC__ * 100 + __GNUC_MINOR__ <= 408
- // Avoid a (spurious) G++ 4.8 warning about "array subscript is
- // below array bounds".
if (yysym.empty ())
- std::abort ();
-#endif
- yyo << (yytype < yyntokens_ ? "token" : "nterm")
- << ' ' << yytname_[yytype] << " ("
- << yysym.location << ": ";
- switch (yytype)
+ yyo << "empty symbol";
+ else
+ {
+ symbol_kind_type yykind = yysym.kind ();
+ yyo << (yykind < YYNTOKENS ? "token" : "nterm")
+ << ' ' << yysym.name () << " ("
+ << yysym.location << ": ";
+ switch (yykind)
{
case 199: // "constant string"
#line 280 "dhcp6_parser.yy"
{ yyoutput << yysym.value.template as < std::string > (); }
-#line 443 "dhcp6_parser.cc"
+#line 400 "dhcp6_parser.cc"
break;
case 200: // "integer"
#line 280 "dhcp6_parser.yy"
{ yyoutput << yysym.value.template as < int64_t > (); }
-#line 449 "dhcp6_parser.cc"
+#line 406 "dhcp6_parser.cc"
break;
case 201: // "floating point"
#line 280 "dhcp6_parser.yy"
{ yyoutput << yysym.value.template as < double > (); }
-#line 455 "dhcp6_parser.cc"
+#line 412 "dhcp6_parser.cc"
break;
case 202: // "boolean"
#line 280 "dhcp6_parser.yy"
{ yyoutput << yysym.value.template as < bool > (); }
-#line 461 "dhcp6_parser.cc"
+#line 418 "dhcp6_parser.cc"
break;
case 220: // value
#line 280 "dhcp6_parser.yy"
{ yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 467 "dhcp6_parser.cc"
+#line 424 "dhcp6_parser.cc"
break;
case 224: // map_value
#line 280 "dhcp6_parser.yy"
{ yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 473 "dhcp6_parser.cc"
+#line 430 "dhcp6_parser.cc"
break;
case 265: // ddns_replace_client_name_value
#line 280 "dhcp6_parser.yy"
{ yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 479 "dhcp6_parser.cc"
+#line 436 "dhcp6_parser.cc"
break;
case 302: // db_type
#line 280 "dhcp6_parser.yy"
{ yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 485 "dhcp6_parser.cc"
+#line 442 "dhcp6_parser.cc"
break;
case 403: // hr_mode
#line 280 "dhcp6_parser.yy"
{ yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 491 "dhcp6_parser.cc"
+#line 448 "dhcp6_parser.cc"
break;
case 539: // duid_type
#line 280 "dhcp6_parser.yy"
{ yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 497 "dhcp6_parser.cc"
+#line 454 "dhcp6_parser.cc"
break;
case 582: // ncr_protocol_value
#line 280 "dhcp6_parser.yy"
{ yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 503 "dhcp6_parser.cc"
+#line 460 "dhcp6_parser.cc"
break;
default:
break;
}
- yyo << ')';
+ yyo << ')';
+ }
}
#endif
Dhcp6Parser::state_type
Dhcp6Parser::yy_lr_goto_state_ (state_type yystate, int yysym)
{
- int yyr = yypgoto_[yysym - yyntokens_] + yystate;
+ int yyr = yypgoto_[yysym - YYNTOKENS] + yystate;
if (0 <= yyr && yyr <= yylast_ && yycheck_[yyr] == yystate)
return yytable_[yyr];
else
- return yydefgoto_[yysym - yyntokens_];
+ return yydefgoto_[yysym - YYNTOKENS];
}
bool
`-----------------------------------------------*/
yynewstate:
YYCDEBUG << "Entering state " << int (yystack_[0].state) << '\n';
+ YY_STACK_PRINT ();
// Accept?
if (yystack_[0].state == yyfinal_)
// Read a lookahead token.
if (yyla.empty ())
{
- YYCDEBUG << "Reading a token: ";
+ YYCDEBUG << "Reading a token\n";
#if YY_EXCEPTIONS
try
#endif // YY_EXCEPTIONS
}
YY_SYMBOL_PRINT ("Next token is", yyla);
+ if (yyla.kind () == symbol_kind::S_YYerror)
+ {
+ // The scanner already issued an error message, process directly
+ // to error recovery. But do not keep the error token as
+ // lookahead, it is too special and may lead us to an endless
+ // loop in error recovery. */
+ yyla.kind_ = symbol_kind::S_YYUNDEF;
+ goto yyerrlab1;
+ }
+
/* If the proper action on seeing token YYLA.TYPE is to reduce or
to detect an error, take that action. */
- yyn += yyla.type_get ();
- if (yyn < 0 || yylast_ < yyn || yycheck_[yyn] != yyla.type_get ())
+ yyn += yyla.kind ();
+ if (yyn < 0 || yylast_ < yyn || yycheck_[yyn] != yyla.kind ())
{
goto yydefault;
}
case 2:
#line 289 "dhcp6_parser.yy"
{ ctx.ctx_ = ctx.NO_KEYWORD; }
-#line 770 "dhcp6_parser.cc"
+#line 739 "dhcp6_parser.cc"
break;
case 4:
#line 290 "dhcp6_parser.yy"
{ ctx.ctx_ = ctx.CONFIG; }
-#line 776 "dhcp6_parser.cc"
+#line 745 "dhcp6_parser.cc"
break;
case 6:
#line 291 "dhcp6_parser.yy"
{ ctx.ctx_ = ctx.DHCP6; }
-#line 782 "dhcp6_parser.cc"
+#line 751 "dhcp6_parser.cc"
break;
case 8:
#line 292 "dhcp6_parser.yy"
{ ctx.ctx_ = ctx.INTERFACES_CONFIG; }
-#line 788 "dhcp6_parser.cc"
+#line 757 "dhcp6_parser.cc"
break;
case 10:
#line 293 "dhcp6_parser.yy"
{ ctx.ctx_ = ctx.SUBNET6; }
-#line 794 "dhcp6_parser.cc"
+#line 763 "dhcp6_parser.cc"
break;
case 12:
#line 294 "dhcp6_parser.yy"
{ ctx.ctx_ = ctx.POOLS; }
-#line 800 "dhcp6_parser.cc"
+#line 769 "dhcp6_parser.cc"
break;
case 14:
#line 295 "dhcp6_parser.yy"
{ ctx.ctx_ = ctx.PD_POOLS; }
-#line 806 "dhcp6_parser.cc"
+#line 775 "dhcp6_parser.cc"
break;
case 16:
#line 296 "dhcp6_parser.yy"
{ ctx.ctx_ = ctx.RESERVATIONS; }
-#line 812 "dhcp6_parser.cc"
+#line 781 "dhcp6_parser.cc"
break;
case 18:
#line 297 "dhcp6_parser.yy"
{ ctx.ctx_ = ctx.DHCP6; }
-#line 818 "dhcp6_parser.cc"
+#line 787 "dhcp6_parser.cc"
break;
case 20:
#line 298 "dhcp6_parser.yy"
{ ctx.ctx_ = ctx.OPTION_DEF; }
-#line 824 "dhcp6_parser.cc"
+#line 793 "dhcp6_parser.cc"
break;
case 22:
#line 299 "dhcp6_parser.yy"
{ ctx.ctx_ = ctx.OPTION_DATA; }
-#line 830 "dhcp6_parser.cc"
+#line 799 "dhcp6_parser.cc"
break;
case 24:
#line 300 "dhcp6_parser.yy"
{ ctx.ctx_ = ctx.HOOKS_LIBRARIES; }
-#line 836 "dhcp6_parser.cc"
+#line 805 "dhcp6_parser.cc"
break;
case 26:
#line 301 "dhcp6_parser.yy"
{ ctx.ctx_ = ctx.DHCP_DDNS; }
-#line 842 "dhcp6_parser.cc"
+#line 811 "dhcp6_parser.cc"
break;
case 28:
#line 302 "dhcp6_parser.yy"
{ ctx.ctx_ = ctx.LOGGING; }
-#line 848 "dhcp6_parser.cc"
+#line 817 "dhcp6_parser.cc"
break;
case 30:
#line 303 "dhcp6_parser.yy"
{ ctx.ctx_ = ctx.CONFIG_CONTROL; }
-#line 854 "dhcp6_parser.cc"
+#line 823 "dhcp6_parser.cc"
break;
case 32:
#line 311 "dhcp6_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); }
-#line 860 "dhcp6_parser.cc"
+#line 829 "dhcp6_parser.cc"
break;
case 33:
#line 312 "dhcp6_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location))); }
-#line 866 "dhcp6_parser.cc"
+#line 835 "dhcp6_parser.cc"
break;
case 34:
#line 313 "dhcp6_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); }
-#line 872 "dhcp6_parser.cc"
+#line 841 "dhcp6_parser.cc"
break;
case 35:
#line 314 "dhcp6_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); }
-#line 878 "dhcp6_parser.cc"
+#line 847 "dhcp6_parser.cc"
break;
case 36:
#line 315 "dhcp6_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new NullElement(ctx.loc2pos(yystack_[0].location))); }
-#line 884 "dhcp6_parser.cc"
+#line 853 "dhcp6_parser.cc"
break;
case 37:
#line 316 "dhcp6_parser.yy"
{ yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
-#line 890 "dhcp6_parser.cc"
+#line 859 "dhcp6_parser.cc"
break;
case 38:
#line 317 "dhcp6_parser.yy"
{ yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
-#line 896 "dhcp6_parser.cc"
+#line 865 "dhcp6_parser.cc"
break;
case 39:
// Push back the JSON value on the stack
ctx.stack_.push_back(yystack_[0].value.as < ElementPtr > ());
}
-#line 905 "dhcp6_parser.cc"
+#line 874 "dhcp6_parser.cc"
break;
case 40:
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(m);
}
-#line 916 "dhcp6_parser.cc"
+#line 885 "dhcp6_parser.cc"
break;
case 41:
// (maybe some sanity checking), this would be the best place
// for it.
}
-#line 926 "dhcp6_parser.cc"
+#line 895 "dhcp6_parser.cc"
break;
case 42:
#line 336 "dhcp6_parser.yy"
{ yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
-#line 932 "dhcp6_parser.cc"
+#line 901 "dhcp6_parser.cc"
break;
case 45:
// map containing a single entry
ctx.stack_.back()->set(yystack_[2].value.as < std::string > (), yystack_[0].value.as < ElementPtr > ());
}
-#line 941 "dhcp6_parser.cc"
+#line 910 "dhcp6_parser.cc"
break;
case 46:
// comma and string:value
ctx.stack_.back()->set(yystack_[2].value.as < std::string > (), yystack_[0].value.as < ElementPtr > ());
}
-#line 951 "dhcp6_parser.cc"
+#line 920 "dhcp6_parser.cc"
break;
case 47:
ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(l);
}
-#line 960 "dhcp6_parser.cc"
+#line 929 "dhcp6_parser.cc"
break;
case 48:
{
// list parsing complete. Put any sanity checking here
}
-#line 968 "dhcp6_parser.cc"
+#line 937 "dhcp6_parser.cc"
break;
case 51:
// List consisting of a single element.
ctx.stack_.back()->add(yystack_[0].value.as < ElementPtr > ());
}
-#line 977 "dhcp6_parser.cc"
+#line 946 "dhcp6_parser.cc"
break;
case 52:
// List ending with , and a value.
ctx.stack_.back()->add(yystack_[0].value.as < ElementPtr > ());
}
-#line 986 "dhcp6_parser.cc"
+#line 955 "dhcp6_parser.cc"
break;
case 53:
{
// List parsing about to start
}
-#line 994 "dhcp6_parser.cc"
+#line 963 "dhcp6_parser.cc"
break;
case 54:
// list parsing complete. Put any sanity checking here
//ctx.stack_.pop_back();
}
-#line 1003 "dhcp6_parser.cc"
+#line 972 "dhcp6_parser.cc"
break;
case 57:
ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(s);
}
-#line 1012 "dhcp6_parser.cc"
+#line 981 "dhcp6_parser.cc"
break;
case 58:
ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(s);
}
-#line 1021 "dhcp6_parser.cc"
+#line 990 "dhcp6_parser.cc"
break;
case 59:
error(yystack_[1].location,
"got unexpected keyword \"" + keyword + "\" in " + where + " map.");
}
-#line 1032 "dhcp6_parser.cc"
+#line 1001 "dhcp6_parser.cc"
break;
case 60:
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(m);
}
-#line 1043 "dhcp6_parser.cc"
+#line 1012 "dhcp6_parser.cc"
break;
case 61:
// Dhcp6 is required
ctx.require("Dhcp6", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
}
-#line 1056 "dhcp6_parser.cc"
+#line 1025 "dhcp6_parser.cc"
break;
case 70:
ctx.stack_.push_back(m);
ctx.enter(ctx.DHCP6);
}
-#line 1069 "dhcp6_parser.cc"
+#line 1038 "dhcp6_parser.cc"
break;
case 71:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 1079 "dhcp6_parser.cc"
+#line 1048 "dhcp6_parser.cc"
break;
case 72:
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(m);
}
-#line 1089 "dhcp6_parser.cc"
+#line 1058 "dhcp6_parser.cc"
break;
case 73:
// No global parameter is required
// parsing completed
}
-#line 1098 "dhcp6_parser.cc"
+#line 1067 "dhcp6_parser.cc"
break;
case 129:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 1106 "dhcp6_parser.cc"
+#line 1075 "dhcp6_parser.cc"
break;
case 130:
ctx.stack_.back()->set("data-directory", datadir);
ctx.leave();
}
-#line 1116 "dhcp6_parser.cc"
+#line 1085 "dhcp6_parser.cc"
break;
case 131:
ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("preferred-lifetime", prf);
}
-#line 1125 "dhcp6_parser.cc"
+#line 1094 "dhcp6_parser.cc"
break;
case 132:
ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("min-preferred-lifetime", prf);
}
-#line 1134 "dhcp6_parser.cc"
+#line 1103 "dhcp6_parser.cc"
break;
case 133:
ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("max-preferred-lifetime", prf);
}
-#line 1143 "dhcp6_parser.cc"
+#line 1112 "dhcp6_parser.cc"
break;
case 134:
ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("valid-lifetime", prf);
}
-#line 1152 "dhcp6_parser.cc"
+#line 1121 "dhcp6_parser.cc"
break;
case 135:
ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("min-valid-lifetime", prf);
}
-#line 1161 "dhcp6_parser.cc"
+#line 1130 "dhcp6_parser.cc"
break;
case 136:
ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("max-valid-lifetime", prf);
}
-#line 1170 "dhcp6_parser.cc"
+#line 1139 "dhcp6_parser.cc"
break;
case 137:
ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("renew-timer", prf);
}
-#line 1179 "dhcp6_parser.cc"
+#line 1148 "dhcp6_parser.cc"
break;
case 138:
ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("rebind-timer", prf);
}
-#line 1188 "dhcp6_parser.cc"
+#line 1157 "dhcp6_parser.cc"
break;
case 139:
ElementPtr ctt(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("calculate-tee-times", ctt);
}
-#line 1197 "dhcp6_parser.cc"
+#line 1166 "dhcp6_parser.cc"
break;
case 140:
ElementPtr t1(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("t1-percent", t1);
}
-#line 1206 "dhcp6_parser.cc"
+#line 1175 "dhcp6_parser.cc"
break;
case 141:
ElementPtr t2(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("t2-percent", t2);
}
-#line 1215 "dhcp6_parser.cc"
+#line 1184 "dhcp6_parser.cc"
break;
case 142:
ElementPtr dpp(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("decline-probation-period", dpp);
}
-#line 1224 "dhcp6_parser.cc"
+#line 1193 "dhcp6_parser.cc"
break;
case 143:
ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("ddns-send-updates", b);
}
-#line 1233 "dhcp6_parser.cc"
+#line 1202 "dhcp6_parser.cc"
break;
case 144:
ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("ddns-override-no-update", b);
}
-#line 1242 "dhcp6_parser.cc"
+#line 1211 "dhcp6_parser.cc"
break;
case 145:
ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("ddns-override-client-update", b);
}
-#line 1251 "dhcp6_parser.cc"
+#line 1220 "dhcp6_parser.cc"
break;
case 146:
{
ctx.enter(ctx.REPLACE_CLIENT_NAME);
}
-#line 1259 "dhcp6_parser.cc"
+#line 1228 "dhcp6_parser.cc"
break;
case 147:
ctx.stack_.back()->set("ddns-replace-client-name", yystack_[0].value.as < ElementPtr > ());
ctx.leave();
}
-#line 1268 "dhcp6_parser.cc"
+#line 1237 "dhcp6_parser.cc"
break;
case 148:
{
yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("when-present", ctx.loc2pos(yystack_[0].location)));
}
-#line 1276 "dhcp6_parser.cc"
+#line 1245 "dhcp6_parser.cc"
break;
case 149:
{
yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("never", ctx.loc2pos(yystack_[0].location)));
}
-#line 1284 "dhcp6_parser.cc"
+#line 1253 "dhcp6_parser.cc"
break;
case 150:
{
yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("always", ctx.loc2pos(yystack_[0].location)));
}
-#line 1292 "dhcp6_parser.cc"
+#line 1261 "dhcp6_parser.cc"
break;
case 151:
{
yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("when-not-present", ctx.loc2pos(yystack_[0].location)));
}
-#line 1300 "dhcp6_parser.cc"
+#line 1269 "dhcp6_parser.cc"
break;
case 152:
error(yystack_[0].location, "boolean values for the replace-client-name are "
"no longer supported");
}
-#line 1309 "dhcp6_parser.cc"
+#line 1278 "dhcp6_parser.cc"
break;
case 153:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 1317 "dhcp6_parser.cc"
+#line 1286 "dhcp6_parser.cc"
break;
case 154:
ctx.stack_.back()->set("ddns-generated-prefix", s);
ctx.leave();
}
-#line 1327 "dhcp6_parser.cc"
+#line 1296 "dhcp6_parser.cc"
break;
case 155:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 1335 "dhcp6_parser.cc"
+#line 1304 "dhcp6_parser.cc"
break;
case 156:
ctx.stack_.back()->set("ddns-qualifying-suffix", s);
ctx.leave();
}
-#line 1345 "dhcp6_parser.cc"
+#line 1314 "dhcp6_parser.cc"
break;
case 157:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 1353 "dhcp6_parser.cc"
+#line 1322 "dhcp6_parser.cc"
break;
case 158:
ctx.stack_.back()->set("hostname-char-set", s);
ctx.leave();
}
-#line 1363 "dhcp6_parser.cc"
+#line 1332 "dhcp6_parser.cc"
break;
case 159:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 1371 "dhcp6_parser.cc"
+#line 1340 "dhcp6_parser.cc"
break;
case 160:
ctx.stack_.back()->set("hostname-char-replacement", s);
ctx.leave();
}
-#line 1381 "dhcp6_parser.cc"
+#line 1350 "dhcp6_parser.cc"
break;
case 161:
ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("store-extended-info", b);
}
-#line 1390 "dhcp6_parser.cc"
+#line 1359 "dhcp6_parser.cc"
break;
case 162:
ElementPtr count(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("statistic-default-sample-count", count);
}
-#line 1399 "dhcp6_parser.cc"
+#line 1368 "dhcp6_parser.cc"
break;
case 163:
ElementPtr age(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("statistic-default-sample-age", age);
}
-#line 1408 "dhcp6_parser.cc"
+#line 1377 "dhcp6_parser.cc"
break;
case 164:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 1416 "dhcp6_parser.cc"
+#line 1385 "dhcp6_parser.cc"
break;
case 165:
ctx.stack_.back()->set("server-tag", stag);
ctx.leave();
}
-#line 1426 "dhcp6_parser.cc"
+#line 1395 "dhcp6_parser.cc"
break;
case 166:
ctx.stack_.push_back(i);
ctx.enter(ctx.INTERFACES_CONFIG);
}
-#line 1437 "dhcp6_parser.cc"
+#line 1406 "dhcp6_parser.cc"
break;
case 167:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 1447 "dhcp6_parser.cc"
+#line 1416 "dhcp6_parser.cc"
break;
case 168:
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(m);
}
-#line 1457 "dhcp6_parser.cc"
+#line 1426 "dhcp6_parser.cc"
break;
case 169:
// No interfaces config param is required
// parsing completed
}
-#line 1466 "dhcp6_parser.cc"
+#line 1435 "dhcp6_parser.cc"
break;
case 177:
ctx.stack_.push_back(l);
ctx.enter(ctx.NO_KEYWORD);
}
-#line 1477 "dhcp6_parser.cc"
+#line 1446 "dhcp6_parser.cc"
break;
case 178:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 1486 "dhcp6_parser.cc"
+#line 1455 "dhcp6_parser.cc"
break;
case 179:
ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("re-detect", b);
}
-#line 1495 "dhcp6_parser.cc"
+#line 1464 "dhcp6_parser.cc"
break;
case 180:
ctx.stack_.push_back(i);
ctx.enter(ctx.LEASE_DATABASE);
}
-#line 1506 "dhcp6_parser.cc"
+#line 1475 "dhcp6_parser.cc"
break;
case 181:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 1517 "dhcp6_parser.cc"
+#line 1486 "dhcp6_parser.cc"
break;
case 182:
ctx.stack_.push_back(i);
ctx.enter(ctx.HOSTS_DATABASE);
}
-#line 1528 "dhcp6_parser.cc"
+#line 1497 "dhcp6_parser.cc"
break;
case 183:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 1539 "dhcp6_parser.cc"
+#line 1508 "dhcp6_parser.cc"
break;
case 184:
ctx.stack_.push_back(l);
ctx.enter(ctx.HOSTS_DATABASE);
}
-#line 1550 "dhcp6_parser.cc"
+#line 1519 "dhcp6_parser.cc"
break;
case 185:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 1559 "dhcp6_parser.cc"
+#line 1528 "dhcp6_parser.cc"
break;
case 190:
ctx.stack_.back()->add(m);
ctx.stack_.push_back(m);
}
-#line 1569 "dhcp6_parser.cc"
+#line 1538 "dhcp6_parser.cc"
break;
case 191:
ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
ctx.stack_.pop_back();
}
-#line 1579 "dhcp6_parser.cc"
+#line 1548 "dhcp6_parser.cc"
break;
case 215:
{
ctx.enter(ctx.DATABASE_TYPE);
}
-#line 1587 "dhcp6_parser.cc"
+#line 1556 "dhcp6_parser.cc"
break;
case 216:
ctx.stack_.back()->set("type", yystack_[0].value.as < ElementPtr > ());
ctx.leave();
}
-#line 1596 "dhcp6_parser.cc"
+#line 1565 "dhcp6_parser.cc"
break;
case 217:
#line 822 "dhcp6_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("memfile", ctx.loc2pos(yystack_[0].location))); }
-#line 1602 "dhcp6_parser.cc"
+#line 1571 "dhcp6_parser.cc"
break;
case 218:
#line 823 "dhcp6_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("mysql", ctx.loc2pos(yystack_[0].location))); }
-#line 1608 "dhcp6_parser.cc"
+#line 1577 "dhcp6_parser.cc"
break;
case 219:
#line 824 "dhcp6_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("postgresql", ctx.loc2pos(yystack_[0].location))); }
-#line 1614 "dhcp6_parser.cc"
+#line 1583 "dhcp6_parser.cc"
break;
case 220:
#line 825 "dhcp6_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("cql", ctx.loc2pos(yystack_[0].location))); }
-#line 1620 "dhcp6_parser.cc"
+#line 1589 "dhcp6_parser.cc"
break;
case 221:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 1628 "dhcp6_parser.cc"
+#line 1597 "dhcp6_parser.cc"
break;
case 222:
ctx.stack_.back()->set("user", user);
ctx.leave();
}
-#line 1638 "dhcp6_parser.cc"
+#line 1607 "dhcp6_parser.cc"
break;
case 223:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 1646 "dhcp6_parser.cc"
+#line 1615 "dhcp6_parser.cc"
break;
case 224:
ctx.stack_.back()->set("password", pwd);
ctx.leave();
}
-#line 1656 "dhcp6_parser.cc"
+#line 1625 "dhcp6_parser.cc"
break;
case 225:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 1664 "dhcp6_parser.cc"
+#line 1633 "dhcp6_parser.cc"
break;
case 226:
ctx.stack_.back()->set("host", h);
ctx.leave();
}
-#line 1674 "dhcp6_parser.cc"
+#line 1643 "dhcp6_parser.cc"
break;
case 227:
ElementPtr p(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("port", p);
}
-#line 1683 "dhcp6_parser.cc"
+#line 1652 "dhcp6_parser.cc"
break;
case 228:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 1691 "dhcp6_parser.cc"
+#line 1660 "dhcp6_parser.cc"
break;
case 229:
ctx.stack_.back()->set("name", name);
ctx.leave();
}
-#line 1701 "dhcp6_parser.cc"
+#line 1670 "dhcp6_parser.cc"
break;
case 230:
ElementPtr n(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("persist", n);
}
-#line 1710 "dhcp6_parser.cc"
+#line 1679 "dhcp6_parser.cc"
break;
case 231:
ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("lfc-interval", n);
}
-#line 1719 "dhcp6_parser.cc"
+#line 1688 "dhcp6_parser.cc"
break;
case 232:
ElementPtr n(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("readonly", n);
}
-#line 1728 "dhcp6_parser.cc"
+#line 1697 "dhcp6_parser.cc"
break;
case 233:
ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("connect-timeout", n);
}
-#line 1737 "dhcp6_parser.cc"
+#line 1706 "dhcp6_parser.cc"
break;
case 234:
ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("reconnect-wait-time", n);
}
-#line 1746 "dhcp6_parser.cc"
+#line 1715 "dhcp6_parser.cc"
break;
case 235:
ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("max-row-errors", n);
}
-#line 1755 "dhcp6_parser.cc"
+#line 1724 "dhcp6_parser.cc"
break;
case 236:
ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("request-timeout", n);
}
-#line 1764 "dhcp6_parser.cc"
+#line 1733 "dhcp6_parser.cc"
break;
case 237:
ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("tcp-keepalive", n);
}
-#line 1773 "dhcp6_parser.cc"
+#line 1742 "dhcp6_parser.cc"
break;
case 238:
ElementPtr n(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("tcp-nodelay", n);
}
-#line 1782 "dhcp6_parser.cc"
+#line 1751 "dhcp6_parser.cc"
break;
case 239:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 1790 "dhcp6_parser.cc"
+#line 1759 "dhcp6_parser.cc"
break;
case 240:
ctx.stack_.back()->set("contact-points", cp);
ctx.leave();
}
-#line 1800 "dhcp6_parser.cc"
+#line 1769 "dhcp6_parser.cc"
break;
case 241:
ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("max-reconnect-tries", n);
}
-#line 1809 "dhcp6_parser.cc"
+#line 1778 "dhcp6_parser.cc"
break;
case 242:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 1817 "dhcp6_parser.cc"
+#line 1786 "dhcp6_parser.cc"
break;
case 243:
ctx.stack_.back()->set("keyspace", ks);
ctx.leave();
}
-#line 1827 "dhcp6_parser.cc"
+#line 1796 "dhcp6_parser.cc"
break;
case 244:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 1835 "dhcp6_parser.cc"
+#line 1804 "dhcp6_parser.cc"
break;
case 245:
ctx.stack_.back()->set("consistency", c);
ctx.leave();
}
-#line 1845 "dhcp6_parser.cc"
+#line 1814 "dhcp6_parser.cc"
break;
case 246:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 1853 "dhcp6_parser.cc"
+#line 1822 "dhcp6_parser.cc"
break;
case 247:
ctx.stack_.back()->set("serial-consistency", c);
ctx.leave();
}
-#line 1863 "dhcp6_parser.cc"
+#line 1832 "dhcp6_parser.cc"
break;
case 248:
ctx.stack_.push_back(m);
ctx.enter(ctx.SANITY_CHECKS);
}
-#line 1874 "dhcp6_parser.cc"
+#line 1843 "dhcp6_parser.cc"
break;
case 249:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 1883 "dhcp6_parser.cc"
+#line 1852 "dhcp6_parser.cc"
break;
case 253:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 1891 "dhcp6_parser.cc"
+#line 1860 "dhcp6_parser.cc"
break;
case 254:
", supported values are: none, warn, fix, fix-del, del");
}
}
-#line 1911 "dhcp6_parser.cc"
+#line 1880 "dhcp6_parser.cc"
break;
case 255:
ctx.stack_.push_back(l);
ctx.enter(ctx.MAC_SOURCES);
}
-#line 1922 "dhcp6_parser.cc"
+#line 1891 "dhcp6_parser.cc"
break;
case 256:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 1931 "dhcp6_parser.cc"
+#line 1900 "dhcp6_parser.cc"
break;
case 261:
ElementPtr duid(new StringElement("duid", ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(duid);
}
-#line 1940 "dhcp6_parser.cc"
+#line 1909 "dhcp6_parser.cc"
break;
case 262:
ElementPtr duid(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(duid);
}
-#line 1949 "dhcp6_parser.cc"
+#line 1918 "dhcp6_parser.cc"
break;
case 263:
ctx.stack_.push_back(l);
ctx.enter(ctx.HOST_RESERVATION_IDENTIFIERS);
}
-#line 1960 "dhcp6_parser.cc"
+#line 1929 "dhcp6_parser.cc"
break;
case 264:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 1969 "dhcp6_parser.cc"
+#line 1938 "dhcp6_parser.cc"
break;
case 270:
ElementPtr hwaddr(new StringElement("hw-address", ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(hwaddr);
}
-#line 1978 "dhcp6_parser.cc"
+#line 1947 "dhcp6_parser.cc"
break;
case 271:
ElementPtr flex_id(new StringElement("flex-id", ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(flex_id);
}
-#line 1987 "dhcp6_parser.cc"
+#line 1956 "dhcp6_parser.cc"
break;
case 272:
ctx.stack_.push_back(l);
ctx.enter(ctx.NO_KEYWORD);
}
-#line 1998 "dhcp6_parser.cc"
+#line 1967 "dhcp6_parser.cc"
break;
case 273:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 2007 "dhcp6_parser.cc"
+#line 1976 "dhcp6_parser.cc"
break;
case 274:
ctx.stack_.push_back(mt);
ctx.enter(ctx.DHCP_MULTI_THREADING);
}
-#line 2018 "dhcp6_parser.cc"
+#line 1987 "dhcp6_parser.cc"
break;
case 275:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 2029 "dhcp6_parser.cc"
+#line 1998 "dhcp6_parser.cc"
break;
case 284:
ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("enable-multi-threading", b);
}
-#line 2038 "dhcp6_parser.cc"
+#line 2007 "dhcp6_parser.cc"
break;
case 285:
ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("thread-pool-size", prf);
}
-#line 2047 "dhcp6_parser.cc"
+#line 2016 "dhcp6_parser.cc"
break;
case 286:
ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("packet-queue-size", prf);
}
-#line 2056 "dhcp6_parser.cc"
+#line 2025 "dhcp6_parser.cc"
break;
case 287:
ctx.stack_.push_back(l);
ctx.enter(ctx.HOOKS_LIBRARIES);
}
-#line 2067 "dhcp6_parser.cc"
+#line 2036 "dhcp6_parser.cc"
break;
case 288:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 2076 "dhcp6_parser.cc"
+#line 2045 "dhcp6_parser.cc"
break;
case 293:
ctx.stack_.back()->add(m);
ctx.stack_.push_back(m);
}
-#line 2086 "dhcp6_parser.cc"
+#line 2055 "dhcp6_parser.cc"
break;
case 294:
ctx.require("library", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
ctx.stack_.pop_back();
}
-#line 2096 "dhcp6_parser.cc"
+#line 2065 "dhcp6_parser.cc"
break;
case 295:
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(m);
}
-#line 2106 "dhcp6_parser.cc"
+#line 2075 "dhcp6_parser.cc"
break;
case 296:
ctx.require("library", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
// parsing completed
}
-#line 2116 "dhcp6_parser.cc"
+#line 2085 "dhcp6_parser.cc"
break;
case 302:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 2124 "dhcp6_parser.cc"
+#line 2093 "dhcp6_parser.cc"
break;
case 303:
ctx.stack_.back()->set("library", lib);
ctx.leave();
}
-#line 2134 "dhcp6_parser.cc"
+#line 2103 "dhcp6_parser.cc"
break;
case 304:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 2142 "dhcp6_parser.cc"
+#line 2111 "dhcp6_parser.cc"
break;
case 305:
ctx.stack_.back()->set("parameters", yystack_[0].value.as < ElementPtr > ());
ctx.leave();
}
-#line 2151 "dhcp6_parser.cc"
+#line 2120 "dhcp6_parser.cc"
break;
case 306:
ctx.stack_.push_back(m);
ctx.enter(ctx.EXPIRED_LEASES_PROCESSING);
}
-#line 2162 "dhcp6_parser.cc"
+#line 2131 "dhcp6_parser.cc"
break;
case 307:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 2172 "dhcp6_parser.cc"
+#line 2141 "dhcp6_parser.cc"
break;
case 316:
ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("reclaim-timer-wait-time", value);
}
-#line 2181 "dhcp6_parser.cc"
+#line 2150 "dhcp6_parser.cc"
break;
case 317:
ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("flush-reclaimed-timer-wait-time", value);
}
-#line 2190 "dhcp6_parser.cc"
+#line 2159 "dhcp6_parser.cc"
break;
case 318:
ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("hold-reclaimed-time", value);
}
-#line 2199 "dhcp6_parser.cc"
+#line 2168 "dhcp6_parser.cc"
break;
case 319:
ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("max-reclaim-leases", value);
}
-#line 2208 "dhcp6_parser.cc"
+#line 2177 "dhcp6_parser.cc"
break;
case 320:
ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("max-reclaim-time", value);
}
-#line 2217 "dhcp6_parser.cc"
+#line 2186 "dhcp6_parser.cc"
break;
case 321:
ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("unwarned-reclaim-cycles", value);
}
-#line 2226 "dhcp6_parser.cc"
+#line 2195 "dhcp6_parser.cc"
break;
case 322:
ctx.stack_.push_back(l);
ctx.enter(ctx.SUBNET6);
}
-#line 2237 "dhcp6_parser.cc"
+#line 2206 "dhcp6_parser.cc"
break;
case 323:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 2246 "dhcp6_parser.cc"
+#line 2215 "dhcp6_parser.cc"
break;
case 328:
ctx.stack_.back()->add(m);
ctx.stack_.push_back(m);
}
-#line 2256 "dhcp6_parser.cc"
+#line 2225 "dhcp6_parser.cc"
break;
case 329:
ctx.require("subnet", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
ctx.stack_.pop_back();
}
-#line 2282 "dhcp6_parser.cc"
+#line 2251 "dhcp6_parser.cc"
break;
case 330:
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(m);
}
-#line 2292 "dhcp6_parser.cc"
+#line 2261 "dhcp6_parser.cc"
break;
case 331:
ctx.require("subnet", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
// parsing completed
}
-#line 2302 "dhcp6_parser.cc"
+#line 2271 "dhcp6_parser.cc"
break;
case 370:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 2310 "dhcp6_parser.cc"
+#line 2279 "dhcp6_parser.cc"
break;
case 371:
ctx.stack_.back()->set("subnet", subnet);
ctx.leave();
}
-#line 2320 "dhcp6_parser.cc"
+#line 2289 "dhcp6_parser.cc"
break;
case 372:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 2328 "dhcp6_parser.cc"
+#line 2297 "dhcp6_parser.cc"
break;
case 373:
ctx.stack_.back()->set("interface", iface);
ctx.leave();
}
-#line 2338 "dhcp6_parser.cc"
+#line 2307 "dhcp6_parser.cc"
break;
case 374:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 2346 "dhcp6_parser.cc"
+#line 2315 "dhcp6_parser.cc"
break;
case 375:
ctx.stack_.back()->set("interface-id", iface);
ctx.leave();
}
-#line 2356 "dhcp6_parser.cc"
+#line 2325 "dhcp6_parser.cc"
break;
case 376:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 2364 "dhcp6_parser.cc"
+#line 2333 "dhcp6_parser.cc"
break;
case 377:
ctx.stack_.back()->set("client-class", cls);
ctx.leave();
}
-#line 2374 "dhcp6_parser.cc"
+#line 2343 "dhcp6_parser.cc"
break;
case 378:
ctx.stack_.push_back(c);
ctx.enter(ctx.NO_KEYWORD);
}
-#line 2385 "dhcp6_parser.cc"
+#line 2354 "dhcp6_parser.cc"
break;
case 379:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 2394 "dhcp6_parser.cc"
+#line 2363 "dhcp6_parser.cc"
break;
case 380:
{
ctx.enter(ctx.RESERVATION_MODE);
}
-#line 2402 "dhcp6_parser.cc"
+#line 2371 "dhcp6_parser.cc"
break;
case 381:
ctx.stack_.back()->set("reservation-mode", yystack_[0].value.as < ElementPtr > ());
ctx.leave();
}
-#line 2411 "dhcp6_parser.cc"
+#line 2380 "dhcp6_parser.cc"
break;
case 382:
#line 1363 "dhcp6_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("disabled", ctx.loc2pos(yystack_[0].location))); }
-#line 2417 "dhcp6_parser.cc"
+#line 2386 "dhcp6_parser.cc"
break;
case 383:
#line 1364 "dhcp6_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("out-of-pool", ctx.loc2pos(yystack_[0].location))); }
-#line 2423 "dhcp6_parser.cc"
+#line 2392 "dhcp6_parser.cc"
break;
case 384:
#line 1365 "dhcp6_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("global", ctx.loc2pos(yystack_[0].location))); }
-#line 2429 "dhcp6_parser.cc"
+#line 2398 "dhcp6_parser.cc"
break;
case 385:
#line 1366 "dhcp6_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("all", ctx.loc2pos(yystack_[0].location))); }
-#line 2435 "dhcp6_parser.cc"
+#line 2404 "dhcp6_parser.cc"
break;
case 386:
ElementPtr id(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("id", id);
}
-#line 2444 "dhcp6_parser.cc"
+#line 2413 "dhcp6_parser.cc"
break;
case 387:
ElementPtr rc(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("rapid-commit", rc);
}
-#line 2453 "dhcp6_parser.cc"
+#line 2422 "dhcp6_parser.cc"
break;
case 388:
ctx.stack_.push_back(l);
ctx.enter(ctx.SHARED_NETWORK);
}
-#line 2464 "dhcp6_parser.cc"
+#line 2433 "dhcp6_parser.cc"
break;
case 389:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 2473 "dhcp6_parser.cc"
+#line 2442 "dhcp6_parser.cc"
break;
case 394:
ctx.stack_.back()->add(m);
ctx.stack_.push_back(m);
}
-#line 2483 "dhcp6_parser.cc"
+#line 2452 "dhcp6_parser.cc"
break;
case 395:
{
ctx.stack_.pop_back();
}
-#line 2491 "dhcp6_parser.cc"
+#line 2460 "dhcp6_parser.cc"
break;
case 431:
ctx.stack_.push_back(l);
ctx.enter(ctx.OPTION_DEF);
}
-#line 2502 "dhcp6_parser.cc"
+#line 2471 "dhcp6_parser.cc"
break;
case 432:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 2511 "dhcp6_parser.cc"
+#line 2480 "dhcp6_parser.cc"
break;
case 433:
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(m);
}
-#line 2520 "dhcp6_parser.cc"
+#line 2489 "dhcp6_parser.cc"
break;
case 434:
{
// parsing completed
}
-#line 2528 "dhcp6_parser.cc"
+#line 2497 "dhcp6_parser.cc"
break;
case 439:
ctx.stack_.back()->add(m);
ctx.stack_.push_back(m);
}
-#line 2538 "dhcp6_parser.cc"
+#line 2507 "dhcp6_parser.cc"
break;
case 440:
ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
ctx.stack_.pop_back();
}
-#line 2550 "dhcp6_parser.cc"
+#line 2519 "dhcp6_parser.cc"
break;
case 441:
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(m);
}
-#line 2560 "dhcp6_parser.cc"
+#line 2529 "dhcp6_parser.cc"
break;
case 442:
ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
// parsing completed
}
-#line 2572 "dhcp6_parser.cc"
+#line 2541 "dhcp6_parser.cc"
break;
case 458:
ElementPtr code(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("code", code);
}
-#line 2581 "dhcp6_parser.cc"
+#line 2550 "dhcp6_parser.cc"
break;
case 460:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 2589 "dhcp6_parser.cc"
+#line 2558 "dhcp6_parser.cc"
break;
case 461:
ctx.stack_.back()->set("type", prf);
ctx.leave();
}
-#line 2599 "dhcp6_parser.cc"
+#line 2568 "dhcp6_parser.cc"
break;
case 462:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 2607 "dhcp6_parser.cc"
+#line 2576 "dhcp6_parser.cc"
break;
case 463:
ctx.stack_.back()->set("record-types", rtypes);
ctx.leave();
}
-#line 2617 "dhcp6_parser.cc"
+#line 2586 "dhcp6_parser.cc"
break;
case 464:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 2625 "dhcp6_parser.cc"
+#line 2594 "dhcp6_parser.cc"
break;
case 465:
ctx.stack_.back()->set("space", space);
ctx.leave();
}
-#line 2635 "dhcp6_parser.cc"
+#line 2604 "dhcp6_parser.cc"
break;
case 467:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 2643 "dhcp6_parser.cc"
+#line 2612 "dhcp6_parser.cc"
break;
case 468:
ctx.stack_.back()->set("encapsulate", encap);
ctx.leave();
}
-#line 2653 "dhcp6_parser.cc"
+#line 2622 "dhcp6_parser.cc"
break;
case 469:
ElementPtr array(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("array", array);
}
-#line 2662 "dhcp6_parser.cc"
+#line 2631 "dhcp6_parser.cc"
break;
case 470:
ctx.stack_.push_back(l);
ctx.enter(ctx.OPTION_DATA);
}
-#line 2673 "dhcp6_parser.cc"
+#line 2642 "dhcp6_parser.cc"
break;
case 471:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 2682 "dhcp6_parser.cc"
+#line 2651 "dhcp6_parser.cc"
break;
case 476:
ctx.stack_.back()->add(m);
ctx.stack_.push_back(m);
}
-#line 2692 "dhcp6_parser.cc"
+#line 2661 "dhcp6_parser.cc"
break;
case 477:
/// @todo: the code or name parameters are required.
ctx.stack_.pop_back();
}
-#line 2701 "dhcp6_parser.cc"
+#line 2670 "dhcp6_parser.cc"
break;
case 478:
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(m);
}
-#line 2711 "dhcp6_parser.cc"
+#line 2680 "dhcp6_parser.cc"
break;
case 479:
/// @todo: the code or name parameters are required.
// parsing completed
}
-#line 2720 "dhcp6_parser.cc"
+#line 2689 "dhcp6_parser.cc"
break;
case 494:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 2728 "dhcp6_parser.cc"
+#line 2697 "dhcp6_parser.cc"
break;
case 495:
ctx.stack_.back()->set("data", data);
ctx.leave();
}
-#line 2738 "dhcp6_parser.cc"
+#line 2707 "dhcp6_parser.cc"
break;
case 498:
ElementPtr space(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("csv-format", space);
}
-#line 2747 "dhcp6_parser.cc"
+#line 2716 "dhcp6_parser.cc"
break;
case 499:
ElementPtr persist(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("always-send", persist);
}
-#line 2756 "dhcp6_parser.cc"
+#line 2725 "dhcp6_parser.cc"
break;
case 500:
ctx.stack_.push_back(l);
ctx.enter(ctx.POOLS);
}
-#line 2767 "dhcp6_parser.cc"
+#line 2736 "dhcp6_parser.cc"
break;
case 501:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 2776 "dhcp6_parser.cc"
+#line 2745 "dhcp6_parser.cc"
break;
case 506:
ctx.stack_.back()->add(m);
ctx.stack_.push_back(m);
}
-#line 2786 "dhcp6_parser.cc"
+#line 2755 "dhcp6_parser.cc"
break;
case 507:
ctx.require("pool", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
ctx.stack_.pop_back();
}
-#line 2796 "dhcp6_parser.cc"
+#line 2765 "dhcp6_parser.cc"
break;
case 508:
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(m);
}
-#line 2806 "dhcp6_parser.cc"
+#line 2775 "dhcp6_parser.cc"
break;
case 509:
ctx.require("pool", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
// parsing completed
}
-#line 2816 "dhcp6_parser.cc"
+#line 2785 "dhcp6_parser.cc"
break;
case 519:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 2824 "dhcp6_parser.cc"
+#line 2793 "dhcp6_parser.cc"
break;
case 520:
ctx.stack_.back()->set("pool", pool);
ctx.leave();
}
-#line 2834 "dhcp6_parser.cc"
+#line 2803 "dhcp6_parser.cc"
break;
case 521:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 2842 "dhcp6_parser.cc"
+#line 2811 "dhcp6_parser.cc"
break;
case 522:
parent->set("user-context", user_context);
ctx.leave();
}
-#line 2869 "dhcp6_parser.cc"
+#line 2838 "dhcp6_parser.cc"
break;
case 523:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 2877 "dhcp6_parser.cc"
+#line 2846 "dhcp6_parser.cc"
break;
case 524:
parent->set("user-context", user_context);
ctx.leave();
}
-#line 2906 "dhcp6_parser.cc"
+#line 2875 "dhcp6_parser.cc"
break;
case 525:
ctx.stack_.push_back(l);
ctx.enter(ctx.PD_POOLS);
}
-#line 2917 "dhcp6_parser.cc"
+#line 2886 "dhcp6_parser.cc"
break;
case 526:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 2926 "dhcp6_parser.cc"
+#line 2895 "dhcp6_parser.cc"
break;
case 531:
ctx.stack_.back()->add(m);
ctx.stack_.push_back(m);
}
-#line 2936 "dhcp6_parser.cc"
+#line 2905 "dhcp6_parser.cc"
break;
case 532:
ctx.require("delegated-len", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
ctx.stack_.pop_back();
}
-#line 2948 "dhcp6_parser.cc"
+#line 2917 "dhcp6_parser.cc"
break;
case 533:
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(m);
}
-#line 2958 "dhcp6_parser.cc"
+#line 2927 "dhcp6_parser.cc"
break;
case 534:
ctx.require("delegated-len", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
// parsing completed
}
-#line 2970 "dhcp6_parser.cc"
+#line 2939 "dhcp6_parser.cc"
break;
case 548:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 2978 "dhcp6_parser.cc"
+#line 2947 "dhcp6_parser.cc"
break;
case 549:
ctx.stack_.back()->set("prefix", prf);
ctx.leave();
}
-#line 2988 "dhcp6_parser.cc"
+#line 2957 "dhcp6_parser.cc"
break;
case 550:
ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("prefix-len", prf);
}
-#line 2997 "dhcp6_parser.cc"
+#line 2966 "dhcp6_parser.cc"
break;
case 551:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3005 "dhcp6_parser.cc"
+#line 2974 "dhcp6_parser.cc"
break;
case 552:
ctx.stack_.back()->set("excluded-prefix", prf);
ctx.leave();
}
-#line 3015 "dhcp6_parser.cc"
+#line 2984 "dhcp6_parser.cc"
break;
case 553:
ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("excluded-prefix-len", prf);
}
-#line 3024 "dhcp6_parser.cc"
+#line 2993 "dhcp6_parser.cc"
break;
case 554:
ElementPtr deleg(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("delegated-len", deleg);
}
-#line 3033 "dhcp6_parser.cc"
+#line 3002 "dhcp6_parser.cc"
break;
case 555:
ctx.stack_.push_back(l);
ctx.enter(ctx.RESERVATIONS);
}
-#line 3044 "dhcp6_parser.cc"
+#line 3013 "dhcp6_parser.cc"
break;
case 556:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 3053 "dhcp6_parser.cc"
+#line 3022 "dhcp6_parser.cc"
break;
case 561:
ctx.stack_.back()->add(m);
ctx.stack_.push_back(m);
}
-#line 3063 "dhcp6_parser.cc"
+#line 3032 "dhcp6_parser.cc"
break;
case 562:
/// @todo: an identifier parameter is required.
ctx.stack_.pop_back();
}
-#line 3072 "dhcp6_parser.cc"
+#line 3041 "dhcp6_parser.cc"
break;
case 563:
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(m);
}
-#line 3082 "dhcp6_parser.cc"
+#line 3051 "dhcp6_parser.cc"
break;
case 564:
/// @todo: an identifier parameter is required.
// parsing completed
}
-#line 3091 "dhcp6_parser.cc"
+#line 3060 "dhcp6_parser.cc"
break;
case 580:
ctx.stack_.push_back(l);
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3102 "dhcp6_parser.cc"
+#line 3071 "dhcp6_parser.cc"
break;
case 581:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 3111 "dhcp6_parser.cc"
+#line 3080 "dhcp6_parser.cc"
break;
case 582:
ctx.stack_.push_back(l);
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3122 "dhcp6_parser.cc"
+#line 3091 "dhcp6_parser.cc"
break;
case 583:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 3131 "dhcp6_parser.cc"
+#line 3100 "dhcp6_parser.cc"
break;
case 584:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3139 "dhcp6_parser.cc"
+#line 3108 "dhcp6_parser.cc"
break;
case 585:
ctx.stack_.back()->set("duid", d);
ctx.leave();
}
-#line 3149 "dhcp6_parser.cc"
+#line 3118 "dhcp6_parser.cc"
break;
case 586:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3157 "dhcp6_parser.cc"
+#line 3126 "dhcp6_parser.cc"
break;
case 587:
ctx.stack_.back()->set("hw-address", hw);
ctx.leave();
}
-#line 3167 "dhcp6_parser.cc"
+#line 3136 "dhcp6_parser.cc"
break;
case 588:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3175 "dhcp6_parser.cc"
+#line 3144 "dhcp6_parser.cc"
break;
case 589:
ctx.stack_.back()->set("hostname", host);
ctx.leave();
}
-#line 3185 "dhcp6_parser.cc"
+#line 3154 "dhcp6_parser.cc"
break;
case 590:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3193 "dhcp6_parser.cc"
+#line 3162 "dhcp6_parser.cc"
break;
case 591:
ctx.stack_.back()->set("flex-id", hw);
ctx.leave();
}
-#line 3203 "dhcp6_parser.cc"
+#line 3172 "dhcp6_parser.cc"
break;
case 592:
ctx.stack_.push_back(c);
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3214 "dhcp6_parser.cc"
+#line 3183 "dhcp6_parser.cc"
break;
case 593:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 3223 "dhcp6_parser.cc"
+#line 3192 "dhcp6_parser.cc"
break;
case 594:
ctx.stack_.push_back(m);
ctx.enter(ctx.RELAY);
}
-#line 3234 "dhcp6_parser.cc"
+#line 3203 "dhcp6_parser.cc"
break;
case 595:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 3243 "dhcp6_parser.cc"
+#line 3212 "dhcp6_parser.cc"
break;
case 598:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3251 "dhcp6_parser.cc"
+#line 3220 "dhcp6_parser.cc"
break;
case 599:
ctx.stack_.back()->set("ip-address", addr);
ctx.leave();
}
-#line 3261 "dhcp6_parser.cc"
+#line 3230 "dhcp6_parser.cc"
break;
case 600:
ctx.stack_.push_back(l);
ctx.enter(ctx.CLIENT_CLASSES);
}
-#line 3272 "dhcp6_parser.cc"
+#line 3241 "dhcp6_parser.cc"
break;
case 601:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 3281 "dhcp6_parser.cc"
+#line 3250 "dhcp6_parser.cc"
break;
case 604:
ctx.stack_.back()->add(m);
ctx.stack_.push_back(m);
}
-#line 3291 "dhcp6_parser.cc"
+#line 3260 "dhcp6_parser.cc"
break;
case 605:
ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
ctx.stack_.pop_back();
}
-#line 3301 "dhcp6_parser.cc"
+#line 3270 "dhcp6_parser.cc"
break;
case 618:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3309 "dhcp6_parser.cc"
+#line 3278 "dhcp6_parser.cc"
break;
case 619:
ctx.stack_.back()->set("test", test);
ctx.leave();
}
-#line 3319 "dhcp6_parser.cc"
+#line 3288 "dhcp6_parser.cc"
break;
case 620:
ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("only-if-required", b);
}
-#line 3328 "dhcp6_parser.cc"
+#line 3297 "dhcp6_parser.cc"
break;
case 621:
ctx.stack_.push_back(m);
ctx.enter(ctx.SERVER_ID);
}
-#line 3339 "dhcp6_parser.cc"
+#line 3308 "dhcp6_parser.cc"
break;
case 622:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 3350 "dhcp6_parser.cc"
+#line 3319 "dhcp6_parser.cc"
break;
case 634:
{
ctx.enter(ctx.DUID_TYPE);
}
-#line 3358 "dhcp6_parser.cc"
+#line 3327 "dhcp6_parser.cc"
break;
case 635:
ctx.stack_.back()->set("type", yystack_[0].value.as < ElementPtr > ());
ctx.leave();
}
-#line 3367 "dhcp6_parser.cc"
+#line 3336 "dhcp6_parser.cc"
break;
case 636:
#line 2135 "dhcp6_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("LLT", ctx.loc2pos(yystack_[0].location))); }
-#line 3373 "dhcp6_parser.cc"
+#line 3342 "dhcp6_parser.cc"
break;
case 637:
#line 2136 "dhcp6_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("EN", ctx.loc2pos(yystack_[0].location))); }
-#line 3379 "dhcp6_parser.cc"
+#line 3348 "dhcp6_parser.cc"
break;
case 638:
#line 2137 "dhcp6_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("LL", ctx.loc2pos(yystack_[0].location))); }
-#line 3385 "dhcp6_parser.cc"
+#line 3354 "dhcp6_parser.cc"
break;
case 639:
ElementPtr htype(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("htype", htype);
}
-#line 3394 "dhcp6_parser.cc"
+#line 3363 "dhcp6_parser.cc"
break;
case 640:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3402 "dhcp6_parser.cc"
+#line 3371 "dhcp6_parser.cc"
break;
case 641:
ctx.stack_.back()->set("identifier", id);
ctx.leave();
}
-#line 3412 "dhcp6_parser.cc"
+#line 3381 "dhcp6_parser.cc"
break;
case 642:
ElementPtr time(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("time", time);
}
-#line 3421 "dhcp6_parser.cc"
+#line 3390 "dhcp6_parser.cc"
break;
case 643:
ElementPtr time(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("enterprise-id", time);
}
-#line 3430 "dhcp6_parser.cc"
+#line 3399 "dhcp6_parser.cc"
break;
case 644:
ElementPtr time(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("dhcp4o6-port", time);
}
-#line 3439 "dhcp6_parser.cc"
+#line 3408 "dhcp6_parser.cc"
break;
case 645:
ctx.stack_.push_back(m);
ctx.enter(ctx.CONTROL_SOCKET);
}
-#line 3450 "dhcp6_parser.cc"
+#line 3419 "dhcp6_parser.cc"
break;
case 646:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 3459 "dhcp6_parser.cc"
+#line 3428 "dhcp6_parser.cc"
break;
case 654:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3467 "dhcp6_parser.cc"
+#line 3436 "dhcp6_parser.cc"
break;
case 655:
ctx.stack_.back()->set("socket-type", stype);
ctx.leave();
}
-#line 3477 "dhcp6_parser.cc"
+#line 3446 "dhcp6_parser.cc"
break;
case 656:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3485 "dhcp6_parser.cc"
+#line 3454 "dhcp6_parser.cc"
break;
case 657:
ctx.stack_.back()->set("socket-name", name);
ctx.leave();
}
-#line 3495 "dhcp6_parser.cc"
+#line 3464 "dhcp6_parser.cc"
break;
case 658:
ctx.stack_.push_back(qc);
ctx.enter(ctx.DHCP_QUEUE_CONTROL);
}
-#line 3506 "dhcp6_parser.cc"
+#line 3475 "dhcp6_parser.cc"
break;
case 659:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 3517 "dhcp6_parser.cc"
+#line 3486 "dhcp6_parser.cc"
break;
case 668:
ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("enable-queue", b);
}
-#line 3526 "dhcp6_parser.cc"
+#line 3495 "dhcp6_parser.cc"
break;
case 669:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3534 "dhcp6_parser.cc"
+#line 3503 "dhcp6_parser.cc"
break;
case 670:
ctx.stack_.back()->set("queue-type", qt);
ctx.leave();
}
-#line 3544 "dhcp6_parser.cc"
+#line 3513 "dhcp6_parser.cc"
break;
case 671:
ElementPtr c(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("capacity", c);
}
-#line 3553 "dhcp6_parser.cc"
+#line 3522 "dhcp6_parser.cc"
break;
case 672:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3561 "dhcp6_parser.cc"
+#line 3530 "dhcp6_parser.cc"
break;
case 673:
ctx.stack_.back()->set(yystack_[3].value.as < std::string > (), yystack_[0].value.as < ElementPtr > ());
ctx.leave();
}
-#line 3570 "dhcp6_parser.cc"
+#line 3539 "dhcp6_parser.cc"
break;
case 674:
ctx.stack_.push_back(m);
ctx.enter(ctx.DHCP_DDNS);
}
-#line 3581 "dhcp6_parser.cc"
+#line 3550 "dhcp6_parser.cc"
break;
case 675:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 3592 "dhcp6_parser.cc"
+#line 3561 "dhcp6_parser.cc"
break;
case 676:
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(m);
}
-#line 3602 "dhcp6_parser.cc"
+#line 3571 "dhcp6_parser.cc"
break;
case 677:
ctx.require("enable-updates", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
// parsing completed
}
-#line 3612 "dhcp6_parser.cc"
+#line 3581 "dhcp6_parser.cc"
break;
case 698:
ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("enable-updates", b);
}
-#line 3621 "dhcp6_parser.cc"
+#line 3590 "dhcp6_parser.cc"
break;
case 699:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3629 "dhcp6_parser.cc"
+#line 3598 "dhcp6_parser.cc"
break;
case 700:
ctx.stack_.back()->set("qualifying-suffix", s);
ctx.leave();
}
-#line 3639 "dhcp6_parser.cc"
+#line 3608 "dhcp6_parser.cc"
break;
case 701:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3647 "dhcp6_parser.cc"
+#line 3616 "dhcp6_parser.cc"
break;
case 702:
ctx.stack_.back()->set("server-ip", s);
ctx.leave();
}
-#line 3657 "dhcp6_parser.cc"
+#line 3626 "dhcp6_parser.cc"
break;
case 703:
ElementPtr i(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("server-port", i);
}
-#line 3666 "dhcp6_parser.cc"
+#line 3635 "dhcp6_parser.cc"
break;
case 704:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3674 "dhcp6_parser.cc"
+#line 3643 "dhcp6_parser.cc"
break;
case 705:
ctx.stack_.back()->set("sender-ip", s);
ctx.leave();
}
-#line 3684 "dhcp6_parser.cc"
+#line 3653 "dhcp6_parser.cc"
break;
case 706:
ElementPtr i(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("sender-port", i);
}
-#line 3693 "dhcp6_parser.cc"
+#line 3662 "dhcp6_parser.cc"
break;
case 707:
ElementPtr i(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("max-queue-size", i);
}
-#line 3702 "dhcp6_parser.cc"
+#line 3671 "dhcp6_parser.cc"
break;
case 708:
{
ctx.enter(ctx.NCR_PROTOCOL);
}
-#line 3710 "dhcp6_parser.cc"
+#line 3679 "dhcp6_parser.cc"
break;
case 709:
ctx.stack_.back()->set("ncr-protocol", yystack_[0].value.as < ElementPtr > ());
ctx.leave();
}
-#line 3719 "dhcp6_parser.cc"
+#line 3688 "dhcp6_parser.cc"
break;
case 710:
#line 2361 "dhcp6_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("UDP", ctx.loc2pos(yystack_[0].location))); }
-#line 3725 "dhcp6_parser.cc"
+#line 3694 "dhcp6_parser.cc"
break;
case 711:
#line 2362 "dhcp6_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("TCP", ctx.loc2pos(yystack_[0].location))); }
-#line 3731 "dhcp6_parser.cc"
+#line 3700 "dhcp6_parser.cc"
break;
case 712:
{
ctx.enter(ctx.NCR_FORMAT);
}
-#line 3739 "dhcp6_parser.cc"
+#line 3708 "dhcp6_parser.cc"
break;
case 713:
ctx.stack_.back()->set("ncr-format", json);
ctx.leave();
}
-#line 3749 "dhcp6_parser.cc"
+#line 3718 "dhcp6_parser.cc"
break;
case 714:
ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("override-no-update", b);
}
-#line 3758 "dhcp6_parser.cc"
+#line 3727 "dhcp6_parser.cc"
break;
case 715:
ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("override-client-update", b);
}
-#line 3767 "dhcp6_parser.cc"
+#line 3736 "dhcp6_parser.cc"
break;
case 716:
{
ctx.enter(ctx.REPLACE_CLIENT_NAME);
}
-#line 3775 "dhcp6_parser.cc"
+#line 3744 "dhcp6_parser.cc"
break;
case 717:
ctx.stack_.back()->set("replace-client-name", yystack_[0].value.as < ElementPtr > ());
ctx.leave();
}
-#line 3784 "dhcp6_parser.cc"
+#line 3753 "dhcp6_parser.cc"
break;
case 718:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3792 "dhcp6_parser.cc"
+#line 3761 "dhcp6_parser.cc"
break;
case 719:
ctx.stack_.back()->set("generated-prefix", s);
ctx.leave();
}
-#line 3802 "dhcp6_parser.cc"
+#line 3771 "dhcp6_parser.cc"
break;
case 720:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3810 "dhcp6_parser.cc"
+#line 3779 "dhcp6_parser.cc"
break;
case 721:
ctx.stack_.back()->set("hostname-char-set", s);
ctx.leave();
}
-#line 3820 "dhcp6_parser.cc"
+#line 3789 "dhcp6_parser.cc"
break;
case 722:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3828 "dhcp6_parser.cc"
+#line 3797 "dhcp6_parser.cc"
break;
case 723:
ctx.stack_.back()->set("hostname-char-replacement", s);
ctx.leave();
}
-#line 3838 "dhcp6_parser.cc"
+#line 3807 "dhcp6_parser.cc"
break;
case 724:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3846 "dhcp6_parser.cc"
+#line 3815 "dhcp6_parser.cc"
break;
case 725:
ctx.stack_.back()->set("Dhcp4", yystack_[0].value.as < ElementPtr > ());
ctx.leave();
}
-#line 3855 "dhcp6_parser.cc"
+#line 3824 "dhcp6_parser.cc"
break;
case 726:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3863 "dhcp6_parser.cc"
+#line 3832 "dhcp6_parser.cc"
break;
case 727:
ctx.stack_.back()->set("DhcpDdns", yystack_[0].value.as < ElementPtr > ());
ctx.leave();
}
-#line 3872 "dhcp6_parser.cc"
+#line 3841 "dhcp6_parser.cc"
break;
case 728:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 3880 "dhcp6_parser.cc"
+#line 3849 "dhcp6_parser.cc"
break;
case 729:
ctx.stack_.back()->set("Control-agent", yystack_[0].value.as < ElementPtr > ());
ctx.leave();
}
-#line 3889 "dhcp6_parser.cc"
+#line 3858 "dhcp6_parser.cc"
break;
case 730:
ctx.stack_.push_back(i);
ctx.enter(ctx.CONFIG_CONTROL);
}
-#line 3900 "dhcp6_parser.cc"
+#line 3869 "dhcp6_parser.cc"
break;
case 731:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 3910 "dhcp6_parser.cc"
+#line 3879 "dhcp6_parser.cc"
break;
case 732:
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(m);
}
-#line 3920 "dhcp6_parser.cc"
+#line 3889 "dhcp6_parser.cc"
break;
case 733:
// No config_control params are required
// parsing completed
}
-#line 3929 "dhcp6_parser.cc"
+#line 3898 "dhcp6_parser.cc"
break;
case 738:
ctx.stack_.push_back(l);
ctx.enter(ctx.CONFIG_DATABASE);
}
-#line 3940 "dhcp6_parser.cc"
+#line 3909 "dhcp6_parser.cc"
break;
case 739:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 3949 "dhcp6_parser.cc"
+#line 3918 "dhcp6_parser.cc"
break;
case 740:
ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("config-fetch-wait-time", value);
}
-#line 3958 "dhcp6_parser.cc"
+#line 3927 "dhcp6_parser.cc"
break;
case 741:
ctx.stack_.push_back(m);
ctx.enter(ctx.LOGGING);
}
-#line 3969 "dhcp6_parser.cc"
+#line 3938 "dhcp6_parser.cc"
break;
case 742:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 3978 "dhcp6_parser.cc"
+#line 3947 "dhcp6_parser.cc"
break;
case 743:
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(m);
}
-#line 3988 "dhcp6_parser.cc"
+#line 3957 "dhcp6_parser.cc"
break;
case 744:
{
// parsing completed
}
-#line 3996 "dhcp6_parser.cc"
+#line 3965 "dhcp6_parser.cc"
break;
case 748:
ctx.stack_.push_back(l);
ctx.enter(ctx.LOGGERS);
}
-#line 4007 "dhcp6_parser.cc"
+#line 3976 "dhcp6_parser.cc"
break;
case 749:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 4016 "dhcp6_parser.cc"
+#line 3985 "dhcp6_parser.cc"
break;
case 752:
ctx.stack_.back()->add(l);
ctx.stack_.push_back(l);
}
-#line 4026 "dhcp6_parser.cc"
+#line 3995 "dhcp6_parser.cc"
break;
case 753:
{
ctx.stack_.pop_back();
}
-#line 4034 "dhcp6_parser.cc"
+#line 4003 "dhcp6_parser.cc"
break;
case 763:
ElementPtr dl(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("debuglevel", dl);
}
-#line 4043 "dhcp6_parser.cc"
+#line 4012 "dhcp6_parser.cc"
break;
case 764:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 4051 "dhcp6_parser.cc"
+#line 4020 "dhcp6_parser.cc"
break;
case 765:
ctx.stack_.back()->set("severity", sev);
ctx.leave();
}
-#line 4061 "dhcp6_parser.cc"
+#line 4030 "dhcp6_parser.cc"
break;
case 766:
ctx.stack_.push_back(l);
ctx.enter(ctx.OUTPUT_OPTIONS);
}
-#line 4072 "dhcp6_parser.cc"
+#line 4041 "dhcp6_parser.cc"
break;
case 767:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 4081 "dhcp6_parser.cc"
+#line 4050 "dhcp6_parser.cc"
break;
case 770:
ctx.stack_.back()->add(m);
ctx.stack_.push_back(m);
}
-#line 4091 "dhcp6_parser.cc"
+#line 4060 "dhcp6_parser.cc"
break;
case 771:
{
ctx.stack_.pop_back();
}
-#line 4099 "dhcp6_parser.cc"
+#line 4068 "dhcp6_parser.cc"
break;
case 779:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 4107 "dhcp6_parser.cc"
+#line 4076 "dhcp6_parser.cc"
break;
case 780:
ctx.stack_.back()->set("output", sev);
ctx.leave();
}
-#line 4117 "dhcp6_parser.cc"
+#line 4086 "dhcp6_parser.cc"
break;
case 781:
ElementPtr flush(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("flush", flush);
}
-#line 4126 "dhcp6_parser.cc"
+#line 4095 "dhcp6_parser.cc"
break;
case 782:
ElementPtr maxsize(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("maxsize", maxsize);
}
-#line 4135 "dhcp6_parser.cc"
+#line 4104 "dhcp6_parser.cc"
break;
case 783:
ElementPtr maxver(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("maxver", maxver);
}
-#line 4144 "dhcp6_parser.cc"
+#line 4113 "dhcp6_parser.cc"
break;
case 784:
{
ctx.enter(ctx.NO_KEYWORD);
}
-#line 4152 "dhcp6_parser.cc"
+#line 4121 "dhcp6_parser.cc"
break;
case 785:
ctx.stack_.back()->set("pattern", sev);
ctx.leave();
}
-#line 4162 "dhcp6_parser.cc"
+#line 4131 "dhcp6_parser.cc"
break;
-#line 4166 "dhcp6_parser.cc"
+#line 4135 "dhcp6_parser.cc"
default:
break;
YY_SYMBOL_PRINT ("-> $$ =", yylhs);
yypop_ (yylen);
yylen = 0;
- YY_STACK_PRINT ();
// Shift the result of the reduction.
yypush_ (YY_NULLPTR, YY_MOVE (yylhs));
if (!yyerrstatus_)
{
++yynerrs_;
- error (yyla.location, yysyntax_error_ (yystack_[0].state, yyla));
+ context yyctx (*this, yyla);
+ std::string msg = yysyntax_error_ (yyctx);
+ error (yyla.location, YY_MOVE (msg));
}
error, discard it. */
// Return failure if at end of input.
- if (yyla.type_get () == yyeof_)
+ if (yyla.kind () == symbol_kind::S_YYEOF)
YYABORT;
else if (!yyla.empty ())
{
this YYERROR. */
yypop_ (yylen);
yylen = 0;
+ YY_STACK_PRINT ();
goto yyerrlab1;
`-------------------------------------------------------------*/
yyerrlab1:
yyerrstatus_ = 3; // Each real token shifted decrements this.
- {
- stack_symbol_type error_token;
- for (;;)
- {
- yyn = yypact_[+yystack_[0].state];
- if (!yy_pact_value_is_default_ (yyn))
- {
- yyn += yy_error_token_;
- if (0 <= yyn && yyn <= yylast_ && yycheck_[yyn] == yy_error_token_)
- {
- yyn = yytable_[yyn];
- if (0 < yyn)
- break;
- }
- }
+ // Pop stack until we find a state that shifts the error token.
+ for (;;)
+ {
+ yyn = yypact_[+yystack_[0].state];
+ if (!yy_pact_value_is_default_ (yyn))
+ {
+ yyn += symbol_kind::S_YYerror;
+ if (0 <= yyn && yyn <= yylast_
+ && yycheck_[yyn] == symbol_kind::S_YYerror)
+ {
+ yyn = yytable_[yyn];
+ if (0 < yyn)
+ break;
+ }
+ }
- // Pop the current state because it cannot handle the error token.
- if (yystack_.size () == 1)
- YYABORT;
+ // Pop the current state because it cannot handle the error token.
+ if (yystack_.size () == 1)
+ YYABORT;
- yyerror_range[1].location = yystack_[0].location;
- yy_destroy_ ("Error: popping", yystack_[0]);
- yypop_ ();
- YY_STACK_PRINT ();
- }
+ yyerror_range[1].location = yystack_[0].location;
+ yy_destroy_ ("Error: popping", yystack_[0]);
+ yypop_ ();
+ YY_STACK_PRINT ();
+ }
+ {
+ stack_symbol_type error_token;
yyerror_range[2].location = yyla.location;
YYLLOC_DEFAULT (error_token.location, yyerror_range, 2);
/* Do not reclaim the symbols of the rule whose action triggered
this YYABORT or YYACCEPT. */
yypop_ (yylen);
+ YY_STACK_PRINT ();
while (1 < yystack_.size ())
{
yy_destroy_ ("Cleanup: popping", yystack_[0]);
error (yyexc.location, yyexc.what ());
}
- // Generate an error message.
+ /* Return YYSTR after stripping away unnecessary quotes and
+ backslashes, so that it's suitable for yyerror. The heuristic is
+ that double-quoting is unnecessary unless the string contains an
+ apostrophe, a comma, or backslash (other than backslash-backslash).
+ YYSTR is taken from yytname. */
std::string
- Dhcp6Parser::yysyntax_error_ (state_type yystate, const symbol_type& yyla) const
+ Dhcp6Parser::yytnamerr_ (const char *yystr)
{
- // Number of reported tokens (one for the "unexpected", one per
- // "expected").
- std::ptrdiff_t yycount = 0;
- // Its maximum.
- enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
- // Arguments of yyformat.
- char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
+ if (*yystr == '"')
+ {
+ std::string yyr;
+ char const *yyp = yystr;
+
+ for (;;)
+ switch (*++yyp)
+ {
+ case '\'':
+ case ',':
+ goto do_not_strip_quotes;
+ case '\\':
+ if (*++yyp != '\\')
+ goto do_not_strip_quotes;
+ else
+ goto append;
+
+ append:
+ default:
+ yyr += *yyp;
+ break;
+
+ case '"':
+ return yyr;
+ }
+ do_not_strip_quotes: ;
+ }
+
+ return yystr;
+ }
+
+ std::string
+ Dhcp6Parser::symbol_name (symbol_kind_type yysymbol)
+ {
+ return yytnamerr_ (yytname_[yysymbol]);
+ }
+
+
+
+ // Dhcp6Parser::context.
+ Dhcp6Parser::context::context (const Dhcp6Parser& yyparser, const symbol_type& yyla)
+ : yyparser_ (yyparser)
+ , yyla_ (yyla)
+ {}
+
+ int
+ Dhcp6Parser::context::expected_tokens (symbol_kind_type yyarg[], int yyargn) const
+ {
+ // Actual number of expected tokens
+ int yycount = 0;
+
+ int yyn = yypact_[+yyparser_.yystack_[0].state];
+ if (!yy_pact_value_is_default_ (yyn))
+ {
+ /* Start YYX at -YYN if negative to avoid negative indexes in
+ YYCHECK. In other words, skip the first -YYN actions for
+ this state because they are default actions. */
+ int yyxbegin = yyn < 0 ? -yyn : 0;
+ // Stay within bounds of both yycheck and yytname.
+ int yychecklim = yylast_ - yyn + 1;
+ int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
+ for (int yyx = yyxbegin; yyx < yyxend; ++yyx)
+ if (yycheck_[yyx + yyn] == yyx && yyx != symbol_kind::S_YYerror
+ && !yy_table_value_is_error_ (yytable_[yyx + yyn]))
+ {
+ if (!yyarg)
+ ++yycount;
+ else if (yycount == yyargn)
+ return 0;
+ else
+ yyarg[yycount++] = YY_CAST (symbol_kind_type, yyx);
+ }
+ }
+
+ if (yyarg && yycount == 0 && 0 < yyargn)
+ yyarg[0] = symbol_kind::S_YYEMPTY;
+ return yycount;
+ }
+
+
+
+ int
+ Dhcp6Parser::yy_syntax_error_arguments_ (const context& yyctx,
+ symbol_kind_type yyarg[], int yyargn) const
+ {
/* There are many possibilities here to consider:
- If this state is a consistent state with a default action, then
the only way this function was invoked is if the default action
one exception: it will still contain any token that will not be
accepted due to an error action in a later state.
*/
- if (!yyla.empty ())
- {
- symbol_number_type yytoken = yyla.type_get ();
- yyarg[yycount++] = yytname_[yytoken];
- int yyn = yypact_[+yystate];
- if (!yy_pact_value_is_default_ (yyn))
- {
- /* Start YYX at -YYN if negative to avoid negative indexes in
- YYCHECK. In other words, skip the first -YYN actions for
- this state because they are default actions. */
- int yyxbegin = yyn < 0 ? -yyn : 0;
- // Stay within bounds of both yycheck and yytname.
- int yychecklim = yylast_ - yyn + 1;
- int yyxend = yychecklim < yyntokens_ ? yychecklim : yyntokens_;
- for (int yyx = yyxbegin; yyx < yyxend; ++yyx)
- if (yycheck_[yyx + yyn] == yyx && yyx != yy_error_token_
- && !yy_table_value_is_error_ (yytable_[yyx + yyn]))
- {
- if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
- {
- yycount = 1;
- break;
- }
- else
- yyarg[yycount++] = yytname_[yyx];
- }
- }
+ if (!yyctx.lookahead ().empty ())
+ {
+ if (yyarg)
+ yyarg[0] = yyctx.token ();
+ int yyn = yyctx.expected_tokens (yyarg ? yyarg + 1 : yyarg, yyargn - 1);
+ return yyn + 1;
}
+ return 0;
+ }
+
+ // Generate an error message.
+ std::string
+ Dhcp6Parser::yysyntax_error_ (const context& yyctx) const
+ {
+ // Its maximum.
+ enum { YYARGS_MAX = 5 };
+ // Arguments of yyformat.
+ symbol_kind_type yyarg[YYARGS_MAX];
+ int yycount = yy_syntax_error_arguments_ (yyctx, yyarg, YYARGS_MAX);
char const* yyformat = YY_NULLPTR;
switch (yycount)
for (char const* yyp = yyformat; *yyp; ++yyp)
if (yyp[0] == '%' && yyp[1] == 's' && yyi < yycount)
{
- yyres += yytnamerr_ (yyarg[yyi++]);
+ yyres += symbol_name (yyarg[yyi++]);
++yyp;
}
else
};
-
+#if PARSER6_DEBUG || 1
// YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
- // First, the terminals, then, starting at \a yyntokens_, nonterminals.
+ // First, the terminals, then, starting at \a YYNTOKENS, nonterminals.
const char*
const Dhcp6Parser::yytname_[] =
{
- "\"end of file\"", "error", "$undefined", "\",\"", "\":\"", "\"[\"",
- "\"]\"", "\"{\"", "\"}\"", "\"null\"", "\"Dhcp6\"", "\"data-directory\"",
- "\"config-control\"", "\"config-databases\"",
+ "\"end of file\"", "error", "\"invalid token\"", "\",\"", "\":\"",
+ "\"[\"", "\"]\"", "\"{\"", "\"}\"", "\"null\"", "\"Dhcp6\"",
+ "\"data-directory\"", "\"config-control\"", "\"config-databases\"",
"\"config-fetch-wait-time\"", "\"interfaces-config\"", "\"interfaces\"",
"\"re-detect\"", "\"lease-database\"", "\"hosts-database\"",
"\"hosts-databases\"", "\"type\"", "\"memfile\"", "\"mysql\"",
"output_params_list", "output_params", "output", "$@139", "flush",
"maxsize", "maxver", "pattern", "$@140", YY_NULLPTR
};
+#endif
+
#if PARSER6_DEBUG
const short
2610, 2618, 2623, 2628, 2633, 2633
};
- // Print the state stack on the debug stream.
void
- Dhcp6Parser::yystack_print_ ()
+ Dhcp6Parser::yy_stack_print_ () const
{
*yycdebug_ << "Stack now";
for (stack_type::const_iterator
*yycdebug_ << '\n';
}
- // Report on the debug stream that the rule \a yyrule is going to be reduced.
void
- Dhcp6Parser::yy_reduce_print_ (int yyrule)
+ Dhcp6Parser::yy_reduce_print_ (int yyrule) const
{
int yylno = yyrline_[yyrule];
int yynrhs = yyr2_[yyrule];
#line 14 "dhcp6_parser.yy"
} } // isc::dhcp
-#line 5660 "dhcp6_parser.cc"
+#line 5707 "dhcp6_parser.cc"
#line 2641 "dhcp6_parser.yy"
-// A Bison parser, made by GNU Bison 3.5.4.
+// A Bison parser, made by GNU Bison 3.6.2.
// Skeleton interface for Bison LALR(1) parsers in C++
// C++ LALR(1) parser skeleton written by Akim Demaille.
-// Undocumented macros, especially those whose name start with YY_,
-// are private implementation details. Do not rely on them.
+// DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual,
+// especially those whose name start with YY_ or yy_. They are
+// private implementation details that can be changed or removed.
#ifndef YY_PARSER6_DHCP6_PARSER_H_INCLUDED
# define YY_PARSER6_DHCP6_PARSER_H_INCLUDED
using namespace isc::data;
using namespace std;
-#line 60 "dhcp6_parser.h"
+#line 61 "dhcp6_parser.h"
# include <cassert>
# include <cstdlib> // std::abort
#line 14 "dhcp6_parser.yy"
namespace isc { namespace dhcp {
-#line 203 "dhcp6_parser.h"
+#line 204 "dhcp6_parser.h"
new (yyas_<T> ()) T (YY_MOVE (t));
}
+#if 201103L <= YY_CPLUSPLUS
+ /// Non copyable.
+ semantic_type (const self_type&) = delete;
+ /// Non copyable.
+ self_type& operator= (const self_type&) = delete;
+#endif
+
/// Destruction, allowed only if empty.
~semantic_type () YY_NOEXCEPT
{
}
private:
- /// Prohibit blind copies.
- self_type& operator= (const self_type&);
+#if YY_CPLUSPLUS < 201103L
+ /// Non copyable.
semantic_type (const self_type&);
+ /// Non copyable.
+ self_type& operator= (const self_type&);
+#endif
/// Accessor to raw memory as \a T.
template <typename T>
location_type location;
};
- /// Tokens.
+ /// Token kinds.
struct token
{
- enum yytokentype
- {
- TOKEN_END = 0,
- TOKEN_COMMA = 258,
- TOKEN_COLON = 259,
- TOKEN_LSQUARE_BRACKET = 260,
- TOKEN_RSQUARE_BRACKET = 261,
- TOKEN_LCURLY_BRACKET = 262,
- TOKEN_RCURLY_BRACKET = 263,
- TOKEN_NULL_TYPE = 264,
- TOKEN_DHCP6 = 265,
- TOKEN_DATA_DIRECTORY = 266,
- TOKEN_CONFIG_CONTROL = 267,
- TOKEN_CONFIG_DATABASES = 268,
- TOKEN_CONFIG_FETCH_WAIT_TIME = 269,
- TOKEN_INTERFACES_CONFIG = 270,
- TOKEN_INTERFACES = 271,
- TOKEN_RE_DETECT = 272,
- TOKEN_LEASE_DATABASE = 273,
- TOKEN_HOSTS_DATABASE = 274,
- TOKEN_HOSTS_DATABASES = 275,
- TOKEN_TYPE = 276,
- TOKEN_MEMFILE = 277,
- TOKEN_MYSQL = 278,
- TOKEN_POSTGRESQL = 279,
- TOKEN_CQL = 280,
- TOKEN_USER = 281,
- TOKEN_PASSWORD = 282,
- TOKEN_HOST = 283,
- TOKEN_PORT = 284,
- TOKEN_PERSIST = 285,
- TOKEN_LFC_INTERVAL = 286,
- TOKEN_READONLY = 287,
- TOKEN_CONNECT_TIMEOUT = 288,
- TOKEN_CONTACT_POINTS = 289,
- TOKEN_MAX_RECONNECT_TRIES = 290,
- TOKEN_RECONNECT_WAIT_TIME = 291,
- TOKEN_KEYSPACE = 292,
- TOKEN_CONSISTENCY = 293,
- TOKEN_SERIAL_CONSISTENCY = 294,
- TOKEN_REQUEST_TIMEOUT = 295,
- TOKEN_TCP_KEEPALIVE = 296,
- TOKEN_TCP_NODELAY = 297,
- TOKEN_MAX_ROW_ERRORS = 298,
- TOKEN_PREFERRED_LIFETIME = 299,
- TOKEN_MIN_PREFERRED_LIFETIME = 300,
- TOKEN_MAX_PREFERRED_LIFETIME = 301,
- TOKEN_VALID_LIFETIME = 302,
- TOKEN_MIN_VALID_LIFETIME = 303,
- TOKEN_MAX_VALID_LIFETIME = 304,
- TOKEN_RENEW_TIMER = 305,
- TOKEN_REBIND_TIMER = 306,
- TOKEN_CALCULATE_TEE_TIMES = 307,
- TOKEN_T1_PERCENT = 308,
- TOKEN_T2_PERCENT = 309,
- TOKEN_DECLINE_PROBATION_PERIOD = 310,
- TOKEN_SERVER_TAG = 311,
- TOKEN_STATISTIC_DEFAULT_SAMPLE_COUNT = 312,
- TOKEN_STATISTIC_DEFAULT_SAMPLE_AGE = 313,
- TOKEN_DDNS_SEND_UPDATES = 314,
- TOKEN_DDNS_OVERRIDE_NO_UPDATE = 315,
- TOKEN_DDNS_OVERRIDE_CLIENT_UPDATE = 316,
- TOKEN_DDNS_REPLACE_CLIENT_NAME = 317,
- TOKEN_DDNS_GENERATED_PREFIX = 318,
- TOKEN_DDNS_QUALIFYING_SUFFIX = 319,
- TOKEN_STORE_EXTENDED_INFO = 320,
- TOKEN_SUBNET6 = 321,
- TOKEN_OPTION_DEF = 322,
- TOKEN_OPTION_DATA = 323,
- TOKEN_NAME = 324,
- TOKEN_DATA = 325,
- TOKEN_CODE = 326,
- TOKEN_SPACE = 327,
- TOKEN_CSV_FORMAT = 328,
- TOKEN_ALWAYS_SEND = 329,
- TOKEN_RECORD_TYPES = 330,
- TOKEN_ENCAPSULATE = 331,
- TOKEN_ARRAY = 332,
- TOKEN_POOLS = 333,
- TOKEN_POOL = 334,
- TOKEN_PD_POOLS = 335,
- TOKEN_PREFIX = 336,
- TOKEN_PREFIX_LEN = 337,
- TOKEN_EXCLUDED_PREFIX = 338,
- TOKEN_EXCLUDED_PREFIX_LEN = 339,
- TOKEN_DELEGATED_LEN = 340,
- TOKEN_USER_CONTEXT = 341,
- TOKEN_COMMENT = 342,
- TOKEN_SUBNET = 343,
- TOKEN_INTERFACE = 344,
- TOKEN_INTERFACE_ID = 345,
- TOKEN_ID = 346,
- TOKEN_RAPID_COMMIT = 347,
- TOKEN_RESERVATION_MODE = 348,
- TOKEN_DISABLED = 349,
- TOKEN_OUT_OF_POOL = 350,
- TOKEN_GLOBAL = 351,
- TOKEN_ALL = 352,
- TOKEN_SHARED_NETWORKS = 353,
- TOKEN_MAC_SOURCES = 354,
- TOKEN_RELAY_SUPPLIED_OPTIONS = 355,
- TOKEN_HOST_RESERVATION_IDENTIFIERS = 356,
- TOKEN_SANITY_CHECKS = 357,
- TOKEN_LEASE_CHECKS = 358,
- TOKEN_CLIENT_CLASSES = 359,
- TOKEN_REQUIRE_CLIENT_CLASSES = 360,
- TOKEN_TEST = 361,
- TOKEN_ONLY_IF_REQUIRED = 362,
- TOKEN_CLIENT_CLASS = 363,
- TOKEN_RESERVATIONS = 364,
- TOKEN_IP_ADDRESSES = 365,
- TOKEN_PREFIXES = 366,
- TOKEN_DUID = 367,
- TOKEN_HW_ADDRESS = 368,
- TOKEN_HOSTNAME = 369,
- TOKEN_FLEX_ID = 370,
- TOKEN_RELAY = 371,
- TOKEN_IP_ADDRESS = 372,
- TOKEN_HOOKS_LIBRARIES = 373,
- TOKEN_LIBRARY = 374,
- TOKEN_PARAMETERS = 375,
- TOKEN_EXPIRED_LEASES_PROCESSING = 376,
- TOKEN_RECLAIM_TIMER_WAIT_TIME = 377,
- TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME = 378,
- TOKEN_HOLD_RECLAIMED_TIME = 379,
- TOKEN_MAX_RECLAIM_LEASES = 380,
- TOKEN_MAX_RECLAIM_TIME = 381,
- TOKEN_UNWARNED_RECLAIM_CYCLES = 382,
- TOKEN_SERVER_ID = 383,
- TOKEN_LLT = 384,
- TOKEN_EN = 385,
- TOKEN_LL = 386,
- TOKEN_IDENTIFIER = 387,
- TOKEN_HTYPE = 388,
- TOKEN_TIME = 389,
- TOKEN_ENTERPRISE_ID = 390,
- TOKEN_DHCP4O6_PORT = 391,
- TOKEN_DHCP_MULTI_THREADING = 392,
- TOKEN_ENABLE_MULTI_THREADING = 393,
- TOKEN_THREAD_POOL_SIZE = 394,
- TOKEN_PACKET_QUEUE_SIZE = 395,
- TOKEN_CONTROL_SOCKET = 396,
- TOKEN_SOCKET_TYPE = 397,
- TOKEN_SOCKET_NAME = 398,
- TOKEN_DHCP_QUEUE_CONTROL = 399,
- TOKEN_ENABLE_QUEUE = 400,
- TOKEN_QUEUE_TYPE = 401,
- TOKEN_CAPACITY = 402,
- TOKEN_DHCP_DDNS = 403,
- TOKEN_ENABLE_UPDATES = 404,
- TOKEN_QUALIFYING_SUFFIX = 405,
- TOKEN_SERVER_IP = 406,
- TOKEN_SERVER_PORT = 407,
- TOKEN_SENDER_IP = 408,
- TOKEN_SENDER_PORT = 409,
- TOKEN_MAX_QUEUE_SIZE = 410,
- TOKEN_NCR_PROTOCOL = 411,
- TOKEN_NCR_FORMAT = 412,
- TOKEN_OVERRIDE_NO_UPDATE = 413,
- TOKEN_OVERRIDE_CLIENT_UPDATE = 414,
- TOKEN_REPLACE_CLIENT_NAME = 415,
- TOKEN_GENERATED_PREFIX = 416,
- TOKEN_UDP = 417,
- TOKEN_TCP = 418,
- TOKEN_JSON = 419,
- TOKEN_WHEN_PRESENT = 420,
- TOKEN_NEVER = 421,
- TOKEN_ALWAYS = 422,
- TOKEN_WHEN_NOT_PRESENT = 423,
- TOKEN_HOSTNAME_CHAR_SET = 424,
- TOKEN_HOSTNAME_CHAR_REPLACEMENT = 425,
- TOKEN_LOGGING = 426,
- TOKEN_LOGGERS = 427,
- TOKEN_OUTPUT_OPTIONS = 428,
- TOKEN_OUTPUT = 429,
- TOKEN_DEBUGLEVEL = 430,
- TOKEN_SEVERITY = 431,
- TOKEN_FLUSH = 432,
- TOKEN_MAXSIZE = 433,
- TOKEN_MAXVER = 434,
- TOKEN_PATTERN = 435,
- TOKEN_DHCP4 = 436,
- TOKEN_DHCPDDNS = 437,
- TOKEN_CONTROL_AGENT = 438,
- TOKEN_TOPLEVEL_JSON = 439,
- TOKEN_TOPLEVEL_DHCP6 = 440,
- TOKEN_SUB_DHCP6 = 441,
- TOKEN_SUB_INTERFACES6 = 442,
- TOKEN_SUB_SUBNET6 = 443,
- TOKEN_SUB_POOL6 = 444,
- TOKEN_SUB_PD_POOL = 445,
- TOKEN_SUB_RESERVATION = 446,
- TOKEN_SUB_OPTION_DEFS = 447,
- TOKEN_SUB_OPTION_DEF = 448,
- TOKEN_SUB_OPTION_DATA = 449,
- TOKEN_SUB_HOOKS_LIBRARY = 450,
- TOKEN_SUB_DHCP_DDNS = 451,
- TOKEN_SUB_LOGGING = 452,
- TOKEN_SUB_CONFIG_CONTROL = 453,
- TOKEN_STRING = 454,
- TOKEN_INTEGER = 455,
- TOKEN_FLOAT = 456,
- TOKEN_BOOLEAN = 457
+ enum token_kind_type
+ {
+ TOKEN_PARSER6_EMPTY = -2,
+ TOKEN_END = 0, // "end of file"
+ TOKEN_PARSER6_error = 256, // error
+ TOKEN_PARSER6_UNDEF = 257, // "invalid token"
+ TOKEN_COMMA = 258, // ","
+ TOKEN_COLON = 259, // ":"
+ TOKEN_LSQUARE_BRACKET = 260, // "["
+ TOKEN_RSQUARE_BRACKET = 261, // "]"
+ TOKEN_LCURLY_BRACKET = 262, // "{"
+ TOKEN_RCURLY_BRACKET = 263, // "}"
+ TOKEN_NULL_TYPE = 264, // "null"
+ TOKEN_DHCP6 = 265, // "Dhcp6"
+ TOKEN_DATA_DIRECTORY = 266, // "data-directory"
+ TOKEN_CONFIG_CONTROL = 267, // "config-control"
+ TOKEN_CONFIG_DATABASES = 268, // "config-databases"
+ TOKEN_CONFIG_FETCH_WAIT_TIME = 269, // "config-fetch-wait-time"
+ TOKEN_INTERFACES_CONFIG = 270, // "interfaces-config"
+ TOKEN_INTERFACES = 271, // "interfaces"
+ TOKEN_RE_DETECT = 272, // "re-detect"
+ TOKEN_LEASE_DATABASE = 273, // "lease-database"
+ TOKEN_HOSTS_DATABASE = 274, // "hosts-database"
+ TOKEN_HOSTS_DATABASES = 275, // "hosts-databases"
+ TOKEN_TYPE = 276, // "type"
+ TOKEN_MEMFILE = 277, // "memfile"
+ TOKEN_MYSQL = 278, // "mysql"
+ TOKEN_POSTGRESQL = 279, // "postgresql"
+ TOKEN_CQL = 280, // "cql"
+ TOKEN_USER = 281, // "user"
+ TOKEN_PASSWORD = 282, // "password"
+ TOKEN_HOST = 283, // "host"
+ TOKEN_PORT = 284, // "port"
+ TOKEN_PERSIST = 285, // "persist"
+ TOKEN_LFC_INTERVAL = 286, // "lfc-interval"
+ TOKEN_READONLY = 287, // "readonly"
+ TOKEN_CONNECT_TIMEOUT = 288, // "connect-timeout"
+ TOKEN_CONTACT_POINTS = 289, // "contact-points"
+ TOKEN_MAX_RECONNECT_TRIES = 290, // "max-reconnect-tries"
+ TOKEN_RECONNECT_WAIT_TIME = 291, // "reconnect-wait-time"
+ TOKEN_KEYSPACE = 292, // "keyspace"
+ TOKEN_CONSISTENCY = 293, // "consistency"
+ TOKEN_SERIAL_CONSISTENCY = 294, // "serial-consistency"
+ TOKEN_REQUEST_TIMEOUT = 295, // "request-timeout"
+ TOKEN_TCP_KEEPALIVE = 296, // "tcp-keepalive"
+ TOKEN_TCP_NODELAY = 297, // "tcp-nodelay"
+ TOKEN_MAX_ROW_ERRORS = 298, // "max-row-errors"
+ TOKEN_PREFERRED_LIFETIME = 299, // "preferred-lifetime"
+ TOKEN_MIN_PREFERRED_LIFETIME = 300, // "min-preferred-lifetime"
+ TOKEN_MAX_PREFERRED_LIFETIME = 301, // "max-preferred-lifetime"
+ TOKEN_VALID_LIFETIME = 302, // "valid-lifetime"
+ TOKEN_MIN_VALID_LIFETIME = 303, // "min-valid-lifetime"
+ TOKEN_MAX_VALID_LIFETIME = 304, // "max-valid-lifetime"
+ TOKEN_RENEW_TIMER = 305, // "renew-timer"
+ TOKEN_REBIND_TIMER = 306, // "rebind-timer"
+ TOKEN_CALCULATE_TEE_TIMES = 307, // "calculate-tee-times"
+ TOKEN_T1_PERCENT = 308, // "t1-percent"
+ TOKEN_T2_PERCENT = 309, // "t2-percent"
+ TOKEN_DECLINE_PROBATION_PERIOD = 310, // "decline-probation-period"
+ TOKEN_SERVER_TAG = 311, // "server-tag"
+ TOKEN_STATISTIC_DEFAULT_SAMPLE_COUNT = 312, // "statistic-default-sample-count"
+ TOKEN_STATISTIC_DEFAULT_SAMPLE_AGE = 313, // "statistic-default-sample-age"
+ TOKEN_DDNS_SEND_UPDATES = 314, // "ddns-send-updates"
+ TOKEN_DDNS_OVERRIDE_NO_UPDATE = 315, // "ddns-override-no-update"
+ TOKEN_DDNS_OVERRIDE_CLIENT_UPDATE = 316, // "ddns-override-client-update"
+ TOKEN_DDNS_REPLACE_CLIENT_NAME = 317, // "ddns-replace-client-name"
+ TOKEN_DDNS_GENERATED_PREFIX = 318, // "ddns-generated-prefix"
+ TOKEN_DDNS_QUALIFYING_SUFFIX = 319, // "ddns-qualifying-suffix"
+ TOKEN_STORE_EXTENDED_INFO = 320, // "store-extended-info"
+ TOKEN_SUBNET6 = 321, // "subnet6"
+ TOKEN_OPTION_DEF = 322, // "option-def"
+ TOKEN_OPTION_DATA = 323, // "option-data"
+ TOKEN_NAME = 324, // "name"
+ TOKEN_DATA = 325, // "data"
+ TOKEN_CODE = 326, // "code"
+ TOKEN_SPACE = 327, // "space"
+ TOKEN_CSV_FORMAT = 328, // "csv-format"
+ TOKEN_ALWAYS_SEND = 329, // "always-send"
+ TOKEN_RECORD_TYPES = 330, // "record-types"
+ TOKEN_ENCAPSULATE = 331, // "encapsulate"
+ TOKEN_ARRAY = 332, // "array"
+ TOKEN_POOLS = 333, // "pools"
+ TOKEN_POOL = 334, // "pool"
+ TOKEN_PD_POOLS = 335, // "pd-pools"
+ TOKEN_PREFIX = 336, // "prefix"
+ TOKEN_PREFIX_LEN = 337, // "prefix-len"
+ TOKEN_EXCLUDED_PREFIX = 338, // "excluded-prefix"
+ TOKEN_EXCLUDED_PREFIX_LEN = 339, // "excluded-prefix-len"
+ TOKEN_DELEGATED_LEN = 340, // "delegated-len"
+ TOKEN_USER_CONTEXT = 341, // "user-context"
+ TOKEN_COMMENT = 342, // "comment"
+ TOKEN_SUBNET = 343, // "subnet"
+ TOKEN_INTERFACE = 344, // "interface"
+ TOKEN_INTERFACE_ID = 345, // "interface-id"
+ TOKEN_ID = 346, // "id"
+ TOKEN_RAPID_COMMIT = 347, // "rapid-commit"
+ TOKEN_RESERVATION_MODE = 348, // "reservation-mode"
+ TOKEN_DISABLED = 349, // "disabled"
+ TOKEN_OUT_OF_POOL = 350, // "out-of-pool"
+ TOKEN_GLOBAL = 351, // "global"
+ TOKEN_ALL = 352, // "all"
+ TOKEN_SHARED_NETWORKS = 353, // "shared-networks"
+ TOKEN_MAC_SOURCES = 354, // "mac-sources"
+ TOKEN_RELAY_SUPPLIED_OPTIONS = 355, // "relay-supplied-options"
+ TOKEN_HOST_RESERVATION_IDENTIFIERS = 356, // "host-reservation-identifiers"
+ TOKEN_SANITY_CHECKS = 357, // "sanity-checks"
+ TOKEN_LEASE_CHECKS = 358, // "lease-checks"
+ TOKEN_CLIENT_CLASSES = 359, // "client-classes"
+ TOKEN_REQUIRE_CLIENT_CLASSES = 360, // "require-client-classes"
+ TOKEN_TEST = 361, // "test"
+ TOKEN_ONLY_IF_REQUIRED = 362, // "only-if-required"
+ TOKEN_CLIENT_CLASS = 363, // "client-class"
+ TOKEN_RESERVATIONS = 364, // "reservations"
+ TOKEN_IP_ADDRESSES = 365, // "ip-addresses"
+ TOKEN_PREFIXES = 366, // "prefixes"
+ TOKEN_DUID = 367, // "duid"
+ TOKEN_HW_ADDRESS = 368, // "hw-address"
+ TOKEN_HOSTNAME = 369, // "hostname"
+ TOKEN_FLEX_ID = 370, // "flex-id"
+ TOKEN_RELAY = 371, // "relay"
+ TOKEN_IP_ADDRESS = 372, // "ip-address"
+ TOKEN_HOOKS_LIBRARIES = 373, // "hooks-libraries"
+ TOKEN_LIBRARY = 374, // "library"
+ TOKEN_PARAMETERS = 375, // "parameters"
+ TOKEN_EXPIRED_LEASES_PROCESSING = 376, // "expired-leases-processing"
+ TOKEN_RECLAIM_TIMER_WAIT_TIME = 377, // "reclaim-timer-wait-time"
+ TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME = 378, // "flush-reclaimed-timer-wait-time"
+ TOKEN_HOLD_RECLAIMED_TIME = 379, // "hold-reclaimed-time"
+ TOKEN_MAX_RECLAIM_LEASES = 380, // "max-reclaim-leases"
+ TOKEN_MAX_RECLAIM_TIME = 381, // "max-reclaim-time"
+ TOKEN_UNWARNED_RECLAIM_CYCLES = 382, // "unwarned-reclaim-cycles"
+ TOKEN_SERVER_ID = 383, // "server-id"
+ TOKEN_LLT = 384, // "LLT"
+ TOKEN_EN = 385, // "EN"
+ TOKEN_LL = 386, // "LL"
+ TOKEN_IDENTIFIER = 387, // "identifier"
+ TOKEN_HTYPE = 388, // "htype"
+ TOKEN_TIME = 389, // "time"
+ TOKEN_ENTERPRISE_ID = 390, // "enterprise-id"
+ TOKEN_DHCP4O6_PORT = 391, // "dhcp4o6-port"
+ TOKEN_DHCP_MULTI_THREADING = 392, // "multi-threading"
+ TOKEN_ENABLE_MULTI_THREADING = 393, // "enable-multi-threading"
+ TOKEN_THREAD_POOL_SIZE = 394, // "thread-pool-size"
+ TOKEN_PACKET_QUEUE_SIZE = 395, // "packet-queue-size"
+ TOKEN_CONTROL_SOCKET = 396, // "control-socket"
+ TOKEN_SOCKET_TYPE = 397, // "socket-type"
+ TOKEN_SOCKET_NAME = 398, // "socket-name"
+ TOKEN_DHCP_QUEUE_CONTROL = 399, // "dhcp-queue-control"
+ TOKEN_ENABLE_QUEUE = 400, // "enable-queue"
+ TOKEN_QUEUE_TYPE = 401, // "queue-type"
+ TOKEN_CAPACITY = 402, // "capacity"
+ TOKEN_DHCP_DDNS = 403, // "dhcp-ddns"
+ TOKEN_ENABLE_UPDATES = 404, // "enable-updates"
+ TOKEN_QUALIFYING_SUFFIX = 405, // "qualifying-suffix"
+ TOKEN_SERVER_IP = 406, // "server-ip"
+ TOKEN_SERVER_PORT = 407, // "server-port"
+ TOKEN_SENDER_IP = 408, // "sender-ip"
+ TOKEN_SENDER_PORT = 409, // "sender-port"
+ TOKEN_MAX_QUEUE_SIZE = 410, // "max-queue-size"
+ TOKEN_NCR_PROTOCOL = 411, // "ncr-protocol"
+ TOKEN_NCR_FORMAT = 412, // "ncr-format"
+ TOKEN_OVERRIDE_NO_UPDATE = 413, // "override-no-update"
+ TOKEN_OVERRIDE_CLIENT_UPDATE = 414, // "override-client-update"
+ TOKEN_REPLACE_CLIENT_NAME = 415, // "replace-client-name"
+ TOKEN_GENERATED_PREFIX = 416, // "generated-prefix"
+ TOKEN_UDP = 417, // "UDP"
+ TOKEN_TCP = 418, // "TCP"
+ TOKEN_JSON = 419, // "JSON"
+ TOKEN_WHEN_PRESENT = 420, // "when-present"
+ TOKEN_NEVER = 421, // "never"
+ TOKEN_ALWAYS = 422, // "always"
+ TOKEN_WHEN_NOT_PRESENT = 423, // "when-not-present"
+ TOKEN_HOSTNAME_CHAR_SET = 424, // "hostname-char-set"
+ TOKEN_HOSTNAME_CHAR_REPLACEMENT = 425, // "hostname-char-replacement"
+ TOKEN_LOGGING = 426, // "Logging"
+ TOKEN_LOGGERS = 427, // "loggers"
+ TOKEN_OUTPUT_OPTIONS = 428, // "output_options"
+ TOKEN_OUTPUT = 429, // "output"
+ TOKEN_DEBUGLEVEL = 430, // "debuglevel"
+ TOKEN_SEVERITY = 431, // "severity"
+ TOKEN_FLUSH = 432, // "flush"
+ TOKEN_MAXSIZE = 433, // "maxsize"
+ TOKEN_MAXVER = 434, // "maxver"
+ TOKEN_PATTERN = 435, // "pattern"
+ TOKEN_DHCP4 = 436, // "Dhcp4"
+ TOKEN_DHCPDDNS = 437, // "DhcpDdns"
+ TOKEN_CONTROL_AGENT = 438, // "Control-agent"
+ TOKEN_TOPLEVEL_JSON = 439, // TOPLEVEL_JSON
+ TOKEN_TOPLEVEL_DHCP6 = 440, // TOPLEVEL_DHCP6
+ TOKEN_SUB_DHCP6 = 441, // SUB_DHCP6
+ TOKEN_SUB_INTERFACES6 = 442, // SUB_INTERFACES6
+ TOKEN_SUB_SUBNET6 = 443, // SUB_SUBNET6
+ TOKEN_SUB_POOL6 = 444, // SUB_POOL6
+ TOKEN_SUB_PD_POOL = 445, // SUB_PD_POOL
+ TOKEN_SUB_RESERVATION = 446, // SUB_RESERVATION
+ TOKEN_SUB_OPTION_DEFS = 447, // SUB_OPTION_DEFS
+ TOKEN_SUB_OPTION_DEF = 448, // SUB_OPTION_DEF
+ TOKEN_SUB_OPTION_DATA = 449, // SUB_OPTION_DATA
+ TOKEN_SUB_HOOKS_LIBRARY = 450, // SUB_HOOKS_LIBRARY
+ TOKEN_SUB_DHCP_DDNS = 451, // SUB_DHCP_DDNS
+ TOKEN_SUB_LOGGING = 452, // SUB_LOGGING
+ TOKEN_SUB_CONFIG_CONTROL = 453, // SUB_CONFIG_CONTROL
+ TOKEN_STRING = 454, // "constant string"
+ TOKEN_INTEGER = 455, // "integer"
+ TOKEN_FLOAT = 456, // "floating point"
+ TOKEN_BOOLEAN = 457 // "boolean"
};
+ /// Backward compatibility alias (Bison 3.6).
+ typedef token_kind_type yytokentype;
};
- /// (External) token type, as returned by yylex.
- typedef token::yytokentype token_type;
+ /// Token kind, as returned by yylex.
+ typedef token::yytokentype token_kind_type;
+
+ /// Backward compatibility alias (Bison 3.6).
+ typedef token_kind_type token_type;
- /// Symbol type: an internal symbol number.
- typedef int symbol_number_type;
+ /// Symbol kinds.
+ struct symbol_kind
+ {
+ enum symbol_kind_type
+ {
+ YYNTOKENS = 203, ///< Number of tokens.
+ S_YYEMPTY = -2,
+ S_YYEOF = 0, // "end of file"
+ S_YYerror = 1, // error
+ S_YYUNDEF = 2, // "invalid token"
+ S_COMMA = 3, // ","
+ S_COLON = 4, // ":"
+ S_LSQUARE_BRACKET = 5, // "["
+ S_RSQUARE_BRACKET = 6, // "]"
+ S_LCURLY_BRACKET = 7, // "{"
+ S_RCURLY_BRACKET = 8, // "}"
+ S_NULL_TYPE = 9, // "null"
+ S_DHCP6 = 10, // "Dhcp6"
+ S_DATA_DIRECTORY = 11, // "data-directory"
+ S_CONFIG_CONTROL = 12, // "config-control"
+ S_CONFIG_DATABASES = 13, // "config-databases"
+ S_CONFIG_FETCH_WAIT_TIME = 14, // "config-fetch-wait-time"
+ S_INTERFACES_CONFIG = 15, // "interfaces-config"
+ S_INTERFACES = 16, // "interfaces"
+ S_RE_DETECT = 17, // "re-detect"
+ S_LEASE_DATABASE = 18, // "lease-database"
+ S_HOSTS_DATABASE = 19, // "hosts-database"
+ S_HOSTS_DATABASES = 20, // "hosts-databases"
+ S_TYPE = 21, // "type"
+ S_MEMFILE = 22, // "memfile"
+ S_MYSQL = 23, // "mysql"
+ S_POSTGRESQL = 24, // "postgresql"
+ S_CQL = 25, // "cql"
+ S_USER = 26, // "user"
+ S_PASSWORD = 27, // "password"
+ S_HOST = 28, // "host"
+ S_PORT = 29, // "port"
+ S_PERSIST = 30, // "persist"
+ S_LFC_INTERVAL = 31, // "lfc-interval"
+ S_READONLY = 32, // "readonly"
+ S_CONNECT_TIMEOUT = 33, // "connect-timeout"
+ S_CONTACT_POINTS = 34, // "contact-points"
+ S_MAX_RECONNECT_TRIES = 35, // "max-reconnect-tries"
+ S_RECONNECT_WAIT_TIME = 36, // "reconnect-wait-time"
+ S_KEYSPACE = 37, // "keyspace"
+ S_CONSISTENCY = 38, // "consistency"
+ S_SERIAL_CONSISTENCY = 39, // "serial-consistency"
+ S_REQUEST_TIMEOUT = 40, // "request-timeout"
+ S_TCP_KEEPALIVE = 41, // "tcp-keepalive"
+ S_TCP_NODELAY = 42, // "tcp-nodelay"
+ S_MAX_ROW_ERRORS = 43, // "max-row-errors"
+ S_PREFERRED_LIFETIME = 44, // "preferred-lifetime"
+ S_MIN_PREFERRED_LIFETIME = 45, // "min-preferred-lifetime"
+ S_MAX_PREFERRED_LIFETIME = 46, // "max-preferred-lifetime"
+ S_VALID_LIFETIME = 47, // "valid-lifetime"
+ S_MIN_VALID_LIFETIME = 48, // "min-valid-lifetime"
+ S_MAX_VALID_LIFETIME = 49, // "max-valid-lifetime"
+ S_RENEW_TIMER = 50, // "renew-timer"
+ S_REBIND_TIMER = 51, // "rebind-timer"
+ S_CALCULATE_TEE_TIMES = 52, // "calculate-tee-times"
+ S_T1_PERCENT = 53, // "t1-percent"
+ S_T2_PERCENT = 54, // "t2-percent"
+ S_DECLINE_PROBATION_PERIOD = 55, // "decline-probation-period"
+ S_SERVER_TAG = 56, // "server-tag"
+ S_STATISTIC_DEFAULT_SAMPLE_COUNT = 57, // "statistic-default-sample-count"
+ S_STATISTIC_DEFAULT_SAMPLE_AGE = 58, // "statistic-default-sample-age"
+ S_DDNS_SEND_UPDATES = 59, // "ddns-send-updates"
+ S_DDNS_OVERRIDE_NO_UPDATE = 60, // "ddns-override-no-update"
+ S_DDNS_OVERRIDE_CLIENT_UPDATE = 61, // "ddns-override-client-update"
+ S_DDNS_REPLACE_CLIENT_NAME = 62, // "ddns-replace-client-name"
+ S_DDNS_GENERATED_PREFIX = 63, // "ddns-generated-prefix"
+ S_DDNS_QUALIFYING_SUFFIX = 64, // "ddns-qualifying-suffix"
+ S_STORE_EXTENDED_INFO = 65, // "store-extended-info"
+ S_SUBNET6 = 66, // "subnet6"
+ S_OPTION_DEF = 67, // "option-def"
+ S_OPTION_DATA = 68, // "option-data"
+ S_NAME = 69, // "name"
+ S_DATA = 70, // "data"
+ S_CODE = 71, // "code"
+ S_SPACE = 72, // "space"
+ S_CSV_FORMAT = 73, // "csv-format"
+ S_ALWAYS_SEND = 74, // "always-send"
+ S_RECORD_TYPES = 75, // "record-types"
+ S_ENCAPSULATE = 76, // "encapsulate"
+ S_ARRAY = 77, // "array"
+ S_POOLS = 78, // "pools"
+ S_POOL = 79, // "pool"
+ S_PD_POOLS = 80, // "pd-pools"
+ S_PREFIX = 81, // "prefix"
+ S_PREFIX_LEN = 82, // "prefix-len"
+ S_EXCLUDED_PREFIX = 83, // "excluded-prefix"
+ S_EXCLUDED_PREFIX_LEN = 84, // "excluded-prefix-len"
+ S_DELEGATED_LEN = 85, // "delegated-len"
+ S_USER_CONTEXT = 86, // "user-context"
+ S_COMMENT = 87, // "comment"
+ S_SUBNET = 88, // "subnet"
+ S_INTERFACE = 89, // "interface"
+ S_INTERFACE_ID = 90, // "interface-id"
+ S_ID = 91, // "id"
+ S_RAPID_COMMIT = 92, // "rapid-commit"
+ S_RESERVATION_MODE = 93, // "reservation-mode"
+ S_DISABLED = 94, // "disabled"
+ S_OUT_OF_POOL = 95, // "out-of-pool"
+ S_GLOBAL = 96, // "global"
+ S_ALL = 97, // "all"
+ S_SHARED_NETWORKS = 98, // "shared-networks"
+ S_MAC_SOURCES = 99, // "mac-sources"
+ S_RELAY_SUPPLIED_OPTIONS = 100, // "relay-supplied-options"
+ S_HOST_RESERVATION_IDENTIFIERS = 101, // "host-reservation-identifiers"
+ S_SANITY_CHECKS = 102, // "sanity-checks"
+ S_LEASE_CHECKS = 103, // "lease-checks"
+ S_CLIENT_CLASSES = 104, // "client-classes"
+ S_REQUIRE_CLIENT_CLASSES = 105, // "require-client-classes"
+ S_TEST = 106, // "test"
+ S_ONLY_IF_REQUIRED = 107, // "only-if-required"
+ S_CLIENT_CLASS = 108, // "client-class"
+ S_RESERVATIONS = 109, // "reservations"
+ S_IP_ADDRESSES = 110, // "ip-addresses"
+ S_PREFIXES = 111, // "prefixes"
+ S_DUID = 112, // "duid"
+ S_HW_ADDRESS = 113, // "hw-address"
+ S_HOSTNAME = 114, // "hostname"
+ S_FLEX_ID = 115, // "flex-id"
+ S_RELAY = 116, // "relay"
+ S_IP_ADDRESS = 117, // "ip-address"
+ S_HOOKS_LIBRARIES = 118, // "hooks-libraries"
+ S_LIBRARY = 119, // "library"
+ S_PARAMETERS = 120, // "parameters"
+ S_EXPIRED_LEASES_PROCESSING = 121, // "expired-leases-processing"
+ S_RECLAIM_TIMER_WAIT_TIME = 122, // "reclaim-timer-wait-time"
+ S_FLUSH_RECLAIMED_TIMER_WAIT_TIME = 123, // "flush-reclaimed-timer-wait-time"
+ S_HOLD_RECLAIMED_TIME = 124, // "hold-reclaimed-time"
+ S_MAX_RECLAIM_LEASES = 125, // "max-reclaim-leases"
+ S_MAX_RECLAIM_TIME = 126, // "max-reclaim-time"
+ S_UNWARNED_RECLAIM_CYCLES = 127, // "unwarned-reclaim-cycles"
+ S_SERVER_ID = 128, // "server-id"
+ S_LLT = 129, // "LLT"
+ S_EN = 130, // "EN"
+ S_LL = 131, // "LL"
+ S_IDENTIFIER = 132, // "identifier"
+ S_HTYPE = 133, // "htype"
+ S_TIME = 134, // "time"
+ S_ENTERPRISE_ID = 135, // "enterprise-id"
+ S_DHCP4O6_PORT = 136, // "dhcp4o6-port"
+ S_DHCP_MULTI_THREADING = 137, // "multi-threading"
+ S_ENABLE_MULTI_THREADING = 138, // "enable-multi-threading"
+ S_THREAD_POOL_SIZE = 139, // "thread-pool-size"
+ S_PACKET_QUEUE_SIZE = 140, // "packet-queue-size"
+ S_CONTROL_SOCKET = 141, // "control-socket"
+ S_SOCKET_TYPE = 142, // "socket-type"
+ S_SOCKET_NAME = 143, // "socket-name"
+ S_DHCP_QUEUE_CONTROL = 144, // "dhcp-queue-control"
+ S_ENABLE_QUEUE = 145, // "enable-queue"
+ S_QUEUE_TYPE = 146, // "queue-type"
+ S_CAPACITY = 147, // "capacity"
+ S_DHCP_DDNS = 148, // "dhcp-ddns"
+ S_ENABLE_UPDATES = 149, // "enable-updates"
+ S_QUALIFYING_SUFFIX = 150, // "qualifying-suffix"
+ S_SERVER_IP = 151, // "server-ip"
+ S_SERVER_PORT = 152, // "server-port"
+ S_SENDER_IP = 153, // "sender-ip"
+ S_SENDER_PORT = 154, // "sender-port"
+ S_MAX_QUEUE_SIZE = 155, // "max-queue-size"
+ S_NCR_PROTOCOL = 156, // "ncr-protocol"
+ S_NCR_FORMAT = 157, // "ncr-format"
+ S_OVERRIDE_NO_UPDATE = 158, // "override-no-update"
+ S_OVERRIDE_CLIENT_UPDATE = 159, // "override-client-update"
+ S_REPLACE_CLIENT_NAME = 160, // "replace-client-name"
+ S_GENERATED_PREFIX = 161, // "generated-prefix"
+ S_UDP = 162, // "UDP"
+ S_TCP = 163, // "TCP"
+ S_JSON = 164, // "JSON"
+ S_WHEN_PRESENT = 165, // "when-present"
+ S_NEVER = 166, // "never"
+ S_ALWAYS = 167, // "always"
+ S_WHEN_NOT_PRESENT = 168, // "when-not-present"
+ S_HOSTNAME_CHAR_SET = 169, // "hostname-char-set"
+ S_HOSTNAME_CHAR_REPLACEMENT = 170, // "hostname-char-replacement"
+ S_LOGGING = 171, // "Logging"
+ S_LOGGERS = 172, // "loggers"
+ S_OUTPUT_OPTIONS = 173, // "output_options"
+ S_OUTPUT = 174, // "output"
+ S_DEBUGLEVEL = 175, // "debuglevel"
+ S_SEVERITY = 176, // "severity"
+ S_FLUSH = 177, // "flush"
+ S_MAXSIZE = 178, // "maxsize"
+ S_MAXVER = 179, // "maxver"
+ S_PATTERN = 180, // "pattern"
+ S_DHCP4 = 181, // "Dhcp4"
+ S_DHCPDDNS = 182, // "DhcpDdns"
+ S_CONTROL_AGENT = 183, // "Control-agent"
+ S_TOPLEVEL_JSON = 184, // TOPLEVEL_JSON
+ S_TOPLEVEL_DHCP6 = 185, // TOPLEVEL_DHCP6
+ S_SUB_DHCP6 = 186, // SUB_DHCP6
+ S_SUB_INTERFACES6 = 187, // SUB_INTERFACES6
+ S_SUB_SUBNET6 = 188, // SUB_SUBNET6
+ S_SUB_POOL6 = 189, // SUB_POOL6
+ S_SUB_PD_POOL = 190, // SUB_PD_POOL
+ S_SUB_RESERVATION = 191, // SUB_RESERVATION
+ S_SUB_OPTION_DEFS = 192, // SUB_OPTION_DEFS
+ S_SUB_OPTION_DEF = 193, // SUB_OPTION_DEF
+ S_SUB_OPTION_DATA = 194, // SUB_OPTION_DATA
+ S_SUB_HOOKS_LIBRARY = 195, // SUB_HOOKS_LIBRARY
+ S_SUB_DHCP_DDNS = 196, // SUB_DHCP_DDNS
+ S_SUB_LOGGING = 197, // SUB_LOGGING
+ S_SUB_CONFIG_CONTROL = 198, // SUB_CONFIG_CONTROL
+ S_STRING = 199, // "constant string"
+ S_INTEGER = 200, // "integer"
+ S_FLOAT = 201, // "floating point"
+ S_BOOLEAN = 202, // "boolean"
+ S_YYACCEPT = 203, // $accept
+ S_start = 204, // start
+ S_205_1 = 205, // $@1
+ S_206_2 = 206, // $@2
+ S_207_3 = 207, // $@3
+ S_208_4 = 208, // $@4
+ S_209_5 = 209, // $@5
+ S_210_6 = 210, // $@6
+ S_211_7 = 211, // $@7
+ S_212_8 = 212, // $@8
+ S_213_9 = 213, // $@9
+ S_214_10 = 214, // $@10
+ S_215_11 = 215, // $@11
+ S_216_12 = 216, // $@12
+ S_217_13 = 217, // $@13
+ S_218_14 = 218, // $@14
+ S_219_15 = 219, // $@15
+ S_value = 220, // value
+ S_sub_json = 221, // sub_json
+ S_map2 = 222, // map2
+ S_223_16 = 223, // $@16
+ S_map_value = 224, // map_value
+ S_map_content = 225, // map_content
+ S_not_empty_map = 226, // not_empty_map
+ S_list_generic = 227, // list_generic
+ S_228_17 = 228, // $@17
+ S_list_content = 229, // list_content
+ S_not_empty_list = 230, // not_empty_list
+ S_list_strings = 231, // list_strings
+ S_232_18 = 232, // $@18
+ S_list_strings_content = 233, // list_strings_content
+ S_not_empty_list_strings = 234, // not_empty_list_strings
+ S_unknown_map_entry = 235, // unknown_map_entry
+ S_syntax_map = 236, // syntax_map
+ S_237_19 = 237, // $@19
+ S_global_objects = 238, // global_objects
+ S_global_object = 239, // global_object
+ S_dhcp6_object = 240, // dhcp6_object
+ S_241_20 = 241, // $@20
+ S_sub_dhcp6 = 242, // sub_dhcp6
+ S_243_21 = 243, // $@21
+ S_global_params = 244, // global_params
+ S_global_param = 245, // global_param
+ S_data_directory = 246, // data_directory
+ S_247_22 = 247, // $@22
+ S_preferred_lifetime = 248, // preferred_lifetime
+ S_min_preferred_lifetime = 249, // min_preferred_lifetime
+ S_max_preferred_lifetime = 250, // max_preferred_lifetime
+ S_valid_lifetime = 251, // valid_lifetime
+ S_min_valid_lifetime = 252, // min_valid_lifetime
+ S_max_valid_lifetime = 253, // max_valid_lifetime
+ S_renew_timer = 254, // renew_timer
+ S_rebind_timer = 255, // rebind_timer
+ S_calculate_tee_times = 256, // calculate_tee_times
+ S_t1_percent = 257, // t1_percent
+ S_t2_percent = 258, // t2_percent
+ S_decline_probation_period = 259, // decline_probation_period
+ S_ddns_send_updates = 260, // ddns_send_updates
+ S_ddns_override_no_update = 261, // ddns_override_no_update
+ S_ddns_override_client_update = 262, // ddns_override_client_update
+ S_ddns_replace_client_name = 263, // ddns_replace_client_name
+ S_264_23 = 264, // $@23
+ S_ddns_replace_client_name_value = 265, // ddns_replace_client_name_value
+ S_ddns_generated_prefix = 266, // ddns_generated_prefix
+ S_267_24 = 267, // $@24
+ S_ddns_qualifying_suffix = 268, // ddns_qualifying_suffix
+ S_269_25 = 269, // $@25
+ S_hostname_char_set = 270, // hostname_char_set
+ S_271_26 = 271, // $@26
+ S_hostname_char_replacement = 272, // hostname_char_replacement
+ S_273_27 = 273, // $@27
+ S_store_extended_info = 274, // store_extended_info
+ S_statistic_default_sample_count = 275, // statistic_default_sample_count
+ S_statistic_default_sample_age = 276, // statistic_default_sample_age
+ S_server_tag = 277, // server_tag
+ S_278_28 = 278, // $@28
+ S_interfaces_config = 279, // interfaces_config
+ S_280_29 = 280, // $@29
+ S_sub_interfaces6 = 281, // sub_interfaces6
+ S_282_30 = 282, // $@30
+ S_interfaces_config_params = 283, // interfaces_config_params
+ S_interfaces_config_param = 284, // interfaces_config_param
+ S_interfaces_list = 285, // interfaces_list
+ S_286_31 = 286, // $@31
+ S_re_detect = 287, // re_detect
+ S_lease_database = 288, // lease_database
+ S_289_32 = 289, // $@32
+ S_hosts_database = 290, // hosts_database
+ S_291_33 = 291, // $@33
+ S_hosts_databases = 292, // hosts_databases
+ S_293_34 = 293, // $@34
+ S_database_list = 294, // database_list
+ S_not_empty_database_list = 295, // not_empty_database_list
+ S_database = 296, // database
+ S_297_35 = 297, // $@35
+ S_database_map_params = 298, // database_map_params
+ S_database_map_param = 299, // database_map_param
+ S_database_type = 300, // database_type
+ S_301_36 = 301, // $@36
+ S_db_type = 302, // db_type
+ S_user = 303, // user
+ S_304_37 = 304, // $@37
+ S_password = 305, // password
+ S_306_38 = 306, // $@38
+ S_host = 307, // host
+ S_308_39 = 308, // $@39
+ S_port = 309, // port
+ S_name = 310, // name
+ S_311_40 = 311, // $@40
+ S_persist = 312, // persist
+ S_lfc_interval = 313, // lfc_interval
+ S_readonly = 314, // readonly
+ S_connect_timeout = 315, // connect_timeout
+ S_reconnect_wait_time = 316, // reconnect_wait_time
+ S_max_row_errors = 317, // max_row_errors
+ S_request_timeout = 318, // request_timeout
+ S_tcp_keepalive = 319, // tcp_keepalive
+ S_tcp_nodelay = 320, // tcp_nodelay
+ S_contact_points = 321, // contact_points
+ S_322_41 = 322, // $@41
+ S_max_reconnect_tries = 323, // max_reconnect_tries
+ S_keyspace = 324, // keyspace
+ S_325_42 = 325, // $@42
+ S_consistency = 326, // consistency
+ S_327_43 = 327, // $@43
+ S_serial_consistency = 328, // serial_consistency
+ S_329_44 = 329, // $@44
+ S_sanity_checks = 330, // sanity_checks
+ S_331_45 = 331, // $@45
+ S_sanity_checks_params = 332, // sanity_checks_params
+ S_sanity_checks_param = 333, // sanity_checks_param
+ S_lease_checks = 334, // lease_checks
+ S_335_46 = 335, // $@46
+ S_mac_sources = 336, // mac_sources
+ S_337_47 = 337, // $@47
+ S_mac_sources_list = 338, // mac_sources_list
+ S_mac_sources_value = 339, // mac_sources_value
+ S_duid_id = 340, // duid_id
+ S_string_id = 341, // string_id
+ S_host_reservation_identifiers = 342, // host_reservation_identifiers
+ S_343_48 = 343, // $@48
+ S_host_reservation_identifiers_list = 344, // host_reservation_identifiers_list
+ S_host_reservation_identifier = 345, // host_reservation_identifier
+ S_hw_address_id = 346, // hw_address_id
+ S_flex_id = 347, // flex_id
+ S_relay_supplied_options = 348, // relay_supplied_options
+ S_349_49 = 349, // $@49
+ S_dhcp_multi_threading = 350, // dhcp_multi_threading
+ S_351_50 = 351, // $@50
+ S_multi_threading_params = 352, // multi_threading_params
+ S_multi_threading_param = 353, // multi_threading_param
+ S_enable_multi_threading = 354, // enable_multi_threading
+ S_thread_pool_size = 355, // thread_pool_size
+ S_packet_queue_size = 356, // packet_queue_size
+ S_hooks_libraries = 357, // hooks_libraries
+ S_358_51 = 358, // $@51
+ S_hooks_libraries_list = 359, // hooks_libraries_list
+ S_not_empty_hooks_libraries_list = 360, // not_empty_hooks_libraries_list
+ S_hooks_library = 361, // hooks_library
+ S_362_52 = 362, // $@52
+ S_sub_hooks_library = 363, // sub_hooks_library
+ S_364_53 = 364, // $@53
+ S_hooks_params = 365, // hooks_params
+ S_hooks_param = 366, // hooks_param
+ S_library = 367, // library
+ S_368_54 = 368, // $@54
+ S_parameters = 369, // parameters
+ S_370_55 = 370, // $@55
+ S_expired_leases_processing = 371, // expired_leases_processing
+ S_372_56 = 372, // $@56
+ S_expired_leases_params = 373, // expired_leases_params
+ S_expired_leases_param = 374, // expired_leases_param
+ S_reclaim_timer_wait_time = 375, // reclaim_timer_wait_time
+ S_flush_reclaimed_timer_wait_time = 376, // flush_reclaimed_timer_wait_time
+ S_hold_reclaimed_time = 377, // hold_reclaimed_time
+ S_max_reclaim_leases = 378, // max_reclaim_leases
+ S_max_reclaim_time = 379, // max_reclaim_time
+ S_unwarned_reclaim_cycles = 380, // unwarned_reclaim_cycles
+ S_subnet6_list = 381, // subnet6_list
+ S_382_57 = 382, // $@57
+ S_subnet6_list_content = 383, // subnet6_list_content
+ S_not_empty_subnet6_list = 384, // not_empty_subnet6_list
+ S_subnet6 = 385, // subnet6
+ S_386_58 = 386, // $@58
+ S_sub_subnet6 = 387, // sub_subnet6
+ S_388_59 = 388, // $@59
+ S_subnet6_params = 389, // subnet6_params
+ S_subnet6_param = 390, // subnet6_param
+ S_subnet = 391, // subnet
+ S_392_60 = 392, // $@60
+ S_interface = 393, // interface
+ S_394_61 = 394, // $@61
+ S_interface_id = 395, // interface_id
+ S_396_62 = 396, // $@62
+ S_client_class = 397, // client_class
+ S_398_63 = 398, // $@63
+ S_require_client_classes = 399, // require_client_classes
+ S_400_64 = 400, // $@64
+ S_reservation_mode = 401, // reservation_mode
+ S_402_65 = 402, // $@65
+ S_hr_mode = 403, // hr_mode
+ S_id = 404, // id
+ S_rapid_commit = 405, // rapid_commit
+ S_shared_networks = 406, // shared_networks
+ S_407_66 = 407, // $@66
+ S_shared_networks_content = 408, // shared_networks_content
+ S_shared_networks_list = 409, // shared_networks_list
+ S_shared_network = 410, // shared_network
+ S_411_67 = 411, // $@67
+ S_shared_network_params = 412, // shared_network_params
+ S_shared_network_param = 413, // shared_network_param
+ S_option_def_list = 414, // option_def_list
+ S_415_68 = 415, // $@68
+ S_sub_option_def_list = 416, // sub_option_def_list
+ S_417_69 = 417, // $@69
+ S_option_def_list_content = 418, // option_def_list_content
+ S_not_empty_option_def_list = 419, // not_empty_option_def_list
+ S_option_def_entry = 420, // option_def_entry
+ S_421_70 = 421, // $@70
+ S_sub_option_def = 422, // sub_option_def
+ S_423_71 = 423, // $@71
+ S_option_def_params = 424, // option_def_params
+ S_not_empty_option_def_params = 425, // not_empty_option_def_params
+ S_option_def_param = 426, // option_def_param
+ S_option_def_name = 427, // option_def_name
+ S_code = 428, // code
+ S_option_def_code = 429, // option_def_code
+ S_option_def_type = 430, // option_def_type
+ S_431_72 = 431, // $@72
+ S_option_def_record_types = 432, // option_def_record_types
+ S_433_73 = 433, // $@73
+ S_space = 434, // space
+ S_435_74 = 435, // $@74
+ S_option_def_space = 436, // option_def_space
+ S_option_def_encapsulate = 437, // option_def_encapsulate
+ S_438_75 = 438, // $@75
+ S_option_def_array = 439, // option_def_array
+ S_option_data_list = 440, // option_data_list
+ S_441_76 = 441, // $@76
+ S_option_data_list_content = 442, // option_data_list_content
+ S_not_empty_option_data_list = 443, // not_empty_option_data_list
+ S_option_data_entry = 444, // option_data_entry
+ S_445_77 = 445, // $@77
+ S_sub_option_data = 446, // sub_option_data
+ S_447_78 = 447, // $@78
+ S_option_data_params = 448, // option_data_params
+ S_not_empty_option_data_params = 449, // not_empty_option_data_params
+ S_option_data_param = 450, // option_data_param
+ S_option_data_name = 451, // option_data_name
+ S_option_data_data = 452, // option_data_data
+ S_453_79 = 453, // $@79
+ S_option_data_code = 454, // option_data_code
+ S_option_data_space = 455, // option_data_space
+ S_option_data_csv_format = 456, // option_data_csv_format
+ S_option_data_always_send = 457, // option_data_always_send
+ S_pools_list = 458, // pools_list
+ S_459_80 = 459, // $@80
+ S_pools_list_content = 460, // pools_list_content
+ S_not_empty_pools_list = 461, // not_empty_pools_list
+ S_pool_list_entry = 462, // pool_list_entry
+ S_463_81 = 463, // $@81
+ S_sub_pool6 = 464, // sub_pool6
+ S_465_82 = 465, // $@82
+ S_pool_params = 466, // pool_params
+ S_pool_param = 467, // pool_param
+ S_pool_entry = 468, // pool_entry
+ S_469_83 = 469, // $@83
+ S_user_context = 470, // user_context
+ S_471_84 = 471, // $@84
+ S_comment = 472, // comment
+ S_473_85 = 473, // $@85
+ S_pd_pools_list = 474, // pd_pools_list
+ S_475_86 = 475, // $@86
+ S_pd_pools_list_content = 476, // pd_pools_list_content
+ S_not_empty_pd_pools_list = 477, // not_empty_pd_pools_list
+ S_pd_pool_entry = 478, // pd_pool_entry
+ S_479_87 = 479, // $@87
+ S_sub_pd_pool = 480, // sub_pd_pool
+ S_481_88 = 481, // $@88
+ S_pd_pool_params = 482, // pd_pool_params
+ S_pd_pool_param = 483, // pd_pool_param
+ S_pd_prefix = 484, // pd_prefix
+ S_485_89 = 485, // $@89
+ S_pd_prefix_len = 486, // pd_prefix_len
+ S_excluded_prefix = 487, // excluded_prefix
+ S_488_90 = 488, // $@90
+ S_excluded_prefix_len = 489, // excluded_prefix_len
+ S_pd_delegated_len = 490, // pd_delegated_len
+ S_reservations = 491, // reservations
+ S_492_91 = 492, // $@91
+ S_reservations_list = 493, // reservations_list
+ S_not_empty_reservations_list = 494, // not_empty_reservations_list
+ S_reservation = 495, // reservation
+ S_496_92 = 496, // $@92
+ S_sub_reservation = 497, // sub_reservation
+ S_498_93 = 498, // $@93
+ S_reservation_params = 499, // reservation_params
+ S_not_empty_reservation_params = 500, // not_empty_reservation_params
+ S_reservation_param = 501, // reservation_param
+ S_ip_addresses = 502, // ip_addresses
+ S_503_94 = 503, // $@94
+ S_prefixes = 504, // prefixes
+ S_505_95 = 505, // $@95
+ S_duid = 506, // duid
+ S_507_96 = 507, // $@96
+ S_hw_address = 508, // hw_address
+ S_509_97 = 509, // $@97
+ S_hostname = 510, // hostname
+ S_511_98 = 511, // $@98
+ S_flex_id_value = 512, // flex_id_value
+ S_513_99 = 513, // $@99
+ S_reservation_client_classes = 514, // reservation_client_classes
+ S_515_100 = 515, // $@100
+ S_relay = 516, // relay
+ S_517_101 = 517, // $@101
+ S_relay_map = 518, // relay_map
+ S_ip_address = 519, // ip_address
+ S_520_102 = 520, // $@102
+ S_client_classes = 521, // client_classes
+ S_522_103 = 522, // $@103
+ S_client_classes_list = 523, // client_classes_list
+ S_client_class_entry = 524, // client_class_entry
+ S_525_104 = 525, // $@104
+ S_client_class_params = 526, // client_class_params
+ S_not_empty_client_class_params = 527, // not_empty_client_class_params
+ S_client_class_param = 528, // client_class_param
+ S_client_class_name = 529, // client_class_name
+ S_client_class_test = 530, // client_class_test
+ S_531_105 = 531, // $@105
+ S_only_if_required = 532, // only_if_required
+ S_server_id = 533, // server_id
+ S_534_106 = 534, // $@106
+ S_server_id_params = 535, // server_id_params
+ S_server_id_param = 536, // server_id_param
+ S_server_id_type = 537, // server_id_type
+ S_538_107 = 538, // $@107
+ S_duid_type = 539, // duid_type
+ S_htype = 540, // htype
+ S_identifier = 541, // identifier
+ S_542_108 = 542, // $@108
+ S_time = 543, // time
+ S_enterprise_id = 544, // enterprise_id
+ S_dhcp4o6_port = 545, // dhcp4o6_port
+ S_control_socket = 546, // control_socket
+ S_547_109 = 547, // $@109
+ S_control_socket_params = 548, // control_socket_params
+ S_control_socket_param = 549, // control_socket_param
+ S_socket_type = 550, // socket_type
+ S_551_110 = 551, // $@110
+ S_socket_name = 552, // socket_name
+ S_553_111 = 553, // $@111
+ S_dhcp_queue_control = 554, // dhcp_queue_control
+ S_555_112 = 555, // $@112
+ S_queue_control_params = 556, // queue_control_params
+ S_queue_control_param = 557, // queue_control_param
+ S_enable_queue = 558, // enable_queue
+ S_queue_type = 559, // queue_type
+ S_560_113 = 560, // $@113
+ S_capacity = 561, // capacity
+ S_arbitrary_map_entry = 562, // arbitrary_map_entry
+ S_563_114 = 563, // $@114
+ S_dhcp_ddns = 564, // dhcp_ddns
+ S_565_115 = 565, // $@115
+ S_sub_dhcp_ddns = 566, // sub_dhcp_ddns
+ S_567_116 = 567, // $@116
+ S_dhcp_ddns_params = 568, // dhcp_ddns_params
+ S_dhcp_ddns_param = 569, // dhcp_ddns_param
+ S_enable_updates = 570, // enable_updates
+ S_qualifying_suffix = 571, // qualifying_suffix
+ S_572_117 = 572, // $@117
+ S_server_ip = 573, // server_ip
+ S_574_118 = 574, // $@118
+ S_server_port = 575, // server_port
+ S_sender_ip = 576, // sender_ip
+ S_577_119 = 577, // $@119
+ S_sender_port = 578, // sender_port
+ S_max_queue_size = 579, // max_queue_size
+ S_ncr_protocol = 580, // ncr_protocol
+ S_581_120 = 581, // $@120
+ S_ncr_protocol_value = 582, // ncr_protocol_value
+ S_ncr_format = 583, // ncr_format
+ S_584_121 = 584, // $@121
+ S_dep_override_no_update = 585, // dep_override_no_update
+ S_dep_override_client_update = 586, // dep_override_client_update
+ S_dep_replace_client_name = 587, // dep_replace_client_name
+ S_588_122 = 588, // $@122
+ S_dep_generated_prefix = 589, // dep_generated_prefix
+ S_590_123 = 590, // $@123
+ S_dep_hostname_char_set = 591, // dep_hostname_char_set
+ S_592_124 = 592, // $@124
+ S_dep_hostname_char_replacement = 593, // dep_hostname_char_replacement
+ S_594_125 = 594, // $@125
+ S_dhcp4_json_object = 595, // dhcp4_json_object
+ S_596_126 = 596, // $@126
+ S_dhcpddns_json_object = 597, // dhcpddns_json_object
+ S_598_127 = 598, // $@127
+ S_control_agent_json_object = 599, // control_agent_json_object
+ S_600_128 = 600, // $@128
+ S_config_control = 601, // config_control
+ S_602_129 = 602, // $@129
+ S_sub_config_control = 603, // sub_config_control
+ S_604_130 = 604, // $@130
+ S_config_control_params = 605, // config_control_params
+ S_config_control_param = 606, // config_control_param
+ S_config_databases = 607, // config_databases
+ S_608_131 = 608, // $@131
+ S_config_fetch_wait_time = 609, // config_fetch_wait_time
+ S_logging_object = 610, // logging_object
+ S_611_132 = 611, // $@132
+ S_sub_logging = 612, // sub_logging
+ S_613_133 = 613, // $@133
+ S_logging_params = 614, // logging_params
+ S_logging_param = 615, // logging_param
+ S_loggers = 616, // loggers
+ S_617_134 = 617, // $@134
+ S_loggers_entries = 618, // loggers_entries
+ S_logger_entry = 619, // logger_entry
+ S_620_135 = 620, // $@135
+ S_logger_params = 621, // logger_params
+ S_logger_param = 622, // logger_param
+ S_debuglevel = 623, // debuglevel
+ S_severity = 624, // severity
+ S_625_136 = 625, // $@136
+ S_output_options_list = 626, // output_options_list
+ S_627_137 = 627, // $@137
+ S_output_options_list_content = 628, // output_options_list_content
+ S_output_entry = 629, // output_entry
+ S_630_138 = 630, // $@138
+ S_output_params_list = 631, // output_params_list
+ S_output_params = 632, // output_params
+ S_output = 633, // output
+ S_634_139 = 634, // $@139
+ S_flush = 635, // flush
+ S_maxsize = 636, // maxsize
+ S_maxver = 637, // maxver
+ S_pattern = 638, // pattern
+ S_639_140 = 639 // $@140
+ };
+ };
- /// The symbol type number to denote an empty symbol.
- enum { empty_symbol = -2 };
+ /// (Internal) symbol kind.
+ typedef symbol_kind::symbol_kind_type symbol_kind_type;
- /// Internal symbol number for tokens (subsumed by symbol_number_type).
- typedef unsigned char token_number_type;
+ /// The number of tokens.
+ static const symbol_kind_type YYNTOKENS = symbol_kind::YYNTOKENS;
/// A complete symbol.
///
- /// Expects its Base type to provide access to the symbol type
- /// via type_get ().
+ /// Expects its Base type to provide access to the symbol kind
+ /// via kind ().
///
/// Provide access to semantic value and location.
template <typename Base>
#if 201103L <= YY_CPLUSPLUS
/// Move constructor.
- basic_symbol (basic_symbol&& that);
+ basic_symbol (basic_symbol&& that)
+ : Base (std::move (that))
+ , value ()
+ , location (std::move (that.location))
+ {
+ switch (this->kind ())
+ {
+ case 220: // value
+ case 224: // map_value
+ case 265: // ddns_replace_client_name_value
+ case 302: // db_type
+ case 403: // hr_mode
+ case 539: // duid_type
+ case 582: // ncr_protocol_value
+ value.move< ElementPtr > (std::move (that.value));
+ break;
+
+ case 202: // "boolean"
+ value.move< bool > (std::move (that.value));
+ break;
+
+ case 201: // "floating point"
+ value.move< double > (std::move (that.value));
+ break;
+
+ case 200: // "integer"
+ value.move< int64_t > (std::move (that.value));
+ break;
+
+ case 199: // "constant string"
+ value.move< std::string > (std::move (that.value));
+ break;
+
+ default:
+ break;
+ }
+
+ }
#endif
/// Copy constructor.
void clear ()
{
// User destructor.
- symbol_number_type yytype = this->type_get ();
+ symbol_kind_type yykind = this->kind ();
basic_symbol<Base>& yysym = *this;
(void) yysym;
- switch (yytype)
+ switch (yykind)
{
default:
break;
}
- // Type destructor.
-switch (yytype)
+ // Value type destructor.
+switch (yykind)
{
case 220: // value
case 224: // map_value
Base::clear ();
}
+ /// The user-facing name of this symbol.
+ std::string name () const YY_NOEXCEPT
+ {
+ return Dhcp6Parser::symbol_name (this->kind ());
+ }
+
+ /// Backward compatibility (Bison 3.6).
+ symbol_kind_type type_get () const YY_NOEXCEPT;
+
/// Whether empty.
bool empty () const YY_NOEXCEPT;
};
/// Type access provider for token (enum) based symbols.
- struct by_type
+ struct by_kind
{
/// Default constructor.
- by_type ();
+ by_kind ();
#if 201103L <= YY_CPLUSPLUS
/// Move constructor.
- by_type (by_type&& that);
+ by_kind (by_kind&& that);
#endif
/// Copy constructor.
- by_type (const by_type& that);
+ by_kind (const by_kind& that);
- /// The symbol type as needed by the constructor.
- typedef token_type kind_type;
+ /// The symbol kind as needed by the constructor.
+ typedef token_kind_type kind_type;
/// Constructor from (external) token numbers.
- by_type (kind_type t);
+ by_kind (kind_type t);
/// Record that this symbol is empty.
void clear ();
- /// Steal the symbol type from \a that.
- void move (by_type& that);
+ /// Steal the symbol kind from \a that.
+ void move (by_kind& that);
/// The (internal) type number (corresponding to \a type).
/// \a empty when empty.
- symbol_number_type type_get () const YY_NOEXCEPT;
+ symbol_kind_type kind () const YY_NOEXCEPT;
+
+ /// Backward compatibility (Bison 3.6).
+ symbol_kind_type type_get () const YY_NOEXCEPT;
- /// The symbol type.
- /// \a empty_symbol when empty.
- /// An int, not token_number_type, to be able to store empty_symbol.
- int type;
+ /// The symbol kind.
+ /// \a S_YYEMPTY when empty.
+ symbol_kind_type kind_;
};
+ /// Backward compatibility for a private implementation detail (Bison 3.6).
+ typedef by_kind by_type;
+
/// "External" symbols: returned by the scanner.
- struct symbol_type : basic_symbol<by_type>
+ struct symbol_type : basic_symbol<by_kind>
{
/// Superclass.
- typedef basic_symbol<by_type> super_type;
+ typedef basic_symbol<by_kind> super_type;
/// Empty symbol.
symbol_type () {}
symbol_type (int tok, location_type l)
: super_type(token_type (tok), std::move (l))
{
- YY_ASSERT (tok == token::TOKEN_END || tok == token::TOKEN_COMMA || tok == token::TOKEN_COLON || tok == token::TOKEN_LSQUARE_BRACKET || tok == token::TOKEN_RSQUARE_BRACKET || tok == token::TOKEN_LCURLY_BRACKET || tok == token::TOKEN_RCURLY_BRACKET || tok == token::TOKEN_NULL_TYPE || tok == token::TOKEN_DHCP6 || tok == token::TOKEN_DATA_DIRECTORY || tok == token::TOKEN_CONFIG_CONTROL || tok == token::TOKEN_CONFIG_DATABASES || tok == token::TOKEN_CONFIG_FETCH_WAIT_TIME || tok == token::TOKEN_INTERFACES_CONFIG || tok == token::TOKEN_INTERFACES || tok == token::TOKEN_RE_DETECT || tok == token::TOKEN_LEASE_DATABASE || tok == token::TOKEN_HOSTS_DATABASE || tok == token::TOKEN_HOSTS_DATABASES || tok == token::TOKEN_TYPE || tok == token::TOKEN_MEMFILE || tok == token::TOKEN_MYSQL || tok == token::TOKEN_POSTGRESQL || tok == token::TOKEN_CQL || tok == token::TOKEN_USER || tok == token::TOKEN_PASSWORD || tok == token::TOKEN_HOST || tok == token::TOKEN_PORT || tok == token::TOKEN_PERSIST || tok == token::TOKEN_LFC_INTERVAL || tok == token::TOKEN_READONLY || tok == token::TOKEN_CONNECT_TIMEOUT || tok == token::TOKEN_CONTACT_POINTS || tok == token::TOKEN_MAX_RECONNECT_TRIES || tok == token::TOKEN_RECONNECT_WAIT_TIME || tok == token::TOKEN_KEYSPACE || tok == token::TOKEN_CONSISTENCY || tok == token::TOKEN_SERIAL_CONSISTENCY || tok == token::TOKEN_REQUEST_TIMEOUT || tok == token::TOKEN_TCP_KEEPALIVE || tok == token::TOKEN_TCP_NODELAY || tok == token::TOKEN_MAX_ROW_ERRORS || tok == token::TOKEN_PREFERRED_LIFETIME || tok == token::TOKEN_MIN_PREFERRED_LIFETIME || tok == token::TOKEN_MAX_PREFERRED_LIFETIME || tok == token::TOKEN_VALID_LIFETIME || tok == token::TOKEN_MIN_VALID_LIFETIME || tok == token::TOKEN_MAX_VALID_LIFETIME || tok == token::TOKEN_RENEW_TIMER || tok == token::TOKEN_REBIND_TIMER || tok == token::TOKEN_CALCULATE_TEE_TIMES || tok == token::TOKEN_T1_PERCENT || tok == token::TOKEN_T2_PERCENT || tok == token::TOKEN_DECLINE_PROBATION_PERIOD || tok == token::TOKEN_SERVER_TAG || tok == token::TOKEN_STATISTIC_DEFAULT_SAMPLE_COUNT || tok == token::TOKEN_STATISTIC_DEFAULT_SAMPLE_AGE || tok == token::TOKEN_DDNS_SEND_UPDATES || tok == token::TOKEN_DDNS_OVERRIDE_NO_UPDATE || tok == token::TOKEN_DDNS_OVERRIDE_CLIENT_UPDATE || tok == token::TOKEN_DDNS_REPLACE_CLIENT_NAME || tok == token::TOKEN_DDNS_GENERATED_PREFIX || tok == token::TOKEN_DDNS_QUALIFYING_SUFFIX || tok == token::TOKEN_STORE_EXTENDED_INFO || tok == token::TOKEN_SUBNET6 || tok == token::TOKEN_OPTION_DEF || tok == token::TOKEN_OPTION_DATA || tok == token::TOKEN_NAME || tok == token::TOKEN_DATA || tok == token::TOKEN_CODE || tok == token::TOKEN_SPACE || tok == token::TOKEN_CSV_FORMAT || tok == token::TOKEN_ALWAYS_SEND || tok == token::TOKEN_RECORD_TYPES || tok == token::TOKEN_ENCAPSULATE || tok == token::TOKEN_ARRAY || tok == token::TOKEN_POOLS || tok == token::TOKEN_POOL || tok == token::TOKEN_PD_POOLS || tok == token::TOKEN_PREFIX || tok == token::TOKEN_PREFIX_LEN || tok == token::TOKEN_EXCLUDED_PREFIX || tok == token::TOKEN_EXCLUDED_PREFIX_LEN || tok == token::TOKEN_DELEGATED_LEN || tok == token::TOKEN_USER_CONTEXT || tok == token::TOKEN_COMMENT || tok == token::TOKEN_SUBNET || tok == token::TOKEN_INTERFACE || tok == token::TOKEN_INTERFACE_ID || tok == token::TOKEN_ID || tok == token::TOKEN_RAPID_COMMIT || tok == token::TOKEN_RESERVATION_MODE || tok == token::TOKEN_DISABLED || tok == token::TOKEN_OUT_OF_POOL || tok == token::TOKEN_GLOBAL || tok == token::TOKEN_ALL || tok == token::TOKEN_SHARED_NETWORKS || tok == token::TOKEN_MAC_SOURCES || tok == token::TOKEN_RELAY_SUPPLIED_OPTIONS || tok == token::TOKEN_HOST_RESERVATION_IDENTIFIERS || tok == token::TOKEN_SANITY_CHECKS || tok == token::TOKEN_LEASE_CHECKS || tok == token::TOKEN_CLIENT_CLASSES || tok == token::TOKEN_REQUIRE_CLIENT_CLASSES || tok == token::TOKEN_TEST || tok == token::TOKEN_ONLY_IF_REQUIRED || tok == token::TOKEN_CLIENT_CLASS || tok == token::TOKEN_RESERVATIONS || tok == token::TOKEN_IP_ADDRESSES || tok == token::TOKEN_PREFIXES || tok == token::TOKEN_DUID || tok == token::TOKEN_HW_ADDRESS || tok == token::TOKEN_HOSTNAME || tok == token::TOKEN_FLEX_ID || tok == token::TOKEN_RELAY || tok == token::TOKEN_IP_ADDRESS || tok == token::TOKEN_HOOKS_LIBRARIES || tok == token::TOKEN_LIBRARY || tok == token::TOKEN_PARAMETERS || tok == token::TOKEN_EXPIRED_LEASES_PROCESSING || tok == token::TOKEN_RECLAIM_TIMER_WAIT_TIME || tok == token::TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME || tok == token::TOKEN_HOLD_RECLAIMED_TIME || tok == token::TOKEN_MAX_RECLAIM_LEASES || tok == token::TOKEN_MAX_RECLAIM_TIME || tok == token::TOKEN_UNWARNED_RECLAIM_CYCLES || tok == token::TOKEN_SERVER_ID || tok == token::TOKEN_LLT || tok == token::TOKEN_EN || tok == token::TOKEN_LL || tok == token::TOKEN_IDENTIFIER || tok == token::TOKEN_HTYPE || tok == token::TOKEN_TIME || tok == token::TOKEN_ENTERPRISE_ID || tok == token::TOKEN_DHCP4O6_PORT || tok == token::TOKEN_DHCP_MULTI_THREADING || tok == token::TOKEN_ENABLE_MULTI_THREADING || tok == token::TOKEN_THREAD_POOL_SIZE || tok == token::TOKEN_PACKET_QUEUE_SIZE || tok == token::TOKEN_CONTROL_SOCKET || tok == token::TOKEN_SOCKET_TYPE || tok == token::TOKEN_SOCKET_NAME || tok == token::TOKEN_DHCP_QUEUE_CONTROL || tok == token::TOKEN_ENABLE_QUEUE || tok == token::TOKEN_QUEUE_TYPE || tok == token::TOKEN_CAPACITY || tok == token::TOKEN_DHCP_DDNS || tok == token::TOKEN_ENABLE_UPDATES || tok == token::TOKEN_QUALIFYING_SUFFIX || tok == token::TOKEN_SERVER_IP || tok == token::TOKEN_SERVER_PORT || tok == token::TOKEN_SENDER_IP || tok == token::TOKEN_SENDER_PORT || tok == token::TOKEN_MAX_QUEUE_SIZE || tok == token::TOKEN_NCR_PROTOCOL || tok == token::TOKEN_NCR_FORMAT || tok == token::TOKEN_OVERRIDE_NO_UPDATE || tok == token::TOKEN_OVERRIDE_CLIENT_UPDATE || tok == token::TOKEN_REPLACE_CLIENT_NAME || tok == token::TOKEN_GENERATED_PREFIX || tok == token::TOKEN_UDP || tok == token::TOKEN_TCP || tok == token::TOKEN_JSON || tok == token::TOKEN_WHEN_PRESENT || tok == token::TOKEN_NEVER || tok == token::TOKEN_ALWAYS || tok == token::TOKEN_WHEN_NOT_PRESENT || tok == token::TOKEN_HOSTNAME_CHAR_SET || tok == token::TOKEN_HOSTNAME_CHAR_REPLACEMENT || tok == token::TOKEN_LOGGING || tok == token::TOKEN_LOGGERS || tok == token::TOKEN_OUTPUT_OPTIONS || tok == token::TOKEN_OUTPUT || tok == token::TOKEN_DEBUGLEVEL || tok == token::TOKEN_SEVERITY || tok == token::TOKEN_FLUSH || tok == token::TOKEN_MAXSIZE || tok == token::TOKEN_MAXVER || tok == token::TOKEN_PATTERN || tok == token::TOKEN_DHCP4 || tok == token::TOKEN_DHCPDDNS || tok == token::TOKEN_CONTROL_AGENT || tok == token::TOKEN_TOPLEVEL_JSON || tok == token::TOKEN_TOPLEVEL_DHCP6 || tok == token::TOKEN_SUB_DHCP6 || tok == token::TOKEN_SUB_INTERFACES6 || tok == token::TOKEN_SUB_SUBNET6 || tok == token::TOKEN_SUB_POOL6 || tok == token::TOKEN_SUB_PD_POOL || tok == token::TOKEN_SUB_RESERVATION || tok == token::TOKEN_SUB_OPTION_DEFS || tok == token::TOKEN_SUB_OPTION_DEF || tok == token::TOKEN_SUB_OPTION_DATA || tok == token::TOKEN_SUB_HOOKS_LIBRARY || tok == token::TOKEN_SUB_DHCP_DDNS || tok == token::TOKEN_SUB_LOGGING || tok == token::TOKEN_SUB_CONFIG_CONTROL);
+ YY_ASSERT (tok == token::TOKEN_END || tok == token::TOKEN_PARSER6_error || tok == token::TOKEN_PARSER6_UNDEF || tok == token::TOKEN_COMMA || tok == token::TOKEN_COLON || tok == token::TOKEN_LSQUARE_BRACKET || tok == token::TOKEN_RSQUARE_BRACKET || tok == token::TOKEN_LCURLY_BRACKET || tok == token::TOKEN_RCURLY_BRACKET || tok == token::TOKEN_NULL_TYPE || tok == token::TOKEN_DHCP6 || tok == token::TOKEN_DATA_DIRECTORY || tok == token::TOKEN_CONFIG_CONTROL || tok == token::TOKEN_CONFIG_DATABASES || tok == token::TOKEN_CONFIG_FETCH_WAIT_TIME || tok == token::TOKEN_INTERFACES_CONFIG || tok == token::TOKEN_INTERFACES || tok == token::TOKEN_RE_DETECT || tok == token::TOKEN_LEASE_DATABASE || tok == token::TOKEN_HOSTS_DATABASE || tok == token::TOKEN_HOSTS_DATABASES || tok == token::TOKEN_TYPE || tok == token::TOKEN_MEMFILE || tok == token::TOKEN_MYSQL || tok == token::TOKEN_POSTGRESQL || tok == token::TOKEN_CQL || tok == token::TOKEN_USER || tok == token::TOKEN_PASSWORD || tok == token::TOKEN_HOST || tok == token::TOKEN_PORT || tok == token::TOKEN_PERSIST || tok == token::TOKEN_LFC_INTERVAL || tok == token::TOKEN_READONLY || tok == token::TOKEN_CONNECT_TIMEOUT || tok == token::TOKEN_CONTACT_POINTS || tok == token::TOKEN_MAX_RECONNECT_TRIES || tok == token::TOKEN_RECONNECT_WAIT_TIME || tok == token::TOKEN_KEYSPACE || tok == token::TOKEN_CONSISTENCY || tok == token::TOKEN_SERIAL_CONSISTENCY || tok == token::TOKEN_REQUEST_TIMEOUT || tok == token::TOKEN_TCP_KEEPALIVE || tok == token::TOKEN_TCP_NODELAY || tok == token::TOKEN_MAX_ROW_ERRORS || tok == token::TOKEN_PREFERRED_LIFETIME || tok == token::TOKEN_MIN_PREFERRED_LIFETIME || tok == token::TOKEN_MAX_PREFERRED_LIFETIME || tok == token::TOKEN_VALID_LIFETIME || tok == token::TOKEN_MIN_VALID_LIFETIME || tok == token::TOKEN_MAX_VALID_LIFETIME || tok == token::TOKEN_RENEW_TIMER || tok == token::TOKEN_REBIND_TIMER || tok == token::TOKEN_CALCULATE_TEE_TIMES || tok == token::TOKEN_T1_PERCENT || tok == token::TOKEN_T2_PERCENT || tok == token::TOKEN_DECLINE_PROBATION_PERIOD || tok == token::TOKEN_SERVER_TAG || tok == token::TOKEN_STATISTIC_DEFAULT_SAMPLE_COUNT || tok == token::TOKEN_STATISTIC_DEFAULT_SAMPLE_AGE || tok == token::TOKEN_DDNS_SEND_UPDATES || tok == token::TOKEN_DDNS_OVERRIDE_NO_UPDATE || tok == token::TOKEN_DDNS_OVERRIDE_CLIENT_UPDATE || tok == token::TOKEN_DDNS_REPLACE_CLIENT_NAME || tok == token::TOKEN_DDNS_GENERATED_PREFIX || tok == token::TOKEN_DDNS_QUALIFYING_SUFFIX || tok == token::TOKEN_STORE_EXTENDED_INFO || tok == token::TOKEN_SUBNET6 || tok == token::TOKEN_OPTION_DEF || tok == token::TOKEN_OPTION_DATA || tok == token::TOKEN_NAME || tok == token::TOKEN_DATA || tok == token::TOKEN_CODE || tok == token::TOKEN_SPACE || tok == token::TOKEN_CSV_FORMAT || tok == token::TOKEN_ALWAYS_SEND || tok == token::TOKEN_RECORD_TYPES || tok == token::TOKEN_ENCAPSULATE || tok == token::TOKEN_ARRAY || tok == token::TOKEN_POOLS || tok == token::TOKEN_POOL || tok == token::TOKEN_PD_POOLS || tok == token::TOKEN_PREFIX || tok == token::TOKEN_PREFIX_LEN || tok == token::TOKEN_EXCLUDED_PREFIX || tok == token::TOKEN_EXCLUDED_PREFIX_LEN || tok == token::TOKEN_DELEGATED_LEN || tok == token::TOKEN_USER_CONTEXT || tok == token::TOKEN_COMMENT || tok == token::TOKEN_SUBNET || tok == token::TOKEN_INTERFACE || tok == token::TOKEN_INTERFACE_ID || tok == token::TOKEN_ID || tok == token::TOKEN_RAPID_COMMIT || tok == token::TOKEN_RESERVATION_MODE || tok == token::TOKEN_DISABLED || tok == token::TOKEN_OUT_OF_POOL || tok == token::TOKEN_GLOBAL || tok == token::TOKEN_ALL || tok == token::TOKEN_SHARED_NETWORKS || tok == token::TOKEN_MAC_SOURCES || tok == token::TOKEN_RELAY_SUPPLIED_OPTIONS || tok == token::TOKEN_HOST_RESERVATION_IDENTIFIERS || tok == token::TOKEN_SANITY_CHECKS || tok == token::TOKEN_LEASE_CHECKS || tok == token::TOKEN_CLIENT_CLASSES || tok == token::TOKEN_REQUIRE_CLIENT_CLASSES || tok == token::TOKEN_TEST || tok == token::TOKEN_ONLY_IF_REQUIRED || tok == token::TOKEN_CLIENT_CLASS || tok == token::TOKEN_RESERVATIONS || tok == token::TOKEN_IP_ADDRESSES || tok == token::TOKEN_PREFIXES || tok == token::TOKEN_DUID || tok == token::TOKEN_HW_ADDRESS || tok == token::TOKEN_HOSTNAME || tok == token::TOKEN_FLEX_ID || tok == token::TOKEN_RELAY || tok == token::TOKEN_IP_ADDRESS || tok == token::TOKEN_HOOKS_LIBRARIES || tok == token::TOKEN_LIBRARY || tok == token::TOKEN_PARAMETERS || tok == token::TOKEN_EXPIRED_LEASES_PROCESSING || tok == token::TOKEN_RECLAIM_TIMER_WAIT_TIME || tok == token::TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME || tok == token::TOKEN_HOLD_RECLAIMED_TIME || tok == token::TOKEN_MAX_RECLAIM_LEASES || tok == token::TOKEN_MAX_RECLAIM_TIME || tok == token::TOKEN_UNWARNED_RECLAIM_CYCLES || tok == token::TOKEN_SERVER_ID || tok == token::TOKEN_LLT || tok == token::TOKEN_EN || tok == token::TOKEN_LL || tok == token::TOKEN_IDENTIFIER || tok == token::TOKEN_HTYPE || tok == token::TOKEN_TIME || tok == token::TOKEN_ENTERPRISE_ID || tok == token::TOKEN_DHCP4O6_PORT || tok == token::TOKEN_DHCP_MULTI_THREADING || tok == token::TOKEN_ENABLE_MULTI_THREADING || tok == token::TOKEN_THREAD_POOL_SIZE || tok == token::TOKEN_PACKET_QUEUE_SIZE || tok == token::TOKEN_CONTROL_SOCKET || tok == token::TOKEN_SOCKET_TYPE || tok == token::TOKEN_SOCKET_NAME || tok == token::TOKEN_DHCP_QUEUE_CONTROL || tok == token::TOKEN_ENABLE_QUEUE || tok == token::TOKEN_QUEUE_TYPE || tok == token::TOKEN_CAPACITY || tok == token::TOKEN_DHCP_DDNS || tok == token::TOKEN_ENABLE_UPDATES || tok == token::TOKEN_QUALIFYING_SUFFIX || tok == token::TOKEN_SERVER_IP || tok == token::TOKEN_SERVER_PORT || tok == token::TOKEN_SENDER_IP || tok == token::TOKEN_SENDER_PORT || tok == token::TOKEN_MAX_QUEUE_SIZE || tok == token::TOKEN_NCR_PROTOCOL || tok == token::TOKEN_NCR_FORMAT || tok == token::TOKEN_OVERRIDE_NO_UPDATE || tok == token::TOKEN_OVERRIDE_CLIENT_UPDATE || tok == token::TOKEN_REPLACE_CLIENT_NAME || tok == token::TOKEN_GENERATED_PREFIX || tok == token::TOKEN_UDP || tok == token::TOKEN_TCP || tok == token::TOKEN_JSON || tok == token::TOKEN_WHEN_PRESENT || tok == token::TOKEN_NEVER || tok == token::TOKEN_ALWAYS || tok == token::TOKEN_WHEN_NOT_PRESENT || tok == token::TOKEN_HOSTNAME_CHAR_SET || tok == token::TOKEN_HOSTNAME_CHAR_REPLACEMENT || tok == token::TOKEN_LOGGING || tok == token::TOKEN_LOGGERS || tok == token::TOKEN_OUTPUT_OPTIONS || tok == token::TOKEN_OUTPUT || tok == token::TOKEN_DEBUGLEVEL || tok == token::TOKEN_SEVERITY || tok == token::TOKEN_FLUSH || tok == token::TOKEN_MAXSIZE || tok == token::TOKEN_MAXVER || tok == token::TOKEN_PATTERN || tok == token::TOKEN_DHCP4 || tok == token::TOKEN_DHCPDDNS || tok == token::TOKEN_CONTROL_AGENT || tok == token::TOKEN_TOPLEVEL_JSON || tok == token::TOKEN_TOPLEVEL_DHCP6 || tok == token::TOKEN_SUB_DHCP6 || tok == token::TOKEN_SUB_INTERFACES6 || tok == token::TOKEN_SUB_SUBNET6 || tok == token::TOKEN_SUB_POOL6 || tok == token::TOKEN_SUB_PD_POOL || tok == token::TOKEN_SUB_RESERVATION || tok == token::TOKEN_SUB_OPTION_DEFS || tok == token::TOKEN_SUB_OPTION_DEF || tok == token::TOKEN_SUB_OPTION_DATA || tok == token::TOKEN_SUB_HOOKS_LIBRARY || tok == token::TOKEN_SUB_DHCP_DDNS || tok == token::TOKEN_SUB_LOGGING || tok == token::TOKEN_SUB_CONFIG_CONTROL);
}
#else
symbol_type (int tok, const location_type& l)
: super_type(token_type (tok), l)
{
- YY_ASSERT (tok == token::TOKEN_END || tok == token::TOKEN_COMMA || tok == token::TOKEN_COLON || tok == token::TOKEN_LSQUARE_BRACKET || tok == token::TOKEN_RSQUARE_BRACKET || tok == token::TOKEN_LCURLY_BRACKET || tok == token::TOKEN_RCURLY_BRACKET || tok == token::TOKEN_NULL_TYPE || tok == token::TOKEN_DHCP6 || tok == token::TOKEN_DATA_DIRECTORY || tok == token::TOKEN_CONFIG_CONTROL || tok == token::TOKEN_CONFIG_DATABASES || tok == token::TOKEN_CONFIG_FETCH_WAIT_TIME || tok == token::TOKEN_INTERFACES_CONFIG || tok == token::TOKEN_INTERFACES || tok == token::TOKEN_RE_DETECT || tok == token::TOKEN_LEASE_DATABASE || tok == token::TOKEN_HOSTS_DATABASE || tok == token::TOKEN_HOSTS_DATABASES || tok == token::TOKEN_TYPE || tok == token::TOKEN_MEMFILE || tok == token::TOKEN_MYSQL || tok == token::TOKEN_POSTGRESQL || tok == token::TOKEN_CQL || tok == token::TOKEN_USER || tok == token::TOKEN_PASSWORD || tok == token::TOKEN_HOST || tok == token::TOKEN_PORT || tok == token::TOKEN_PERSIST || tok == token::TOKEN_LFC_INTERVAL || tok == token::TOKEN_READONLY || tok == token::TOKEN_CONNECT_TIMEOUT || tok == token::TOKEN_CONTACT_POINTS || tok == token::TOKEN_MAX_RECONNECT_TRIES || tok == token::TOKEN_RECONNECT_WAIT_TIME || tok == token::TOKEN_KEYSPACE || tok == token::TOKEN_CONSISTENCY || tok == token::TOKEN_SERIAL_CONSISTENCY || tok == token::TOKEN_REQUEST_TIMEOUT || tok == token::TOKEN_TCP_KEEPALIVE || tok == token::TOKEN_TCP_NODELAY || tok == token::TOKEN_MAX_ROW_ERRORS || tok == token::TOKEN_PREFERRED_LIFETIME || tok == token::TOKEN_MIN_PREFERRED_LIFETIME || tok == token::TOKEN_MAX_PREFERRED_LIFETIME || tok == token::TOKEN_VALID_LIFETIME || tok == token::TOKEN_MIN_VALID_LIFETIME || tok == token::TOKEN_MAX_VALID_LIFETIME || tok == token::TOKEN_RENEW_TIMER || tok == token::TOKEN_REBIND_TIMER || tok == token::TOKEN_CALCULATE_TEE_TIMES || tok == token::TOKEN_T1_PERCENT || tok == token::TOKEN_T2_PERCENT || tok == token::TOKEN_DECLINE_PROBATION_PERIOD || tok == token::TOKEN_SERVER_TAG || tok == token::TOKEN_STATISTIC_DEFAULT_SAMPLE_COUNT || tok == token::TOKEN_STATISTIC_DEFAULT_SAMPLE_AGE || tok == token::TOKEN_DDNS_SEND_UPDATES || tok == token::TOKEN_DDNS_OVERRIDE_NO_UPDATE || tok == token::TOKEN_DDNS_OVERRIDE_CLIENT_UPDATE || tok == token::TOKEN_DDNS_REPLACE_CLIENT_NAME || tok == token::TOKEN_DDNS_GENERATED_PREFIX || tok == token::TOKEN_DDNS_QUALIFYING_SUFFIX || tok == token::TOKEN_STORE_EXTENDED_INFO || tok == token::TOKEN_SUBNET6 || tok == token::TOKEN_OPTION_DEF || tok == token::TOKEN_OPTION_DATA || tok == token::TOKEN_NAME || tok == token::TOKEN_DATA || tok == token::TOKEN_CODE || tok == token::TOKEN_SPACE || tok == token::TOKEN_CSV_FORMAT || tok == token::TOKEN_ALWAYS_SEND || tok == token::TOKEN_RECORD_TYPES || tok == token::TOKEN_ENCAPSULATE || tok == token::TOKEN_ARRAY || tok == token::TOKEN_POOLS || tok == token::TOKEN_POOL || tok == token::TOKEN_PD_POOLS || tok == token::TOKEN_PREFIX || tok == token::TOKEN_PREFIX_LEN || tok == token::TOKEN_EXCLUDED_PREFIX || tok == token::TOKEN_EXCLUDED_PREFIX_LEN || tok == token::TOKEN_DELEGATED_LEN || tok == token::TOKEN_USER_CONTEXT || tok == token::TOKEN_COMMENT || tok == token::TOKEN_SUBNET || tok == token::TOKEN_INTERFACE || tok == token::TOKEN_INTERFACE_ID || tok == token::TOKEN_ID || tok == token::TOKEN_RAPID_COMMIT || tok == token::TOKEN_RESERVATION_MODE || tok == token::TOKEN_DISABLED || tok == token::TOKEN_OUT_OF_POOL || tok == token::TOKEN_GLOBAL || tok == token::TOKEN_ALL || tok == token::TOKEN_SHARED_NETWORKS || tok == token::TOKEN_MAC_SOURCES || tok == token::TOKEN_RELAY_SUPPLIED_OPTIONS || tok == token::TOKEN_HOST_RESERVATION_IDENTIFIERS || tok == token::TOKEN_SANITY_CHECKS || tok == token::TOKEN_LEASE_CHECKS || tok == token::TOKEN_CLIENT_CLASSES || tok == token::TOKEN_REQUIRE_CLIENT_CLASSES || tok == token::TOKEN_TEST || tok == token::TOKEN_ONLY_IF_REQUIRED || tok == token::TOKEN_CLIENT_CLASS || tok == token::TOKEN_RESERVATIONS || tok == token::TOKEN_IP_ADDRESSES || tok == token::TOKEN_PREFIXES || tok == token::TOKEN_DUID || tok == token::TOKEN_HW_ADDRESS || tok == token::TOKEN_HOSTNAME || tok == token::TOKEN_FLEX_ID || tok == token::TOKEN_RELAY || tok == token::TOKEN_IP_ADDRESS || tok == token::TOKEN_HOOKS_LIBRARIES || tok == token::TOKEN_LIBRARY || tok == token::TOKEN_PARAMETERS || tok == token::TOKEN_EXPIRED_LEASES_PROCESSING || tok == token::TOKEN_RECLAIM_TIMER_WAIT_TIME || tok == token::TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME || tok == token::TOKEN_HOLD_RECLAIMED_TIME || tok == token::TOKEN_MAX_RECLAIM_LEASES || tok == token::TOKEN_MAX_RECLAIM_TIME || tok == token::TOKEN_UNWARNED_RECLAIM_CYCLES || tok == token::TOKEN_SERVER_ID || tok == token::TOKEN_LLT || tok == token::TOKEN_EN || tok == token::TOKEN_LL || tok == token::TOKEN_IDENTIFIER || tok == token::TOKEN_HTYPE || tok == token::TOKEN_TIME || tok == token::TOKEN_ENTERPRISE_ID || tok == token::TOKEN_DHCP4O6_PORT || tok == token::TOKEN_DHCP_MULTI_THREADING || tok == token::TOKEN_ENABLE_MULTI_THREADING || tok == token::TOKEN_THREAD_POOL_SIZE || tok == token::TOKEN_PACKET_QUEUE_SIZE || tok == token::TOKEN_CONTROL_SOCKET || tok == token::TOKEN_SOCKET_TYPE || tok == token::TOKEN_SOCKET_NAME || tok == token::TOKEN_DHCP_QUEUE_CONTROL || tok == token::TOKEN_ENABLE_QUEUE || tok == token::TOKEN_QUEUE_TYPE || tok == token::TOKEN_CAPACITY || tok == token::TOKEN_DHCP_DDNS || tok == token::TOKEN_ENABLE_UPDATES || tok == token::TOKEN_QUALIFYING_SUFFIX || tok == token::TOKEN_SERVER_IP || tok == token::TOKEN_SERVER_PORT || tok == token::TOKEN_SENDER_IP || tok == token::TOKEN_SENDER_PORT || tok == token::TOKEN_MAX_QUEUE_SIZE || tok == token::TOKEN_NCR_PROTOCOL || tok == token::TOKEN_NCR_FORMAT || tok == token::TOKEN_OVERRIDE_NO_UPDATE || tok == token::TOKEN_OVERRIDE_CLIENT_UPDATE || tok == token::TOKEN_REPLACE_CLIENT_NAME || tok == token::TOKEN_GENERATED_PREFIX || tok == token::TOKEN_UDP || tok == token::TOKEN_TCP || tok == token::TOKEN_JSON || tok == token::TOKEN_WHEN_PRESENT || tok == token::TOKEN_NEVER || tok == token::TOKEN_ALWAYS || tok == token::TOKEN_WHEN_NOT_PRESENT || tok == token::TOKEN_HOSTNAME_CHAR_SET || tok == token::TOKEN_HOSTNAME_CHAR_REPLACEMENT || tok == token::TOKEN_LOGGING || tok == token::TOKEN_LOGGERS || tok == token::TOKEN_OUTPUT_OPTIONS || tok == token::TOKEN_OUTPUT || tok == token::TOKEN_DEBUGLEVEL || tok == token::TOKEN_SEVERITY || tok == token::TOKEN_FLUSH || tok == token::TOKEN_MAXSIZE || tok == token::TOKEN_MAXVER || tok == token::TOKEN_PATTERN || tok == token::TOKEN_DHCP4 || tok == token::TOKEN_DHCPDDNS || tok == token::TOKEN_CONTROL_AGENT || tok == token::TOKEN_TOPLEVEL_JSON || tok == token::TOKEN_TOPLEVEL_DHCP6 || tok == token::TOKEN_SUB_DHCP6 || tok == token::TOKEN_SUB_INTERFACES6 || tok == token::TOKEN_SUB_SUBNET6 || tok == token::TOKEN_SUB_POOL6 || tok == token::TOKEN_SUB_PD_POOL || tok == token::TOKEN_SUB_RESERVATION || tok == token::TOKEN_SUB_OPTION_DEFS || tok == token::TOKEN_SUB_OPTION_DEF || tok == token::TOKEN_SUB_OPTION_DATA || tok == token::TOKEN_SUB_HOOKS_LIBRARY || tok == token::TOKEN_SUB_DHCP_DDNS || tok == token::TOKEN_SUB_LOGGING || tok == token::TOKEN_SUB_CONFIG_CONTROL);
+ YY_ASSERT (tok == token::TOKEN_END || tok == token::TOKEN_PARSER6_error || tok == token::TOKEN_PARSER6_UNDEF || tok == token::TOKEN_COMMA || tok == token::TOKEN_COLON || tok == token::TOKEN_LSQUARE_BRACKET || tok == token::TOKEN_RSQUARE_BRACKET || tok == token::TOKEN_LCURLY_BRACKET || tok == token::TOKEN_RCURLY_BRACKET || tok == token::TOKEN_NULL_TYPE || tok == token::TOKEN_DHCP6 || tok == token::TOKEN_DATA_DIRECTORY || tok == token::TOKEN_CONFIG_CONTROL || tok == token::TOKEN_CONFIG_DATABASES || tok == token::TOKEN_CONFIG_FETCH_WAIT_TIME || tok == token::TOKEN_INTERFACES_CONFIG || tok == token::TOKEN_INTERFACES || tok == token::TOKEN_RE_DETECT || tok == token::TOKEN_LEASE_DATABASE || tok == token::TOKEN_HOSTS_DATABASE || tok == token::TOKEN_HOSTS_DATABASES || tok == token::TOKEN_TYPE || tok == token::TOKEN_MEMFILE || tok == token::TOKEN_MYSQL || tok == token::TOKEN_POSTGRESQL || tok == token::TOKEN_CQL || tok == token::TOKEN_USER || tok == token::TOKEN_PASSWORD || tok == token::TOKEN_HOST || tok == token::TOKEN_PORT || tok == token::TOKEN_PERSIST || tok == token::TOKEN_LFC_INTERVAL || tok == token::TOKEN_READONLY || tok == token::TOKEN_CONNECT_TIMEOUT || tok == token::TOKEN_CONTACT_POINTS || tok == token::TOKEN_MAX_RECONNECT_TRIES || tok == token::TOKEN_RECONNECT_WAIT_TIME || tok == token::TOKEN_KEYSPACE || tok == token::TOKEN_CONSISTENCY || tok == token::TOKEN_SERIAL_CONSISTENCY || tok == token::TOKEN_REQUEST_TIMEOUT || tok == token::TOKEN_TCP_KEEPALIVE || tok == token::TOKEN_TCP_NODELAY || tok == token::TOKEN_MAX_ROW_ERRORS || tok == token::TOKEN_PREFERRED_LIFETIME || tok == token::TOKEN_MIN_PREFERRED_LIFETIME || tok == token::TOKEN_MAX_PREFERRED_LIFETIME || tok == token::TOKEN_VALID_LIFETIME || tok == token::TOKEN_MIN_VALID_LIFETIME || tok == token::TOKEN_MAX_VALID_LIFETIME || tok == token::TOKEN_RENEW_TIMER || tok == token::TOKEN_REBIND_TIMER || tok == token::TOKEN_CALCULATE_TEE_TIMES || tok == token::TOKEN_T1_PERCENT || tok == token::TOKEN_T2_PERCENT || tok == token::TOKEN_DECLINE_PROBATION_PERIOD || tok == token::TOKEN_SERVER_TAG || tok == token::TOKEN_STATISTIC_DEFAULT_SAMPLE_COUNT || tok == token::TOKEN_STATISTIC_DEFAULT_SAMPLE_AGE || tok == token::TOKEN_DDNS_SEND_UPDATES || tok == token::TOKEN_DDNS_OVERRIDE_NO_UPDATE || tok == token::TOKEN_DDNS_OVERRIDE_CLIENT_UPDATE || tok == token::TOKEN_DDNS_REPLACE_CLIENT_NAME || tok == token::TOKEN_DDNS_GENERATED_PREFIX || tok == token::TOKEN_DDNS_QUALIFYING_SUFFIX || tok == token::TOKEN_STORE_EXTENDED_INFO || tok == token::TOKEN_SUBNET6 || tok == token::TOKEN_OPTION_DEF || tok == token::TOKEN_OPTION_DATA || tok == token::TOKEN_NAME || tok == token::TOKEN_DATA || tok == token::TOKEN_CODE || tok == token::TOKEN_SPACE || tok == token::TOKEN_CSV_FORMAT || tok == token::TOKEN_ALWAYS_SEND || tok == token::TOKEN_RECORD_TYPES || tok == token::TOKEN_ENCAPSULATE || tok == token::TOKEN_ARRAY || tok == token::TOKEN_POOLS || tok == token::TOKEN_POOL || tok == token::TOKEN_PD_POOLS || tok == token::TOKEN_PREFIX || tok == token::TOKEN_PREFIX_LEN || tok == token::TOKEN_EXCLUDED_PREFIX || tok == token::TOKEN_EXCLUDED_PREFIX_LEN || tok == token::TOKEN_DELEGATED_LEN || tok == token::TOKEN_USER_CONTEXT || tok == token::TOKEN_COMMENT || tok == token::TOKEN_SUBNET || tok == token::TOKEN_INTERFACE || tok == token::TOKEN_INTERFACE_ID || tok == token::TOKEN_ID || tok == token::TOKEN_RAPID_COMMIT || tok == token::TOKEN_RESERVATION_MODE || tok == token::TOKEN_DISABLED || tok == token::TOKEN_OUT_OF_POOL || tok == token::TOKEN_GLOBAL || tok == token::TOKEN_ALL || tok == token::TOKEN_SHARED_NETWORKS || tok == token::TOKEN_MAC_SOURCES || tok == token::TOKEN_RELAY_SUPPLIED_OPTIONS || tok == token::TOKEN_HOST_RESERVATION_IDENTIFIERS || tok == token::TOKEN_SANITY_CHECKS || tok == token::TOKEN_LEASE_CHECKS || tok == token::TOKEN_CLIENT_CLASSES || tok == token::TOKEN_REQUIRE_CLIENT_CLASSES || tok == token::TOKEN_TEST || tok == token::TOKEN_ONLY_IF_REQUIRED || tok == token::TOKEN_CLIENT_CLASS || tok == token::TOKEN_RESERVATIONS || tok == token::TOKEN_IP_ADDRESSES || tok == token::TOKEN_PREFIXES || tok == token::TOKEN_DUID || tok == token::TOKEN_HW_ADDRESS || tok == token::TOKEN_HOSTNAME || tok == token::TOKEN_FLEX_ID || tok == token::TOKEN_RELAY || tok == token::TOKEN_IP_ADDRESS || tok == token::TOKEN_HOOKS_LIBRARIES || tok == token::TOKEN_LIBRARY || tok == token::TOKEN_PARAMETERS || tok == token::TOKEN_EXPIRED_LEASES_PROCESSING || tok == token::TOKEN_RECLAIM_TIMER_WAIT_TIME || tok == token::TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME || tok == token::TOKEN_HOLD_RECLAIMED_TIME || tok == token::TOKEN_MAX_RECLAIM_LEASES || tok == token::TOKEN_MAX_RECLAIM_TIME || tok == token::TOKEN_UNWARNED_RECLAIM_CYCLES || tok == token::TOKEN_SERVER_ID || tok == token::TOKEN_LLT || tok == token::TOKEN_EN || tok == token::TOKEN_LL || tok == token::TOKEN_IDENTIFIER || tok == token::TOKEN_HTYPE || tok == token::TOKEN_TIME || tok == token::TOKEN_ENTERPRISE_ID || tok == token::TOKEN_DHCP4O6_PORT || tok == token::TOKEN_DHCP_MULTI_THREADING || tok == token::TOKEN_ENABLE_MULTI_THREADING || tok == token::TOKEN_THREAD_POOL_SIZE || tok == token::TOKEN_PACKET_QUEUE_SIZE || tok == token::TOKEN_CONTROL_SOCKET || tok == token::TOKEN_SOCKET_TYPE || tok == token::TOKEN_SOCKET_NAME || tok == token::TOKEN_DHCP_QUEUE_CONTROL || tok == token::TOKEN_ENABLE_QUEUE || tok == token::TOKEN_QUEUE_TYPE || tok == token::TOKEN_CAPACITY || tok == token::TOKEN_DHCP_DDNS || tok == token::TOKEN_ENABLE_UPDATES || tok == token::TOKEN_QUALIFYING_SUFFIX || tok == token::TOKEN_SERVER_IP || tok == token::TOKEN_SERVER_PORT || tok == token::TOKEN_SENDER_IP || tok == token::TOKEN_SENDER_PORT || tok == token::TOKEN_MAX_QUEUE_SIZE || tok == token::TOKEN_NCR_PROTOCOL || tok == token::TOKEN_NCR_FORMAT || tok == token::TOKEN_OVERRIDE_NO_UPDATE || tok == token::TOKEN_OVERRIDE_CLIENT_UPDATE || tok == token::TOKEN_REPLACE_CLIENT_NAME || tok == token::TOKEN_GENERATED_PREFIX || tok == token::TOKEN_UDP || tok == token::TOKEN_TCP || tok == token::TOKEN_JSON || tok == token::TOKEN_WHEN_PRESENT || tok == token::TOKEN_NEVER || tok == token::TOKEN_ALWAYS || tok == token::TOKEN_WHEN_NOT_PRESENT || tok == token::TOKEN_HOSTNAME_CHAR_SET || tok == token::TOKEN_HOSTNAME_CHAR_REPLACEMENT || tok == token::TOKEN_LOGGING || tok == token::TOKEN_LOGGERS || tok == token::TOKEN_OUTPUT_OPTIONS || tok == token::TOKEN_OUTPUT || tok == token::TOKEN_DEBUGLEVEL || tok == token::TOKEN_SEVERITY || tok == token::TOKEN_FLUSH || tok == token::TOKEN_MAXSIZE || tok == token::TOKEN_MAXVER || tok == token::TOKEN_PATTERN || tok == token::TOKEN_DHCP4 || tok == token::TOKEN_DHCPDDNS || tok == token::TOKEN_CONTROL_AGENT || tok == token::TOKEN_TOPLEVEL_JSON || tok == token::TOKEN_TOPLEVEL_DHCP6 || tok == token::TOKEN_SUB_DHCP6 || tok == token::TOKEN_SUB_INTERFACES6 || tok == token::TOKEN_SUB_SUBNET6 || tok == token::TOKEN_SUB_POOL6 || tok == token::TOKEN_SUB_PD_POOL || tok == token::TOKEN_SUB_RESERVATION || tok == token::TOKEN_SUB_OPTION_DEFS || tok == token::TOKEN_SUB_OPTION_DEF || tok == token::TOKEN_SUB_OPTION_DATA || tok == token::TOKEN_SUB_HOOKS_LIBRARY || tok == token::TOKEN_SUB_DHCP_DDNS || tok == token::TOKEN_SUB_LOGGING || tok == token::TOKEN_SUB_CONFIG_CONTROL);
}
#endif
#if 201103L <= YY_CPLUSPLUS
Dhcp6Parser (isc::dhcp::Parser6Context& ctx_yyarg);
virtual ~Dhcp6Parser ();
+#if 201103L <= YY_CPLUSPLUS
+ /// Non copyable.
+ Dhcp6Parser (const Dhcp6Parser&) = delete;
+ /// Non copyable.
+ Dhcp6Parser& operator= (const Dhcp6Parser&) = delete;
+#endif
+
/// Parse. An alias for parse ().
/// \returns 0 iff parsing succeeded.
int operator() ();
/// Report a syntax error.
void error (const syntax_error& err);
+ /// The user-facing name of the symbol whose (internal) number is
+ /// YYSYMBOL. No bounds checking.
+ static std::string symbol_name (symbol_kind_type yysymbol);
+
// Implementation of make_symbol for each symbol type.
#if 201103L <= YY_CPLUSPLUS
static
return symbol_type (token::TOKEN_END, l);
}
#endif
+#if 201103L <= YY_CPLUSPLUS
+ static
+ symbol_type
+ make_PARSER6_error (location_type l)
+ {
+ return symbol_type (token::TOKEN_PARSER6_error, std::move (l));
+ }
+#else
+ static
+ symbol_type
+ make_PARSER6_error (const location_type& l)
+ {
+ return symbol_type (token::TOKEN_PARSER6_error, l);
+ }
+#endif
+#if 201103L <= YY_CPLUSPLUS
+ static
+ symbol_type
+ make_PARSER6_UNDEF (location_type l)
+ {
+ return symbol_type (token::TOKEN_PARSER6_UNDEF, std::move (l));
+ }
+#else
+ static
+ symbol_type
+ make_PARSER6_UNDEF (const location_type& l)
+ {
+ return symbol_type (token::TOKEN_PARSER6_UNDEF, l);
+ }
+#endif
#if 201103L <= YY_CPLUSPLUS
static
symbol_type
#endif
+ class context
+ {
+ public:
+ context (const Dhcp6Parser& yyparser, const symbol_type& yyla);
+ const symbol_type& lookahead () const { return yyla_; }
+ symbol_kind_type token () const { return yyla_.kind (); }
+ const location_type& location () const { return yyla_.location; }
+
+ /// Put in YYARG at most YYARGN of the expected tokens, and return the
+ /// number of tokens stored in YYARG. If YYARG is null, return the
+ /// number of expected tokens (guaranteed to be less than YYNTOKENS).
+ int expected_tokens (symbol_kind_type yyarg[], int yyargn) const;
+
+ private:
+ const Dhcp6Parser& yyparser_;
+ const symbol_type& yyla_;
+ };
+
private:
- /// This class is not copyable.
+#if YY_CPLUSPLUS < 201103L
+ /// Non copyable.
Dhcp6Parser (const Dhcp6Parser&);
+ /// Non copyable.
Dhcp6Parser& operator= (const Dhcp6Parser&);
+#endif
+
/// Stored state numbers (used for stacks).
typedef short 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;
+ /// The arguments of the error message.
+ int yy_syntax_error_arguments_ (const context& yyctx,
+ symbol_kind_type yyarg[], int yyargn) const;
+ /// Generate an error message.
+ /// \param yyctx the context in which the error occurred.
+ virtual std::string yysyntax_error_ (const context& yyctx) const;
/// Compute post-reduction state.
/// \param yystate the current state
/// \param yysym the nonterminal to push on the stack
static const short yypact_ninf_;
static const signed char yytable_ninf_;
- /// Convert a scanner token number \a t to a symbol number.
- /// In theory \a t should be a token_type, but character literals
+ /// Convert a scanner token kind \a t to a symbol kind.
+ /// In theory \a t should be a token_kind_type, but character literals
/// are valid, yet not members of the token_type enum.
- static token_number_type yytranslate_ (int t);
+ static symbol_kind_type yytranslate_ (int t);
+
+ /// Convert the symbol name \a n to a form suitable for a diagnostic.
+ static std::string yytnamerr_ (const char *yystr);
+
+ /// For a symbol, its name in clear.
+ static const char* const yytname_[];
+
// Tables.
- // YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+ // YYPACTSTATE-NUM -- Index in YYTABLE of the portion describing
// STATE-NUM.
static const short yypact_[];
- // YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
+ // YYDEFACTSTATE-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 short yydefact_[];
- // YYPGOTO[NTERM-NUM].
+ // YYPGOTONTERM-NUM.
static const short yypgoto_[];
- // YYDEFGOTO[NTERM-NUM].
+ // YYDEFGOTONTERM-NUM.
static const short yydefgoto_[];
- // YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If
+ // YYTABLEYYPACT[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 short yytable_[];
static const short yycheck_[];
- // YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+ // YYSTOSSTATE-NUM -- The (internal number of the) accessing
// symbol of state STATE-NUM.
static const short yystos_[];
- // YYR1[YYN] -- Symbol number of symbol that rule YYN derives.
+ // YYR1YYN -- Symbol number of symbol that rule YYN derives.
static const short yyr1_[];
- // YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.
+ // YYR2YYN -- Number of symbols on the right hand side of rule YYN.
static const signed 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 PARSER6_DEBUG
- // YYRLINE[YYN] -- Source line where rule number YYN was defined.
+ // YYRLINEYYN -- Source line where rule number YYN was defined.
static const short yyrline_[];
/// Report on the debug stream that the rule \a r is going to be reduced.
- virtual void yy_reduce_print_ (int r);
+ virtual void yy_reduce_print_ (int r) const;
/// Print the state stack on the debug stream.
- virtual void yystack_print_ ();
+ virtual void yy_stack_print_ () const;
/// Debugging level.
int yydebug_;
/// Debug stream.
std::ostream* yycdebug_;
- /// \brief Display a symbol type, value and location.
+ /// \brief Display a symbol kind, value and location.
/// \param yyo The output stream.
/// \param yysym The symbol.
template <typename Base>
/// Default constructor.
by_state () YY_NOEXCEPT;
- /// The symbol type as needed by the constructor.
+ /// The symbol kind as needed by the constructor.
typedef state_type kind_type;
/// Constructor.
/// Record that this symbol is empty.
void clear () YY_NOEXCEPT;
- /// Steal the symbol type from \a that.
+ /// Steal the symbol kind 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 YY_NOEXCEPT;
+ /// The symbol kind (corresponding to \a state).
+ /// \a S_YYEMPTY when empty.
+ symbol_kind_type kind () const YY_NOEXCEPT;
/// The state number used to denote an empty symbol.
/// We use the initial state, as it does not have a value.
{
public:
// Hide our reversed order.
- typedef typename S::reverse_iterator iterator;
- typedef typename S::const_reverse_iterator const_iterator;
+ typedef typename S::iterator iterator;
+ typedef typename S::const_iterator const_iterator;
typedef typename S::size_type size_type;
typedef typename std::ptrdiff_t index_type;
: seq_ (n)
{}
+#if 201103L <= YY_CPLUSPLUS
+ /// Non copyable.
+ stack (const stack&) = delete;
+ /// Non copyable.
+ stack& operator= (const stack&) = delete;
+#endif
+
/// Random access.
///
/// Index 0 returns the topmost element.
return index_type (seq_.size ());
}
- std::ptrdiff_t
- ssize () const YY_NOEXCEPT
- {
- return std::ptrdiff_t (size ());
- }
-
/// Iterator on top of the stack (going downwards).
const_iterator
begin () const YY_NOEXCEPT
{
- return seq_.rbegin ();
+ return seq_.begin ();
}
/// Bottom of the stack.
const_iterator
end () const YY_NOEXCEPT
{
- return seq_.rend ();
+ return seq_.end ();
}
/// Present a slice of the top of a stack.
};
private:
+#if YY_CPLUSPLUS < 201103L
+ /// Non copyable.
stack (const stack&);
+ /// Non copyable.
stack& operator= (const stack&);
+#endif
/// The wrapped container.
S seq_;
};
/// Pop \a n symbols from the stack.
void yypop_ (int n = 1);
- /// Some specific tokens.
- static const token_number_type yy_error_token_ = 1;
- static const token_number_type yy_undef_token_ = 2;
-
/// Constants.
enum
{
- yyeof_ = 0,
yylast_ = 1254, ///< Last index in yytable_.
yynnts_ = 437, ///< Number of nonterminal symbols.
- yyfinal_ = 32, ///< Termination state number.
- yyntokens_ = 203 ///< Number of tokens.
+ yyfinal_ = 32 ///< Termination state number.
};
// User arguments.
isc::dhcp::Parser6Context& ctx;
+
};
inline
- Dhcp6Parser::token_number_type
+ Dhcp6Parser::symbol_kind_type
Dhcp6Parser::yytranslate_ (int t)
{
// YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to
// TOKEN-NUM as returned by yylex.
static
- const token_number_type
+ const unsigned char
translate_table[] =
{
0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
const int user_token_number_max_ = 457;
if (t <= 0)
- return yyeof_;
+ return symbol_kind::S_YYEOF;
else if (t <= user_token_number_max_)
- return translate_table[t];
+ return YY_CAST (symbol_kind_type, translate_table[t]);
else
- return yy_undef_token_;
+ return symbol_kind::S_YYUNDEF;
}
// basic_symbol.
-#if 201103L <= YY_CPLUSPLUS
- template <typename Base>
- Dhcp6Parser::basic_symbol<Base>::basic_symbol (basic_symbol&& that)
- : Base (std::move (that))
- , value ()
- , location (std::move (that.location))
- {
- switch (this->type_get ())
- {
- case 220: // value
- case 224: // map_value
- case 265: // ddns_replace_client_name_value
- case 302: // db_type
- case 403: // hr_mode
- case 539: // duid_type
- case 582: // ncr_protocol_value
- value.move< ElementPtr > (std::move (that.value));
- break;
-
- case 202: // "boolean"
- value.move< bool > (std::move (that.value));
- break;
-
- case 201: // "floating point"
- value.move< double > (std::move (that.value));
- break;
-
- case 200: // "integer"
- value.move< int64_t > (std::move (that.value));
- break;
-
- case 199: // "constant string"
- value.move< std::string > (std::move (that.value));
- break;
-
- default:
- break;
- }
-
- }
-#endif
-
template <typename Base>
Dhcp6Parser::basic_symbol<Base>::basic_symbol (const basic_symbol& that)
: Base (that)
, value ()
, location (that.location)
{
- switch (this->type_get ())
+ switch (this->kind ())
{
case 220: // value
case 224: // map_value
+ template <typename Base>
+ Dhcp6Parser::symbol_kind_type
+ Dhcp6Parser::basic_symbol<Base>::type_get () const YY_NOEXCEPT
+ {
+ return this->kind ();
+ }
+
template <typename Base>
bool
Dhcp6Parser::basic_symbol<Base>::empty () const YY_NOEXCEPT
{
- return Base::type_get () == empty_symbol;
+ return this->kind () == symbol_kind::S_YYEMPTY;
}
template <typename Base>
Dhcp6Parser::basic_symbol<Base>::move (basic_symbol& s)
{
super_type::move (s);
- switch (this->type_get ())
+ switch (this->kind ())
{
case 220: // value
case 224: // map_value
location = YY_MOVE (s.location);
}
- // by_type.
+ // by_kind.
inline
- Dhcp6Parser::by_type::by_type ()
- : type (empty_symbol)
+ Dhcp6Parser::by_kind::by_kind ()
+ : kind_ (symbol_kind::S_YYEMPTY)
{}
#if 201103L <= YY_CPLUSPLUS
inline
- Dhcp6Parser::by_type::by_type (by_type&& that)
- : type (that.type)
+ Dhcp6Parser::by_kind::by_kind (by_kind&& that)
+ : kind_ (that.kind_)
{
that.clear ();
}
#endif
inline
- Dhcp6Parser::by_type::by_type (const by_type& that)
- : type (that.type)
+ Dhcp6Parser::by_kind::by_kind (const by_kind& that)
+ : kind_ (that.kind_)
{}
inline
- Dhcp6Parser::by_type::by_type (token_type t)
- : type (yytranslate_ (t))
+ Dhcp6Parser::by_kind::by_kind (token_kind_type t)
+ : kind_ (yytranslate_ (t))
{}
inline
void
- Dhcp6Parser::by_type::clear ()
+ Dhcp6Parser::by_kind::clear ()
{
- type = empty_symbol;
+ kind_ = symbol_kind::S_YYEMPTY;
}
inline
void
- Dhcp6Parser::by_type::move (by_type& that)
+ Dhcp6Parser::by_kind::move (by_kind& that)
{
- type = that.type;
+ kind_ = that.kind_;
that.clear ();
}
inline
- int
- Dhcp6Parser::by_type::type_get () const YY_NOEXCEPT
+ Dhcp6Parser::symbol_kind_type
+ Dhcp6Parser::by_kind::kind () const YY_NOEXCEPT
+ {
+ return kind_;
+ }
+
+ inline
+ Dhcp6Parser::symbol_kind_type
+ Dhcp6Parser::by_kind::type_get () const YY_NOEXCEPT
{
- return type;
+ return this->kind ();
}
#line 14 "dhcp6_parser.yy"
} } // isc::dhcp
-#line 4596 "dhcp6_parser.h"
+#line 5350 "dhcp6_parser.h"
-// Generated 202004241256
-// A Bison parser, made by GNU Bison 3.5.4.
+// Generated 202005190718
+// A Bison parser, made by GNU Bison 3.6.2.
// Locations for Bison parsers in C++
-// Generated 202004241256
-// A Bison parser, made by GNU Bison 3.5.4.
+// Generated 202005190718
+// A Bison parser, made by GNU Bison 3.6.2.
// Starting with Bison 3.2, this file is useless: the structure it
// used to define is now defined in "location.hh".
-// Generated 202004241256
-// A Bison parser, made by GNU Bison 3.5.4.
+// Generated 202005190718
+// A Bison parser, made by GNU Bison 3.6.2.
// Starting with Bison 3.2, this file is useless: the structure it
// used to define is now defined with the parser itself.
-// Generated 202004241256
-// A Bison parser, made by GNU Bison 3.5.4.
+// Generated 202005190718
+// A Bison parser, made by GNU Bison 3.6.2.
// Locations for Bison parsers in C++
-// A Bison parser, made by GNU Bison 3.5.4.
+// A Bison parser, made by GNU Bison 3.6.2.
// Skeleton implementation for Bison LALR(1) parsers in C++
// This special exception was added by the Free Software Foundation in
// version 2.2 of Bison.
-// Undocumented macros, especially those whose name start with YY_,
-// are private implementation details. Do not rely on them.
+// DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual,
+// especially those whose name start with YY_ or yy_. They are
+// private implementation details that can be changed or removed.
// Take the name prefix into account.
#include <netconf/parser_context.h>
-#line 51 "netconf_parser.cc"
+#line 52 "netconf_parser.cc"
#ifndef YY_
# endif
#endif
+
// Whether we are compiled with exception support.
#ifndef YY_EXCEPTIONS
# if defined __GNUC__ && !defined __EXCEPTIONS
# define YY_STACK_PRINT() \
do { \
if (yydebug_) \
- yystack_print_ (); \
+ yy_stack_print_ (); \
} while (false)
#else // !NETCONF_DEBUG
#line 14 "netconf_parser.yy"
namespace isc { namespace netconf {
-#line 143 "netconf_parser.cc"
-
-
- /* Return YYSTR after stripping away unnecessary quotes and
- backslashes, so that it's suitable for yyerror. The heuristic is
- that double-quoting is unnecessary unless the string contains an
- apostrophe, a comma, or backslash (other than backslash-backslash).
- YYSTR is taken from yytname. */
- std::string
- NetconfParser::yytnamerr_ (const char *yystr)
- {
- if (*yystr == '"')
- {
- std::string yyr;
- char const *yyp = yystr;
-
- for (;;)
- switch (*++yyp)
- {
- case '\'':
- case ',':
- goto do_not_strip_quotes;
-
- case '\\':
- if (*++yyp != '\\')
- goto do_not_strip_quotes;
- else
- goto append;
-
- append:
- default:
- yyr += *yyp;
- break;
-
- case '"':
- return yyr;
- }
- do_not_strip_quotes: ;
- }
-
- return yystr;
- }
-
+#line 145 "netconf_parser.cc"
/// Build a parser object.
NetconfParser::NetconfParser (isc::netconf::ParserContext& ctx_yyarg)
{}
/*---------------.
- | Symbol types. |
+ | symbol kinds. |
`---------------*/
: state (s)
{}
- NetconfParser::symbol_number_type
- NetconfParser::by_state::type_get () const YY_NOEXCEPT
+ NetconfParser::symbol_kind_type
+ NetconfParser::by_state::kind () const YY_NOEXCEPT
{
if (state == empty_state)
- return empty_symbol;
+ return symbol_kind::S_YYEMPTY;
else
- return yystos_[+state];
+ return YY_CAST (symbol_kind_type, yystos_[+state]);
}
NetconfParser::stack_symbol_type::stack_symbol_type ()
NetconfParser::stack_symbol_type::stack_symbol_type (YY_RVREF (stack_symbol_type) that)
: super_type (YY_MOVE (that.state), YY_MOVE (that.location))
{
- switch (that.type_get ())
+ switch (that.kind ())
{
case 58: // value
case 61: // map_value
NetconfParser::stack_symbol_type::stack_symbol_type (state_type s, YY_MOVE_REF (symbol_type) that)
: super_type (s, YY_MOVE (that.location))
{
- switch (that.type_get ())
+ switch (that.kind ())
{
case 58: // value
case 61: // map_value
}
// that is emptied.
- that.type = empty_symbol;
+ that.kind_ = symbol_kind::S_YYEMPTY;
}
#if YY_CPLUSPLUS < 201103L
NetconfParser::stack_symbol_type::operator= (const stack_symbol_type& that)
{
state = that.state;
- switch (that.type_get ())
+ switch (that.kind ())
{
case 58: // value
case 61: // map_value
NetconfParser::stack_symbol_type::operator= (stack_symbol_type& that)
{
state = that.state;
- switch (that.type_get ())
+ switch (that.kind ())
{
case 58: // value
case 61: // map_value
#if NETCONF_DEBUG
template <typename Base>
void
- NetconfParser::yy_print_ (std::ostream& yyo,
- const basic_symbol<Base>& yysym) const
+ NetconfParser::yy_print_ (std::ostream& yyo, const basic_symbol<Base>& yysym) const
{
std::ostream& yyoutput = yyo;
YYUSE (yyoutput);
- symbol_number_type yytype = yysym.type_get ();
-#if defined __GNUC__ && ! defined __clang__ && ! defined __ICC && __GNUC__ * 100 + __GNUC_MINOR__ <= 408
- // Avoid a (spurious) G++ 4.8 warning about "array subscript is
- // below array bounds".
if (yysym.empty ())
- std::abort ();
-#endif
- yyo << (yytype < yyntokens_ ? "token" : "nterm")
- << ' ' << yytname_[yytype] << " ("
- << yysym.location << ": ";
- switch (yytype)
+ yyo << "empty symbol";
+ else
+ {
+ symbol_kind_type yykind = yysym.kind ();
+ yyo << (yykind < YYNTOKENS ? "token" : "nterm")
+ << ' ' << yysym.name () << " ("
+ << yysym.location << ": ";
+ switch (yykind)
{
case 46: // "constant string"
#line 108 "netconf_parser.yy"
{ yyoutput << yysym.value.template as < std::string > (); }
-#line 427 "netconf_parser.cc"
+#line 384 "netconf_parser.cc"
break;
case 47: // "integer"
#line 108 "netconf_parser.yy"
{ yyoutput << yysym.value.template as < int64_t > (); }
-#line 433 "netconf_parser.cc"
+#line 390 "netconf_parser.cc"
break;
case 48: // "floating point"
#line 108 "netconf_parser.yy"
{ yyoutput << yysym.value.template as < double > (); }
-#line 439 "netconf_parser.cc"
+#line 396 "netconf_parser.cc"
break;
case 49: // "boolean"
#line 108 "netconf_parser.yy"
{ yyoutput << yysym.value.template as < bool > (); }
-#line 445 "netconf_parser.cc"
+#line 402 "netconf_parser.cc"
break;
case 58: // value
#line 108 "netconf_parser.yy"
{ yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 451 "netconf_parser.cc"
+#line 408 "netconf_parser.cc"
break;
case 61: // map_value
#line 108 "netconf_parser.yy"
{ yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 457 "netconf_parser.cc"
+#line 414 "netconf_parser.cc"
break;
case 120: // socket_type_value
#line 108 "netconf_parser.yy"
{ yyoutput << yysym.value.template as < ElementPtr > (); }
-#line 463 "netconf_parser.cc"
+#line 420 "netconf_parser.cc"
break;
default:
break;
}
- yyo << ')';
+ yyo << ')';
+ }
}
#endif
NetconfParser::state_type
NetconfParser::yy_lr_goto_state_ (state_type yystate, int yysym)
{
- int yyr = yypgoto_[yysym - yyntokens_] + yystate;
+ int yyr = yypgoto_[yysym - YYNTOKENS] + yystate;
if (0 <= yyr && yyr <= yylast_ && yycheck_[yyr] == yystate)
return yytable_[yyr];
else
- return yydefgoto_[yysym - yyntokens_];
+ return yydefgoto_[yysym - YYNTOKENS];
}
bool
`-----------------------------------------------*/
yynewstate:
YYCDEBUG << "Entering state " << int (yystack_[0].state) << '\n';
+ YY_STACK_PRINT ();
// Accept?
if (yystack_[0].state == yyfinal_)
// Read a lookahead token.
if (yyla.empty ())
{
- YYCDEBUG << "Reading a token: ";
+ YYCDEBUG << "Reading a token\n";
#if YY_EXCEPTIONS
try
#endif // YY_EXCEPTIONS
}
YY_SYMBOL_PRINT ("Next token is", yyla);
+ if (yyla.kind () == symbol_kind::S_YYerror)
+ {
+ // The scanner already issued an error message, process directly
+ // to error recovery. But do not keep the error token as
+ // lookahead, it is too special and may lead us to an endless
+ // loop in error recovery. */
+ yyla.kind_ = symbol_kind::S_YYUNDEF;
+ goto yyerrlab1;
+ }
+
/* If the proper action on seeing token YYLA.TYPE is to reduce or
to detect an error, take that action. */
- yyn += yyla.type_get ();
- if (yyn < 0 || yylast_ < yyn || yycheck_[yyn] != yyla.type_get ())
+ yyn += yyla.kind ();
+ if (yyn < 0 || yylast_ < yyn || yycheck_[yyn] != yyla.kind ())
{
goto yydefault;
}
case 2:
#line 119 "netconf_parser.yy"
{ ctx.ctx_ = ctx.NO_KEYWORDS; }
-#line 726 "netconf_parser.cc"
+#line 695 "netconf_parser.cc"
break;
case 4:
#line 120 "netconf_parser.yy"
{ ctx.ctx_ = ctx.CONFIG; }
-#line 732 "netconf_parser.cc"
+#line 701 "netconf_parser.cc"
break;
case 6:
#line 121 "netconf_parser.yy"
{ ctx.ctx_ = ctx.NETCONF; }
-#line 738 "netconf_parser.cc"
+#line 707 "netconf_parser.cc"
break;
case 8:
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(m);
}
-#line 748 "netconf_parser.cc"
+#line 717 "netconf_parser.cc"
break;
case 9:
{
// parsing completed
}
-#line 756 "netconf_parser.cc"
+#line 725 "netconf_parser.cc"
break;
case 10:
// Push back the JSON value on the stack
ctx.stack_.push_back(yystack_[0].value.as < ElementPtr > ());
}
-#line 765 "netconf_parser.cc"
+#line 734 "netconf_parser.cc"
break;
case 11:
#line 146 "netconf_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); }
-#line 771 "netconf_parser.cc"
+#line 740 "netconf_parser.cc"
break;
case 12:
#line 147 "netconf_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location))); }
-#line 777 "netconf_parser.cc"
+#line 746 "netconf_parser.cc"
break;
case 13:
#line 148 "netconf_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); }
-#line 783 "netconf_parser.cc"
+#line 752 "netconf_parser.cc"
break;
case 14:
#line 149 "netconf_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); }
-#line 789 "netconf_parser.cc"
+#line 758 "netconf_parser.cc"
break;
case 15:
#line 150 "netconf_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new NullElement(ctx.loc2pos(yystack_[0].location))); }
-#line 795 "netconf_parser.cc"
+#line 764 "netconf_parser.cc"
break;
case 16:
#line 151 "netconf_parser.yy"
{ yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
-#line 801 "netconf_parser.cc"
+#line 770 "netconf_parser.cc"
break;
case 17:
#line 152 "netconf_parser.yy"
{ yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
-#line 807 "netconf_parser.cc"
+#line 776 "netconf_parser.cc"
break;
case 18:
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(m);
}
-#line 818 "netconf_parser.cc"
+#line 787 "netconf_parser.cc"
break;
case 19:
// (maybe some sanity checking), this would be the best place
// for it.
}
-#line 828 "netconf_parser.cc"
+#line 797 "netconf_parser.cc"
break;
case 20:
#line 167 "netconf_parser.yy"
{ yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
-#line 834 "netconf_parser.cc"
+#line 803 "netconf_parser.cc"
break;
case 23:
// map containing a single entry
ctx.stack_.back()->set(yystack_[2].value.as < std::string > (), yystack_[0].value.as < ElementPtr > ());
}
-#line 843 "netconf_parser.cc"
+#line 812 "netconf_parser.cc"
break;
case 24:
// comma and string:value
ctx.stack_.back()->set(yystack_[2].value.as < std::string > (), yystack_[0].value.as < ElementPtr > ());
}
-#line 853 "netconf_parser.cc"
+#line 822 "netconf_parser.cc"
break;
case 25:
ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(l);
}
-#line 862 "netconf_parser.cc"
+#line 831 "netconf_parser.cc"
break;
case 26:
#line 195 "netconf_parser.yy"
{
}
-#line 869 "netconf_parser.cc"
+#line 838 "netconf_parser.cc"
break;
case 29:
// List consisting of a single element.
ctx.stack_.back()->add(yystack_[0].value.as < ElementPtr > ());
}
-#line 878 "netconf_parser.cc"
+#line 847 "netconf_parser.cc"
break;
case 30:
// List ending with , and a value.
ctx.stack_.back()->add(yystack_[0].value.as < ElementPtr > ());
}
-#line 887 "netconf_parser.cc"
+#line 856 "netconf_parser.cc"
break;
case 31:
error(yystack_[1].location,
"got unexpected keyword \"" + keyword + "\" in " + where + " map.");
}
-#line 898 "netconf_parser.cc"
+#line 867 "netconf_parser.cc"
break;
case 32:
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(m);
}
-#line 909 "netconf_parser.cc"
+#line 878 "netconf_parser.cc"
break;
case 33:
// (maybe some sanity checking), this would be the best place
// for it.
}
-#line 919 "netconf_parser.cc"
+#line 888 "netconf_parser.cc"
break;
case 38:
ctx.stack_.push_back(m);
ctx.enter(ctx.NETCONF);
}
-#line 935 "netconf_parser.cc"
+#line 904 "netconf_parser.cc"
break;
case 39:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 946 "netconf_parser.cc"
+#line 915 "netconf_parser.cc"
break;
case 53:
ElementPtr flag(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("boot-update", flag);
}
-#line 955 "netconf_parser.cc"
+#line 924 "netconf_parser.cc"
break;
case 54:
ElementPtr flag(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("subscribe-changes", flag);
}
-#line 964 "netconf_parser.cc"
+#line 933 "netconf_parser.cc"
break;
case 55:
ElementPtr flag(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("validate-changes", flag);
}
-#line 973 "netconf_parser.cc"
+#line 942 "netconf_parser.cc"
break;
case 56:
{
ctx.enter(ctx.NO_KEYWORDS);
}
-#line 981 "netconf_parser.cc"
+#line 950 "netconf_parser.cc"
break;
case 57:
parent->set("user-context", user_context);
ctx.leave();
}
-#line 1008 "netconf_parser.cc"
+#line 977 "netconf_parser.cc"
break;
case 58:
{
ctx.enter(ctx.NO_KEYWORDS);
}
-#line 1016 "netconf_parser.cc"
+#line 985 "netconf_parser.cc"
break;
case 59:
parent->set("user-context", user_context);
ctx.leave();
}
-#line 1045 "netconf_parser.cc"
+#line 1014 "netconf_parser.cc"
break;
case 60:
ctx.stack_.push_back(l);
ctx.enter(ctx.HOOKS_LIBRARIES);
}
-#line 1056 "netconf_parser.cc"
+#line 1025 "netconf_parser.cc"
break;
case 61:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 1065 "netconf_parser.cc"
+#line 1034 "netconf_parser.cc"
break;
case 66:
ctx.stack_.back()->add(m);
ctx.stack_.push_back(m);
}
-#line 1075 "netconf_parser.cc"
+#line 1044 "netconf_parser.cc"
break;
case 67:
{
ctx.stack_.pop_back();
}
-#line 1083 "netconf_parser.cc"
+#line 1052 "netconf_parser.cc"
break;
case 73:
{
ctx.enter(ctx.NO_KEYWORDS);
}
-#line 1091 "netconf_parser.cc"
+#line 1060 "netconf_parser.cc"
break;
case 74:
ctx.stack_.back()->set("library", lib);
ctx.leave();
}
-#line 1101 "netconf_parser.cc"
+#line 1070 "netconf_parser.cc"
break;
case 75:
{
ctx.enter(ctx.NO_KEYWORDS);
}
-#line 1109 "netconf_parser.cc"
+#line 1078 "netconf_parser.cc"
break;
case 76:
ctx.stack_.back()->set("parameters", yystack_[0].value.as < ElementPtr > ());
ctx.leave();
}
-#line 1118 "netconf_parser.cc"
+#line 1087 "netconf_parser.cc"
break;
case 77:
ctx.stack_.push_back(m);
ctx.enter(ctx.MANAGED_SERVERS);
}
-#line 1129 "netconf_parser.cc"
+#line 1098 "netconf_parser.cc"
break;
case 78:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 1138 "netconf_parser.cc"
+#line 1107 "netconf_parser.cc"
break;
case 88:
ctx.stack_.push_back(m);
ctx.enter(ctx.SERVER);
}
-#line 1149 "netconf_parser.cc"
+#line 1118 "netconf_parser.cc"
break;
case 89:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 1158 "netconf_parser.cc"
+#line 1127 "netconf_parser.cc"
break;
case 90:
ctx.stack_.push_back(m);
ctx.enter(ctx.SERVER);
}
-#line 1169 "netconf_parser.cc"
+#line 1138 "netconf_parser.cc"
break;
case 91:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 1178 "netconf_parser.cc"
+#line 1147 "netconf_parser.cc"
break;
case 92:
ctx.stack_.push_back(m);
ctx.enter(ctx.SERVER);
}
-#line 1189 "netconf_parser.cc"
+#line 1158 "netconf_parser.cc"
break;
case 93:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 1198 "netconf_parser.cc"
+#line 1167 "netconf_parser.cc"
break;
case 94:
ctx.stack_.push_back(m);
ctx.enter(ctx.SERVER);
}
-#line 1209 "netconf_parser.cc"
+#line 1178 "netconf_parser.cc"
break;
case 95:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 1218 "netconf_parser.cc"
+#line 1187 "netconf_parser.cc"
break;
case 106:
{
ctx.enter(ctx.NO_KEYWORDS);
}
-#line 1226 "netconf_parser.cc"
+#line 1195 "netconf_parser.cc"
break;
case 107:
ctx.stack_.back()->set("model", model);
ctx.leave();
}
-#line 1236 "netconf_parser.cc"
+#line 1205 "netconf_parser.cc"
break;
case 108:
ctx.stack_.push_back(m);
ctx.enter(ctx.CONTROL_SOCKET);
}
-#line 1247 "netconf_parser.cc"
+#line 1216 "netconf_parser.cc"
break;
case 109:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 1256 "netconf_parser.cc"
+#line 1225 "netconf_parser.cc"
break;
case 118:
{
ctx.enter(ctx.SOCKET_TYPE);
}
-#line 1264 "netconf_parser.cc"
+#line 1233 "netconf_parser.cc"
break;
case 119:
ctx.stack_.back()->set("socket-type", yystack_[0].value.as < ElementPtr > ());
ctx.leave();
}
-#line 1273 "netconf_parser.cc"
+#line 1242 "netconf_parser.cc"
break;
case 120:
#line 537 "netconf_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("unix", ctx.loc2pos(yystack_[0].location))); }
-#line 1279 "netconf_parser.cc"
+#line 1248 "netconf_parser.cc"
break;
case 121:
#line 538 "netconf_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("http", ctx.loc2pos(yystack_[0].location))); }
-#line 1285 "netconf_parser.cc"
+#line 1254 "netconf_parser.cc"
break;
case 122:
#line 539 "netconf_parser.yy"
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("stdout", ctx.loc2pos(yystack_[0].location))); }
-#line 1291 "netconf_parser.cc"
+#line 1260 "netconf_parser.cc"
break;
case 123:
{
ctx.enter(ctx.NO_KEYWORDS);
}
-#line 1299 "netconf_parser.cc"
+#line 1268 "netconf_parser.cc"
break;
case 124:
ctx.stack_.back()->set("socket-name", name);
ctx.leave();
}
-#line 1309 "netconf_parser.cc"
+#line 1278 "netconf_parser.cc"
break;
case 125:
{
ctx.enter(ctx.NO_KEYWORDS);
}
-#line 1317 "netconf_parser.cc"
+#line 1286 "netconf_parser.cc"
break;
case 126:
ctx.stack_.back()->set("socket-url", url);
ctx.leave();
}
-#line 1327 "netconf_parser.cc"
+#line 1296 "netconf_parser.cc"
break;
case 127:
ctx.stack_.push_back(m);
ctx.enter(ctx.LOGGING);
}
-#line 1338 "netconf_parser.cc"
+#line 1307 "netconf_parser.cc"
break;
case 128:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 1347 "netconf_parser.cc"
+#line 1316 "netconf_parser.cc"
break;
case 132:
ctx.stack_.push_back(l);
ctx.enter(ctx.LOGGERS);
}
-#line 1358 "netconf_parser.cc"
+#line 1327 "netconf_parser.cc"
break;
case 133:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 1367 "netconf_parser.cc"
+#line 1336 "netconf_parser.cc"
break;
case 136:
ctx.stack_.back()->add(l);
ctx.stack_.push_back(l);
}
-#line 1377 "netconf_parser.cc"
+#line 1346 "netconf_parser.cc"
break;
case 137:
{
ctx.stack_.pop_back();
}
-#line 1385 "netconf_parser.cc"
+#line 1354 "netconf_parser.cc"
break;
case 147:
{
ctx.enter(ctx.NO_KEYWORDS);
}
-#line 1393 "netconf_parser.cc"
+#line 1362 "netconf_parser.cc"
break;
case 148:
ctx.stack_.back()->set("name", name);
ctx.leave();
}
-#line 1403 "netconf_parser.cc"
+#line 1372 "netconf_parser.cc"
break;
case 149:
ElementPtr dl(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("debuglevel", dl);
}
-#line 1412 "netconf_parser.cc"
+#line 1381 "netconf_parser.cc"
break;
case 150:
{
ctx.enter(ctx.NO_KEYWORDS);
}
-#line 1420 "netconf_parser.cc"
+#line 1389 "netconf_parser.cc"
break;
case 151:
ctx.stack_.back()->set("severity", sev);
ctx.leave();
}
-#line 1430 "netconf_parser.cc"
+#line 1399 "netconf_parser.cc"
break;
case 152:
ctx.stack_.push_back(l);
ctx.enter(ctx.OUTPUT_OPTIONS);
}
-#line 1441 "netconf_parser.cc"
+#line 1410 "netconf_parser.cc"
break;
case 153:
ctx.stack_.pop_back();
ctx.leave();
}
-#line 1450 "netconf_parser.cc"
+#line 1419 "netconf_parser.cc"
break;
case 156:
ctx.stack_.back()->add(m);
ctx.stack_.push_back(m);
}
-#line 1460 "netconf_parser.cc"
+#line 1429 "netconf_parser.cc"
break;
case 157:
{
ctx.stack_.pop_back();
}
-#line 1468 "netconf_parser.cc"
+#line 1437 "netconf_parser.cc"
break;
case 165:
{
ctx.enter(ctx.NO_KEYWORDS);
}
-#line 1476 "netconf_parser.cc"
+#line 1445 "netconf_parser.cc"
break;
case 166:
ctx.stack_.back()->set("output", sev);
ctx.leave();
}
-#line 1486 "netconf_parser.cc"
+#line 1455 "netconf_parser.cc"
break;
case 167:
ElementPtr flush(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("flush", flush);
}
-#line 1495 "netconf_parser.cc"
+#line 1464 "netconf_parser.cc"
break;
case 168:
ElementPtr maxsize(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("maxsize", maxsize);
}
-#line 1504 "netconf_parser.cc"
+#line 1473 "netconf_parser.cc"
break;
case 169:
ElementPtr maxver(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("maxver", maxver);
}
-#line 1513 "netconf_parser.cc"
+#line 1482 "netconf_parser.cc"
break;
case 170:
{
ctx.enter(ctx.NO_KEYWORDS);
}
-#line 1521 "netconf_parser.cc"
+#line 1490 "netconf_parser.cc"
break;
case 171:
ctx.stack_.back()->set("pattern", sev);
ctx.leave();
}
-#line 1531 "netconf_parser.cc"
+#line 1500 "netconf_parser.cc"
break;
-#line 1535 "netconf_parser.cc"
+#line 1504 "netconf_parser.cc"
default:
break;
YY_SYMBOL_PRINT ("-> $$ =", yylhs);
yypop_ (yylen);
yylen = 0;
- YY_STACK_PRINT ();
// Shift the result of the reduction.
yypush_ (YY_NULLPTR, YY_MOVE (yylhs));
if (!yyerrstatus_)
{
++yynerrs_;
- error (yyla.location, yysyntax_error_ (yystack_[0].state, yyla));
+ context yyctx (*this, yyla);
+ std::string msg = yysyntax_error_ (yyctx);
+ error (yyla.location, YY_MOVE (msg));
}
error, discard it. */
// Return failure if at end of input.
- if (yyla.type_get () == yyeof_)
+ if (yyla.kind () == symbol_kind::S_YYEOF)
YYABORT;
else if (!yyla.empty ())
{
this YYERROR. */
yypop_ (yylen);
yylen = 0;
+ YY_STACK_PRINT ();
goto yyerrlab1;
`-------------------------------------------------------------*/
yyerrlab1:
yyerrstatus_ = 3; // Each real token shifted decrements this.
- {
- stack_symbol_type error_token;
- for (;;)
- {
- yyn = yypact_[+yystack_[0].state];
- if (!yy_pact_value_is_default_ (yyn))
- {
- yyn += yy_error_token_;
- if (0 <= yyn && yyn <= yylast_ && yycheck_[yyn] == yy_error_token_)
- {
- yyn = yytable_[yyn];
- if (0 < yyn)
- break;
- }
- }
+ // Pop stack until we find a state that shifts the error token.
+ for (;;)
+ {
+ yyn = yypact_[+yystack_[0].state];
+ if (!yy_pact_value_is_default_ (yyn))
+ {
+ yyn += symbol_kind::S_YYerror;
+ if (0 <= yyn && yyn <= yylast_
+ && yycheck_[yyn] == symbol_kind::S_YYerror)
+ {
+ yyn = yytable_[yyn];
+ if (0 < yyn)
+ break;
+ }
+ }
- // Pop the current state because it cannot handle the error token.
- if (yystack_.size () == 1)
- YYABORT;
+ // Pop the current state because it cannot handle the error token.
+ if (yystack_.size () == 1)
+ YYABORT;
- yyerror_range[1].location = yystack_[0].location;
- yy_destroy_ ("Error: popping", yystack_[0]);
- yypop_ ();
- YY_STACK_PRINT ();
- }
+ yyerror_range[1].location = yystack_[0].location;
+ yy_destroy_ ("Error: popping", yystack_[0]);
+ yypop_ ();
+ YY_STACK_PRINT ();
+ }
+ {
+ stack_symbol_type error_token;
yyerror_range[2].location = yyla.location;
YYLLOC_DEFAULT (error_token.location, yyerror_range, 2);
/* Do not reclaim the symbols of the rule whose action triggered
this YYABORT or YYACCEPT. */
yypop_ (yylen);
+ YY_STACK_PRINT ();
while (1 < yystack_.size ())
{
yy_destroy_ ("Cleanup: popping", yystack_[0]);
error (yyexc.location, yyexc.what ());
}
- // Generate an error message.
+ /* Return YYSTR after stripping away unnecessary quotes and
+ backslashes, so that it's suitable for yyerror. The heuristic is
+ that double-quoting is unnecessary unless the string contains an
+ apostrophe, a comma, or backslash (other than backslash-backslash).
+ YYSTR is taken from yytname. */
std::string
- NetconfParser::yysyntax_error_ (state_type yystate, const symbol_type& yyla) const
+ NetconfParser::yytnamerr_ (const char *yystr)
{
- // Number of reported tokens (one for the "unexpected", one per
- // "expected").
- std::ptrdiff_t yycount = 0;
- // Its maximum.
- enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
- // Arguments of yyformat.
- char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
+ if (*yystr == '"')
+ {
+ std::string yyr;
+ char const *yyp = yystr;
+
+ for (;;)
+ switch (*++yyp)
+ {
+ case '\'':
+ case ',':
+ goto do_not_strip_quotes;
+
+ case '\\':
+ if (*++yyp != '\\')
+ goto do_not_strip_quotes;
+ else
+ goto append;
+
+ append:
+ default:
+ yyr += *yyp;
+ break;
+
+ case '"':
+ return yyr;
+ }
+ do_not_strip_quotes: ;
+ }
+
+ return yystr;
+ }
+ std::string
+ NetconfParser::symbol_name (symbol_kind_type yysymbol)
+ {
+ return yytnamerr_ (yytname_[yysymbol]);
+ }
+
+
+
+ // NetconfParser::context.
+ NetconfParser::context::context (const NetconfParser& yyparser, const symbol_type& yyla)
+ : yyparser_ (yyparser)
+ , yyla_ (yyla)
+ {}
+
+ int
+ NetconfParser::context::expected_tokens (symbol_kind_type yyarg[], int yyargn) const
+ {
+ // Actual number of expected tokens
+ int yycount = 0;
+
+ int yyn = yypact_[+yyparser_.yystack_[0].state];
+ if (!yy_pact_value_is_default_ (yyn))
+ {
+ /* Start YYX at -YYN if negative to avoid negative indexes in
+ YYCHECK. In other words, skip the first -YYN actions for
+ this state because they are default actions. */
+ int yyxbegin = yyn < 0 ? -yyn : 0;
+ // Stay within bounds of both yycheck and yytname.
+ int yychecklim = yylast_ - yyn + 1;
+ int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
+ for (int yyx = yyxbegin; yyx < yyxend; ++yyx)
+ if (yycheck_[yyx + yyn] == yyx && yyx != symbol_kind::S_YYerror
+ && !yy_table_value_is_error_ (yytable_[yyx + yyn]))
+ {
+ if (!yyarg)
+ ++yycount;
+ else if (yycount == yyargn)
+ return 0;
+ else
+ yyarg[yycount++] = YY_CAST (symbol_kind_type, yyx);
+ }
+ }
+
+ if (yyarg && yycount == 0 && 0 < yyargn)
+ yyarg[0] = symbol_kind::S_YYEMPTY;
+ return yycount;
+ }
+
+
+
+ int
+ NetconfParser::yy_syntax_error_arguments_ (const context& yyctx,
+ symbol_kind_type yyarg[], int yyargn) const
+ {
/* There are many possibilities here to consider:
- If this state is a consistent state with a default action, then
the only way this function was invoked is if the default action
one exception: it will still contain any token that will not be
accepted due to an error action in a later state.
*/
- if (!yyla.empty ())
- {
- symbol_number_type yytoken = yyla.type_get ();
- yyarg[yycount++] = yytname_[yytoken];
- int yyn = yypact_[+yystate];
- if (!yy_pact_value_is_default_ (yyn))
- {
- /* Start YYX at -YYN if negative to avoid negative indexes in
- YYCHECK. In other words, skip the first -YYN actions for
- this state because they are default actions. */
- int yyxbegin = yyn < 0 ? -yyn : 0;
- // Stay within bounds of both yycheck and yytname.
- int yychecklim = yylast_ - yyn + 1;
- int yyxend = yychecklim < yyntokens_ ? yychecklim : yyntokens_;
- for (int yyx = yyxbegin; yyx < yyxend; ++yyx)
- if (yycheck_[yyx + yyn] == yyx && yyx != yy_error_token_
- && !yy_table_value_is_error_ (yytable_[yyx + yyn]))
- {
- if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
- {
- yycount = 1;
- break;
- }
- else
- yyarg[yycount++] = yytname_[yyx];
- }
- }
+ if (!yyctx.lookahead ().empty ())
+ {
+ if (yyarg)
+ yyarg[0] = yyctx.token ();
+ int yyn = yyctx.expected_tokens (yyarg ? yyarg + 1 : yyarg, yyargn - 1);
+ return yyn + 1;
}
+ return 0;
+ }
+
+ // Generate an error message.
+ std::string
+ NetconfParser::yysyntax_error_ (const context& yyctx) const
+ {
+ // Its maximum.
+ enum { YYARGS_MAX = 5 };
+ // Arguments of yyformat.
+ symbol_kind_type yyarg[YYARGS_MAX];
+ int yycount = yy_syntax_error_arguments_ (yyctx, yyarg, YYARGS_MAX);
char const* yyformat = YY_NULLPTR;
switch (yycount)
for (char const* yyp = yyformat; *yyp; ++yyp)
if (yyp[0] == '%' && yyp[1] == 's' && yyi < yycount)
{
- yyres += yytnamerr_ (yyarg[yyi++]);
+ yyres += symbol_name (yyarg[yyi++]);
++yyp;
}
else
};
-
+#if NETCONF_DEBUG || 1
// YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
- // First, the terminals, then, starting at \a yyntokens_, nonterminals.
+ // First, the terminals, then, starting at \a YYNTOKENS, nonterminals.
const char*
const NetconfParser::yytname_[] =
{
- "\"end of file\"", "error", "$undefined", "\",\"", "\":\"", "\"[\"",
- "\"]\"", "\"{\"", "\"}\"", "\"null\"", "\"Netconf\"", "\"user-context\"",
- "\"comment\"", "\"boot-update\"", "\"subscribe-changes\"",
- "\"validate-changes\"", "\"managed-servers\"", "\"dhcp4\"", "\"dhcp6\"",
- "\"d2\"", "\"ca\"", "\"model\"", "\"control-socket\"", "\"socket-type\"",
- "\"unix\"", "\"http\"", "\"stdout\"", "\"socket-name\"",
- "\"socket-url\"", "\"hooks-libraries\"", "\"library\"", "\"parameters\"",
- "\"Logging\"", "\"loggers\"", "\"name\"", "\"output_options\"",
- "\"output\"", "\"debuglevel\"", "\"severity\"", "\"flush\"",
- "\"maxsize\"", "\"maxver\"", "\"pattern\"", "START_JSON",
- "START_NETCONF", "START_SUB_NETCONF", "\"constant string\"",
- "\"integer\"", "\"floating point\"", "\"boolean\"", "$accept", "start",
- "$@1", "$@2", "$@3", "sub_netconf", "$@4", "json", "value", "map", "$@5",
- "map_value", "map_content", "not_empty_map", "list_generic", "$@6",
- "list_content", "not_empty_list", "unknown_map_entry",
- "netconf_syntax_map", "$@7", "global_objects", "global_object",
- "netconf_object", "$@8", "global_params", "not_empty_global_params",
- "global_param", "boot_update", "subscribe_changes", "validate_changes",
- "user_context", "$@9", "comment", "$@10", "hooks_libraries", "$@11",
- "hooks_libraries_list", "not_empty_hooks_libraries_list",
- "hooks_library", "$@12", "hooks_params", "hooks_param", "library",
- "$@13", "parameters", "$@14", "managed_servers", "$@15",
- "servers_entries", "not_empty_servers_entries", "server_entry",
- "dhcp4_server", "$@16", "dhcp6_server", "$@17", "d2_server", "$@18",
- "ca_server", "$@19", "managed_server_params", "managed_server_param",
- "model", "$@20", "control_socket", "$@21", "control_socket_params",
+ "\"end of file\"", "error", "\"invalid token\"", "\",\"", "\":\"",
+ "\"[\"", "\"]\"", "\"{\"", "\"}\"", "\"null\"", "\"Netconf\"",
+ "\"user-context\"", "\"comment\"", "\"boot-update\"",
+ "\"subscribe-changes\"", "\"validate-changes\"", "\"managed-servers\"",
+ "\"dhcp4\"", "\"dhcp6\"", "\"d2\"", "\"ca\"", "\"model\"",
+ "\"control-socket\"", "\"socket-type\"", "\"unix\"", "\"http\"",
+ "\"stdout\"", "\"socket-name\"", "\"socket-url\"", "\"hooks-libraries\"",
+ "\"library\"", "\"parameters\"", "\"Logging\"", "\"loggers\"",
+ "\"name\"", "\"output_options\"", "\"output\"", "\"debuglevel\"",
+ "\"severity\"", "\"flush\"", "\"maxsize\"", "\"maxver\"", "\"pattern\"",
+ "START_JSON", "START_NETCONF", "START_SUB_NETCONF",
+ "\"constant string\"", "\"integer\"", "\"floating point\"",
+ "\"boolean\"", "$accept", "start", "$@1", "$@2", "$@3", "sub_netconf",
+ "$@4", "json", "value", "map", "$@5", "map_value", "map_content",
+ "not_empty_map", "list_generic", "$@6", "list_content", "not_empty_list",
+ "unknown_map_entry", "netconf_syntax_map", "$@7", "global_objects",
+ "global_object", "netconf_object", "$@8", "global_params",
+ "not_empty_global_params", "global_param", "boot_update",
+ "subscribe_changes", "validate_changes", "user_context", "$@9",
+ "comment", "$@10", "hooks_libraries", "$@11", "hooks_libraries_list",
+ "not_empty_hooks_libraries_list", "hooks_library", "$@12",
+ "hooks_params", "hooks_param", "library", "$@13", "parameters", "$@14",
+ "managed_servers", "$@15", "servers_entries",
+ "not_empty_servers_entries", "server_entry", "dhcp4_server", "$@16",
+ "dhcp6_server", "$@17", "d2_server", "$@18", "ca_server", "$@19",
+ "managed_server_params", "managed_server_param", "model", "$@20",
+ "control_socket", "$@21", "control_socket_params",
"control_socket_param", "socket_type", "$@22", "socket_type_value",
"socket_name", "$@23", "socket_url", "$@24", "logging_object", "$@25",
"logging_params", "logging_param", "loggers", "$@26", "loggers_entries",
"output_params_list", "output_params", "output", "$@32", "flush",
"maxsize", "maxver", "pattern", "$@33", YY_NULLPTR
};
+#endif
+
#if NETCONF_DEBUG
const short
703, 703
};
- // Print the state stack on the debug stream.
void
- NetconfParser::yystack_print_ ()
+ NetconfParser::yy_stack_print_ () const
{
*yycdebug_ << "Stack now";
for (stack_type::const_iterator
*yycdebug_ << '\n';
}
- // Report on the debug stream that the rule \a yyrule is going to be reduced.
void
- NetconfParser::yy_reduce_print_ (int yyrule)
+ NetconfParser::yy_reduce_print_ (int yyrule) const
{
int yylno = yyrline_[yyrule];
int yynrhs = yyr2_[yyrule];
#line 14 "netconf_parser.yy"
} } // isc::netconf
-#line 2147 "netconf_parser.cc"
+#line 2195 "netconf_parser.cc"
#line 711 "netconf_parser.yy"
-// A Bison parser, made by GNU Bison 3.5.4.
+// A Bison parser, made by GNU Bison 3.6.2.
// Skeleton interface for Bison LALR(1) parsers in C++
// C++ LALR(1) parser skeleton written by Akim Demaille.
-// Undocumented macros, especially those whose name start with YY_,
-// are private implementation details. Do not rely on them.
+// DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual,
+// especially those whose name start with YY_ or yy_. They are
+// private implementation details that can be changed or removed.
#ifndef YY_NETCONF_NETCONF_PARSER_H_INCLUDED
# define YY_NETCONF_NETCONF_PARSER_H_INCLUDED
using namespace isc::data;
using namespace std;
-#line 59 "netconf_parser.h"
+#line 60 "netconf_parser.h"
# include <cassert>
# include <cstdlib> // std::abort
#line 14 "netconf_parser.yy"
namespace isc { namespace netconf {
-#line 202 "netconf_parser.h"
+#line 203 "netconf_parser.h"
new (yyas_<T> ()) T (YY_MOVE (t));
}
+#if 201103L <= YY_CPLUSPLUS
+ /// Non copyable.
+ semantic_type (const self_type&) = delete;
+ /// Non copyable.
+ self_type& operator= (const self_type&) = delete;
+#endif
+
/// Destruction, allowed only if empty.
~semantic_type () YY_NOEXCEPT
{
}
private:
- /// Prohibit blind copies.
- self_type& operator= (const self_type&);
+#if YY_CPLUSPLUS < 201103L
+ /// Non copyable.
semantic_type (const self_type&);
+ /// Non copyable.
+ self_type& operator= (const self_type&);
+#endif
/// Accessor to raw memory as \a T.
template <typename T>
location_type location;
};
- /// Tokens.
+ /// Token kinds.
struct token
{
- enum yytokentype
- {
- TOKEN_END = 0,
- TOKEN_COMMA = 258,
- TOKEN_COLON = 259,
- TOKEN_LSQUARE_BRACKET = 260,
- TOKEN_RSQUARE_BRACKET = 261,
- TOKEN_LCURLY_BRACKET = 262,
- TOKEN_RCURLY_BRACKET = 263,
- TOKEN_NULL_TYPE = 264,
- TOKEN_NETCONF = 265,
- TOKEN_USER_CONTEXT = 266,
- TOKEN_COMMENT = 267,
- TOKEN_BOOT_UPDATE = 268,
- TOKEN_SUBSCRIBE_CHANGES = 269,
- TOKEN_VALIDATE_CHANGES = 270,
- TOKEN_MANAGED_SERVERS = 271,
- TOKEN_DHCP4_SERVER = 272,
- TOKEN_DHCP6_SERVER = 273,
- TOKEN_D2_SERVER = 274,
- TOKEN_CA_SERVER = 275,
- TOKEN_MODEL = 276,
- TOKEN_CONTROL_SOCKET = 277,
- TOKEN_SOCKET_TYPE = 278,
- TOKEN_UNIX = 279,
- TOKEN_HTTP = 280,
- TOKEN_STDOUT = 281,
- TOKEN_SOCKET_NAME = 282,
- TOKEN_SOCKET_URL = 283,
- TOKEN_HOOKS_LIBRARIES = 284,
- TOKEN_LIBRARY = 285,
- TOKEN_PARAMETERS = 286,
- TOKEN_LOGGING = 287,
- TOKEN_LOGGERS = 288,
- TOKEN_NAME = 289,
- TOKEN_OUTPUT_OPTIONS = 290,
- TOKEN_OUTPUT = 291,
- TOKEN_DEBUGLEVEL = 292,
- TOKEN_SEVERITY = 293,
- TOKEN_FLUSH = 294,
- TOKEN_MAXSIZE = 295,
- TOKEN_MAXVER = 296,
- TOKEN_PATTERN = 297,
- TOKEN_START_JSON = 298,
- TOKEN_START_NETCONF = 299,
- TOKEN_START_SUB_NETCONF = 300,
- TOKEN_STRING = 301,
- TOKEN_INTEGER = 302,
- TOKEN_FLOAT = 303,
- TOKEN_BOOLEAN = 304
+ enum token_kind_type
+ {
+ TOKEN_NETCONF_EMPTY = -2,
+ TOKEN_END = 0, // "end of file"
+ TOKEN_NETCONF_error = 256, // error
+ TOKEN_NETCONF_UNDEF = 257, // "invalid token"
+ TOKEN_COMMA = 258, // ","
+ TOKEN_COLON = 259, // ":"
+ TOKEN_LSQUARE_BRACKET = 260, // "["
+ TOKEN_RSQUARE_BRACKET = 261, // "]"
+ TOKEN_LCURLY_BRACKET = 262, // "{"
+ TOKEN_RCURLY_BRACKET = 263, // "}"
+ TOKEN_NULL_TYPE = 264, // "null"
+ TOKEN_NETCONF = 265, // "Netconf"
+ TOKEN_USER_CONTEXT = 266, // "user-context"
+ TOKEN_COMMENT = 267, // "comment"
+ TOKEN_BOOT_UPDATE = 268, // "boot-update"
+ TOKEN_SUBSCRIBE_CHANGES = 269, // "subscribe-changes"
+ TOKEN_VALIDATE_CHANGES = 270, // "validate-changes"
+ TOKEN_MANAGED_SERVERS = 271, // "managed-servers"
+ TOKEN_DHCP4_SERVER = 272, // "dhcp4"
+ TOKEN_DHCP6_SERVER = 273, // "dhcp6"
+ TOKEN_D2_SERVER = 274, // "d2"
+ TOKEN_CA_SERVER = 275, // "ca"
+ TOKEN_MODEL = 276, // "model"
+ TOKEN_CONTROL_SOCKET = 277, // "control-socket"
+ TOKEN_SOCKET_TYPE = 278, // "socket-type"
+ TOKEN_UNIX = 279, // "unix"
+ TOKEN_HTTP = 280, // "http"
+ TOKEN_STDOUT = 281, // "stdout"
+ TOKEN_SOCKET_NAME = 282, // "socket-name"
+ TOKEN_SOCKET_URL = 283, // "socket-url"
+ TOKEN_HOOKS_LIBRARIES = 284, // "hooks-libraries"
+ TOKEN_LIBRARY = 285, // "library"
+ TOKEN_PARAMETERS = 286, // "parameters"
+ TOKEN_LOGGING = 287, // "Logging"
+ TOKEN_LOGGERS = 288, // "loggers"
+ TOKEN_NAME = 289, // "name"
+ TOKEN_OUTPUT_OPTIONS = 290, // "output_options"
+ TOKEN_OUTPUT = 291, // "output"
+ TOKEN_DEBUGLEVEL = 292, // "debuglevel"
+ TOKEN_SEVERITY = 293, // "severity"
+ TOKEN_FLUSH = 294, // "flush"
+ TOKEN_MAXSIZE = 295, // "maxsize"
+ TOKEN_MAXVER = 296, // "maxver"
+ TOKEN_PATTERN = 297, // "pattern"
+ TOKEN_START_JSON = 298, // START_JSON
+ TOKEN_START_NETCONF = 299, // START_NETCONF
+ TOKEN_START_SUB_NETCONF = 300, // START_SUB_NETCONF
+ TOKEN_STRING = 301, // "constant string"
+ TOKEN_INTEGER = 302, // "integer"
+ TOKEN_FLOAT = 303, // "floating point"
+ TOKEN_BOOLEAN = 304 // "boolean"
};
+ /// Backward compatibility alias (Bison 3.6).
+ typedef token_kind_type yytokentype;
};
- /// (External) token type, as returned by yylex.
- typedef token::yytokentype token_type;
+ /// Token kind, as returned by yylex.
+ typedef token::yytokentype token_kind_type;
- /// Symbol type: an internal symbol number.
- typedef int symbol_number_type;
+ /// Backward compatibility alias (Bison 3.6).
+ typedef token_kind_type token_type;
- /// The symbol type number to denote an empty symbol.
- enum { empty_symbol = -2 };
+ /// Symbol kinds.
+ struct symbol_kind
+ {
+ enum symbol_kind_type
+ {
+ YYNTOKENS = 50, ///< Number of tokens.
+ S_YYEMPTY = -2,
+ S_YYEOF = 0, // "end of file"
+ S_YYerror = 1, // error
+ S_YYUNDEF = 2, // "invalid token"
+ S_COMMA = 3, // ","
+ S_COLON = 4, // ":"
+ S_LSQUARE_BRACKET = 5, // "["
+ S_RSQUARE_BRACKET = 6, // "]"
+ S_LCURLY_BRACKET = 7, // "{"
+ S_RCURLY_BRACKET = 8, // "}"
+ S_NULL_TYPE = 9, // "null"
+ S_NETCONF = 10, // "Netconf"
+ S_USER_CONTEXT = 11, // "user-context"
+ S_COMMENT = 12, // "comment"
+ S_BOOT_UPDATE = 13, // "boot-update"
+ S_SUBSCRIBE_CHANGES = 14, // "subscribe-changes"
+ S_VALIDATE_CHANGES = 15, // "validate-changes"
+ S_MANAGED_SERVERS = 16, // "managed-servers"
+ S_DHCP4_SERVER = 17, // "dhcp4"
+ S_DHCP6_SERVER = 18, // "dhcp6"
+ S_D2_SERVER = 19, // "d2"
+ S_CA_SERVER = 20, // "ca"
+ S_MODEL = 21, // "model"
+ S_CONTROL_SOCKET = 22, // "control-socket"
+ S_SOCKET_TYPE = 23, // "socket-type"
+ S_UNIX = 24, // "unix"
+ S_HTTP = 25, // "http"
+ S_STDOUT = 26, // "stdout"
+ S_SOCKET_NAME = 27, // "socket-name"
+ S_SOCKET_URL = 28, // "socket-url"
+ S_HOOKS_LIBRARIES = 29, // "hooks-libraries"
+ S_LIBRARY = 30, // "library"
+ S_PARAMETERS = 31, // "parameters"
+ S_LOGGING = 32, // "Logging"
+ S_LOGGERS = 33, // "loggers"
+ S_NAME = 34, // "name"
+ S_OUTPUT_OPTIONS = 35, // "output_options"
+ S_OUTPUT = 36, // "output"
+ S_DEBUGLEVEL = 37, // "debuglevel"
+ S_SEVERITY = 38, // "severity"
+ S_FLUSH = 39, // "flush"
+ S_MAXSIZE = 40, // "maxsize"
+ S_MAXVER = 41, // "maxver"
+ S_PATTERN = 42, // "pattern"
+ S_START_JSON = 43, // START_JSON
+ S_START_NETCONF = 44, // START_NETCONF
+ S_START_SUB_NETCONF = 45, // START_SUB_NETCONF
+ S_STRING = 46, // "constant string"
+ S_INTEGER = 47, // "integer"
+ S_FLOAT = 48, // "floating point"
+ S_BOOLEAN = 49, // "boolean"
+ S_YYACCEPT = 50, // $accept
+ S_start = 51, // start
+ S_52_1 = 52, // $@1
+ S_53_2 = 53, // $@2
+ S_54_3 = 54, // $@3
+ S_sub_netconf = 55, // sub_netconf
+ S_56_4 = 56, // $@4
+ S_json = 57, // json
+ S_value = 58, // value
+ S_map = 59, // map
+ S_60_5 = 60, // $@5
+ S_map_value = 61, // map_value
+ S_map_content = 62, // map_content
+ S_not_empty_map = 63, // not_empty_map
+ S_list_generic = 64, // list_generic
+ S_65_6 = 65, // $@6
+ S_list_content = 66, // list_content
+ S_not_empty_list = 67, // not_empty_list
+ S_unknown_map_entry = 68, // unknown_map_entry
+ S_netconf_syntax_map = 69, // netconf_syntax_map
+ S_70_7 = 70, // $@7
+ S_global_objects = 71, // global_objects
+ S_global_object = 72, // global_object
+ S_netconf_object = 73, // netconf_object
+ S_74_8 = 74, // $@8
+ S_global_params = 75, // global_params
+ S_not_empty_global_params = 76, // not_empty_global_params
+ S_global_param = 77, // global_param
+ S_boot_update = 78, // boot_update
+ S_subscribe_changes = 79, // subscribe_changes
+ S_validate_changes = 80, // validate_changes
+ S_user_context = 81, // user_context
+ S_82_9 = 82, // $@9
+ S_comment = 83, // comment
+ S_84_10 = 84, // $@10
+ S_hooks_libraries = 85, // hooks_libraries
+ S_86_11 = 86, // $@11
+ S_hooks_libraries_list = 87, // hooks_libraries_list
+ S_not_empty_hooks_libraries_list = 88, // not_empty_hooks_libraries_list
+ S_hooks_library = 89, // hooks_library
+ S_90_12 = 90, // $@12
+ S_hooks_params = 91, // hooks_params
+ S_hooks_param = 92, // hooks_param
+ S_library = 93, // library
+ S_94_13 = 94, // $@13
+ S_parameters = 95, // parameters
+ S_96_14 = 96, // $@14
+ S_managed_servers = 97, // managed_servers
+ S_98_15 = 98, // $@15
+ S_servers_entries = 99, // servers_entries
+ S_not_empty_servers_entries = 100, // not_empty_servers_entries
+ S_server_entry = 101, // server_entry
+ S_dhcp4_server = 102, // dhcp4_server
+ S_103_16 = 103, // $@16
+ S_dhcp6_server = 104, // dhcp6_server
+ S_105_17 = 105, // $@17
+ S_d2_server = 106, // d2_server
+ S_107_18 = 107, // $@18
+ S_ca_server = 108, // ca_server
+ S_109_19 = 109, // $@19
+ S_managed_server_params = 110, // managed_server_params
+ S_managed_server_param = 111, // managed_server_param
+ S_model = 112, // model
+ S_113_20 = 113, // $@20
+ S_control_socket = 114, // control_socket
+ S_115_21 = 115, // $@21
+ S_control_socket_params = 116, // control_socket_params
+ S_control_socket_param = 117, // control_socket_param
+ S_socket_type = 118, // socket_type
+ S_119_22 = 119, // $@22
+ S_socket_type_value = 120, // socket_type_value
+ S_socket_name = 121, // socket_name
+ S_122_23 = 122, // $@23
+ S_socket_url = 123, // socket_url
+ S_124_24 = 124, // $@24
+ S_logging_object = 125, // logging_object
+ S_126_25 = 126, // $@25
+ S_logging_params = 127, // logging_params
+ S_logging_param = 128, // logging_param
+ S_loggers = 129, // loggers
+ S_130_26 = 130, // $@26
+ S_loggers_entries = 131, // loggers_entries
+ S_logger_entry = 132, // logger_entry
+ S_133_27 = 133, // $@27
+ S_logger_params = 134, // logger_params
+ S_logger_param = 135, // logger_param
+ S_name = 136, // name
+ S_137_28 = 137, // $@28
+ S_debuglevel = 138, // debuglevel
+ S_severity = 139, // severity
+ S_140_29 = 140, // $@29
+ S_output_options_list = 141, // output_options_list
+ S_142_30 = 142, // $@30
+ S_output_options_list_content = 143, // output_options_list_content
+ S_output_entry = 144, // output_entry
+ S_145_31 = 145, // $@31
+ S_output_params_list = 146, // output_params_list
+ S_output_params = 147, // output_params
+ S_output = 148, // output
+ S_149_32 = 149, // $@32
+ S_flush = 150, // flush
+ S_maxsize = 151, // maxsize
+ S_maxver = 152, // maxver
+ S_pattern = 153, // pattern
+ S_154_33 = 154 // $@33
+ };
+ };
- /// Internal symbol number for tokens (subsumed by symbol_number_type).
- typedef signed char token_number_type;
+ /// (Internal) symbol kind.
+ typedef symbol_kind::symbol_kind_type symbol_kind_type;
+
+ /// The number of tokens.
+ static const symbol_kind_type YYNTOKENS = symbol_kind::YYNTOKENS;
/// A complete symbol.
///
- /// Expects its Base type to provide access to the symbol type
- /// via type_get ().
+ /// Expects its Base type to provide access to the symbol kind
+ /// via kind ().
///
/// Provide access to semantic value and location.
template <typename Base>
#if 201103L <= YY_CPLUSPLUS
/// Move constructor.
- basic_symbol (basic_symbol&& that);
+ basic_symbol (basic_symbol&& that)
+ : Base (std::move (that))
+ , value ()
+ , location (std::move (that.location))
+ {
+ switch (this->kind ())
+ {
+ case 58: // value
+ case 61: // map_value
+ case 120: // socket_type_value
+ value.move< ElementPtr > (std::move (that.value));
+ break;
+
+ case 49: // "boolean"
+ value.move< bool > (std::move (that.value));
+ break;
+
+ case 48: // "floating point"
+ value.move< double > (std::move (that.value));
+ break;
+
+ case 47: // "integer"
+ value.move< int64_t > (std::move (that.value));
+ break;
+
+ case 46: // "constant string"
+ value.move< std::string > (std::move (that.value));
+ break;
+
+ default:
+ break;
+ }
+
+ }
#endif
/// Copy constructor.
void clear ()
{
// User destructor.
- symbol_number_type yytype = this->type_get ();
+ symbol_kind_type yykind = this->kind ();
basic_symbol<Base>& yysym = *this;
(void) yysym;
- switch (yytype)
+ switch (yykind)
{
default:
break;
}
- // Type destructor.
-switch (yytype)
+ // Value type destructor.
+switch (yykind)
{
case 58: // value
case 61: // map_value
Base::clear ();
}
+ /// The user-facing name of this symbol.
+ std::string name () const YY_NOEXCEPT
+ {
+ return NetconfParser::symbol_name (this->kind ());
+ }
+
+ /// Backward compatibility (Bison 3.6).
+ symbol_kind_type type_get () const YY_NOEXCEPT;
+
/// Whether empty.
bool empty () const YY_NOEXCEPT;
};
/// Type access provider for token (enum) based symbols.
- struct by_type
+ struct by_kind
{
/// Default constructor.
- by_type ();
+ by_kind ();
#if 201103L <= YY_CPLUSPLUS
/// Move constructor.
- by_type (by_type&& that);
+ by_kind (by_kind&& that);
#endif
/// Copy constructor.
- by_type (const by_type& that);
+ by_kind (const by_kind& that);
- /// The symbol type as needed by the constructor.
- typedef token_type kind_type;
+ /// The symbol kind as needed by the constructor.
+ typedef token_kind_type kind_type;
/// Constructor from (external) token numbers.
- by_type (kind_type t);
+ by_kind (kind_type t);
/// Record that this symbol is empty.
void clear ();
- /// Steal the symbol type from \a that.
- void move (by_type& that);
+ /// Steal the symbol kind from \a that.
+ void move (by_kind& that);
/// The (internal) type number (corresponding to \a type).
/// \a empty when empty.
- symbol_number_type type_get () const YY_NOEXCEPT;
+ symbol_kind_type kind () const YY_NOEXCEPT;
+
+ /// Backward compatibility (Bison 3.6).
+ symbol_kind_type type_get () const YY_NOEXCEPT;
- /// The symbol type.
- /// \a empty_symbol when empty.
- /// An int, not token_number_type, to be able to store empty_symbol.
- int type;
+ /// The symbol kind.
+ /// \a S_YYEMPTY when empty.
+ symbol_kind_type kind_;
};
+ /// Backward compatibility for a private implementation detail (Bison 3.6).
+ typedef by_kind by_type;
+
/// "External" symbols: returned by the scanner.
- struct symbol_type : basic_symbol<by_type>
+ struct symbol_type : basic_symbol<by_kind>
{
/// Superclass.
- typedef basic_symbol<by_type> super_type;
+ typedef basic_symbol<by_kind> super_type;
/// Empty symbol.
symbol_type () {}
symbol_type (int tok, location_type l)
: super_type(token_type (tok), std::move (l))
{
- YY_ASSERT (tok == token::TOKEN_END || tok == token::TOKEN_COMMA || tok == token::TOKEN_COLON || tok == token::TOKEN_LSQUARE_BRACKET || tok == token::TOKEN_RSQUARE_BRACKET || tok == token::TOKEN_LCURLY_BRACKET || tok == token::TOKEN_RCURLY_BRACKET || tok == token::TOKEN_NULL_TYPE || tok == token::TOKEN_NETCONF || tok == token::TOKEN_USER_CONTEXT || tok == token::TOKEN_COMMENT || tok == token::TOKEN_BOOT_UPDATE || tok == token::TOKEN_SUBSCRIBE_CHANGES || tok == token::TOKEN_VALIDATE_CHANGES || tok == token::TOKEN_MANAGED_SERVERS || tok == token::TOKEN_DHCP4_SERVER || tok == token::TOKEN_DHCP6_SERVER || tok == token::TOKEN_D2_SERVER || tok == token::TOKEN_CA_SERVER || tok == token::TOKEN_MODEL || tok == token::TOKEN_CONTROL_SOCKET || tok == token::TOKEN_SOCKET_TYPE || tok == token::TOKEN_UNIX || tok == token::TOKEN_HTTP || tok == token::TOKEN_STDOUT || tok == token::TOKEN_SOCKET_NAME || tok == token::TOKEN_SOCKET_URL || tok == token::TOKEN_HOOKS_LIBRARIES || tok == token::TOKEN_LIBRARY || tok == token::TOKEN_PARAMETERS || tok == token::TOKEN_LOGGING || tok == token::TOKEN_LOGGERS || tok == token::TOKEN_NAME || tok == token::TOKEN_OUTPUT_OPTIONS || tok == token::TOKEN_OUTPUT || tok == token::TOKEN_DEBUGLEVEL || tok == token::TOKEN_SEVERITY || tok == token::TOKEN_FLUSH || tok == token::TOKEN_MAXSIZE || tok == token::TOKEN_MAXVER || tok == token::TOKEN_PATTERN || tok == token::TOKEN_START_JSON || tok == token::TOKEN_START_NETCONF || tok == token::TOKEN_START_SUB_NETCONF);
+ YY_ASSERT (tok == token::TOKEN_END || tok == token::TOKEN_NETCONF_error || tok == token::TOKEN_NETCONF_UNDEF || tok == token::TOKEN_COMMA || tok == token::TOKEN_COLON || tok == token::TOKEN_LSQUARE_BRACKET || tok == token::TOKEN_RSQUARE_BRACKET || tok == token::TOKEN_LCURLY_BRACKET || tok == token::TOKEN_RCURLY_BRACKET || tok == token::TOKEN_NULL_TYPE || tok == token::TOKEN_NETCONF || tok == token::TOKEN_USER_CONTEXT || tok == token::TOKEN_COMMENT || tok == token::TOKEN_BOOT_UPDATE || tok == token::TOKEN_SUBSCRIBE_CHANGES || tok == token::TOKEN_VALIDATE_CHANGES || tok == token::TOKEN_MANAGED_SERVERS || tok == token::TOKEN_DHCP4_SERVER || tok == token::TOKEN_DHCP6_SERVER || tok == token::TOKEN_D2_SERVER || tok == token::TOKEN_CA_SERVER || tok == token::TOKEN_MODEL || tok == token::TOKEN_CONTROL_SOCKET || tok == token::TOKEN_SOCKET_TYPE || tok == token::TOKEN_UNIX || tok == token::TOKEN_HTTP || tok == token::TOKEN_STDOUT || tok == token::TOKEN_SOCKET_NAME || tok == token::TOKEN_SOCKET_URL || tok == token::TOKEN_HOOKS_LIBRARIES || tok == token::TOKEN_LIBRARY || tok == token::TOKEN_PARAMETERS || tok == token::TOKEN_LOGGING || tok == token::TOKEN_LOGGERS || tok == token::TOKEN_NAME || tok == token::TOKEN_OUTPUT_OPTIONS || tok == token::TOKEN_OUTPUT || tok == token::TOKEN_DEBUGLEVEL || tok == token::TOKEN_SEVERITY || tok == token::TOKEN_FLUSH || tok == token::TOKEN_MAXSIZE || tok == token::TOKEN_MAXVER || tok == token::TOKEN_PATTERN || tok == token::TOKEN_START_JSON || tok == token::TOKEN_START_NETCONF || tok == token::TOKEN_START_SUB_NETCONF);
}
#else
symbol_type (int tok, const location_type& l)
: super_type(token_type (tok), l)
{
- YY_ASSERT (tok == token::TOKEN_END || tok == token::TOKEN_COMMA || tok == token::TOKEN_COLON || tok == token::TOKEN_LSQUARE_BRACKET || tok == token::TOKEN_RSQUARE_BRACKET || tok == token::TOKEN_LCURLY_BRACKET || tok == token::TOKEN_RCURLY_BRACKET || tok == token::TOKEN_NULL_TYPE || tok == token::TOKEN_NETCONF || tok == token::TOKEN_USER_CONTEXT || tok == token::TOKEN_COMMENT || tok == token::TOKEN_BOOT_UPDATE || tok == token::TOKEN_SUBSCRIBE_CHANGES || tok == token::TOKEN_VALIDATE_CHANGES || tok == token::TOKEN_MANAGED_SERVERS || tok == token::TOKEN_DHCP4_SERVER || tok == token::TOKEN_DHCP6_SERVER || tok == token::TOKEN_D2_SERVER || tok == token::TOKEN_CA_SERVER || tok == token::TOKEN_MODEL || tok == token::TOKEN_CONTROL_SOCKET || tok == token::TOKEN_SOCKET_TYPE || tok == token::TOKEN_UNIX || tok == token::TOKEN_HTTP || tok == token::TOKEN_STDOUT || tok == token::TOKEN_SOCKET_NAME || tok == token::TOKEN_SOCKET_URL || tok == token::TOKEN_HOOKS_LIBRARIES || tok == token::TOKEN_LIBRARY || tok == token::TOKEN_PARAMETERS || tok == token::TOKEN_LOGGING || tok == token::TOKEN_LOGGERS || tok == token::TOKEN_NAME || tok == token::TOKEN_OUTPUT_OPTIONS || tok == token::TOKEN_OUTPUT || tok == token::TOKEN_DEBUGLEVEL || tok == token::TOKEN_SEVERITY || tok == token::TOKEN_FLUSH || tok == token::TOKEN_MAXSIZE || tok == token::TOKEN_MAXVER || tok == token::TOKEN_PATTERN || tok == token::TOKEN_START_JSON || tok == token::TOKEN_START_NETCONF || tok == token::TOKEN_START_SUB_NETCONF);
+ YY_ASSERT (tok == token::TOKEN_END || tok == token::TOKEN_NETCONF_error || tok == token::TOKEN_NETCONF_UNDEF || tok == token::TOKEN_COMMA || tok == token::TOKEN_COLON || tok == token::TOKEN_LSQUARE_BRACKET || tok == token::TOKEN_RSQUARE_BRACKET || tok == token::TOKEN_LCURLY_BRACKET || tok == token::TOKEN_RCURLY_BRACKET || tok == token::TOKEN_NULL_TYPE || tok == token::TOKEN_NETCONF || tok == token::TOKEN_USER_CONTEXT || tok == token::TOKEN_COMMENT || tok == token::TOKEN_BOOT_UPDATE || tok == token::TOKEN_SUBSCRIBE_CHANGES || tok == token::TOKEN_VALIDATE_CHANGES || tok == token::TOKEN_MANAGED_SERVERS || tok == token::TOKEN_DHCP4_SERVER || tok == token::TOKEN_DHCP6_SERVER || tok == token::TOKEN_D2_SERVER || tok == token::TOKEN_CA_SERVER || tok == token::TOKEN_MODEL || tok == token::TOKEN_CONTROL_SOCKET || tok == token::TOKEN_SOCKET_TYPE || tok == token::TOKEN_UNIX || tok == token::TOKEN_HTTP || tok == token::TOKEN_STDOUT || tok == token::TOKEN_SOCKET_NAME || tok == token::TOKEN_SOCKET_URL || tok == token::TOKEN_HOOKS_LIBRARIES || tok == token::TOKEN_LIBRARY || tok == token::TOKEN_PARAMETERS || tok == token::TOKEN_LOGGING || tok == token::TOKEN_LOGGERS || tok == token::TOKEN_NAME || tok == token::TOKEN_OUTPUT_OPTIONS || tok == token::TOKEN_OUTPUT || tok == token::TOKEN_DEBUGLEVEL || tok == token::TOKEN_SEVERITY || tok == token::TOKEN_FLUSH || tok == token::TOKEN_MAXSIZE || tok == token::TOKEN_MAXVER || tok == token::TOKEN_PATTERN || tok == token::TOKEN_START_JSON || tok == token::TOKEN_START_NETCONF || tok == token::TOKEN_START_SUB_NETCONF);
}
#endif
#if 201103L <= YY_CPLUSPLUS
NetconfParser (isc::netconf::ParserContext& ctx_yyarg);
virtual ~NetconfParser ();
+#if 201103L <= YY_CPLUSPLUS
+ /// Non copyable.
+ NetconfParser (const NetconfParser&) = delete;
+ /// Non copyable.
+ NetconfParser& operator= (const NetconfParser&) = delete;
+#endif
+
/// Parse. An alias for parse ().
/// \returns 0 iff parsing succeeded.
int operator() ();
/// Report a syntax error.
void error (const syntax_error& err);
+ /// The user-facing name of the symbol whose (internal) number is
+ /// YYSYMBOL. No bounds checking.
+ static std::string symbol_name (symbol_kind_type yysymbol);
+
// Implementation of make_symbol for each symbol type.
#if 201103L <= YY_CPLUSPLUS
static
return symbol_type (token::TOKEN_END, l);
}
#endif
+#if 201103L <= YY_CPLUSPLUS
+ static
+ symbol_type
+ make_NETCONF_error (location_type l)
+ {
+ return symbol_type (token::TOKEN_NETCONF_error, std::move (l));
+ }
+#else
+ static
+ symbol_type
+ make_NETCONF_error (const location_type& l)
+ {
+ return symbol_type (token::TOKEN_NETCONF_error, l);
+ }
+#endif
+#if 201103L <= YY_CPLUSPLUS
+ static
+ symbol_type
+ make_NETCONF_UNDEF (location_type l)
+ {
+ return symbol_type (token::TOKEN_NETCONF_UNDEF, std::move (l));
+ }
+#else
+ static
+ symbol_type
+ make_NETCONF_UNDEF (const location_type& l)
+ {
+ return symbol_type (token::TOKEN_NETCONF_UNDEF, l);
+ }
+#endif
#if 201103L <= YY_CPLUSPLUS
static
symbol_type
#endif
+ class context
+ {
+ public:
+ context (const NetconfParser& yyparser, const symbol_type& yyla);
+ const symbol_type& lookahead () const { return yyla_; }
+ symbol_kind_type token () const { return yyla_.kind (); }
+ const location_type& location () const { return yyla_.location; }
+
+ /// Put in YYARG at most YYARGN of the expected tokens, and return the
+ /// number of tokens stored in YYARG. If YYARG is null, return the
+ /// number of expected tokens (guaranteed to be less than YYNTOKENS).
+ int expected_tokens (symbol_kind_type yyarg[], int yyargn) const;
+
+ private:
+ const NetconfParser& yyparser_;
+ const symbol_type& yyla_;
+ };
+
private:
- /// This class is not copyable.
+#if YY_CPLUSPLUS < 201103L
+ /// Non copyable.
NetconfParser (const NetconfParser&);
+ /// Non copyable.
NetconfParser& operator= (const NetconfParser&);
+#endif
+
/// Stored state numbers (used for stacks).
typedef short 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;
+ /// The arguments of the error message.
+ int yy_syntax_error_arguments_ (const context& yyctx,
+ symbol_kind_type yyarg[], int yyargn) const;
+ /// Generate an error message.
+ /// \param yyctx the context in which the error occurred.
+ virtual std::string yysyntax_error_ (const context& yyctx) const;
/// Compute post-reduction state.
/// \param yystate the current state
/// \param yysym the nonterminal to push on the stack
static const signed char yypact_ninf_;
static const signed char yytable_ninf_;
- /// Convert a scanner token number \a t to a symbol number.
- /// In theory \a t should be a token_type, but character literals
+ /// Convert a scanner token kind \a t to a symbol kind.
+ /// In theory \a t should be a token_kind_type, but character literals
/// are valid, yet not members of the token_type enum.
- static token_number_type yytranslate_ (int t);
+ static symbol_kind_type yytranslate_ (int t);
+
+ /// Convert the symbol name \a n to a form suitable for a diagnostic.
+ static std::string yytnamerr_ (const char *yystr);
+
+ /// For a symbol, its name in clear.
+ static const char* const yytname_[];
+
// Tables.
- // YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+ // YYPACTSTATE-NUM -- Index in YYTABLE of the portion describing
// STATE-NUM.
static const short yypact_[];
- // YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
+ // YYDEFACTSTATE-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].
+ // YYPGOTONTERM-NUM.
static const signed char yypgoto_[];
- // YYDEFGOTO[NTERM-NUM].
+ // YYDEFGOTONTERM-NUM.
static const short yydefgoto_[];
- // YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If
+ // YYTABLEYYPACT[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 short yytable_[];
static const short yycheck_[];
- // YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+ // YYSTOSSTATE-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.
+ // YYR1YYN -- 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.
+ // YYR2YYN -- Number of symbols on the right hand side of rule YYN.
static const signed 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 NETCONF_DEBUG
- // YYRLINE[YYN] -- Source line where rule number YYN was defined.
+ // YYRLINEYYN -- Source line where rule number YYN was defined.
static const short yyrline_[];
/// Report on the debug stream that the rule \a r is going to be reduced.
- virtual void yy_reduce_print_ (int r);
+ virtual void yy_reduce_print_ (int r) const;
/// Print the state stack on the debug stream.
- virtual void yystack_print_ ();
+ virtual void yy_stack_print_ () const;
/// Debugging level.
int yydebug_;
/// Debug stream.
std::ostream* yycdebug_;
- /// \brief Display a symbol type, value and location.
+ /// \brief Display a symbol kind, value and location.
/// \param yyo The output stream.
/// \param yysym The symbol.
template <typename Base>
/// Default constructor.
by_state () YY_NOEXCEPT;
- /// The symbol type as needed by the constructor.
+ /// The symbol kind as needed by the constructor.
typedef state_type kind_type;
/// Constructor.
/// Record that this symbol is empty.
void clear () YY_NOEXCEPT;
- /// Steal the symbol type from \a that.
+ /// Steal the symbol kind 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 YY_NOEXCEPT;
+ /// The symbol kind (corresponding to \a state).
+ /// \a S_YYEMPTY when empty.
+ symbol_kind_type kind () const YY_NOEXCEPT;
/// The state number used to denote an empty symbol.
/// We use the initial state, as it does not have a value.
{
public:
// Hide our reversed order.
- typedef typename S::reverse_iterator iterator;
- typedef typename S::const_reverse_iterator const_iterator;
+ typedef typename S::iterator iterator;
+ typedef typename S::const_iterator const_iterator;
typedef typename S::size_type size_type;
typedef typename std::ptrdiff_t index_type;
: seq_ (n)
{}
+#if 201103L <= YY_CPLUSPLUS
+ /// Non copyable.
+ stack (const stack&) = delete;
+ /// Non copyable.
+ stack& operator= (const stack&) = delete;
+#endif
+
/// Random access.
///
/// Index 0 returns the topmost element.
return index_type (seq_.size ());
}
- std::ptrdiff_t
- ssize () const YY_NOEXCEPT
- {
- return std::ptrdiff_t (size ());
- }
-
/// Iterator on top of the stack (going downwards).
const_iterator
begin () const YY_NOEXCEPT
{
- return seq_.rbegin ();
+ return seq_.begin ();
}
/// Bottom of the stack.
const_iterator
end () const YY_NOEXCEPT
{
- return seq_.rend ();
+ return seq_.end ();
}
/// Present a slice of the top of a stack.
};
private:
+#if YY_CPLUSPLUS < 201103L
+ /// Non copyable.
stack (const stack&);
+ /// Non copyable.
stack& operator= (const stack&);
+#endif
/// The wrapped container.
S seq_;
};
/// Pop \a n symbols from the stack.
void yypop_ (int n = 1);
- /// Some specific tokens.
- static const token_number_type yy_error_token_ = 1;
- static const token_number_type yy_undef_token_ = 2;
-
/// Constants.
enum
{
- yyeof_ = 0,
yylast_ = 234, ///< Last index in yytable_.
yynnts_ = 105, ///< Number of nonterminal symbols.
- yyfinal_ = 8, ///< Termination state number.
- yyntokens_ = 50 ///< Number of tokens.
+ yyfinal_ = 8 ///< Termination state number.
};
// User arguments.
isc::netconf::ParserContext& ctx;
+
};
inline
- NetconfParser::token_number_type
+ NetconfParser::symbol_kind_type
NetconfParser::yytranslate_ (int t)
{
// YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to
// TOKEN-NUM as returned by yylex.
static
- const token_number_type
+ const signed char
translate_table[] =
{
0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
const int user_token_number_max_ = 304;
if (t <= 0)
- return yyeof_;
+ return symbol_kind::S_YYEOF;
else if (t <= user_token_number_max_)
- return translate_table[t];
+ return YY_CAST (symbol_kind_type, translate_table[t]);
else
- return yy_undef_token_;
+ return symbol_kind::S_YYUNDEF;
}
// basic_symbol.
-#if 201103L <= YY_CPLUSPLUS
- template <typename Base>
- NetconfParser::basic_symbol<Base>::basic_symbol (basic_symbol&& that)
- : Base (std::move (that))
- , value ()
- , location (std::move (that.location))
- {
- switch (this->type_get ())
- {
- case 58: // value
- case 61: // map_value
- case 120: // socket_type_value
- value.move< ElementPtr > (std::move (that.value));
- break;
-
- case 49: // "boolean"
- value.move< bool > (std::move (that.value));
- break;
-
- case 48: // "floating point"
- value.move< double > (std::move (that.value));
- break;
-
- case 47: // "integer"
- value.move< int64_t > (std::move (that.value));
- break;
-
- case 46: // "constant string"
- value.move< std::string > (std::move (that.value));
- break;
-
- default:
- break;
- }
-
- }
-#endif
-
template <typename Base>
NetconfParser::basic_symbol<Base>::basic_symbol (const basic_symbol& that)
: Base (that)
, value ()
, location (that.location)
{
- switch (this->type_get ())
+ switch (this->kind ())
{
case 58: // value
case 61: // map_value
+ template <typename Base>
+ NetconfParser::symbol_kind_type
+ NetconfParser::basic_symbol<Base>::type_get () const YY_NOEXCEPT
+ {
+ return this->kind ();
+ }
+
template <typename Base>
bool
NetconfParser::basic_symbol<Base>::empty () const YY_NOEXCEPT
{
- return Base::type_get () == empty_symbol;
+ return this->kind () == symbol_kind::S_YYEMPTY;
}
template <typename Base>
NetconfParser::basic_symbol<Base>::move (basic_symbol& s)
{
super_type::move (s);
- switch (this->type_get ())
+ switch (this->kind ())
{
case 58: // value
case 61: // map_value
location = YY_MOVE (s.location);
}
- // by_type.
+ // by_kind.
inline
- NetconfParser::by_type::by_type ()
- : type (empty_symbol)
+ NetconfParser::by_kind::by_kind ()
+ : kind_ (symbol_kind::S_YYEMPTY)
{}
#if 201103L <= YY_CPLUSPLUS
inline
- NetconfParser::by_type::by_type (by_type&& that)
- : type (that.type)
+ NetconfParser::by_kind::by_kind (by_kind&& that)
+ : kind_ (that.kind_)
{
that.clear ();
}
#endif
inline
- NetconfParser::by_type::by_type (const by_type& that)
- : type (that.type)
+ NetconfParser::by_kind::by_kind (const by_kind& that)
+ : kind_ (that.kind_)
{}
inline
- NetconfParser::by_type::by_type (token_type t)
- : type (yytranslate_ (t))
+ NetconfParser::by_kind::by_kind (token_kind_type t)
+ : kind_ (yytranslate_ (t))
{}
inline
void
- NetconfParser::by_type::clear ()
+ NetconfParser::by_kind::clear ()
{
- type = empty_symbol;
+ kind_ = symbol_kind::S_YYEMPTY;
}
inline
void
- NetconfParser::by_type::move (by_type& that)
+ NetconfParser::by_kind::move (by_kind& that)
{
- type = that.type;
+ kind_ = that.kind_;
that.clear ();
}
inline
- int
- NetconfParser::by_type::type_get () const YY_NOEXCEPT
+ NetconfParser::symbol_kind_type
+ NetconfParser::by_kind::kind () const YY_NOEXCEPT
+ {
+ return kind_;
+ }
+
+ inline
+ NetconfParser::symbol_kind_type
+ NetconfParser::by_kind::type_get () const YY_NOEXCEPT
{
- return type;
+ return this->kind ();
}
#line 14 "netconf_parser.yy"
} } // isc::netconf
-#line 2112 "netconf_parser.h"
+#line 2381 "netconf_parser.h"
-// Generated 202004241256
-// A Bison parser, made by GNU Bison 3.5.4.
+// Generated 202005190718
+// A Bison parser, made by GNU Bison 3.6.2.
// Starting with Bison 3.2, this file is useless: the structure it
// used to define is now defined in "location.hh".
-// Generated 202004241256
-// A Bison parser, made by GNU Bison 3.5.4.
+// Generated 202005190718
+// A Bison parser, made by GNU Bison 3.6.2.
// Starting with Bison 3.2, this file is useless: the structure it
// used to define is now defined with the parser itself.
-// Generated 202004241255
-// A Bison parser, made by GNU Bison 3.5.4.
+// Generated 202005190717
+// A Bison parser, made by GNU Bison 3.6.2.
// Locations for Bison parsers in C++
-// A Bison parser, made by GNU Bison 3.5.4.
+// A Bison parser, made by GNU Bison 3.6.2.
// Skeleton implementation for Bison LALR(1) parsers in C++
// This special exception was added by the Free Software Foundation in
// version 2.2 of Bison.
-// Undocumented macros, especially those whose name start with YY_,
-// are private implementation details. Do not rely on them.
+// DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual,
+// especially those whose name start with YY_ or yy_. They are
+// private implementation details that can be changed or removed.
// Take the name prefix into account.
# include "eval_context.h"
-#line 51 "parser.cc"
+#line 52 "parser.cc"
#ifndef YY_
# endif
#endif
+
// Whether we are compiled with exception support.
#ifndef YY_EXCEPTIONS
# if defined __GNUC__ && !defined __EXCEPTIONS
# define YY_STACK_PRINT() \
do { \
if (yydebug_) \
- yystack_print_ (); \
+ yy_stack_print_ (); \
} while (false)
#else // !EVALDEBUG
#line 14 "parser.yy"
namespace isc { namespace eval {
-#line 143 "parser.cc"
-
-
- /* Return YYSTR after stripping away unnecessary quotes and
- backslashes, so that it's suitable for yyerror. The heuristic is
- that double-quoting is unnecessary unless the string contains an
- apostrophe, a comma, or backslash (other than backslash-backslash).
- YYSTR is taken from yytname. */
- std::string
- EvalParser::yytnamerr_ (const char *yystr)
- {
- if (*yystr == '"')
- {
- std::string yyr;
- char const *yyp = yystr;
-
- for (;;)
- switch (*++yyp)
- {
- case '\'':
- case ',':
- goto do_not_strip_quotes;
-
- case '\\':
- if (*++yyp != '\\')
- goto do_not_strip_quotes;
- else
- goto append;
-
- append:
- default:
- yyr += *yyp;
- break;
-
- case '"':
- return yyr;
- }
- do_not_strip_quotes: ;
- }
-
- return yystr;
- }
-
+#line 145 "parser.cc"
/// Build a parser object.
EvalParser::EvalParser (EvalContext& ctx_yyarg)
{}
/*---------------.
- | Symbol types. |
+ | symbol kinds. |
`---------------*/
: state (s)
{}
- EvalParser::symbol_number_type
- EvalParser::by_state::type_get () const YY_NOEXCEPT
+ EvalParser::symbol_kind_type
+ EvalParser::by_state::kind () const YY_NOEXCEPT
{
if (state == empty_state)
- return empty_symbol;
+ return symbol_kind::S_YYEMPTY;
else
- return yystos_[+state];
+ return YY_CAST (symbol_kind_type, yystos_[+state]);
}
EvalParser::stack_symbol_type::stack_symbol_type ()
EvalParser::stack_symbol_type::stack_symbol_type (YY_RVREF (stack_symbol_type) that)
: super_type (YY_MOVE (that.state), YY_MOVE (that.location))
{
- switch (that.type_get ())
+ switch (that.kind ())
{
case 63: // option_repr_type
value.YY_MOVE_OR_COPY< TokenOption::RepresentationType > (YY_MOVE (that.value));
EvalParser::stack_symbol_type::stack_symbol_type (state_type s, YY_MOVE_REF (symbol_type) that)
: super_type (s, YY_MOVE (that.location))
{
- switch (that.type_get ())
+ switch (that.kind ())
{
case 63: // option_repr_type
value.move< TokenOption::RepresentationType > (YY_MOVE (that.value));
}
// that is emptied.
- that.type = empty_symbol;
+ that.kind_ = symbol_kind::S_YYEMPTY;
}
#if YY_CPLUSPLUS < 201103L
EvalParser::stack_symbol_type::operator= (const stack_symbol_type& that)
{
state = that.state;
- switch (that.type_get ())
+ switch (that.kind ())
{
case 63: // option_repr_type
value.copy< TokenOption::RepresentationType > (that.value);
EvalParser::stack_symbol_type::operator= (stack_symbol_type& that)
{
state = that.state;
- switch (that.type_get ())
+ switch (that.kind ())
{
case 63: // option_repr_type
value.move< TokenOption::RepresentationType > (that.value);
#if EVALDEBUG
template <typename Base>
void
- EvalParser::yy_print_ (std::ostream& yyo,
- const basic_symbol<Base>& yysym) const
+ EvalParser::yy_print_ (std::ostream& yyo, const basic_symbol<Base>& yysym) const
{
std::ostream& yyoutput = yyo;
YYUSE (yyoutput);
- symbol_number_type yytype = yysym.type_get ();
-#if defined __GNUC__ && ! defined __clang__ && ! defined __ICC && __GNUC__ * 100 + __GNUC_MINOR__ <= 408
- // Avoid a (spurious) G++ 4.8 warning about "array subscript is
- // below array bounds".
if (yysym.empty ())
- std::abort ();
-#endif
- yyo << (yytype < yyntokens_ ? "token" : "nterm")
- << ' ' << yytname_[yytype] << " ("
- << yysym.location << ": ";
- switch (yytype)
+ yyo << "empty symbol";
+ else
+ {
+ symbol_kind_type yykind = yysym.kind ();
+ yyo << (yykind < YYNTOKENS ? "token" : "nterm")
+ << ' ' << yysym.name () << " ("
+ << yysym.location << ": ";
+ switch (yykind)
{
case 50: // "constant string"
#line 112 "parser.yy"
{ yyoutput << yysym.value.template as < std::string > (); }
-#line 507 "parser.cc"
+#line 464 "parser.cc"
break;
case 51: // "integer"
#line 112 "parser.yy"
{ yyoutput << yysym.value.template as < std::string > (); }
-#line 513 "parser.cc"
+#line 470 "parser.cc"
break;
case 52: // "constant hexstring"
#line 112 "parser.yy"
{ yyoutput << yysym.value.template as < std::string > (); }
-#line 519 "parser.cc"
+#line 476 "parser.cc"
break;
case 53: // "option name"
#line 112 "parser.yy"
{ yyoutput << yysym.value.template as < std::string > (); }
-#line 525 "parser.cc"
+#line 482 "parser.cc"
break;
case 54: // "ip address"
#line 112 "parser.yy"
{ yyoutput << yysym.value.template as < std::string > (); }
-#line 531 "parser.cc"
+#line 488 "parser.cc"
break;
case 60: // integer_expr
#line 112 "parser.yy"
{ yyoutput << yysym.value.template as < uint32_t > (); }
-#line 537 "parser.cc"
+#line 494 "parser.cc"
break;
case 61: // option_code
#line 112 "parser.yy"
{ yyoutput << yysym.value.template as < uint16_t > (); }
-#line 543 "parser.cc"
+#line 500 "parser.cc"
break;
case 62: // sub_option_code
#line 112 "parser.yy"
{ yyoutput << yysym.value.template as < uint16_t > (); }
-#line 549 "parser.cc"
+#line 506 "parser.cc"
break;
case 63: // option_repr_type
#line 112 "parser.yy"
{ yyoutput << yysym.value.template as < TokenOption::RepresentationType > (); }
-#line 555 "parser.cc"
+#line 512 "parser.cc"
break;
case 64: // nest_level
#line 112 "parser.yy"
{ yyoutput << yysym.value.template as < int8_t > (); }
-#line 561 "parser.cc"
+#line 518 "parser.cc"
break;
case 65: // pkt_metadata
#line 112 "parser.yy"
{ yyoutput << yysym.value.template as < TokenPkt::MetadataType > (); }
-#line 567 "parser.cc"
+#line 524 "parser.cc"
break;
case 66: // enterprise_id
#line 112 "parser.yy"
{ yyoutput << yysym.value.template as < uint32_t > (); }
-#line 573 "parser.cc"
+#line 530 "parser.cc"
break;
case 67: // pkt4_field
#line 112 "parser.yy"
{ yyoutput << yysym.value.template as < TokenPkt4::FieldType > (); }
-#line 579 "parser.cc"
+#line 536 "parser.cc"
break;
case 68: // pkt6_field
#line 112 "parser.yy"
{ yyoutput << yysym.value.template as < TokenPkt6::FieldType > (); }
-#line 585 "parser.cc"
+#line 542 "parser.cc"
break;
case 69: // relay6_field
#line 112 "parser.yy"
{ yyoutput << yysym.value.template as < TokenRelay6Field::FieldType > (); }
-#line 591 "parser.cc"
+#line 548 "parser.cc"
break;
default:
break;
}
- yyo << ')';
+ yyo << ')';
+ }
}
#endif
EvalParser::state_type
EvalParser::yy_lr_goto_state_ (state_type yystate, int yysym)
{
- int yyr = yypgoto_[yysym - yyntokens_] + yystate;
+ int yyr = yypgoto_[yysym - YYNTOKENS] + yystate;
if (0 <= yyr && yyr <= yylast_ && yycheck_[yyr] == yystate)
return yytable_[yyr];
else
- return yydefgoto_[yysym - yyntokens_];
+ return yydefgoto_[yysym - YYNTOKENS];
}
bool
`-----------------------------------------------*/
yynewstate:
YYCDEBUG << "Entering state " << int (yystack_[0].state) << '\n';
+ YY_STACK_PRINT ();
// Accept?
if (yystack_[0].state == yyfinal_)
// Read a lookahead token.
if (yyla.empty ())
{
- YYCDEBUG << "Reading a token: ";
+ YYCDEBUG << "Reading a token\n";
#if YY_EXCEPTIONS
try
#endif // YY_EXCEPTIONS
}
YY_SYMBOL_PRINT ("Next token is", yyla);
+ if (yyla.kind () == symbol_kind::S_YYerror)
+ {
+ // The scanner already issued an error message, process directly
+ // to error recovery. But do not keep the error token as
+ // lookahead, it is too special and may lead us to an endless
+ // loop in error recovery. */
+ yyla.kind_ = symbol_kind::S_YYUNDEF;
+ goto yyerrlab1;
+ }
+
/* If the proper action on seeing token YYLA.TYPE is to reduce or
to detect an error, take that action. */
- yyn += yyla.type_get ();
- if (yyn < 0 || yylast_ < yyn || yycheck_[yyn] != yyla.type_get ())
+ yyn += yyla.kind ();
+ if (yyn < 0 || yylast_ < yyn || yycheck_[yyn] != yyla.kind ())
{
goto yydefault;
}
TokenPtr neg(new TokenNot());
ctx.expression.push_back(neg);
}
-#line 877 "parser.cc"
+#line 846 "parser.cc"
break;
case 7:
TokenPtr neg(new TokenAnd());
ctx.expression.push_back(neg);
}
-#line 886 "parser.cc"
+#line 855 "parser.cc"
break;
case 8:
TokenPtr neg(new TokenOr());
ctx.expression.push_back(neg);
}
-#line 895 "parser.cc"
+#line 864 "parser.cc"
break;
case 9:
TokenPtr eq(new TokenEqual());
ctx.expression.push_back(eq);
}
-#line 904 "parser.cc"
+#line 873 "parser.cc"
break;
case 10:
TokenPtr opt(new TokenOption(yystack_[3].value.as < uint16_t > (), TokenOption::EXISTS));
ctx.expression.push_back(opt);
}
-#line 913 "parser.cc"
+#line 882 "parser.cc"
break;
case 11:
TokenPtr opt(new TokenSubOption(yystack_[8].value.as < uint16_t > (), yystack_[3].value.as < uint16_t > (), TokenOption::EXISTS));
ctx.expression.push_back(opt);
}
-#line 922 "parser.cc"
+#line 891 "parser.cc"
break;
case 12:
error(yystack_[5].location, "relay4 can only be used in DHCPv4.");
}
}
-#line 946 "parser.cc"
+#line 915 "parser.cc"
break;
case 13:
error(yystack_[10].location, "relay6 can only be used in DHCPv6.");
}
}
-#line 964 "parser.cc"
+#line 933 "parser.cc"
break;
case 14:
TokenPtr exist(new TokenVendorClass(ctx.getUniverse(), yystack_[3].value.as < uint32_t > (), TokenOption::EXISTS));
ctx.expression.push_back(exist);
}
-#line 977 "parser.cc"
+#line 946 "parser.cc"
break;
case 15:
TokenPtr exist(new TokenVendor(ctx.getUniverse(), yystack_[3].value.as < uint32_t > (), TokenOption::EXISTS));
ctx.expression.push_back(exist);
}
-#line 990 "parser.cc"
+#line 959 "parser.cc"
break;
case 16:
TokenPtr exist(new TokenVendor(ctx.getUniverse(), yystack_[8].value.as < uint32_t > (), TokenOption::EXISTS, yystack_[3].value.as < uint16_t > ()));
ctx.expression.push_back(exist);
}
-#line 1004 "parser.cc"
+#line 973 "parser.cc"
break;
case 17:
TokenPtr member(new TokenMember(cc));
ctx.expression.push_back(member);
}
-#line 1023 "parser.cc"
+#line 992 "parser.cc"
break;
case 18:
TokenPtr str(new TokenString(yystack_[0].value.as < std::string > ()));
ctx.expression.push_back(str);
}
-#line 1032 "parser.cc"
+#line 1001 "parser.cc"
break;
case 19:
TokenPtr hex(new TokenHexString(yystack_[0].value.as < std::string > ()));
ctx.expression.push_back(hex);
}
-#line 1041 "parser.cc"
+#line 1010 "parser.cc"
break;
case 20:
TokenPtr ip(new TokenIpAddress(yystack_[0].value.as < std::string > ()));
ctx.expression.push_back(ip);
}
-#line 1050 "parser.cc"
+#line 1019 "parser.cc"
break;
case 21:
TokenPtr opt(new TokenOption(yystack_[3].value.as < uint16_t > (), yystack_[0].value.as < TokenOption::RepresentationType > ()));
ctx.expression.push_back(opt);
}
-#line 1059 "parser.cc"
+#line 1028 "parser.cc"
break;
case 22:
TokenPtr opt(new TokenSubOption(yystack_[8].value.as < uint16_t > (), yystack_[3].value.as < uint16_t > (), yystack_[0].value.as < TokenOption::RepresentationType > ()));
ctx.expression.push_back(opt);
}
-#line 1068 "parser.cc"
+#line 1037 "parser.cc"
break;
case 23:
error(yystack_[5].location, "relay4 can only be used in DHCPv4.");
}
}
-#line 1092 "parser.cc"
+#line 1061 "parser.cc"
break;
case 24:
error(yystack_[10].location, "relay6 can only be used in DHCPv6.");
}
}
-#line 1110 "parser.cc"
+#line 1079 "parser.cc"
break;
case 25:
TokenPtr pkt_metadata(new TokenPkt(yystack_[0].value.as < TokenPkt::MetadataType > ()));
ctx.expression.push_back(pkt_metadata);
}
-#line 1119 "parser.cc"
+#line 1088 "parser.cc"
break;
case 26:
error(yystack_[2].location, "pkt4 can only be used in DHCPv4.");
}
}
-#line 1137 "parser.cc"
+#line 1106 "parser.cc"
break;
case 27:
error(yystack_[2].location, "pkt6 can only be used in DHCPv6.");
}
}
-#line 1155 "parser.cc"
+#line 1124 "parser.cc"
break;
case 28:
error(yystack_[5].location, "relay6 can only be used in DHCPv6.");
}
}
-#line 1173 "parser.cc"
+#line 1142 "parser.cc"
break;
case 29:
TokenPtr sub(new TokenSubstring());
ctx.expression.push_back(sub);
}
-#line 1182 "parser.cc"
+#line 1151 "parser.cc"
break;
case 30:
TokenPtr conc(new TokenConcat());
ctx.expression.push_back(conc);
}
-#line 1191 "parser.cc"
+#line 1160 "parser.cc"
break;
case 31:
TokenPtr cond(new TokenIfElse());
ctx.expression.push_back(cond);
}
-#line 1200 "parser.cc"
+#line 1169 "parser.cc"
break;
case 32:
TokenPtr tohex(new TokenToHexString());
ctx.expression.push_back(tohex);
}
-#line 1209 "parser.cc"
+#line 1178 "parser.cc"
break;
case 33:
TokenPtr vendor(new TokenVendor(ctx.getUniverse(), 0, TokenVendor::ENTERPRISE_ID));
ctx.expression.push_back(vendor);
}
-#line 1222 "parser.cc"
+#line 1191 "parser.cc"
break;
case 34:
TokenVendor::ENTERPRISE_ID));
ctx.expression.push_back(vendor);
}
-#line 1236 "parser.cc"
+#line 1205 "parser.cc"
break;
case 35:
TokenPtr opt(new TokenVendor(ctx.getUniverse(), yystack_[8].value.as < uint32_t > (), yystack_[0].value.as < TokenOption::RepresentationType > (), yystack_[3].value.as < uint16_t > ()));
ctx.expression.push_back(opt);
}
-#line 1249 "parser.cc"
+#line 1218 "parser.cc"
break;
case 36:
TokenVendor::DATA, 0));
ctx.expression.push_back(vendor_class);
}
-#line 1266 "parser.cc"
+#line 1235 "parser.cc"
break;
case 37:
TokenVendor::DATA, index));
ctx.expression.push_back(vendor_class);
}
-#line 1283 "parser.cc"
+#line 1252 "parser.cc"
break;
case 38:
TokenPtr integer(new TokenInteger(yystack_[0].value.as < uint32_t > ()));
ctx.expression.push_back(integer);
}
-#line 1292 "parser.cc"
+#line 1261 "parser.cc"
break;
case 39:
{
yylhs.value.as < uint32_t > () = ctx.convertUint32(yystack_[0].value.as < std::string > (), yystack_[0].location);
}
-#line 1300 "parser.cc"
+#line 1269 "parser.cc"
break;
case 40:
{
yylhs.value.as < uint16_t > () = ctx.convertOptionCode(yystack_[0].value.as < std::string > (), yystack_[0].location);
}
-#line 1308 "parser.cc"
+#line 1277 "parser.cc"
break;
case 41:
{
yylhs.value.as < uint16_t > () = ctx.convertOptionName(yystack_[0].value.as < std::string > (), yystack_[0].location);
}
-#line 1316 "parser.cc"
+#line 1285 "parser.cc"
break;
case 42:
{
yylhs.value.as < uint16_t > () = ctx.convertOptionCode(yystack_[0].value.as < std::string > (), yystack_[0].location);
}
-#line 1324 "parser.cc"
+#line 1293 "parser.cc"
break;
case 43:
{
yylhs.value.as < TokenOption::RepresentationType > () = TokenOption::TEXTUAL;
}
-#line 1332 "parser.cc"
+#line 1301 "parser.cc"
break;
case 44:
{
yylhs.value.as < TokenOption::RepresentationType > () = TokenOption::HEXADECIMAL;
}
-#line 1340 "parser.cc"
+#line 1309 "parser.cc"
break;
case 45:
{
yylhs.value.as < int8_t > () = ctx.convertNestLevelNumber(yystack_[0].value.as < std::string > (), yystack_[0].location);
}
-#line 1348 "parser.cc"
+#line 1317 "parser.cc"
break;
case 46:
{
yylhs.value.as < TokenPkt::MetadataType > () = TokenPkt::IFACE;
}
-#line 1356 "parser.cc"
+#line 1325 "parser.cc"
break;
case 47:
{
yylhs.value.as < TokenPkt::MetadataType > () = TokenPkt::SRC;
}
-#line 1364 "parser.cc"
+#line 1333 "parser.cc"
break;
case 48:
{
yylhs.value.as < TokenPkt::MetadataType > () = TokenPkt::DST;
}
-#line 1372 "parser.cc"
+#line 1341 "parser.cc"
break;
case 49:
{
yylhs.value.as < TokenPkt::MetadataType > () = TokenPkt::LEN;
}
-#line 1380 "parser.cc"
+#line 1349 "parser.cc"
break;
case 50:
{
yylhs.value.as < uint32_t > () = ctx.convertUint32(yystack_[0].value.as < std::string > (), yystack_[0].location);
}
-#line 1388 "parser.cc"
+#line 1357 "parser.cc"
break;
case 51:
{
yylhs.value.as < uint32_t > () = 0;
}
-#line 1396 "parser.cc"
+#line 1365 "parser.cc"
break;
case 52:
{
yylhs.value.as < TokenPkt4::FieldType > () = TokenPkt4::CHADDR;
}
-#line 1404 "parser.cc"
+#line 1373 "parser.cc"
break;
case 53:
{
yylhs.value.as < TokenPkt4::FieldType > () = TokenPkt4::HLEN;
}
-#line 1412 "parser.cc"
+#line 1381 "parser.cc"
break;
case 54:
{
yylhs.value.as < TokenPkt4::FieldType > () = TokenPkt4::HTYPE;
}
-#line 1420 "parser.cc"
+#line 1389 "parser.cc"
break;
case 55:
{
yylhs.value.as < TokenPkt4::FieldType > () = TokenPkt4::CIADDR;
}
-#line 1428 "parser.cc"
+#line 1397 "parser.cc"
break;
case 56:
{
yylhs.value.as < TokenPkt4::FieldType > () = TokenPkt4::GIADDR;
}
-#line 1436 "parser.cc"
+#line 1405 "parser.cc"
break;
case 57:
{
yylhs.value.as < TokenPkt4::FieldType > () = TokenPkt4::YIADDR;
}
-#line 1444 "parser.cc"
+#line 1413 "parser.cc"
break;
case 58:
{
yylhs.value.as < TokenPkt4::FieldType > () = TokenPkt4::SIADDR;
}
-#line 1452 "parser.cc"
+#line 1421 "parser.cc"
break;
case 59:
{
yylhs.value.as < TokenPkt4::FieldType > () = TokenPkt4::MSGTYPE;
}
-#line 1460 "parser.cc"
+#line 1429 "parser.cc"
break;
case 60:
{
yylhs.value.as < TokenPkt4::FieldType > () = TokenPkt4::TRANSID;
}
-#line 1468 "parser.cc"
+#line 1437 "parser.cc"
break;
case 61:
{
yylhs.value.as < TokenPkt6::FieldType > () = TokenPkt6::MSGTYPE;
}
-#line 1476 "parser.cc"
+#line 1445 "parser.cc"
break;
case 62:
{
yylhs.value.as < TokenPkt6::FieldType > () = TokenPkt6::TRANSID;
}
-#line 1484 "parser.cc"
+#line 1453 "parser.cc"
break;
case 63:
{
yylhs.value.as < TokenRelay6Field::FieldType > () = TokenRelay6Field::PEERADDR;
}
-#line 1492 "parser.cc"
+#line 1461 "parser.cc"
break;
case 64:
{
yylhs.value.as < TokenRelay6Field::FieldType > () = TokenRelay6Field::LINKADDR;
}
-#line 1500 "parser.cc"
+#line 1469 "parser.cc"
break;
case 65:
TokenPtr str(new TokenString(yystack_[0].value.as < std::string > ()));
ctx.expression.push_back(str);
}
-#line 1509 "parser.cc"
+#line 1478 "parser.cc"
break;
case 66:
TokenPtr str(new TokenString(yystack_[0].value.as < std::string > ()));
ctx.expression.push_back(str);
}
-#line 1518 "parser.cc"
+#line 1487 "parser.cc"
break;
case 67:
TokenPtr str(new TokenString("all"));
ctx.expression.push_back(str);
}
-#line 1527 "parser.cc"
+#line 1496 "parser.cc"
break;
-#line 1531 "parser.cc"
+#line 1500 "parser.cc"
default:
break;
YY_SYMBOL_PRINT ("-> $$ =", yylhs);
yypop_ (yylen);
yylen = 0;
- YY_STACK_PRINT ();
// Shift the result of the reduction.
yypush_ (YY_NULLPTR, YY_MOVE (yylhs));
if (!yyerrstatus_)
{
++yynerrs_;
- error (yyla.location, yysyntax_error_ (yystack_[0].state, yyla));
+ context yyctx (*this, yyla);
+ std::string msg = yysyntax_error_ (yyctx);
+ error (yyla.location, YY_MOVE (msg));
}
error, discard it. */
// Return failure if at end of input.
- if (yyla.type_get () == yyeof_)
+ if (yyla.kind () == symbol_kind::S_YYEOF)
YYABORT;
else if (!yyla.empty ())
{
this YYERROR. */
yypop_ (yylen);
yylen = 0;
+ YY_STACK_PRINT ();
goto yyerrlab1;
`-------------------------------------------------------------*/
yyerrlab1:
yyerrstatus_ = 3; // Each real token shifted decrements this.
- {
- stack_symbol_type error_token;
- for (;;)
- {
- yyn = yypact_[+yystack_[0].state];
- if (!yy_pact_value_is_default_ (yyn))
- {
- yyn += yy_error_token_;
- if (0 <= yyn && yyn <= yylast_ && yycheck_[yyn] == yy_error_token_)
- {
- yyn = yytable_[yyn];
- if (0 < yyn)
- break;
- }
- }
+ // Pop stack until we find a state that shifts the error token.
+ for (;;)
+ {
+ yyn = yypact_[+yystack_[0].state];
+ if (!yy_pact_value_is_default_ (yyn))
+ {
+ yyn += symbol_kind::S_YYerror;
+ if (0 <= yyn && yyn <= yylast_
+ && yycheck_[yyn] == symbol_kind::S_YYerror)
+ {
+ yyn = yytable_[yyn];
+ if (0 < yyn)
+ break;
+ }
+ }
- // Pop the current state because it cannot handle the error token.
- if (yystack_.size () == 1)
- YYABORT;
+ // Pop the current state because it cannot handle the error token.
+ if (yystack_.size () == 1)
+ YYABORT;
- yyerror_range[1].location = yystack_[0].location;
- yy_destroy_ ("Error: popping", yystack_[0]);
- yypop_ ();
- YY_STACK_PRINT ();
- }
+ yyerror_range[1].location = yystack_[0].location;
+ yy_destroy_ ("Error: popping", yystack_[0]);
+ yypop_ ();
+ YY_STACK_PRINT ();
+ }
+ {
+ stack_symbol_type error_token;
yyerror_range[2].location = yyla.location;
YYLLOC_DEFAULT (error_token.location, yyerror_range, 2);
/* Do not reclaim the symbols of the rule whose action triggered
this YYABORT or YYACCEPT. */
yypop_ (yylen);
+ YY_STACK_PRINT ();
while (1 < yystack_.size ())
{
yy_destroy_ ("Cleanup: popping", yystack_[0]);
error (yyexc.location, yyexc.what ());
}
- // Generate an error message.
+ /* Return YYSTR after stripping away unnecessary quotes and
+ backslashes, so that it's suitable for yyerror. The heuristic is
+ that double-quoting is unnecessary unless the string contains an
+ apostrophe, a comma, or backslash (other than backslash-backslash).
+ YYSTR is taken from yytname. */
std::string
- EvalParser::yysyntax_error_ (state_type yystate, const symbol_type& yyla) const
+ EvalParser::yytnamerr_ (const char *yystr)
{
- // Number of reported tokens (one for the "unexpected", one per
- // "expected").
- std::ptrdiff_t yycount = 0;
- // Its maximum.
- enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
- // Arguments of yyformat.
- char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
+ if (*yystr == '"')
+ {
+ std::string yyr;
+ char const *yyp = yystr;
+
+ for (;;)
+ switch (*++yyp)
+ {
+ case '\'':
+ case ',':
+ goto do_not_strip_quotes;
+
+ case '\\':
+ if (*++yyp != '\\')
+ goto do_not_strip_quotes;
+ else
+ goto append;
+
+ append:
+ default:
+ yyr += *yyp;
+ break;
+
+ case '"':
+ return yyr;
+ }
+ do_not_strip_quotes: ;
+ }
+
+ return yystr;
+ }
+
+ std::string
+ EvalParser::symbol_name (symbol_kind_type yysymbol)
+ {
+ return yytnamerr_ (yytname_[yysymbol]);
+ }
+
+
+ // EvalParser::context.
+ EvalParser::context::context (const EvalParser& yyparser, const symbol_type& yyla)
+ : yyparser_ (yyparser)
+ , yyla_ (yyla)
+ {}
+
+ int
+ EvalParser::context::expected_tokens (symbol_kind_type yyarg[], int yyargn) const
+ {
+ // Actual number of expected tokens
+ int yycount = 0;
+
+ int yyn = yypact_[+yyparser_.yystack_[0].state];
+ if (!yy_pact_value_is_default_ (yyn))
+ {
+ /* Start YYX at -YYN if negative to avoid negative indexes in
+ YYCHECK. In other words, skip the first -YYN actions for
+ this state because they are default actions. */
+ int yyxbegin = yyn < 0 ? -yyn : 0;
+ // Stay within bounds of both yycheck and yytname.
+ int yychecklim = yylast_ - yyn + 1;
+ int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
+ for (int yyx = yyxbegin; yyx < yyxend; ++yyx)
+ if (yycheck_[yyx + yyn] == yyx && yyx != symbol_kind::S_YYerror
+ && !yy_table_value_is_error_ (yytable_[yyx + yyn]))
+ {
+ if (!yyarg)
+ ++yycount;
+ else if (yycount == yyargn)
+ return 0;
+ else
+ yyarg[yycount++] = YY_CAST (symbol_kind_type, yyx);
+ }
+ }
+
+ if (yyarg && yycount == 0 && 0 < yyargn)
+ yyarg[0] = symbol_kind::S_YYEMPTY;
+ return yycount;
+ }
+
+
+
+ int
+ EvalParser::yy_syntax_error_arguments_ (const context& yyctx,
+ symbol_kind_type yyarg[], int yyargn) const
+ {
/* There are many possibilities here to consider:
- If this state is a consistent state with a default action, then
the only way this function was invoked is if the default action
one exception: it will still contain any token that will not be
accepted due to an error action in a later state.
*/
- if (!yyla.empty ())
- {
- symbol_number_type yytoken = yyla.type_get ();
- yyarg[yycount++] = yytname_[yytoken];
- int yyn = yypact_[+yystate];
- if (!yy_pact_value_is_default_ (yyn))
- {
- /* Start YYX at -YYN if negative to avoid negative indexes in
- YYCHECK. In other words, skip the first -YYN actions for
- this state because they are default actions. */
- int yyxbegin = yyn < 0 ? -yyn : 0;
- // Stay within bounds of both yycheck and yytname.
- int yychecklim = yylast_ - yyn + 1;
- int yyxend = yychecklim < yyntokens_ ? yychecklim : yyntokens_;
- for (int yyx = yyxbegin; yyx < yyxend; ++yyx)
- if (yycheck_[yyx + yyn] == yyx && yyx != yy_error_token_
- && !yy_table_value_is_error_ (yytable_[yyx + yyn]))
- {
- if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
- {
- yycount = 1;
- break;
- }
- else
- yyarg[yycount++] = yytname_[yyx];
- }
- }
+ if (!yyctx.lookahead ().empty ())
+ {
+ if (yyarg)
+ yyarg[0] = yyctx.token ();
+ int yyn = yyctx.expected_tokens (yyarg ? yyarg + 1 : yyarg, yyargn - 1);
+ return yyn + 1;
}
+ return 0;
+ }
+
+ // Generate an error message.
+ std::string
+ EvalParser::yysyntax_error_ (const context& yyctx) const
+ {
+ // Its maximum.
+ enum { YYARGS_MAX = 5 };
+ // Arguments of yyformat.
+ symbol_kind_type yyarg[YYARGS_MAX];
+ int yycount = yy_syntax_error_arguments_ (yyctx, yyarg, YYARGS_MAX);
char const* yyformat = YY_NULLPTR;
switch (yycount)
for (char const* yyp = yyformat; *yyp; ++yyp)
if (yyp[0] == '%' && yyp[1] == 's' && yyi < yycount)
{
- yyres += yytnamerr_ (yyarg[yyi++]);
+ yyres += symbol_name (yyarg[yyi++]);
++yyp;
}
else
};
-
+#if EVALDEBUG || 1
// YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
- // First, the terminals, then, starting at \a yyntokens_, nonterminals.
+ // First, the terminals, then, starting at \a YYNTOKENS, nonterminals.
const char*
const EvalParser::yytname_[] =
{
- "\"end of file\"", "error", "$undefined", "\"(\"", "\")\"", "\"not\"",
- "\"and\"", "\"or\"", "\"==\"", "\"option\"", "\"relay4\"", "\"relay6\"",
- "\"member\"", "\"peeraddr\"", "\"linkaddr\"", "\"[\"", "\"]\"", "\".\"",
- "\"text\"", "\"hex\"", "\"exists\"", "\"pkt\"", "\"iface\"", "\"src\"",
- "\"dst\"", "\"len\"", "\"pkt4\"", "\"mac\"", "\"hlen\"", "\"htype\"",
- "\"ciaddr\"", "\"giaddr\"", "\"yiaddr\"", "\"siaddr\"", "\"substring\"",
- "\"all\"", "\",\"", "\"concat\"", "\"ifelse\"", "\"hexstring\"",
- "\"pkt6\"", "\"msgtype\"", "\"transid\"", "\"vendor-class\"",
- "\"vendor\"", "\"*\"", "\"data\"", "\"enterprise\"",
+ "\"end of file\"", "error", "\"invalid token\"", "\"(\"", "\")\"",
+ "\"not\"", "\"and\"", "\"or\"", "\"==\"", "\"option\"", "\"relay4\"",
+ "\"relay6\"", "\"member\"", "\"peeraddr\"", "\"linkaddr\"", "\"[\"",
+ "\"]\"", "\".\"", "\"text\"", "\"hex\"", "\"exists\"", "\"pkt\"",
+ "\"iface\"", "\"src\"", "\"dst\"", "\"len\"", "\"pkt4\"", "\"mac\"",
+ "\"hlen\"", "\"htype\"", "\"ciaddr\"", "\"giaddr\"", "\"yiaddr\"",
+ "\"siaddr\"", "\"substring\"", "\"all\"", "\",\"", "\"concat\"",
+ "\"ifelse\"", "\"hexstring\"", "\"pkt6\"", "\"msgtype\"", "\"transid\"",
+ "\"vendor-class\"", "\"vendor\"", "\"*\"", "\"data\"", "\"enterprise\"",
"\"top-level bool\"", "\"top-level string\"", "\"constant string\"",
"\"integer\"", "\"constant hexstring\"", "\"option name\"",
"\"ip address\"", "$accept", "start", "expression", "bool_expr",
"option_repr_type", "nest_level", "pkt_metadata", "enterprise_id",
"pkt4_field", "pkt6_field", "relay6_field", "start_expr", "length_expr", YY_NULLPTR
};
+#endif
+
#if EVALDEBUG
const short
531, 537, 541, 547, 551, 557, 564, 569
};
- // Print the state stack on the debug stream.
void
- EvalParser::yystack_print_ ()
+ EvalParser::yy_stack_print_ () const
{
*yycdebug_ << "Stack now";
for (stack_type::const_iterator
*yycdebug_ << '\n';
}
- // Report on the debug stream that the rule \a yyrule is going to be reduced.
void
- EvalParser::yy_reduce_print_ (int yyrule)
+ EvalParser::yy_reduce_print_ (int yyrule) const
{
int yylno = yyrline_[yyrule];
int yynrhs = yyr2_[yyrule];
#line 14 "parser.yy"
} } // isc::eval
-#line 2042 "parser.cc"
+#line 2089 "parser.cc"
#line 576 "parser.yy"
-// A Bison parser, made by GNU Bison 3.5.4.
+// A Bison parser, made by GNU Bison 3.6.2.
// Skeleton interface for Bison LALR(1) parsers in C++
// C++ LALR(1) parser skeleton written by Akim Demaille.
-// Undocumented macros, especially those whose name start with YY_,
-// are private implementation details. Do not rely on them.
+// DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual,
+// especially those whose name start with YY_ or yy_. They are
+// private implementation details that can be changed or removed.
#ifndef YY_EVAL_PARSER_H_INCLUDED
# define YY_EVAL_PARSER_H_INCLUDED
using namespace isc::dhcp;
using namespace isc::eval;
-#line 59 "parser.h"
+#line 60 "parser.h"
# include <cassert>
# include <cstdlib> // std::abort
#line 14 "parser.yy"
namespace isc { namespace eval {
-#line 202 "parser.h"
+#line 203 "parser.h"
new (yyas_<T> ()) T (YY_MOVE (t));
}
+#if 201103L <= YY_CPLUSPLUS
+ /// Non copyable.
+ semantic_type (const self_type&) = delete;
+ /// Non copyable.
+ self_type& operator= (const self_type&) = delete;
+#endif
+
/// Destruction, allowed only if empty.
~semantic_type () YY_NOEXCEPT
{
}
private:
- /// Prohibit blind copies.
- self_type& operator= (const self_type&);
+#if YY_CPLUSPLUS < 201103L
+ /// Non copyable.
semantic_type (const self_type&);
+ /// Non copyable.
+ self_type& operator= (const self_type&);
+#endif
/// Accessor to raw memory as \a T.
template <typename T>
location_type location;
};
- /// Tokens.
+ /// Token kinds.
struct token
{
- enum yytokentype
- {
- TOKEN_END = 0,
- TOKEN_LPAREN = 258,
- TOKEN_RPAREN = 259,
- TOKEN_NOT = 260,
- TOKEN_AND = 261,
- TOKEN_OR = 262,
- TOKEN_EQUAL = 263,
- TOKEN_OPTION = 264,
- TOKEN_RELAY4 = 265,
- TOKEN_RELAY6 = 266,
- TOKEN_MEMBER = 267,
- TOKEN_PEERADDR = 268,
- TOKEN_LINKADDR = 269,
- TOKEN_LBRACKET = 270,
- TOKEN_RBRACKET = 271,
- TOKEN_DOT = 272,
- TOKEN_TEXT = 273,
- TOKEN_HEX = 274,
- TOKEN_EXISTS = 275,
- TOKEN_PKT = 276,
- TOKEN_IFACE = 277,
- TOKEN_SRC = 278,
- TOKEN_DST = 279,
- TOKEN_LEN = 280,
- TOKEN_PKT4 = 281,
- TOKEN_CHADDR = 282,
- TOKEN_HLEN = 283,
- TOKEN_HTYPE = 284,
- TOKEN_CIADDR = 285,
- TOKEN_GIADDR = 286,
- TOKEN_YIADDR = 287,
- TOKEN_SIADDR = 288,
- TOKEN_SUBSTRING = 289,
- TOKEN_ALL = 290,
- TOKEN_COMA = 291,
- TOKEN_CONCAT = 292,
- TOKEN_IFELSE = 293,
- TOKEN_TOHEXSTRING = 294,
- TOKEN_PKT6 = 295,
- TOKEN_MSGTYPE = 296,
- TOKEN_TRANSID = 297,
- TOKEN_VENDOR_CLASS = 298,
- TOKEN_VENDOR = 299,
- TOKEN_ANY = 300,
- TOKEN_DATA = 301,
- TOKEN_ENTERPRISE = 302,
- TOKEN_TOPLEVEL_BOOL = 303,
- TOKEN_TOPLEVEL_STRING = 304,
- TOKEN_STRING = 305,
- TOKEN_INTEGER = 306,
- TOKEN_HEXSTRING = 307,
- TOKEN_OPTION_NAME = 308,
- TOKEN_IP_ADDRESS = 309
+ enum token_kind_type
+ {
+ TOKEN_EVALEMPTY = -2,
+ TOKEN_END = 0, // "end of file"
+ TOKEN_EVALerror = 256, // error
+ TOKEN_EVALUNDEF = 257, // "invalid token"
+ TOKEN_LPAREN = 258, // "("
+ TOKEN_RPAREN = 259, // ")"
+ TOKEN_NOT = 260, // "not"
+ TOKEN_AND = 261, // "and"
+ TOKEN_OR = 262, // "or"
+ TOKEN_EQUAL = 263, // "=="
+ TOKEN_OPTION = 264, // "option"
+ TOKEN_RELAY4 = 265, // "relay4"
+ TOKEN_RELAY6 = 266, // "relay6"
+ TOKEN_MEMBER = 267, // "member"
+ TOKEN_PEERADDR = 268, // "peeraddr"
+ TOKEN_LINKADDR = 269, // "linkaddr"
+ TOKEN_LBRACKET = 270, // "["
+ TOKEN_RBRACKET = 271, // "]"
+ TOKEN_DOT = 272, // "."
+ TOKEN_TEXT = 273, // "text"
+ TOKEN_HEX = 274, // "hex"
+ TOKEN_EXISTS = 275, // "exists"
+ TOKEN_PKT = 276, // "pkt"
+ TOKEN_IFACE = 277, // "iface"
+ TOKEN_SRC = 278, // "src"
+ TOKEN_DST = 279, // "dst"
+ TOKEN_LEN = 280, // "len"
+ TOKEN_PKT4 = 281, // "pkt4"
+ TOKEN_CHADDR = 282, // "mac"
+ TOKEN_HLEN = 283, // "hlen"
+ TOKEN_HTYPE = 284, // "htype"
+ TOKEN_CIADDR = 285, // "ciaddr"
+ TOKEN_GIADDR = 286, // "giaddr"
+ TOKEN_YIADDR = 287, // "yiaddr"
+ TOKEN_SIADDR = 288, // "siaddr"
+ TOKEN_SUBSTRING = 289, // "substring"
+ TOKEN_ALL = 290, // "all"
+ TOKEN_COMA = 291, // ","
+ TOKEN_CONCAT = 292, // "concat"
+ TOKEN_IFELSE = 293, // "ifelse"
+ TOKEN_TOHEXSTRING = 294, // "hexstring"
+ TOKEN_PKT6 = 295, // "pkt6"
+ TOKEN_MSGTYPE = 296, // "msgtype"
+ TOKEN_TRANSID = 297, // "transid"
+ TOKEN_VENDOR_CLASS = 298, // "vendor-class"
+ TOKEN_VENDOR = 299, // "vendor"
+ TOKEN_ANY = 300, // "*"
+ TOKEN_DATA = 301, // "data"
+ TOKEN_ENTERPRISE = 302, // "enterprise"
+ TOKEN_TOPLEVEL_BOOL = 303, // "top-level bool"
+ TOKEN_TOPLEVEL_STRING = 304, // "top-level string"
+ TOKEN_STRING = 305, // "constant string"
+ TOKEN_INTEGER = 306, // "integer"
+ TOKEN_HEXSTRING = 307, // "constant hexstring"
+ TOKEN_OPTION_NAME = 308, // "option name"
+ TOKEN_IP_ADDRESS = 309 // "ip address"
};
+ /// Backward compatibility alias (Bison 3.6).
+ typedef token_kind_type yytokentype;
};
- /// (External) token type, as returned by yylex.
- typedef token::yytokentype token_type;
+ /// Token kind, as returned by yylex.
+ typedef token::yytokentype token_kind_type;
+
+ /// Backward compatibility alias (Bison 3.6).
+ typedef token_kind_type token_type;
- /// Symbol type: an internal symbol number.
- typedef int symbol_number_type;
+ /// Symbol kinds.
+ struct symbol_kind
+ {
+ enum symbol_kind_type
+ {
+ YYNTOKENS = 55, ///< Number of tokens.
+ S_YYEMPTY = -2,
+ S_YYEOF = 0, // "end of file"
+ S_YYerror = 1, // error
+ S_YYUNDEF = 2, // "invalid token"
+ S_LPAREN = 3, // "("
+ S_RPAREN = 4, // ")"
+ S_NOT = 5, // "not"
+ S_AND = 6, // "and"
+ S_OR = 7, // "or"
+ S_EQUAL = 8, // "=="
+ S_OPTION = 9, // "option"
+ S_RELAY4 = 10, // "relay4"
+ S_RELAY6 = 11, // "relay6"
+ S_MEMBER = 12, // "member"
+ S_PEERADDR = 13, // "peeraddr"
+ S_LINKADDR = 14, // "linkaddr"
+ S_LBRACKET = 15, // "["
+ S_RBRACKET = 16, // "]"
+ S_DOT = 17, // "."
+ S_TEXT = 18, // "text"
+ S_HEX = 19, // "hex"
+ S_EXISTS = 20, // "exists"
+ S_PKT = 21, // "pkt"
+ S_IFACE = 22, // "iface"
+ S_SRC = 23, // "src"
+ S_DST = 24, // "dst"
+ S_LEN = 25, // "len"
+ S_PKT4 = 26, // "pkt4"
+ S_CHADDR = 27, // "mac"
+ S_HLEN = 28, // "hlen"
+ S_HTYPE = 29, // "htype"
+ S_CIADDR = 30, // "ciaddr"
+ S_GIADDR = 31, // "giaddr"
+ S_YIADDR = 32, // "yiaddr"
+ S_SIADDR = 33, // "siaddr"
+ S_SUBSTRING = 34, // "substring"
+ S_ALL = 35, // "all"
+ S_COMA = 36, // ","
+ S_CONCAT = 37, // "concat"
+ S_IFELSE = 38, // "ifelse"
+ S_TOHEXSTRING = 39, // "hexstring"
+ S_PKT6 = 40, // "pkt6"
+ S_MSGTYPE = 41, // "msgtype"
+ S_TRANSID = 42, // "transid"
+ S_VENDOR_CLASS = 43, // "vendor-class"
+ S_VENDOR = 44, // "vendor"
+ S_ANY = 45, // "*"
+ S_DATA = 46, // "data"
+ S_ENTERPRISE = 47, // "enterprise"
+ S_TOPLEVEL_BOOL = 48, // "top-level bool"
+ S_TOPLEVEL_STRING = 49, // "top-level string"
+ S_STRING = 50, // "constant string"
+ S_INTEGER = 51, // "integer"
+ S_HEXSTRING = 52, // "constant hexstring"
+ S_OPTION_NAME = 53, // "option name"
+ S_IP_ADDRESS = 54, // "ip address"
+ S_YYACCEPT = 55, // $accept
+ S_start = 56, // start
+ S_expression = 57, // expression
+ S_bool_expr = 58, // bool_expr
+ S_string_expr = 59, // string_expr
+ S_integer_expr = 60, // integer_expr
+ S_option_code = 61, // option_code
+ S_sub_option_code = 62, // sub_option_code
+ S_option_repr_type = 63, // option_repr_type
+ S_nest_level = 64, // nest_level
+ S_pkt_metadata = 65, // pkt_metadata
+ S_enterprise_id = 66, // enterprise_id
+ S_pkt4_field = 67, // pkt4_field
+ S_pkt6_field = 68, // pkt6_field
+ S_relay6_field = 69, // relay6_field
+ S_start_expr = 70, // start_expr
+ S_length_expr = 71 // length_expr
+ };
+ };
- /// The symbol type number to denote an empty symbol.
- enum { empty_symbol = -2 };
+ /// (Internal) symbol kind.
+ typedef symbol_kind::symbol_kind_type symbol_kind_type;
- /// Internal symbol number for tokens (subsumed by symbol_number_type).
- typedef signed char token_number_type;
+ /// The number of tokens.
+ static const symbol_kind_type YYNTOKENS = symbol_kind::YYNTOKENS;
/// A complete symbol.
///
- /// Expects its Base type to provide access to the symbol type
- /// via type_get ().
+ /// Expects its Base type to provide access to the symbol kind
+ /// via kind ().
///
/// Provide access to semantic value and location.
template <typename Base>
#if 201103L <= YY_CPLUSPLUS
/// Move constructor.
- basic_symbol (basic_symbol&& that);
+ basic_symbol (basic_symbol&& that)
+ : Base (std::move (that))
+ , value ()
+ , location (std::move (that.location))
+ {
+ switch (this->kind ())
+ {
+ case 63: // option_repr_type
+ value.move< TokenOption::RepresentationType > (std::move (that.value));
+ break;
+
+ case 67: // pkt4_field
+ value.move< TokenPkt4::FieldType > (std::move (that.value));
+ break;
+
+ case 68: // pkt6_field
+ value.move< TokenPkt6::FieldType > (std::move (that.value));
+ break;
+
+ case 65: // pkt_metadata
+ value.move< TokenPkt::MetadataType > (std::move (that.value));
+ break;
+
+ case 69: // relay6_field
+ value.move< TokenRelay6Field::FieldType > (std::move (that.value));
+ break;
+
+ case 64: // nest_level
+ value.move< int8_t > (std::move (that.value));
+ break;
+
+ case 50: // "constant string"
+ case 51: // "integer"
+ case 52: // "constant hexstring"
+ case 53: // "option name"
+ case 54: // "ip address"
+ value.move< std::string > (std::move (that.value));
+ break;
+
+ case 61: // option_code
+ case 62: // sub_option_code
+ value.move< uint16_t > (std::move (that.value));
+ break;
+
+ case 60: // integer_expr
+ case 66: // enterprise_id
+ value.move< uint32_t > (std::move (that.value));
+ break;
+
+ default:
+ break;
+ }
+
+ }
#endif
/// Copy constructor.
void clear ()
{
// User destructor.
- symbol_number_type yytype = this->type_get ();
+ symbol_kind_type yykind = this->kind ();
basic_symbol<Base>& yysym = *this;
(void) yysym;
- switch (yytype)
+ switch (yykind)
{
default:
break;
}
- // Type destructor.
-switch (yytype)
+ // Value type destructor.
+switch (yykind)
{
case 63: // option_repr_type
value.template destroy< TokenOption::RepresentationType > ();
Base::clear ();
}
+ /// The user-facing name of this symbol.
+ std::string name () const YY_NOEXCEPT
+ {
+ return EvalParser::symbol_name (this->kind ());
+ }
+
+ /// Backward compatibility (Bison 3.6).
+ symbol_kind_type type_get () const YY_NOEXCEPT;
+
/// Whether empty.
bool empty () const YY_NOEXCEPT;
};
/// Type access provider for token (enum) based symbols.
- struct by_type
+ struct by_kind
{
/// Default constructor.
- by_type ();
+ by_kind ();
#if 201103L <= YY_CPLUSPLUS
/// Move constructor.
- by_type (by_type&& that);
+ by_kind (by_kind&& that);
#endif
/// Copy constructor.
- by_type (const by_type& that);
+ by_kind (const by_kind& that);
- /// The symbol type as needed by the constructor.
- typedef token_type kind_type;
+ /// The symbol kind as needed by the constructor.
+ typedef token_kind_type kind_type;
/// Constructor from (external) token numbers.
- by_type (kind_type t);
+ by_kind (kind_type t);
/// Record that this symbol is empty.
void clear ();
- /// Steal the symbol type from \a that.
- void move (by_type& that);
+ /// Steal the symbol kind from \a that.
+ void move (by_kind& that);
/// The (internal) type number (corresponding to \a type).
/// \a empty when empty.
- symbol_number_type type_get () const YY_NOEXCEPT;
+ symbol_kind_type kind () const YY_NOEXCEPT;
+
+ /// Backward compatibility (Bison 3.6).
+ symbol_kind_type type_get () const YY_NOEXCEPT;
- /// The symbol type.
- /// \a empty_symbol when empty.
- /// An int, not token_number_type, to be able to store empty_symbol.
- int type;
+ /// The symbol kind.
+ /// \a S_YYEMPTY when empty.
+ symbol_kind_type kind_;
};
+ /// Backward compatibility for a private implementation detail (Bison 3.6).
+ typedef by_kind by_type;
+
/// "External" symbols: returned by the scanner.
- struct symbol_type : basic_symbol<by_type>
+ struct symbol_type : basic_symbol<by_kind>
{
/// Superclass.
- typedef basic_symbol<by_type> super_type;
+ typedef basic_symbol<by_kind> super_type;
/// Empty symbol.
symbol_type () {}
symbol_type (int tok, location_type l)
: super_type(token_type (tok), std::move (l))
{
- YY_ASSERT (tok == token::TOKEN_END || tok == token::TOKEN_LPAREN || tok == token::TOKEN_RPAREN || tok == token::TOKEN_NOT || tok == token::TOKEN_AND || tok == token::TOKEN_OR || tok == token::TOKEN_EQUAL || tok == token::TOKEN_OPTION || tok == token::TOKEN_RELAY4 || tok == token::TOKEN_RELAY6 || tok == token::TOKEN_MEMBER || tok == token::TOKEN_PEERADDR || tok == token::TOKEN_LINKADDR || tok == token::TOKEN_LBRACKET || tok == token::TOKEN_RBRACKET || tok == token::TOKEN_DOT || tok == token::TOKEN_TEXT || tok == token::TOKEN_HEX || tok == token::TOKEN_EXISTS || tok == token::TOKEN_PKT || tok == token::TOKEN_IFACE || tok == token::TOKEN_SRC || tok == token::TOKEN_DST || tok == token::TOKEN_LEN || tok == token::TOKEN_PKT4 || tok == token::TOKEN_CHADDR || tok == token::TOKEN_HLEN || tok == token::TOKEN_HTYPE || tok == token::TOKEN_CIADDR || tok == token::TOKEN_GIADDR || tok == token::TOKEN_YIADDR || tok == token::TOKEN_SIADDR || tok == token::TOKEN_SUBSTRING || tok == token::TOKEN_ALL || tok == token::TOKEN_COMA || tok == token::TOKEN_CONCAT || tok == token::TOKEN_IFELSE || tok == token::TOKEN_TOHEXSTRING || tok == token::TOKEN_PKT6 || tok == token::TOKEN_MSGTYPE || tok == token::TOKEN_TRANSID || tok == token::TOKEN_VENDOR_CLASS || tok == token::TOKEN_VENDOR || tok == token::TOKEN_ANY || tok == token::TOKEN_DATA || tok == token::TOKEN_ENTERPRISE || tok == token::TOKEN_TOPLEVEL_BOOL || tok == token::TOKEN_TOPLEVEL_STRING);
+ YY_ASSERT (tok == token::TOKEN_END || tok == token::TOKEN_EVALerror || tok == token::TOKEN_EVALUNDEF || tok == token::TOKEN_LPAREN || tok == token::TOKEN_RPAREN || tok == token::TOKEN_NOT || tok == token::TOKEN_AND || tok == token::TOKEN_OR || tok == token::TOKEN_EQUAL || tok == token::TOKEN_OPTION || tok == token::TOKEN_RELAY4 || tok == token::TOKEN_RELAY6 || tok == token::TOKEN_MEMBER || tok == token::TOKEN_PEERADDR || tok == token::TOKEN_LINKADDR || tok == token::TOKEN_LBRACKET || tok == token::TOKEN_RBRACKET || tok == token::TOKEN_DOT || tok == token::TOKEN_TEXT || tok == token::TOKEN_HEX || tok == token::TOKEN_EXISTS || tok == token::TOKEN_PKT || tok == token::TOKEN_IFACE || tok == token::TOKEN_SRC || tok == token::TOKEN_DST || tok == token::TOKEN_LEN || tok == token::TOKEN_PKT4 || tok == token::TOKEN_CHADDR || tok == token::TOKEN_HLEN || tok == token::TOKEN_HTYPE || tok == token::TOKEN_CIADDR || tok == token::TOKEN_GIADDR || tok == token::TOKEN_YIADDR || tok == token::TOKEN_SIADDR || tok == token::TOKEN_SUBSTRING || tok == token::TOKEN_ALL || tok == token::TOKEN_COMA || tok == token::TOKEN_CONCAT || tok == token::TOKEN_IFELSE || tok == token::TOKEN_TOHEXSTRING || tok == token::TOKEN_PKT6 || tok == token::TOKEN_MSGTYPE || tok == token::TOKEN_TRANSID || tok == token::TOKEN_VENDOR_CLASS || tok == token::TOKEN_VENDOR || tok == token::TOKEN_ANY || tok == token::TOKEN_DATA || tok == token::TOKEN_ENTERPRISE || tok == token::TOKEN_TOPLEVEL_BOOL || tok == token::TOKEN_TOPLEVEL_STRING);
}
#else
symbol_type (int tok, const location_type& l)
: super_type(token_type (tok), l)
{
- YY_ASSERT (tok == token::TOKEN_END || tok == token::TOKEN_LPAREN || tok == token::TOKEN_RPAREN || tok == token::TOKEN_NOT || tok == token::TOKEN_AND || tok == token::TOKEN_OR || tok == token::TOKEN_EQUAL || tok == token::TOKEN_OPTION || tok == token::TOKEN_RELAY4 || tok == token::TOKEN_RELAY6 || tok == token::TOKEN_MEMBER || tok == token::TOKEN_PEERADDR || tok == token::TOKEN_LINKADDR || tok == token::TOKEN_LBRACKET || tok == token::TOKEN_RBRACKET || tok == token::TOKEN_DOT || tok == token::TOKEN_TEXT || tok == token::TOKEN_HEX || tok == token::TOKEN_EXISTS || tok == token::TOKEN_PKT || tok == token::TOKEN_IFACE || tok == token::TOKEN_SRC || tok == token::TOKEN_DST || tok == token::TOKEN_LEN || tok == token::TOKEN_PKT4 || tok == token::TOKEN_CHADDR || tok == token::TOKEN_HLEN || tok == token::TOKEN_HTYPE || tok == token::TOKEN_CIADDR || tok == token::TOKEN_GIADDR || tok == token::TOKEN_YIADDR || tok == token::TOKEN_SIADDR || tok == token::TOKEN_SUBSTRING || tok == token::TOKEN_ALL || tok == token::TOKEN_COMA || tok == token::TOKEN_CONCAT || tok == token::TOKEN_IFELSE || tok == token::TOKEN_TOHEXSTRING || tok == token::TOKEN_PKT6 || tok == token::TOKEN_MSGTYPE || tok == token::TOKEN_TRANSID || tok == token::TOKEN_VENDOR_CLASS || tok == token::TOKEN_VENDOR || tok == token::TOKEN_ANY || tok == token::TOKEN_DATA || tok == token::TOKEN_ENTERPRISE || tok == token::TOKEN_TOPLEVEL_BOOL || tok == token::TOKEN_TOPLEVEL_STRING);
+ YY_ASSERT (tok == token::TOKEN_END || tok == token::TOKEN_EVALerror || tok == token::TOKEN_EVALUNDEF || tok == token::TOKEN_LPAREN || tok == token::TOKEN_RPAREN || tok == token::TOKEN_NOT || tok == token::TOKEN_AND || tok == token::TOKEN_OR || tok == token::TOKEN_EQUAL || tok == token::TOKEN_OPTION || tok == token::TOKEN_RELAY4 || tok == token::TOKEN_RELAY6 || tok == token::TOKEN_MEMBER || tok == token::TOKEN_PEERADDR || tok == token::TOKEN_LINKADDR || tok == token::TOKEN_LBRACKET || tok == token::TOKEN_RBRACKET || tok == token::TOKEN_DOT || tok == token::TOKEN_TEXT || tok == token::TOKEN_HEX || tok == token::TOKEN_EXISTS || tok == token::TOKEN_PKT || tok == token::TOKEN_IFACE || tok == token::TOKEN_SRC || tok == token::TOKEN_DST || tok == token::TOKEN_LEN || tok == token::TOKEN_PKT4 || tok == token::TOKEN_CHADDR || tok == token::TOKEN_HLEN || tok == token::TOKEN_HTYPE || tok == token::TOKEN_CIADDR || tok == token::TOKEN_GIADDR || tok == token::TOKEN_YIADDR || tok == token::TOKEN_SIADDR || tok == token::TOKEN_SUBSTRING || tok == token::TOKEN_ALL || tok == token::TOKEN_COMA || tok == token::TOKEN_CONCAT || tok == token::TOKEN_IFELSE || tok == token::TOKEN_TOHEXSTRING || tok == token::TOKEN_PKT6 || tok == token::TOKEN_MSGTYPE || tok == token::TOKEN_TRANSID || tok == token::TOKEN_VENDOR_CLASS || tok == token::TOKEN_VENDOR || tok == token::TOKEN_ANY || tok == token::TOKEN_DATA || tok == token::TOKEN_ENTERPRISE || tok == token::TOKEN_TOPLEVEL_BOOL || tok == token::TOKEN_TOPLEVEL_STRING);
}
#endif
#if 201103L <= YY_CPLUSPLUS
EvalParser (EvalContext& ctx_yyarg);
virtual ~EvalParser ();
+#if 201103L <= YY_CPLUSPLUS
+ /// Non copyable.
+ EvalParser (const EvalParser&) = delete;
+ /// Non copyable.
+ EvalParser& operator= (const EvalParser&) = delete;
+#endif
+
/// Parse. An alias for parse ().
/// \returns 0 iff parsing succeeded.
int operator() ();
/// Report a syntax error.
void error (const syntax_error& err);
+ /// The user-facing name of the symbol whose (internal) number is
+ /// YYSYMBOL. No bounds checking.
+ static std::string symbol_name (symbol_kind_type yysymbol);
+
// Implementation of make_symbol for each symbol type.
#if 201103L <= YY_CPLUSPLUS
static
return symbol_type (token::TOKEN_END, l);
}
#endif
+#if 201103L <= YY_CPLUSPLUS
+ static
+ symbol_type
+ make_EVALerror (location_type l)
+ {
+ return symbol_type (token::TOKEN_EVALerror, std::move (l));
+ }
+#else
+ static
+ symbol_type
+ make_EVALerror (const location_type& l)
+ {
+ return symbol_type (token::TOKEN_EVALerror, l);
+ }
+#endif
+#if 201103L <= YY_CPLUSPLUS
+ static
+ symbol_type
+ make_EVALUNDEF (location_type l)
+ {
+ return symbol_type (token::TOKEN_EVALUNDEF, std::move (l));
+ }
+#else
+ static
+ symbol_type
+ make_EVALUNDEF (const location_type& l)
+ {
+ return symbol_type (token::TOKEN_EVALUNDEF, l);
+ }
+#endif
#if 201103L <= YY_CPLUSPLUS
static
symbol_type
#endif
+ class context
+ {
+ public:
+ context (const EvalParser& yyparser, const symbol_type& yyla);
+ const symbol_type& lookahead () const { return yyla_; }
+ symbol_kind_type token () const { return yyla_.kind (); }
+ const location_type& location () const { return yyla_.location; }
+
+ /// Put in YYARG at most YYARGN of the expected tokens, and return the
+ /// number of tokens stored in YYARG. If YYARG is null, return the
+ /// number of expected tokens (guaranteed to be less than YYNTOKENS).
+ int expected_tokens (symbol_kind_type yyarg[], int yyargn) const;
+
+ private:
+ const EvalParser& yyparser_;
+ const symbol_type& yyla_;
+ };
+
private:
- /// This class is not copyable.
+#if YY_CPLUSPLUS < 201103L
+ /// Non copyable.
EvalParser (const EvalParser&);
+ /// Non copyable.
EvalParser& operator= (const EvalParser&);
+#endif
+
/// Stored state numbers (used for stacks).
typedef unsigned char 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;
+ /// The arguments of the error message.
+ int yy_syntax_error_arguments_ (const context& yyctx,
+ symbol_kind_type yyarg[], int yyargn) const;
+ /// Generate an error message.
+ /// \param yyctx the context in which the error occurred.
+ virtual std::string yysyntax_error_ (const context& yyctx) const;
/// Compute post-reduction state.
/// \param yystate the current state
/// \param yysym the nonterminal to push on the stack
static const signed char yypact_ninf_;
static const signed char yytable_ninf_;
- /// Convert a scanner token number \a t to a symbol number.
- /// In theory \a t should be a token_type, but character literals
+ /// Convert a scanner token kind \a t to a symbol kind.
+ /// In theory \a t should be a token_kind_type, but character literals
/// are valid, yet not members of the token_type enum.
- static token_number_type yytranslate_ (int t);
+ static symbol_kind_type yytranslate_ (int t);
+
+ /// Convert the symbol name \a n to a form suitable for a diagnostic.
+ static std::string yytnamerr_ (const char *yystr);
+
+ /// For a symbol, its name in clear.
+ static const char* const yytname_[];
+
// Tables.
- // YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+ // YYPACTSTATE-NUM -- Index in YYTABLE of the portion describing
// STATE-NUM.
static const short yypact_[];
- // YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
+ // YYDEFACTSTATE-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 signed char yydefact_[];
- // YYPGOTO[NTERM-NUM].
+ // YYPGOTONTERM-NUM.
static const short yypgoto_[];
- // YYDEFGOTO[NTERM-NUM].
+ // YYDEFGOTONTERM-NUM.
static const short yydefgoto_[];
- // YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If
+ // YYTABLEYYPACT[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 char yytable_[];
static const short yycheck_[];
- // YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+ // YYSTOSSTATE-NUM -- The (internal number of the) accessing
// symbol of state STATE-NUM.
static const signed char yystos_[];
- // YYR1[YYN] -- Symbol number of symbol that rule YYN derives.
+ // YYR1YYN -- Symbol number of symbol that rule YYN derives.
static const signed char yyr1_[];
- // YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.
+ // YYR2YYN -- Number of symbols on the right hand side of rule YYN.
static const signed 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 EVALDEBUG
- // YYRLINE[YYN] -- Source line where rule number YYN was defined.
+ // YYRLINEYYN -- Source line where rule number YYN was defined.
static const short yyrline_[];
/// Report on the debug stream that the rule \a r is going to be reduced.
- virtual void yy_reduce_print_ (int r);
+ virtual void yy_reduce_print_ (int r) const;
/// Print the state stack on the debug stream.
- virtual void yystack_print_ ();
+ virtual void yy_stack_print_ () const;
/// Debugging level.
int yydebug_;
/// Debug stream.
std::ostream* yycdebug_;
- /// \brief Display a symbol type, value and location.
+ /// \brief Display a symbol kind, value and location.
/// \param yyo The output stream.
/// \param yysym The symbol.
template <typename Base>
/// Default constructor.
by_state () YY_NOEXCEPT;
- /// The symbol type as needed by the constructor.
+ /// The symbol kind as needed by the constructor.
typedef state_type kind_type;
/// Constructor.
/// Record that this symbol is empty.
void clear () YY_NOEXCEPT;
- /// Steal the symbol type from \a that.
+ /// Steal the symbol kind 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 YY_NOEXCEPT;
+ /// The symbol kind (corresponding to \a state).
+ /// \a S_YYEMPTY when empty.
+ symbol_kind_type kind () const YY_NOEXCEPT;
/// The state number used to denote an empty symbol.
/// We use the initial state, as it does not have a value.
{
public:
// Hide our reversed order.
- typedef typename S::reverse_iterator iterator;
- typedef typename S::const_reverse_iterator const_iterator;
+ typedef typename S::iterator iterator;
+ typedef typename S::const_iterator const_iterator;
typedef typename S::size_type size_type;
typedef typename std::ptrdiff_t index_type;
: seq_ (n)
{}
+#if 201103L <= YY_CPLUSPLUS
+ /// Non copyable.
+ stack (const stack&) = delete;
+ /// Non copyable.
+ stack& operator= (const stack&) = delete;
+#endif
+
/// Random access.
///
/// Index 0 returns the topmost element.
return index_type (seq_.size ());
}
- std::ptrdiff_t
- ssize () const YY_NOEXCEPT
- {
- return std::ptrdiff_t (size ());
- }
-
/// Iterator on top of the stack (going downwards).
const_iterator
begin () const YY_NOEXCEPT
{
- return seq_.rbegin ();
+ return seq_.begin ();
}
/// Bottom of the stack.
const_iterator
end () const YY_NOEXCEPT
{
- return seq_.rend ();
+ return seq_.end ();
}
/// Present a slice of the top of a stack.
};
private:
+#if YY_CPLUSPLUS < 201103L
+ /// Non copyable.
stack (const stack&);
+ /// Non copyable.
stack& operator= (const stack&);
+#endif
/// The wrapped container.
S seq_;
};
/// Pop \a n symbols from the stack.
void yypop_ (int n = 1);
- /// Some specific tokens.
- static const token_number_type yy_error_token_ = 1;
- static const token_number_type yy_undef_token_ = 2;
-
/// Constants.
enum
{
- yyeof_ = 0,
yylast_ = 217, ///< Last index in yytable_.
yynnts_ = 17, ///< Number of nonterminal symbols.
- yyfinal_ = 33, ///< Termination state number.
- yyntokens_ = 55 ///< Number of tokens.
+ yyfinal_ = 33 ///< Termination state number.
};
// User arguments.
EvalContext& ctx;
+
};
inline
- EvalParser::token_number_type
+ EvalParser::symbol_kind_type
EvalParser::yytranslate_ (int t)
{
// YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to
// TOKEN-NUM as returned by yylex.
static
- const token_number_type
+ const signed char
translate_table[] =
{
0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
const int user_token_number_max_ = 309;
if (t <= 0)
- return yyeof_;
+ return symbol_kind::S_YYEOF;
else if (t <= user_token_number_max_)
- return translate_table[t];
+ return YY_CAST (symbol_kind_type, translate_table[t]);
else
- return yy_undef_token_;
+ return symbol_kind::S_YYUNDEF;
}
// basic_symbol.
-#if 201103L <= YY_CPLUSPLUS
- template <typename Base>
- EvalParser::basic_symbol<Base>::basic_symbol (basic_symbol&& that)
- : Base (std::move (that))
- , value ()
- , location (std::move (that.location))
- {
- switch (this->type_get ())
- {
- case 63: // option_repr_type
- value.move< TokenOption::RepresentationType > (std::move (that.value));
- break;
-
- case 67: // pkt4_field
- value.move< TokenPkt4::FieldType > (std::move (that.value));
- break;
-
- case 68: // pkt6_field
- value.move< TokenPkt6::FieldType > (std::move (that.value));
- break;
-
- case 65: // pkt_metadata
- value.move< TokenPkt::MetadataType > (std::move (that.value));
- break;
-
- case 69: // relay6_field
- value.move< TokenRelay6Field::FieldType > (std::move (that.value));
- break;
-
- case 64: // nest_level
- value.move< int8_t > (std::move (that.value));
- break;
-
- case 50: // "constant string"
- case 51: // "integer"
- case 52: // "constant hexstring"
- case 53: // "option name"
- case 54: // "ip address"
- value.move< std::string > (std::move (that.value));
- break;
-
- case 61: // option_code
- case 62: // sub_option_code
- value.move< uint16_t > (std::move (that.value));
- break;
-
- case 60: // integer_expr
- case 66: // enterprise_id
- value.move< uint32_t > (std::move (that.value));
- break;
-
- default:
- break;
- }
-
- }
-#endif
-
template <typename Base>
EvalParser::basic_symbol<Base>::basic_symbol (const basic_symbol& that)
: Base (that)
, value ()
, location (that.location)
{
- switch (this->type_get ())
+ switch (this->kind ())
{
case 63: // option_repr_type
value.copy< TokenOption::RepresentationType > (YY_MOVE (that.value));
+ template <typename Base>
+ EvalParser::symbol_kind_type
+ EvalParser::basic_symbol<Base>::type_get () const YY_NOEXCEPT
+ {
+ return this->kind ();
+ }
+
template <typename Base>
bool
EvalParser::basic_symbol<Base>::empty () const YY_NOEXCEPT
{
- return Base::type_get () == empty_symbol;
+ return this->kind () == symbol_kind::S_YYEMPTY;
}
template <typename Base>
EvalParser::basic_symbol<Base>::move (basic_symbol& s)
{
super_type::move (s);
- switch (this->type_get ())
+ switch (this->kind ())
{
case 63: // option_repr_type
value.move< TokenOption::RepresentationType > (YY_MOVE (s.value));
location = YY_MOVE (s.location);
}
- // by_type.
+ // by_kind.
inline
- EvalParser::by_type::by_type ()
- : type (empty_symbol)
+ EvalParser::by_kind::by_kind ()
+ : kind_ (symbol_kind::S_YYEMPTY)
{}
#if 201103L <= YY_CPLUSPLUS
inline
- EvalParser::by_type::by_type (by_type&& that)
- : type (that.type)
+ EvalParser::by_kind::by_kind (by_kind&& that)
+ : kind_ (that.kind_)
{
that.clear ();
}
#endif
inline
- EvalParser::by_type::by_type (const by_type& that)
- : type (that.type)
+ EvalParser::by_kind::by_kind (const by_kind& that)
+ : kind_ (that.kind_)
{}
inline
- EvalParser::by_type::by_type (token_type t)
- : type (yytranslate_ (t))
+ EvalParser::by_kind::by_kind (token_kind_type t)
+ : kind_ (yytranslate_ (t))
{}
inline
void
- EvalParser::by_type::clear ()
+ EvalParser::by_kind::clear ()
{
- type = empty_symbol;
+ kind_ = symbol_kind::S_YYEMPTY;
}
inline
void
- EvalParser::by_type::move (by_type& that)
+ EvalParser::by_kind::move (by_kind& that)
{
- type = that.type;
+ kind_ = that.kind_;
that.clear ();
}
inline
- int
- EvalParser::by_type::type_get () const YY_NOEXCEPT
+ EvalParser::symbol_kind_type
+ EvalParser::by_kind::kind () const YY_NOEXCEPT
+ {
+ return kind_;
+ }
+
+ inline
+ EvalParser::symbol_kind_type
+ EvalParser::by_kind::type_get () const YY_NOEXCEPT
{
- return type;
+ return this->kind ();
}
#line 14 "parser.yy"
} } // isc::eval
-#line 2301 "parser.h"
+#line 2487 "parser.h"
-// Generated 202004241255
-// A Bison parser, made by GNU Bison 3.5.4.
+// Generated 202005190717
+// A Bison parser, made by GNU Bison 3.6.2.
// Starting with Bison 3.2, this file is useless: the structure it
// used to define is now defined in "location.hh".
-// Generated 202004241255
-// A Bison parser, made by GNU Bison 3.5.4.
+// Generated 202005190717
+// A Bison parser, made by GNU Bison 3.6.2.
// Starting with Bison 3.2, this file is useless: the structure it
// used to define is now defined with the parser itself.