ctx.unique($3, ctx.loc2pos(@3));
ctx.stack_.back()->set($3, $5);
}
+ | not_empty_map COMMA
;
list_generic: LSQUARE_BRACKET {
// List ending with , and a value.
ctx.stack_.back()->add($3);
}
+ | not_empty_list COMMA
;
// --- generic JSON parser ends here -------------------------------------------
// This represents the single top level entry, e.g. Control-agent.
global_object: CONTROL_AGENT {
-
// Let's create a MapElement that will represent it, add it to the
// top level map (that's already on the stack) and put the new map
// on the stack as well, so child elements will be able to add
// off the stack.
ctx.stack_.pop_back();
ctx.leave();
-};
+}
+ | global_object COMMA
+ ;
global_params: global_param
| global_params COMMA global_param
+ | global_params COMMA
;
// These are the parameters that are allowed in the top-level for
not_empty_hooks_libraries_list: hooks_library
| not_empty_hooks_libraries_list COMMA hooks_library
+ | not_empty_hooks_libraries_list COMMA
;
hooks_library: LCURLY_BRACKET {
hooks_params: hooks_param
| hooks_params COMMA hooks_param
+ | hooks_params COMMA
| unknown_map_entry
;
// is required.
control_sockets_params: control_socket
| control_sockets_params COMMA control_socket
+ | control_sockets_params COMMA
;
// We currently support three types of sockets: DHCPv4, DHCPv6 and D2
// Socket parameters consist of one or more parameters.
control_socket_params: control_socket_param
| control_socket_params COMMA control_socket_param
+ | control_socket_params COMMA
;
// We currently support two socket parameters: type and name.
auth_params: auth_param
| auth_params COMMA auth_param
+ | auth_params COMMA
;
auth_param: auth_type
not_empty_clients_list: basic_auth
| not_empty_clients_list COMMA basic_auth
+ | not_empty_clients_list COMMA
;
basic_auth: LCURLY_BRACKET {
clients_params: clients_param
| clients_params COMMA clients_param
+ | clients_params COMMA
;
clients_param: user
// entry or multiple entries separate by commas.
loggers_entries: logger_entry
| loggers_entries COMMA logger_entry
+ | loggers_entries COMMA
;
// This defines a single entry defined in loggers.
logger_params: logger_param
| logger_params COMMA logger_param
+ | logger_params COMMA
;
logger_param: name
output_options_list_content: output_entry
| output_options_list_content COMMA output_entry
+ | output_options_list_content COMMA
;
output_entry: LCURLY_BRACKET {
output_params_list: output_params
| output_params_list COMMA output_params
+ | output_params_list COMMA
;
output_params: output
ctx.unique($3, ctx.loc2pos(@3));
ctx.stack_.back()->set($3, $5);
}
+ | not_empty_map COMMA
;
list_generic: LSQUARE_BRACKET {
// List ending with , and a value.
ctx.stack_.back()->add($3);
}
+ | not_empty_list COMMA
;
// ---- generic JSON parser ends here ----------------------------------
} COLON LCURLY_BRACKET dhcpddns_params RCURLY_BRACKET {
ctx.stack_.pop_back();
ctx.leave();
-};
+}
+ | global_object COMMA
+ ;
sub_dhcpddns: LCURLY_BRACKET {
// Parse the dhcpddns map
dhcpddns_params: dhcpddns_param
| dhcpddns_params COMMA dhcpddns_param
+ | dhcpddns_params COMMA
;
// These are the top-level parameters allowed for DhcpDdns
not_empty_ddns_mgr_params: ddns_mgr_param
| ddns_mgr_params COMMA ddns_mgr_param
+ | ddns_mgr_params COMMA
;
ddns_mgr_param: ddns_domains
not_empty_ddns_domain_list: ddns_domain
| not_empty_ddns_domain_list COMMA ddns_domain
+ | not_empty_ddns_domain_list COMMA
;
ddns_domain: LCURLY_BRACKET {
ddns_domain_params: ddns_domain_param
| ddns_domain_params COMMA ddns_domain_param
+ | ddns_domain_params COMMA
;
ddns_domain_param: ddns_domain_name
dns_server_list: dns_server
| dns_server_list COMMA dns_server
+ | dns_server_list COMMA
;
dns_server: LCURLY_BRACKET {
dns_server_params: dns_server_param
| dns_server_params COMMA dns_server_param
+ | dns_server_params COMMA
;
dns_server_param: dns_server_hostname
not_empty_tsig_keys_list: tsig_key
| not_empty_tsig_keys_list COMMA tsig_key
+ | not_empty_tsig_keys_list COMMA
;
tsig_key: LCURLY_BRACKET {
tsig_key_params: tsig_key_param
| tsig_key_params COMMA tsig_key_param
+ | tsig_key_params COMMA
;
tsig_key_param: tsig_key_name
control_socket_params: control_socket_param
| control_socket_params COMMA control_socket_param
+ | control_socket_params COMMA
;
control_socket_param: control_socket_type
not_empty_hooks_libraries_list: hooks_library
| not_empty_hooks_libraries_list COMMA hooks_library
+ | not_empty_hooks_libraries_list COMMA
;
hooks_library: LCURLY_BRACKET {
hooks_params: hooks_param
| hooks_params COMMA hooks_param
+ | hooks_params COMMA
| unknown_map_entry
;
// entry or multiple entries separate by commas.
loggers_entries: logger_entry
| loggers_entries COMMA logger_entry
+ | loggers_entries COMMA
;
// This defines a single entry defined in loggers.
logger_params: logger_param
| logger_params COMMA logger_param
+ | logger_params COMMA
;
logger_param: name
output_options_list_content: output_entry
| output_options_list_content COMMA output_entry
+ | output_options_list_content COMMA
;
output_entry: LCURLY_BRACKET {
output_params_list: output_params
| output_params_list COMMA output_params
+ | output_params_list COMMA
;
output_params: output
ctx.unique($3, ctx.loc2pos(@3));
ctx.stack_.back()->set($3, $5);
}
+ | not_empty_map COMMA
;
list_generic: LSQUARE_BRACKET {
// List ending with , and a value.
ctx.stack_.back()->add($3);
}
+ | not_empty_list COMMA
;
// This one is used in syntax parser and is restricted to strings.
ElementPtr s(new StringElement($3, ctx.loc2pos(@3)));
ctx.stack_.back()->add(s);
}
+ | not_empty_list_strings COMMA
;
// ---- generic JSON parser ends here ----------------------------------
// No global parameter is required
ctx.stack_.pop_back();
ctx.leave();
-};
+}
+ | global_object COMMA
+ ;
// subparser: similar to the corresponding rule but without parent
// so the stack is empty at the rule entry.
global_params: global_param
| global_params COMMA global_param
+ | global_params COMMA
;
// These are the parameters that are allowed in the top-level for
interfaces_config_params: interfaces_config_param
| interfaces_config_params COMMA interfaces_config_param
+ | interfaces_config_params COMMA
;
interfaces_config_param: interfaces_list
};
sanity_checks_params: sanity_checks_param
- | sanity_checks_params COMMA sanity_checks_param;
+ | sanity_checks_params COMMA sanity_checks_param
+ | sanity_checks_params COMMA
+ ;
sanity_checks_param: lease_checks;
not_empty_database_list: database
| not_empty_database_list COMMA database
+ | not_empty_database_list COMMA
;
database: LCURLY_BRACKET {
database_map_params: database_map_param
| database_map_params COMMA database_map_param
+ | database_map_params COMMA
;
database_map_param: database_type
host_reservation_identifiers_list: host_reservation_identifier
| host_reservation_identifiers_list COMMA host_reservation_identifier
+ | host_reservation_identifiers_list COMMA
;
host_reservation_identifier: duid_id
multi_threading_params: multi_threading_param
| multi_threading_params COMMA multi_threading_param
+ | multi_threading_params COMMA
;
multi_threading_param: enable_multi_threading
not_empty_hooks_libraries_list: hooks_library
| not_empty_hooks_libraries_list COMMA hooks_library
+ | not_empty_hooks_libraries_list COMMA
;
hooks_library: LCURLY_BRACKET {
hooks_params: hooks_param
| hooks_params COMMA hooks_param
+ | hooks_params COMMA
| unknown_map_entry
;
expired_leases_params: expired_leases_param
| expired_leases_params COMMA expired_leases_param
+ | expired_leases_params COMMA
;
expired_leases_param: reclaim_timer_wait_time
not_empty_subnet4_list: subnet4
| not_empty_subnet4_list COMMA subnet4
+ | not_empty_subnet4_list COMMA
;
// --- Subnet definitions -------------------------------
// This defines that subnet can have one or more parameters.
subnet4_params: subnet4_param
| subnet4_params COMMA subnet4_param
+ | subnet4_params COMMA
;
// This defines a list of allowed parameters for each subnet.
// This allows 1 or more shared network definitions.
shared_networks_list: shared_network
| shared_networks_list COMMA shared_network
+ | shared_networks_list COMMA
;
shared_network: LCURLY_BRACKET {
shared_network_params: shared_network_param
| shared_network_params COMMA shared_network_param
+ | shared_network_params COMMA
;
shared_network_param: name
not_empty_option_def_list: option_def_entry
| not_empty_option_def_list COMMA option_def_entry
- ;
+ | not_empty_option_def_list COMMA
+ ;
// This defines the content of a single entry { ... } within
// option-def list.
not_empty_option_def_params: option_def_param
| not_empty_option_def_params COMMA option_def_param
+ | not_empty_option_def_params COMMA
;
option_def_param: option_def_name
// be a single value or multiple entries separated by comma.
not_empty_option_data_list: option_data_entry
| not_empty_option_data_list COMMA option_data_entry
+ | not_empty_option_data_list COMMA
;
// This defines th content of a single entry { ... } within
// a list of parameters separated by comma.
not_empty_option_data_params: option_data_param
| not_empty_option_data_params COMMA option_data_param
+ | not_empty_option_data_params COMMA
;
// Each single option-data parameter can be one of the following
not_empty_pools_list: pool_list_entry
| not_empty_pools_list COMMA pool_list_entry
+ | not_empty_pools_list COMMA
;
pool_list_entry: LCURLY_BRACKET {
pool_params: pool_param
| pool_params COMMA pool_param
+ | pool_params COMMA
;
pool_param: pool_entry
not_empty_reservations_list: reservation
| not_empty_reservations_list COMMA reservation
+ | not_empty_reservations_list COMMA
;
reservation: LCURLY_BRACKET {
not_empty_reservation_params: reservation_param
| not_empty_reservation_params COMMA reservation_param
+ | not_empty_reservation_params COMMA
;
/// @todo probably need to add mac-address as well here
client_classes_list: client_class_entry
| client_classes_list COMMA client_class_entry
+ | client_classes_list COMMA
;
client_class_entry: LCURLY_BRACKET {
not_empty_client_class_params: client_class_param
| not_empty_client_class_params COMMA client_class_param
+ | not_empty_client_class_params COMMA
;
client_class_param: client_class_name
control_socket_params: control_socket_param
| control_socket_params COMMA control_socket_param
+ | control_socket_params COMMA
;
control_socket_param: control_socket_type
queue_control_params: queue_control_param
| queue_control_params COMMA queue_control_param
+ | queue_control_params COMMA
;
queue_control_param: enable_queue
dhcp_ddns_params: dhcp_ddns_param
| dhcp_ddns_params COMMA dhcp_ddns_param
+ | dhcp_ddns_params COMMA
;
dhcp_ddns_param: enable_updates
// This defines that subnet can have one or more parameters.
config_control_params: config_control_param
| config_control_params COMMA config_control_param
+ | config_control_params COMMA
;
// This defines a list of allowed parameters for each subnet.
// entry or multiple entries separate by commas.
loggers_entries: logger_entry
| loggers_entries COMMA logger_entry
+ | loggers_entries COMMA
;
// This defines a single entry defined in loggers.
logger_params: logger_param
| logger_params COMMA logger_param
+ | logger_params COMMA
;
logger_param: name
output_options_list_content: output_entry
| output_options_list_content COMMA output_entry
+ | output_options_list_content COMMA
;
output_entry: LCURLY_BRACKET {
output_params_list: output_params
| output_params_list COMMA output_params
+ | output_params_list COMMA
;
output_params: output
compatibility_params: compatibility_param
| compatibility_params COMMA compatibility_param
+ | compatibility_params COMMA
;
compatibility_param: lenient_option_parsing
ctx.unique($3, ctx.loc2pos(@3));
ctx.stack_.back()->set($3, $5);
}
+ | not_empty_map COMMA
;
list_generic: LSQUARE_BRACKET {
// List ending with , and a value.
ctx.stack_.back()->add($3);
}
+ | not_empty_list COMMA
;
// This one is used in syntax parser and is restricted to strings.
ElementPtr s(new StringElement($3, ctx.loc2pos(@3)));
ctx.stack_.back()->add(s);
}
+ | not_empty_list_strings COMMA
;
// ---- generic JSON parser ends here ----------------------------------
// No global parameter is required
ctx.stack_.pop_back();
ctx.leave();
-};
+}
+ | global_object COMMA
+ ;
// subparser: similar to the corresponding rule but without parent
// so the stack is empty at the rule entry.
global_params: global_param
| global_params COMMA global_param
+ | global_params COMMA
;
// These are the parameters that are allowed in the top-level for
interfaces_config_params: interfaces_config_param
| interfaces_config_params COMMA interfaces_config_param
+ | interfaces_config_params COMMA
;
interfaces_config_param: interfaces_list
not_empty_database_list: database
| not_empty_database_list COMMA database
+ | not_empty_database_list COMMA
;
database: LCURLY_BRACKET {
database_map_params: database_map_param
| database_map_params COMMA database_map_param
+ | database_map_params COMMA
;
database_map_param: database_type
};
sanity_checks_params: sanity_checks_param
- | sanity_checks_params COMMA sanity_checks_param;
+ | sanity_checks_params COMMA sanity_checks_param
+ | sanity_checks_params COMMA
+ ;
sanity_checks_param: lease_checks;
mac_sources_list: mac_sources_value
| mac_sources_list COMMA mac_sources_value
-;
+ | mac_sources_list COMMA
+ ;
mac_sources_value: duid_id
| string_id
host_reservation_identifiers_list: host_reservation_identifier
| host_reservation_identifiers_list COMMA host_reservation_identifier
+ | host_reservation_identifiers_list COMMA
;
host_reservation_identifier: duid_id
multi_threading_params: multi_threading_param
| multi_threading_params COMMA multi_threading_param
+ | multi_threading_params COMMA
;
multi_threading_param: enable_multi_threading
not_empty_hooks_libraries_list: hooks_library
| not_empty_hooks_libraries_list COMMA hooks_library
+ | not_empty_hooks_libraries_list COMMA
;
hooks_library: LCURLY_BRACKET {
hooks_params: hooks_param
| hooks_params COMMA hooks_param
+ | hooks_params COMMA
| unknown_map_entry
;
expired_leases_params: expired_leases_param
| expired_leases_params COMMA expired_leases_param
+ | expired_leases_params COMMA
;
expired_leases_param: reclaim_timer_wait_time
not_empty_subnet6_list: subnet6
| not_empty_subnet6_list COMMA subnet6
+ | not_empty_subnet6_list COMMA
;
// --- Subnet definitions -------------------------------
// This defines that subnet can have one or more parameters.
subnet6_params: subnet6_param
| subnet6_params COMMA subnet6_param
+ | subnet6_params COMMA
;
// This defines a list of allowed parameters for each subnet.
// This allows 1 or more shared network definitions.
shared_networks_list: shared_network
| shared_networks_list COMMA shared_network
+ | shared_networks_list COMMA
;
shared_network: LCURLY_BRACKET {
shared_network_params: shared_network_param
| shared_network_params COMMA shared_network_param
+ | shared_network_params COMMA
;
shared_network_param: name
not_empty_option_def_list: option_def_entry
| not_empty_option_def_list COMMA option_def_entry
- ;
+ | not_empty_option_def_list COMMA
+ ;
// This defines the content of a single entry { ... } within
// option-def list.
not_empty_option_def_params: option_def_param
| not_empty_option_def_params COMMA option_def_param
+ | not_empty_option_def_params COMMA
;
option_def_param: option_def_name
// be a single value or multiple entries separated by comma.
not_empty_option_data_list: option_data_entry
| not_empty_option_data_list COMMA option_data_entry
+ | not_empty_option_data_list COMMA
;
// This defines th content of a single entry { ... } within
// a list of parameters separated by comma.
not_empty_option_data_params: option_data_param
| not_empty_option_data_params COMMA option_data_param
+ | not_empty_option_data_params COMMA
;
// Each single option-data parameter can be one of the following
not_empty_pools_list: pool_list_entry
| not_empty_pools_list COMMA pool_list_entry
+ | not_empty_pools_list COMMA
;
pool_list_entry: LCURLY_BRACKET {
pool_params: pool_param
| pool_params COMMA pool_param
+ | pool_params COMMA
;
pool_param: pool_entry
not_empty_pd_pools_list: pd_pool_entry
| not_empty_pd_pools_list COMMA pd_pool_entry
+ | not_empty_pd_pools_list COMMA
;
pd_pool_entry: LCURLY_BRACKET {
pd_pool_params: pd_pool_param
| pd_pool_params COMMA pd_pool_param
+ | pd_pool_params COMMA
;
pd_pool_param: pd_prefix
not_empty_reservations_list: reservation
| not_empty_reservations_list COMMA reservation
+ | not_empty_reservations_list COMMA
;
reservation: LCURLY_BRACKET {
not_empty_reservation_params: reservation_param
| not_empty_reservation_params COMMA reservation_param
+ | not_empty_reservation_params COMMA
;
/// @todo probably need to add mac-address as well here
client_classes_list: client_class_entry
| client_classes_list COMMA client_class_entry
+ | client_classes_list COMMA
;
client_class_entry: LCURLY_BRACKET {
not_empty_client_class_params: client_class_param
| not_empty_client_class_params COMMA client_class_param
+ | not_empty_client_class_params COMMA
;
client_class_param: client_class_name
server_id_params: server_id_param
| server_id_params COMMA server_id_param
+ | server_id_params COMMA
;
server_id_param: server_id_type
control_socket_params: control_socket_param
| control_socket_params COMMA control_socket_param
+ | control_socket_params COMMA
;
control_socket_param: socket_type
queue_control_params: queue_control_param
| queue_control_params COMMA queue_control_param
+ | queue_control_params COMMA
;
queue_control_param: enable_queue
dhcp_ddns_params: dhcp_ddns_param
| dhcp_ddns_params COMMA dhcp_ddns_param
+ | dhcp_ddns_params COMMA
;
dhcp_ddns_param: enable_updates
// This defines that subnet can have one or more parameters.
config_control_params: config_control_param
| config_control_params COMMA config_control_param
+ | config_control_params COMMA
;
// This defines a list of allowed parameters for each subnet.
// entry or multiple entries separate by commas.
loggers_entries: logger_entry
| loggers_entries COMMA logger_entry
+ | loggers_entries COMMA
;
// This defines a single entry defined in loggers.
logger_params: logger_param
| logger_params COMMA logger_param
+ | logger_params COMMA
;
logger_param: name
output_options_list_content: output_entry
| output_options_list_content COMMA output_entry
+ | output_options_list_content COMMA
;
output_entry: LCURLY_BRACKET {
output_params_list: output_params
| output_params_list COMMA output_params
+ | output_params_list COMMA
;
output_params: output
compatibility_params: compatibility_param
| compatibility_params COMMA compatibility_param
+ | compatibility_params COMMA
;
compatibility_param: lenient_option_parsing
ctx.unique($3, ctx.loc2pos(@3));
ctx.stack_.back()->set($3, $5);
}
+ | not_empty_map COMMA
;
list_generic: LSQUARE_BRACKET {
// List ending with , and a value.
ctx.stack_.back()->add($3);
}
+ | not_empty_list COMMA
;
// --- generic JSON parser ends here -------------------------------------------
// This represents the single top level entry, e.g. Netconf.
global_object: NETCONF {
-
// Let's create a MapElement that will represent it, add it to the
// top level map (that's already on the stack) and put the new map
// on the stack as well, so child elements will be able to add
// off the stack.
ctx.stack_.pop_back();
ctx.leave();
-};
+}
+ | global_object COMMA
+ ;
global_params: %empty
| not_empty_global_params
not_empty_global_params: global_param
| not_empty_global_params COMMA global_param
+ | not_empty_global_params COMMA
;
// These are the parameters that are allowed in the top-level for
not_empty_hooks_libraries_list: hooks_library
| not_empty_hooks_libraries_list COMMA hooks_library
+ | not_empty_hooks_libraries_list COMMA
;
hooks_library: LCURLY_BRACKET {
hooks_params: hooks_param
| hooks_params COMMA hooks_param
+ | hooks_params COMMA
| unknown_map_entry
;
not_empty_servers_entries: server_entry
| not_empty_servers_entries COMMA server_entry
+ | not_empty_servers_entries COMMA
;
// Server parameters consist of one or more parameters.
managed_server_params: managed_server_param
| managed_server_params COMMA managed_server_param
+ | managed_server_params COMMA
;
// We currently support two server parameters: model and control-socket.
// control-socket parameters
control_socket_params: control_socket_param
| control_socket_params COMMA control_socket_param
+ | control_socket_params COMMA
;
control_socket_param: socket_type
// entry or multiple entries separate by commas.
loggers_entries: logger_entry
| loggers_entries COMMA logger_entry
+ | loggers_entries COMMA
;
// This defines a single entry defined in loggers.
logger_params: logger_param
| logger_params COMMA logger_param
+ | logger_params COMMA
;
logger_param: name
output_options_list_content: output_entry
| output_options_list_content COMMA output_entry
+ | output_options_list_content COMMA
;
output_entry: LCURLY_BRACKET {
output_params_list: output_params
| output_params_list COMMA output_params
+ | output_params_list COMMA
;
output_params: output