ctx.unique($3, ctx.loc2pos(@3));
ctx.stack_.back()->set($3, $5);
}
- | not_empty_map COMMA
+ | not_empty_map COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
list_generic: LSQUARE_BRACKET {
// List ending with , and a value.
ctx.stack_.back()->add($3);
}
- | not_empty_list COMMA
+ | not_empty_list COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
// --- generic JSON parser ends here -------------------------------------------
ctx.stack_.pop_back();
ctx.leave();
}
- | global_object COMMA
+ | global_object COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
global_params: global_param
| global_params COMMA global_param
- | global_params COMMA
+ | global_params COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
// 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
+ | not_empty_hooks_libraries_list COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
hooks_library: LCURLY_BRACKET {
hooks_params: hooks_param
| hooks_params COMMA hooks_param
- | hooks_params COMMA
+ | hooks_params COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
| unknown_map_entry
;
// is required.
control_sockets_params: control_socket
| control_sockets_params COMMA control_socket
- | control_sockets_params COMMA
+ | control_sockets_params COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
// 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
+ | control_socket_params COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
// We currently support two socket parameters: type and name.
auth_params: auth_param
| auth_params COMMA auth_param
- | auth_params COMMA
+ | auth_params COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
auth_param: auth_type
not_empty_clients_list: basic_auth
| not_empty_clients_list COMMA basic_auth
- | not_empty_clients_list COMMA
+ | not_empty_clients_list COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
basic_auth: LCURLY_BRACKET {
clients_params: clients_param
| clients_params COMMA clients_param
- | clients_params COMMA
+ | clients_params COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
clients_param: user
// entry or multiple entries separate by commas.
loggers_entries: logger_entry
| loggers_entries COMMA logger_entry
- | loggers_entries COMMA
+ | loggers_entries COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
// This defines a single entry defined in loggers.
logger_params: logger_param
| logger_params COMMA logger_param
- | logger_params COMMA
+ | logger_params COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
logger_param: name
output_options_list_content: output_entry
| output_options_list_content COMMA output_entry
- | output_options_list_content COMMA
+ | output_options_list_content COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
output_entry: LCURLY_BRACKET {
output_params_list: output_params
| output_params_list COMMA output_params
- | output_params_list COMMA
+ | output_params_list COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
output_params: output
ctx.unique($3, ctx.loc2pos(@3));
ctx.stack_.back()->set($3, $5);
}
- | not_empty_map COMMA
+ | not_empty_map COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
list_generic: LSQUARE_BRACKET {
// List ending with , and a value.
ctx.stack_.back()->add($3);
}
- | not_empty_list COMMA
+ | not_empty_list COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
// ---- generic JSON parser ends here ----------------------------------
ctx.stack_.pop_back();
ctx.leave();
}
- | global_object COMMA
+ | global_object COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
sub_dhcpddns: LCURLY_BRACKET {
dhcpddns_params: dhcpddns_param
| dhcpddns_params COMMA dhcpddns_param
- | dhcpddns_params COMMA
+ | dhcpddns_params COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
// 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_params COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
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
+ | not_empty_ddns_domain_list COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
ddns_domain: LCURLY_BRACKET {
ddns_domain_params: ddns_domain_param
| ddns_domain_params COMMA ddns_domain_param
- | ddns_domain_params COMMA
+ | ddns_domain_params COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
ddns_domain_param: ddns_domain_name
dns_server_list: dns_server
| dns_server_list COMMA dns_server
- | dns_server_list COMMA
+ | dns_server_list COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
dns_server: LCURLY_BRACKET {
dns_server_params: dns_server_param
| dns_server_params COMMA dns_server_param
- | dns_server_params COMMA
+ | dns_server_params COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
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
+ | not_empty_tsig_keys_list COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
tsig_key: LCURLY_BRACKET {
tsig_key_params: tsig_key_param
| tsig_key_params COMMA tsig_key_param
- | tsig_key_params COMMA
+ | tsig_key_params COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
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_params COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
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
+ | not_empty_hooks_libraries_list COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
hooks_library: LCURLY_BRACKET {
hooks_params: hooks_param
| hooks_params COMMA hooks_param
- | hooks_params COMMA
+ | hooks_params COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
| unknown_map_entry
;
// entry or multiple entries separate by commas.
loggers_entries: logger_entry
| loggers_entries COMMA logger_entry
- | loggers_entries COMMA
+ | loggers_entries COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
// This defines a single entry defined in loggers.
logger_params: logger_param
| logger_params COMMA logger_param
- | logger_params COMMA
+ | logger_params COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
logger_param: name
output_options_list_content: output_entry
| output_options_list_content COMMA output_entry
- | output_options_list_content COMMA
+ | output_options_list_content COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
output_entry: LCURLY_BRACKET {
output_params_list: output_params
| output_params_list COMMA output_params
- | output_params_list COMMA
+ | output_params_list COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
output_params: output
ctx.unique($3, ctx.loc2pos(@3));
ctx.stack_.back()->set($3, $5);
}
- | not_empty_map COMMA
+ | not_empty_map COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
list_generic: LSQUARE_BRACKET {
// List ending with , and a value.
ctx.stack_.back()->add($3);
}
- | not_empty_list COMMA
+ | not_empty_list COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
// 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
+ | not_empty_list_strings COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
// ---- generic JSON parser ends here ----------------------------------
ctx.stack_.pop_back();
ctx.leave();
}
- | global_object COMMA
+ | global_object COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
// subparser: similar to the corresponding rule but without parent
global_params: global_param
| global_params COMMA global_param
- | global_params COMMA
+ | global_params COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
// 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_params COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
interfaces_config_param: interfaces_list
sanity_checks_params: sanity_checks_param
| sanity_checks_params COMMA sanity_checks_param
- | sanity_checks_params COMMA
+ | sanity_checks_params COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
sanity_checks_param: lease_checks;
not_empty_database_list: database
| not_empty_database_list COMMA database
- | not_empty_database_list COMMA
+ | not_empty_database_list COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
database: LCURLY_BRACKET {
database_map_params: database_map_param
| database_map_params COMMA database_map_param
- | database_map_params COMMA
+ | database_map_params COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
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_identifiers_list COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
host_reservation_identifier: duid_id
multi_threading_params: multi_threading_param
| multi_threading_params COMMA multi_threading_param
- | multi_threading_params COMMA
+ | multi_threading_params COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
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
+ | not_empty_hooks_libraries_list COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
hooks_library: LCURLY_BRACKET {
hooks_params: hooks_param
| hooks_params COMMA hooks_param
- | hooks_params COMMA
+ | hooks_params COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
| unknown_map_entry
;
expired_leases_params: expired_leases_param
| expired_leases_params COMMA expired_leases_param
- | expired_leases_params COMMA
+ | expired_leases_params COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
expired_leases_param: reclaim_timer_wait_time
not_empty_subnet4_list: subnet4
| not_empty_subnet4_list COMMA subnet4
- | not_empty_subnet4_list COMMA
+ | not_empty_subnet4_list COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
// --- Subnet definitions -------------------------------
// This defines that subnet can have one or more parameters.
subnet4_params: subnet4_param
| subnet4_params COMMA subnet4_param
- | subnet4_params COMMA
+ | subnet4_params COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
// 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_networks_list COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
shared_network: LCURLY_BRACKET {
shared_network_params: shared_network_param
| shared_network_params COMMA shared_network_param
- | shared_network_params COMMA
+ | shared_network_params COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
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
+ | not_empty_option_def_list COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
// This defines the content of a single entry { ... } within
not_empty_option_def_params: option_def_param
| not_empty_option_def_params COMMA option_def_param
- | not_empty_option_def_params COMMA
+ | not_empty_option_def_params COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
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
+ | not_empty_option_data_list COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
// 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
+ | not_empty_option_data_params COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
// 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
+ | not_empty_pools_list COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
pool_list_entry: LCURLY_BRACKET {
pool_params: pool_param
| pool_params COMMA pool_param
- | pool_params COMMA
+ | pool_params COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
pool_param: pool_entry
not_empty_reservations_list: reservation
| not_empty_reservations_list COMMA reservation
- | not_empty_reservations_list COMMA
+ | not_empty_reservations_list COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
reservation: LCURLY_BRACKET {
not_empty_reservation_params: reservation_param
| not_empty_reservation_params COMMA reservation_param
- | not_empty_reservation_params COMMA
+ | not_empty_reservation_params COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
/// @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_classes_list COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
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
+ | not_empty_client_class_params COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
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_params COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
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_params COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
queue_control_param: enable_queue
dhcp_ddns_params: dhcp_ddns_param
| dhcp_ddns_params COMMA dhcp_ddns_param
- | dhcp_ddns_params COMMA
+ | dhcp_ddns_params COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
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
+ | config_control_params COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
// 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
+ | loggers_entries COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
// This defines a single entry defined in loggers.
logger_params: logger_param
| logger_params COMMA logger_param
- | logger_params COMMA
+ | logger_params COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
logger_param: name
output_options_list_content: output_entry
| output_options_list_content COMMA output_entry
- | output_options_list_content COMMA
+ | output_options_list_content COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
output_entry: LCURLY_BRACKET {
output_params_list: output_params
| output_params_list COMMA output_params
- | output_params_list COMMA
+ | output_params_list COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
output_params: output
compatibility_params: compatibility_param
| compatibility_params COMMA compatibility_param
- | compatibility_params COMMA
+ | compatibility_params COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
compatibility_param: lenient_option_parsing
ctx.unique($3, ctx.loc2pos(@3));
ctx.stack_.back()->set($3, $5);
}
- | not_empty_map COMMA
+ | not_empty_map COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
list_generic: LSQUARE_BRACKET {
// List ending with , and a value.
ctx.stack_.back()->add($3);
}
- | not_empty_list COMMA
+ | not_empty_list COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
// 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
+ | not_empty_list_strings COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
// ---- generic JSON parser ends here ----------------------------------
ctx.stack_.pop_back();
ctx.leave();
}
- | global_object COMMA
+ | global_object COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
// subparser: similar to the corresponding rule but without parent
global_params: global_param
| global_params COMMA global_param
- | global_params COMMA
+ | global_params COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
// 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_params COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
interfaces_config_param: interfaces_list
not_empty_database_list: database
| not_empty_database_list COMMA database
- | not_empty_database_list COMMA
+ | not_empty_database_list COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
database: LCURLY_BRACKET {
database_map_params: database_map_param
| database_map_params COMMA database_map_param
- | database_map_params COMMA
+ | database_map_params COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
database_map_param: database_type
sanity_checks_params: sanity_checks_param
| sanity_checks_params COMMA sanity_checks_param
- | sanity_checks_params COMMA
+ | sanity_checks_params COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
sanity_checks_param: lease_checks;
mac_sources_list: mac_sources_value
| mac_sources_list COMMA mac_sources_value
- | mac_sources_list COMMA
+ | mac_sources_list COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
mac_sources_value: duid_id
host_reservation_identifiers_list: host_reservation_identifier
| host_reservation_identifiers_list COMMA host_reservation_identifier
- | host_reservation_identifiers_list COMMA
+ | host_reservation_identifiers_list COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
host_reservation_identifier: duid_id
multi_threading_params: multi_threading_param
| multi_threading_params COMMA multi_threading_param
- | multi_threading_params COMMA
+ | multi_threading_params COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
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
+ | not_empty_hooks_libraries_list COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
hooks_library: LCURLY_BRACKET {
hooks_params: hooks_param
| hooks_params COMMA hooks_param
- | hooks_params COMMA
+ | hooks_params COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
| unknown_map_entry
;
expired_leases_params: expired_leases_param
| expired_leases_params COMMA expired_leases_param
- | expired_leases_params COMMA
+ | expired_leases_params COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
expired_leases_param: reclaim_timer_wait_time
not_empty_subnet6_list: subnet6
| not_empty_subnet6_list COMMA subnet6
- | not_empty_subnet6_list COMMA
+ | not_empty_subnet6_list COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
// --- Subnet definitions -------------------------------
// This defines that subnet can have one or more parameters.
subnet6_params: subnet6_param
| subnet6_params COMMA subnet6_param
- | subnet6_params COMMA
+ | subnet6_params COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
// 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_networks_list COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
shared_network: LCURLY_BRACKET {
shared_network_params: shared_network_param
| shared_network_params COMMA shared_network_param
- | shared_network_params COMMA
+ | shared_network_params COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
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
+ | not_empty_option_def_list COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
// This defines the content of a single entry { ... } within
not_empty_option_def_params: option_def_param
| not_empty_option_def_params COMMA option_def_param
- | not_empty_option_def_params COMMA
+ | not_empty_option_def_params COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
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
+ | not_empty_option_data_list COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
// 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
+ | not_empty_option_data_params COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
// 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
+ | not_empty_pools_list COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
pool_list_entry: LCURLY_BRACKET {
pool_params: pool_param
| pool_params COMMA pool_param
- | pool_params COMMA
+ | pool_params COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
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
+ | not_empty_pd_pools_list COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
pd_pool_entry: LCURLY_BRACKET {
pd_pool_params: pd_pool_param
| pd_pool_params COMMA pd_pool_param
- | pd_pool_params COMMA
+ | pd_pool_params COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
pd_pool_param: pd_prefix
not_empty_reservations_list: reservation
| not_empty_reservations_list COMMA reservation
- | not_empty_reservations_list COMMA
+ | not_empty_reservations_list COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
reservation: LCURLY_BRACKET {
not_empty_reservation_params: reservation_param
| not_empty_reservation_params COMMA reservation_param
- | not_empty_reservation_params COMMA
+ | not_empty_reservation_params COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
/// @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_classes_list COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
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
+ | not_empty_client_class_params COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
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_params COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
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_params COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
control_socket_param: socket_type
queue_control_params: queue_control_param
| queue_control_params COMMA queue_control_param
- | queue_control_params COMMA
+ | queue_control_params COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
queue_control_param: enable_queue
dhcp_ddns_params: dhcp_ddns_param
| dhcp_ddns_params COMMA dhcp_ddns_param
- | dhcp_ddns_params COMMA
+ | dhcp_ddns_params COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
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
+ | config_control_params COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
// 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
+ | loggers_entries COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
// This defines a single entry defined in loggers.
logger_params: logger_param
| logger_params COMMA logger_param
- | logger_params COMMA
+ | logger_params COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
logger_param: name
output_options_list_content: output_entry
| output_options_list_content COMMA output_entry
- | output_options_list_content COMMA
+ | output_options_list_content COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
output_entry: LCURLY_BRACKET {
output_params_list: output_params
| output_params_list COMMA output_params
- | output_params_list COMMA
+ | output_params_list COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
output_params: output
compatibility_params: compatibility_param
| compatibility_params COMMA compatibility_param
- | compatibility_params COMMA
+ | compatibility_params COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
compatibility_param: lenient_option_parsing
ctx.unique($3, ctx.loc2pos(@3));
ctx.stack_.back()->set($3, $5);
}
- | not_empty_map COMMA
+ | not_empty_map COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
list_generic: LSQUARE_BRACKET {
// List ending with , and a value.
ctx.stack_.back()->add($3);
}
- | not_empty_list COMMA
+ | not_empty_list COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
// --- generic JSON parser ends here -------------------------------------------
ctx.stack_.pop_back();
ctx.leave();
}
- | global_object COMMA
+ | global_object COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
global_params: %empty
not_empty_global_params: global_param
| not_empty_global_params COMMA global_param
- | not_empty_global_params COMMA
+ | not_empty_global_params COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
// 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
+ | not_empty_hooks_libraries_list COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
hooks_library: LCURLY_BRACKET {
hooks_params: hooks_param
| hooks_params COMMA hooks_param
- | hooks_params COMMA
+ | hooks_params COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
| unknown_map_entry
;
not_empty_servers_entries: server_entry
| not_empty_servers_entries COMMA server_entry
- | not_empty_servers_entries COMMA
+ | not_empty_servers_entries COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
// 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
+ | managed_server_params COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
// 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_params COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
control_socket_param: socket_type
// entry or multiple entries separate by commas.
loggers_entries: logger_entry
| loggers_entries COMMA logger_entry
- | loggers_entries COMMA
+ | loggers_entries COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
// This defines a single entry defined in loggers.
logger_params: logger_param
| logger_params COMMA logger_param
- | logger_params COMMA
+ | logger_params COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
logger_param: name
output_options_list_content: output_entry
| output_options_list_content COMMA output_entry
- | output_options_list_content COMMA
+ | output_options_list_content COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
output_entry: LCURLY_BRACKET {
output_params_list: output_params
| output_params_list COMMA output_params
- | output_params_list COMMA
+ | output_params_list COMMA {
+ ctx.warning(@1, "Extraneous comma. A piece of configuration may have been omitted.");
+}
;
output_params: output